blob: 27a3d8c005e79fa96b58ea2594266cd2fd6388ff [file] [log] [blame]
Guido van Rossum3f5da241990-12-20 15:06:42 +00001/* Built-in functions */
2
Guido van Rossum79f25d91997-04-29 20:08:16 +00003#include "Python.h"
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004#include "Python-ast.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00005
6#include "node.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00007#include "code.h"
Guido van Rossum5b722181993-03-30 17:46:03 +00008#include "eval.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00009
Guido van Rossum6bf62da1997-04-11 20:37:35 +000010#include <ctype.h>
11
Mark Hammond26cffde42001-05-14 12:17:34 +000012/* The default encoding used by the platform file system APIs
13 Can remain NULL for all platforms that don't have such a concept
Guido van Rossum00bc0e02007-10-15 02:52:41 +000014
15 Don't forget to modify PyUnicode_DecodeFSDefault() if you touch any of the
16 values for Py_FileSystemDefaultEncoding!
Mark Hammond26cffde42001-05-14 12:17:34 +000017*/
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000018#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
Mark Hammond26cffde42001-05-14 12:17:34 +000019const char *Py_FileSystemDefaultEncoding = "mbcs";
Christian Heimesc8967002007-11-30 10:18:26 +000020const int Py_HasFileSystemDefaultEncoding = 1;
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000021#elif defined(__APPLE__)
22const char *Py_FileSystemDefaultEncoding = "utf-8";
Christian Heimesc8967002007-11-30 10:18:26 +000023const int Py_HasFileSystemDefaultEncoding = 1;
Mark Hammond26cffde42001-05-14 12:17:34 +000024#else
25const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
Christian Heimesc8967002007-11-30 10:18:26 +000026const int Py_HasFileSystemDefaultEncoding = 0;
Mark Hammond26cffde42001-05-14 12:17:34 +000027#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000028
Guido van Rossum79f25d91997-04-29 20:08:16 +000029static PyObject *
Guido van Rossum52cc1d82007-03-18 15:41:51 +000030builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds)
31{
Guido van Rossumcd16bf62007-06-13 18:07:49 +000032 PyObject *func, *name, *bases, *mkw, *meta, *prep, *ns, *cell;
33 PyObject *cls = NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +000034 Py_ssize_t nargs, nbases;
35
36 assert(args != NULL);
37 if (!PyTuple_Check(args)) {
38 PyErr_SetString(PyExc_TypeError,
39 "__build_class__: args is not a tuple");
40 return NULL;
41 }
42 nargs = PyTuple_GET_SIZE(args);
43 if (nargs < 2) {
44 PyErr_SetString(PyExc_TypeError,
45 "__build_class__: not enough arguments");
46 return NULL;
47 }
48 func = PyTuple_GET_ITEM(args, 0); /* Better be callable */
49 name = PyTuple_GET_ITEM(args, 1);
Neal Norwitz6ea45d32007-08-26 04:19:43 +000050 if (!PyUnicode_Check(name)) {
Guido van Rossum52cc1d82007-03-18 15:41:51 +000051 PyErr_SetString(PyExc_TypeError,
52 "__build_class__: name is not a string");
53 return NULL;
54 }
55 bases = PyTuple_GetSlice(args, 2, nargs);
56 if (bases == NULL)
57 return NULL;
58 nbases = nargs - 2;
59
60 if (kwds == NULL) {
61 meta = NULL;
62 mkw = NULL;
63 }
64 else {
65 mkw = PyDict_Copy(kwds); /* Don't modify kwds passed in! */
66 if (mkw == NULL) {
67 Py_DECREF(bases);
68 return NULL;
69 }
70 meta = PyDict_GetItemString(mkw, "metaclass");
71 if (meta != NULL) {
72 Py_INCREF(meta);
73 if (PyDict_DelItemString(mkw, "metaclass") < 0) {
74 Py_DECREF(meta);
75 Py_DECREF(mkw);
76 Py_DECREF(bases);
77 return NULL;
78 }
79 }
80 }
81 if (meta == NULL) {
82 if (PyTuple_GET_SIZE(bases) == 0)
83 meta = (PyObject *) (&PyType_Type);
84 else {
85 PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
86 meta = (PyObject *) (base0->ob_type);
87 }
88 Py_INCREF(meta);
89 }
90 prep = PyObject_GetAttrString(meta, "__prepare__");
91 if (prep == NULL) {
92 PyErr_Clear();
93 ns = PyDict_New();
94 }
95 else {
96 PyObject *pargs = Py_BuildValue("OO", name, bases);
97 if (pargs == NULL) {
98 Py_DECREF(prep);
99 Py_DECREF(meta);
100 Py_XDECREF(mkw);
101 Py_DECREF(bases);
102 return NULL;
103 }
104 ns = PyEval_CallObjectWithKeywords(prep, pargs, mkw);
105 Py_DECREF(pargs);
106 Py_DECREF(prep);
107 if (ns == NULL) {
108 Py_DECREF(meta);
109 Py_XDECREF(mkw);
110 Py_DECREF(bases);
111 return NULL;
112 }
113 }
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000114 cell = PyObject_CallFunctionObjArgs(func, ns, NULL);
115 if (cell != NULL) {
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000116 PyObject *margs;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000117 margs = Py_BuildValue("OOO", name, bases, ns);
118 if (margs != NULL) {
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000119 cls = PyEval_CallObjectWithKeywords(meta, margs, mkw);
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000120 Py_DECREF(margs);
121 }
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000122 if (cls != NULL && PyCell_Check(cell)) {
123 Py_INCREF(cls);
124 PyCell_SET(cell, cls);
125 }
126 Py_DECREF(cell);
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000127 }
128 Py_DECREF(ns);
129 Py_DECREF(meta);
130 Py_XDECREF(mkw);
131 Py_DECREF(bases);
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000132 return cls;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000133}
134
135PyDoc_STRVAR(build_class_doc,
136"__build_class__(func, name, *bases, metaclass=None, **kwds) -> class\n\
137\n\
138Internal helper function used by the class statement.");
139
140static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000141builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000142{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000143 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
144 "level", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000145 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000146 PyObject *globals = NULL;
147 PyObject *locals = NULL;
148 PyObject *fromlist = NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +0000149 int level = -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000150
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000151 if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|OOOi:__import__",
152 kwlist, &name, &globals, &locals, &fromlist, &level))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000153 return NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +0000154 return PyImport_ImportModuleLevel(name, globals, locals,
155 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000156}
157
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000158PyDoc_STRVAR(import_doc,
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000159"__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000160\n\
161Import a module. The globals are only used to determine the context;\n\
162they are not modified. The locals are currently unused. The fromlist\n\
163should be a list of names to emulate ``from name import ...'', or an\n\
164empty list to emulate ``import name''.\n\
165When importing a module from a package, note that __import__('A.B', ...)\n\
166returns package A when fromlist is empty, but its submodule B when\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000167fromlist is not empty. Level is used to determine whether to perform \n\
168absolute or relative imports. -1 is the original strategy of attempting\n\
169both absolute and relative imports, 0 is absolute, a positive number\n\
170is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000171
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000172
Guido van Rossum79f25d91997-04-29 20:08:16 +0000173static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000174builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000175{
Guido van Rossum09df08a1998-05-22 00:51:39 +0000176 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000177}
178
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000179PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000180"abs(number) -> number\n\
181\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000182Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000183
Raymond Hettinger96229b12005-03-11 06:49:40 +0000184static PyObject *
185builtin_all(PyObject *self, PyObject *v)
186{
187 PyObject *it, *item;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000188 PyObject *(*iternext)(PyObject *);
189 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000190
191 it = PyObject_GetIter(v);
192 if (it == NULL)
193 return NULL;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000194 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000195
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000196 for (;;) {
197 item = iternext(it);
198 if (item == NULL)
199 break;
200 cmp = PyObject_IsTrue(item);
Raymond Hettinger96229b12005-03-11 06:49:40 +0000201 Py_DECREF(item);
202 if (cmp < 0) {
203 Py_DECREF(it);
204 return NULL;
205 }
206 if (cmp == 0) {
207 Py_DECREF(it);
208 Py_RETURN_FALSE;
209 }
210 }
211 Py_DECREF(it);
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000212 if (PyErr_Occurred()) {
213 if (PyErr_ExceptionMatches(PyExc_StopIteration))
214 PyErr_Clear();
215 else
216 return NULL;
217 }
Raymond Hettinger96229b12005-03-11 06:49:40 +0000218 Py_RETURN_TRUE;
219}
220
221PyDoc_STRVAR(all_doc,
222"all(iterable) -> bool\n\
223\n\
224Return True if bool(x) is True for all values x in the iterable.");
225
226static PyObject *
227builtin_any(PyObject *self, PyObject *v)
228{
229 PyObject *it, *item;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000230 PyObject *(*iternext)(PyObject *);
231 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000232
233 it = PyObject_GetIter(v);
234 if (it == NULL)
235 return NULL;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000236 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000237
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000238 for (;;) {
239 item = iternext(it);
240 if (item == NULL)
241 break;
242 cmp = PyObject_IsTrue(item);
Raymond Hettinger96229b12005-03-11 06:49:40 +0000243 Py_DECREF(item);
244 if (cmp < 0) {
245 Py_DECREF(it);
246 return NULL;
247 }
248 if (cmp == 1) {
249 Py_DECREF(it);
250 Py_RETURN_TRUE;
251 }
252 }
253 Py_DECREF(it);
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000254 if (PyErr_Occurred()) {
255 if (PyErr_ExceptionMatches(PyExc_StopIteration))
256 PyErr_Clear();
257 else
258 return NULL;
259 }
Raymond Hettinger96229b12005-03-11 06:49:40 +0000260 Py_RETURN_FALSE;
261}
262
263PyDoc_STRVAR(any_doc,
264"any(iterable) -> bool\n\
265\n\
266Return True if bool(x) is True for any x in the iterable.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000267
Georg Brandl559e5d72008-06-11 18:37:52 +0000268static PyObject *
269builtin_ascii(PyObject *self, PyObject *v)
270{
271 return PyObject_ASCII(v);
272}
273
274PyDoc_STRVAR(ascii_doc,
275"ascii(object) -> string\n\
276\n\
277As repr(), return a string containing a printable representation of an\n\
278object, but escape the non-ASCII characters in the string returned by\n\
279repr() using \\x, \\u or \\U escapes. This generates a string similar\n\
280to that returned by repr() in Python 2.");
281
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000282
Guido van Rossum79f25d91997-04-29 20:08:16 +0000283static PyObject *
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000284builtin_bin(PyObject *self, PyObject *v)
285{
286 return PyNumber_ToBase(v, 2);
287}
288
289PyDoc_STRVAR(bin_doc,
290"bin(number) -> string\n\
291\n\
292Return the binary representation of an integer or long integer.");
293
294
Raymond Hettinger17301e92008-03-13 00:19:26 +0000295typedef struct {
296 PyObject_HEAD
297 PyObject *func;
298 PyObject *it;
299} filterobject;
300
301PyTypeObject PyFilter_Type;
302
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000303static PyObject *
Raymond Hettinger17301e92008-03-13 00:19:26 +0000304filter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000305{
Raymond Hettinger17301e92008-03-13 00:19:26 +0000306 PyObject *func, *seq;
307 PyObject *it;
308 filterobject *lz;
309
310 if (type == &PyFilter_Type && !_PyArg_NoKeywords("filter()", kwds))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000311 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000312
313 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
Georg Brandle35b6572005-07-19 22:20:20 +0000314 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000315
316 /* Get iterator. */
317 it = PyObject_GetIter(seq);
318 if (it == NULL)
319 return NULL;
320
321 /* create filterobject structure */
322 lz = (filterobject *)type->tp_alloc(type, 0);
323 if (lz == NULL) {
324 Py_DECREF(it);
325 return NULL;
326 }
327 Py_INCREF(func);
328 lz->func = func;
329 lz->it = it;
330
331 return (PyObject *)lz;
332}
333
334static void
335filter_dealloc(filterobject *lz)
336{
337 PyObject_GC_UnTrack(lz);
338 Py_XDECREF(lz->func);
339 Py_XDECREF(lz->it);
340 Py_TYPE(lz)->tp_free(lz);
341}
342
343static int
344filter_traverse(filterobject *lz, visitproc visit, void *arg)
345{
346 Py_VISIT(lz->it);
347 Py_VISIT(lz->func);
348 return 0;
349}
350
351static PyObject *
352filter_next(filterobject *lz)
353{
354 PyObject *item;
355 PyObject *it = lz->it;
356 long ok;
357 PyObject *(*iternext)(PyObject *);
358
359 assert(PyIter_Check(it));
360 iternext = *Py_TYPE(it)->tp_iternext;
361 for (;;) {
362 item = iternext(it);
363 if (item == NULL)
364 return NULL;
365
366 if (lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type) {
367 ok = PyObject_IsTrue(item);
368 } else {
369 PyObject *good;
370 good = PyObject_CallFunctionObjArgs(lz->func,
371 item, NULL);
372 if (good == NULL) {
373 Py_DECREF(item);
374 return NULL;
375 }
376 ok = PyObject_IsTrue(good);
377 Py_DECREF(good);
378 }
379 if (ok)
380 return item;
381 Py_DECREF(item);
382 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000383}
384
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000385PyDoc_STRVAR(filter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +0000386"filter(function or None, iterable) --> filter object\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000387\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +0000388Return an iterator yielding those items of iterable for which function(item)\n\
Raymond Hettinger17301e92008-03-13 00:19:26 +0000389is true. If function is None, return the items that are true.");
390
391PyTypeObject PyFilter_Type = {
392 PyVarObject_HEAD_INIT(&PyType_Type, 0)
393 "filter", /* tp_name */
394 sizeof(filterobject), /* tp_basicsize */
395 0, /* tp_itemsize */
396 /* methods */
397 (destructor)filter_dealloc, /* tp_dealloc */
398 0, /* tp_print */
399 0, /* tp_getattr */
400 0, /* tp_setattr */
401 0, /* tp_compare */
402 0, /* tp_repr */
403 0, /* tp_as_number */
404 0, /* tp_as_sequence */
405 0, /* tp_as_mapping */
406 0, /* tp_hash */
407 0, /* tp_call */
408 0, /* tp_str */
409 PyObject_GenericGetAttr, /* tp_getattro */
410 0, /* tp_setattro */
411 0, /* tp_as_buffer */
412 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
413 Py_TPFLAGS_BASETYPE, /* tp_flags */
414 filter_doc, /* tp_doc */
415 (traverseproc)filter_traverse, /* tp_traverse */
416 0, /* tp_clear */
417 0, /* tp_richcompare */
418 0, /* tp_weaklistoffset */
419 PyObject_SelfIter, /* tp_iter */
420 (iternextfunc)filter_next, /* tp_iternext */
421 0, /* tp_methods */
422 0, /* tp_members */
423 0, /* tp_getset */
424 0, /* tp_base */
425 0, /* tp_dict */
426 0, /* tp_descr_get */
427 0, /* tp_descr_set */
428 0, /* tp_dictoffset */
429 0, /* tp_init */
430 PyType_GenericAlloc, /* tp_alloc */
431 filter_new, /* tp_new */
432 PyObject_GC_Del, /* tp_free */
433};
434
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000435
Eric Smith8c663262007-08-25 02:26:07 +0000436static PyObject *
437builtin_format(PyObject *self, PyObject *args)
438{
Christian Heimes94b7d3d2007-12-11 20:20:39 +0000439 PyObject *value;
Eric Smith8fd3eba2008-02-17 19:48:00 +0000440 PyObject *format_spec = NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000441
Eric Smith8fd3eba2008-02-17 19:48:00 +0000442 if (!PyArg_ParseTuple(args, "O|U:format", &value, &format_spec))
443 return NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000444
Eric Smith8fd3eba2008-02-17 19:48:00 +0000445 return PyObject_Format(value, format_spec);
Eric Smith8c663262007-08-25 02:26:07 +0000446}
447
Eric Smith8c663262007-08-25 02:26:07 +0000448PyDoc_STRVAR(format_doc,
Eric Smith81936692007-08-31 01:14:01 +0000449"format(value[, format_spec]) -> string\n\
Eric Smith8c663262007-08-25 02:26:07 +0000450\n\
Eric Smith81936692007-08-31 01:14:01 +0000451Returns value.__format__(format_spec)\n\
452format_spec defaults to \"\"");
453
Guido van Rossum7fcf2242007-05-04 17:43:11 +0000454static PyObject *
Walter Dörwalde7efd592007-06-05 20:07:21 +0000455builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000456{
Amaury Forgeot d'Arc7888d082008-08-01 01:06:32 +0000457 int x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000458
Amaury Forgeot d'Arc7888d082008-08-01 01:06:32 +0000459 if (!PyArg_ParseTuple(args, "i:chr", &x))
Guido van Rossum09095f32000-03-10 23:00:52 +0000460 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000461
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000462 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000463}
464
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000465PyDoc_VAR(chr_doc) = PyDoc_STR(
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000466"chr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000467\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000468Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000469)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000470#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000471PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000472"\nIf 0x10000 <= i, a surrogate pair is returned."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000473)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000474#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000475;
Guido van Rossum09095f32000-03-10 23:00:52 +0000476
477
478static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000479builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000480{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000481 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000482 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000483
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000484 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000485 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000486 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000487 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +0000488 return PyLong_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000489}
490
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000491PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000492"cmp(x, y) -> integer\n\
493\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000494Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000495
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000496
497static char *
498source_as_string(PyObject *cmd)
499{
500 char *str;
501 Py_ssize_t size;
502
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000503 if (PyUnicode_Check(cmd)) {
504 cmd = _PyUnicode_AsDefaultEncodedString(cmd, NULL);
505 if (cmd == NULL)
506 return NULL;
507 }
Guido van Rossuma4b8d1d2007-08-27 15:02:28 +0000508 else if (!PyObject_CheckReadBuffer(cmd)) {
509 PyErr_SetString(PyExc_TypeError,
510 "eval()/exec() arg 1 must be a string, bytes or code object");
511 return NULL;
512 }
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000513 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &size) < 0) {
514 return NULL;
515 }
516 if (strlen(str) != size) {
517 PyErr_SetString(PyExc_TypeError,
518 "source code string cannot contain null bytes");
519 return NULL;
520 }
521 return str;
522}
523
Guido van Rossum79f25d91997-04-29 20:08:16 +0000524static PyObject *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000525builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000526{
527 char *str;
528 char *filename;
529 char *startstr;
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000530 int mode = -1;
Tim Peters6cd6a822001-08-17 22:11:27 +0000531 int dont_inherit = 0;
532 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000533 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000534 PyObject *cmd;
Guido van Rossumd8faa362007-04-27 19:54:29 +0000535 static char *kwlist[] = {"source", "filename", "mode", "flags",
536 "dont_inherit", NULL};
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000537 int start[] = {Py_file_input, Py_eval_input, Py_single_input};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000538
Guido van Rossumd8faa362007-04-27 19:54:29 +0000539 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
540 kwlist, &cmd, &filename, &startstr,
541 &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000542 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000543
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000544 cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8;
Just van Rossum3aaf42c2003-02-10 08:21:10 +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 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000558
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000559 if (strcmp(startstr, "exec") == 0)
560 mode = 0;
561 else if (strcmp(startstr, "eval") == 0)
562 mode = 1;
563 else if (strcmp(startstr, "single") == 0)
564 mode = 2;
565 else {
566 PyErr_SetString(PyExc_ValueError,
567 "compile() arg 3 must be 'exec', 'eval' or 'single'");
568 return NULL;
569 }
570
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000571 if (PyAST_Check(cmd)) {
572 PyObject *result;
573 if (supplied_flags & PyCF_ONLY_AST) {
574 Py_INCREF(cmd);
575 result = cmd;
576 }
577 else {
578 PyArena *arena;
579 mod_ty mod;
580
581 arena = PyArena_New();
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000582 mod = PyAST_obj2mod(cmd, arena, mode);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000583 if (mod == NULL) {
584 PyArena_Free(arena);
585 return NULL;
586 }
587 result = (PyObject*)PyAST_Compile(mod, filename,
588 &cf, arena);
589 PyArena_Free(arena);
590 }
591 return result;
592 }
593
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000594 str = source_as_string(cmd);
595 if (str == NULL)
596 return NULL;
597
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000598 return Py_CompileStringFlags(str, filename, start[mode], &cf);
Guido van Rossum5b722181993-03-30 17:46:03 +0000599}
600
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000601PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000602"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000603\n\
604Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000605into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000606The filename will be used for run-time error messages.\n\
607The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000608single (interactive) statement, or 'eval' to compile an expression.\n\
609The flags argument, if present, controls which future statements influence\n\
610the compilation of the code.\n\
611The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
612the effects of any future statements in effect in the code calling\n\
613compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000614in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000615
Guido van Rossum79f25d91997-04-29 20:08:16 +0000616static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000617builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000618{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000619 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000620
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000621 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000622 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000623 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000624}
625
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000626PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000627"dir([object]) -> list of strings\n"
628"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000629"If called without an argument, return the names in the current scope.\n"
630"Else, return an alphabetized list of names comprising (some of) the attributes\n"
631"of the given object, and of attributes reachable from it.\n"
632"If the object supplies a method named __dir__, it will be used; otherwise\n"
633"the default dir() logic is used and returns:\n"
634" for a module object: the module's attributes.\n"
635" for a class object: its attributes, and recursively the attributes\n"
636" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000637" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000638" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000639
Guido van Rossum79f25d91997-04-29 20:08:16 +0000640static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000641builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000642{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000643 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000644
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000645 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000646 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000647 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000648}
649
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000650PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000651"divmod(x, y) -> (div, mod)\n\
652\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000653Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000654
655
Guido van Rossum79f25d91997-04-29 20:08:16 +0000656static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000657builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000658{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000659 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000660 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000661 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000662 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000663
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000664 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000665 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000666 if (locals != Py_None && !PyMapping_Check(locals)) {
667 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000668 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000669 }
670 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000671 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000672 "globals must be a real dict; try eval(expr, {}, mapping)"
673 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000674 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000675 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000676 if (globals == Py_None) {
677 globals = PyEval_GetGlobals();
678 if (locals == Py_None)
679 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000680 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000681 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000682 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000683
Georg Brandl77c85e62005-09-15 10:46:13 +0000684 if (globals == NULL || locals == NULL) {
685 PyErr_SetString(PyExc_TypeError,
686 "eval must be given globals and locals "
687 "when called without a frame");
688 return NULL;
689 }
690
Guido van Rossum79f25d91997-04-29 20:08:16 +0000691 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
692 if (PyDict_SetItemString(globals, "__builtins__",
693 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000694 return NULL;
695 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000696
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000697 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000698 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000699 PyErr_SetString(PyExc_TypeError,
700 "code object passed to eval() may not contain free variables");
701 return NULL;
702 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000703 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000704 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000705
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000706 str = source_as_string(cmd);
707 if (str == NULL)
Guido van Rossum94390a41992-08-14 15:14:30 +0000708 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000709
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000710 while (*str == ' ' || *str == '\t')
711 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000712
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000713 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Tim Peters9fa96be2001-08-17 23:04:59 +0000714 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000715 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
716 Py_XDECREF(tmp);
717 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000718}
719
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000720PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000721"eval(source[, globals[, locals]]) -> value\n\
722\n\
723Evaluate the source in the context of globals and locals.\n\
724The source may be a string representing a Python expression\n\
725or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000726The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000727defaulting to the current globals and locals.\n\
728If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000729
Georg Brandl7cae87c2006-09-06 06:51:57 +0000730static PyObject *
731builtin_exec(PyObject *self, PyObject *args)
732{
733 PyObject *v;
734 PyObject *prog, *globals = Py_None, *locals = Py_None;
735 int plain = 0;
736
737 if (!PyArg_ParseTuple(args, "O|OO:exec", &prog, &globals, &locals))
738 return NULL;
739
740 if (globals == Py_None) {
741 globals = PyEval_GetGlobals();
742 if (locals == Py_None) {
743 locals = PyEval_GetLocals();
744 plain = 1;
745 }
746 if (!globals || !locals) {
747 PyErr_SetString(PyExc_SystemError,
748 "globals and locals cannot be NULL");
749 return NULL;
750 }
751 }
752 else if (locals == Py_None)
753 locals = globals;
Neal Norwitz6ea45d32007-08-26 04:19:43 +0000754 if (!PyUnicode_Check(prog) &&
Guido van Rossumda5b8f22007-06-12 23:30:11 +0000755 !PyCode_Check(prog)) {
Georg Brandl7cae87c2006-09-06 06:51:57 +0000756 PyErr_Format(PyExc_TypeError,
757 "exec() arg 1 must be a string, file, or code "
758 "object, not %.100s", prog->ob_type->tp_name);
759 return NULL;
760 }
761 if (!PyDict_Check(globals)) {
762 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
763 globals->ob_type->tp_name);
764 return NULL;
765 }
766 if (!PyMapping_Check(locals)) {
767 PyErr_Format(PyExc_TypeError,
768 "arg 3 must be a mapping or None, not %.100s",
769 locals->ob_type->tp_name);
770 return NULL;
771 }
772 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
773 if (PyDict_SetItemString(globals, "__builtins__",
774 PyEval_GetBuiltins()) != 0)
775 return NULL;
776 }
777
778 if (PyCode_Check(prog)) {
779 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
780 PyErr_SetString(PyExc_TypeError,
781 "code object passed to exec() may not "
782 "contain free variables");
783 return NULL;
784 }
785 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
786 }
Georg Brandl7cae87c2006-09-06 06:51:57 +0000787 else {
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000788 char *str = source_as_string(prog);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000789 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000790 if (str == NULL)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000791 return NULL;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000792 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000793 if (PyEval_MergeCompilerFlags(&cf))
794 v = PyRun_StringFlags(str, Py_file_input, globals,
795 locals, &cf);
796 else
797 v = PyRun_String(str, Py_file_input, globals, locals);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000798 }
799 if (v == NULL)
800 return NULL;
801 Py_DECREF(v);
802 Py_RETURN_NONE;
803}
804
805PyDoc_STRVAR(exec_doc,
806"exec(object[, globals[, locals]])\n\
807\n\
808Read and execute code from a object, which can be a string, a code\n\
809object or a file object.\n\
810The globals and locals are dictionaries, defaulting to the current\n\
811globals and locals. If only globals is given, locals defaults to it.");
812
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000813
Guido van Rossum79f25d91997-04-29 20:08:16 +0000814static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000815builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000816{
Neal Norwitz6ea45d32007-08-26 04:19:43 +0000817 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000818 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000819
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000820 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000821 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000822
Martin v. Löwis5b222132007-06-10 09:51:05 +0000823 if (!PyUnicode_Check(name)) {
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000824 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000825 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000826 return NULL;
827 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000828 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000829 if (result == NULL && dflt != NULL &&
830 PyErr_ExceptionMatches(PyExc_AttributeError))
831 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000832 PyErr_Clear();
833 Py_INCREF(dflt);
834 result = dflt;
835 }
836 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000837}
838
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000839PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000840"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000841\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000842Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
843When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000844exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000845
846
Guido van Rossum79f25d91997-04-29 20:08:16 +0000847static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000848builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000849{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000850 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000851
Guido van Rossum79f25d91997-04-29 20:08:16 +0000852 d = PyEval_GetGlobals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000853 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000854 return d;
855}
856
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000857PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000858"globals() -> dictionary\n\
859\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000860Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000861
862
Guido van Rossum79f25d91997-04-29 20:08:16 +0000863static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000864builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000865{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000866 PyObject *v;
867 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000868
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000869 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000870 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000871 if (!PyUnicode_Check(name)) {
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000872 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000873 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000874 return NULL;
875 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000876 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000877 if (v == NULL) {
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000878 if (!PyErr_ExceptionMatches(PyExc_Exception))
879 return NULL;
880 else {
881 PyErr_Clear();
882 Py_INCREF(Py_False);
883 return Py_False;
884 }
Guido van Rossum9bfef441993-03-29 10:43:31 +0000885 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000886 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000887 Py_INCREF(Py_True);
888 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000889}
890
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000891PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000892"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000893\n\
894Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000895(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000896
897
Guido van Rossum79f25d91997-04-29 20:08:16 +0000898static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000899builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000900{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000901 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000902}
903
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000904PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000905"id(object) -> integer\n\
906\n\
907Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000908simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000909
910
Raymond Hettingera6c60372008-03-13 01:26:19 +0000911/* map object ************************************************************/
912
913typedef struct {
914 PyObject_HEAD
915 PyObject *iters;
916 PyObject *func;
917} mapobject;
918
919PyTypeObject PyMap_Type;
920
Guido van Rossum79f25d91997-04-29 20:08:16 +0000921static PyObject *
Raymond Hettingera6c60372008-03-13 01:26:19 +0000922map_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000923{
Raymond Hettingera6c60372008-03-13 01:26:19 +0000924 PyObject *it, *iters, *func;
925 mapobject *lz;
926 Py_ssize_t numargs, i;
927
928 if (type == &PyMap_Type && !_PyArg_NoKeywords("map()", kwds))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000929 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000930
931 numargs = PyTuple_Size(args);
932 if (numargs < 2) {
933 PyErr_SetString(PyExc_TypeError,
934 "map() must have at least two arguments.");
Tim Peters4e9afdc2001-05-03 23:54:49 +0000935 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000936 }
937
938 iters = PyTuple_New(numargs-1);
939 if (iters == NULL)
940 return NULL;
941
942 for (i=1 ; i<numargs ; i++) {
943 /* Get iterator. */
944 it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
945 if (it == NULL) {
946 Py_DECREF(iters);
947 return NULL;
948 }
949 PyTuple_SET_ITEM(iters, i-1, it);
950 }
951
952 /* create mapobject structure */
953 lz = (mapobject *)type->tp_alloc(type, 0);
954 if (lz == NULL) {
955 Py_DECREF(iters);
956 return NULL;
957 }
958 lz->iters = iters;
959 func = PyTuple_GET_ITEM(args, 0);
960 Py_INCREF(func);
961 lz->func = func;
962
963 return (PyObject *)lz;
964}
965
966static void
967map_dealloc(mapobject *lz)
968{
969 PyObject_GC_UnTrack(lz);
970 Py_XDECREF(lz->iters);
971 Py_XDECREF(lz->func);
972 Py_TYPE(lz)->tp_free(lz);
973}
974
975static int
976map_traverse(mapobject *lz, visitproc visit, void *arg)
977{
978 Py_VISIT(lz->iters);
979 Py_VISIT(lz->func);
980 return 0;
981}
982
983static PyObject *
984map_next(mapobject *lz)
985{
986 PyObject *val;
987 PyObject *argtuple;
988 PyObject *result;
989 Py_ssize_t numargs, i;
990
991 numargs = PyTuple_Size(lz->iters);
992 argtuple = PyTuple_New(numargs);
993 if (argtuple == NULL)
994 return NULL;
995
996 for (i=0 ; i<numargs ; i++) {
997 val = PyIter_Next(PyTuple_GET_ITEM(lz->iters, i));
998 if (val == NULL) {
999 Py_DECREF(argtuple);
1000 return NULL;
1001 }
1002 PyTuple_SET_ITEM(argtuple, i, val);
1003 }
1004 result = PyObject_Call(lz->func, argtuple, NULL);
1005 Py_DECREF(argtuple);
Tim Peters4e9afdc2001-05-03 23:54:49 +00001006 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001007}
1008
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001009PyDoc_STRVAR(map_doc,
Raymond Hettingera6c60372008-03-13 01:26:19 +00001010"map(func, *iterables) --> map object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001011\n\
Raymond Hettingera6c60372008-03-13 01:26:19 +00001012Make an iterator that computes the function using arguments from\n\
1013each of the iterables. Stops when the shortest iterable is exhausted.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001014
Raymond Hettingera6c60372008-03-13 01:26:19 +00001015PyTypeObject PyMap_Type = {
1016 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1017 "map", /* tp_name */
1018 sizeof(mapobject), /* tp_basicsize */
1019 0, /* tp_itemsize */
1020 /* methods */
1021 (destructor)map_dealloc, /* tp_dealloc */
1022 0, /* tp_print */
1023 0, /* tp_getattr */
1024 0, /* tp_setattr */
1025 0, /* tp_compare */
1026 0, /* tp_repr */
1027 0, /* tp_as_number */
1028 0, /* tp_as_sequence */
1029 0, /* tp_as_mapping */
1030 0, /* tp_hash */
1031 0, /* tp_call */
1032 0, /* tp_str */
1033 PyObject_GenericGetAttr, /* tp_getattro */
1034 0, /* tp_setattro */
1035 0, /* tp_as_buffer */
1036 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1037 Py_TPFLAGS_BASETYPE, /* tp_flags */
1038 map_doc, /* tp_doc */
1039 (traverseproc)map_traverse, /* tp_traverse */
1040 0, /* tp_clear */
1041 0, /* tp_richcompare */
1042 0, /* tp_weaklistoffset */
1043 PyObject_SelfIter, /* tp_iter */
1044 (iternextfunc)map_next, /* tp_iternext */
1045 0, /* tp_methods */
1046 0, /* tp_members */
1047 0, /* tp_getset */
1048 0, /* tp_base */
1049 0, /* tp_dict */
1050 0, /* tp_descr_get */
1051 0, /* tp_descr_set */
1052 0, /* tp_dictoffset */
1053 0, /* tp_init */
1054 PyType_GenericAlloc, /* tp_alloc */
1055 map_new, /* tp_new */
1056 PyObject_GC_Del, /* tp_free */
1057};
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001058
Guido van Rossum79f25d91997-04-29 20:08:16 +00001059static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +00001060builtin_next(PyObject *self, PyObject *args)
1061{
1062 PyObject *it, *res;
1063 PyObject *def = NULL;
1064
1065 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1066 return NULL;
1067 if (!PyIter_Check(it)) {
1068 PyErr_Format(PyExc_TypeError,
Georg Brandlaaa63922008-04-30 19:47:01 +00001069 "%.200s object is not an iterator",
1070 it->ob_type->tp_name);
Georg Brandla18af4e2007-04-21 15:47:16 +00001071 return NULL;
1072 }
1073
1074 res = (*it->ob_type->tp_iternext)(it);
Georg Brandlaaa63922008-04-30 19:47:01 +00001075 if (res != NULL) {
1076 return res;
1077 } else if (def != NULL) {
1078 if (PyErr_Occurred()) {
1079 if(!PyErr_ExceptionMatches(PyExc_StopIteration))
Georg Brandla18af4e2007-04-21 15:47:16 +00001080 return NULL;
1081 PyErr_Clear();
Georg Brandla18af4e2007-04-21 15:47:16 +00001082 }
Georg Brandlaaa63922008-04-30 19:47:01 +00001083 Py_INCREF(def);
1084 return def;
1085 } else if (PyErr_Occurred()) {
1086 return NULL;
1087 } else {
1088 PyErr_SetNone(PyExc_StopIteration);
1089 return NULL;
Georg Brandla18af4e2007-04-21 15:47:16 +00001090 }
Georg Brandla18af4e2007-04-21 15:47:16 +00001091}
1092
1093PyDoc_STRVAR(next_doc,
1094"next(iterator[, default])\n\
1095\n\
1096Return the next item from the iterator. If default is given and the iterator\n\
1097is exhausted, it is returned instead of raising StopIteration.");
1098
1099
1100static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001101builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001102{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001103 PyObject *v;
1104 PyObject *name;
1105 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001106
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001107 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001108 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001109 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001110 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001111 Py_INCREF(Py_None);
1112 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001113}
1114
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001115PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001116"setattr(object, name, value)\n\
1117\n\
1118Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001119``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001120
1121
Guido van Rossum79f25d91997-04-29 20:08:16 +00001122static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001123builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001124{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001125 PyObject *v;
1126 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001127
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001128 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001129 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001130 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001131 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001132 Py_INCREF(Py_None);
1133 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001134}
1135
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001136PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001137"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001138\n\
1139Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001140``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001141
1142
Guido van Rossum79f25d91997-04-29 20:08:16 +00001143static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001144builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001145{
Guido van Rossum9bfef441993-03-29 10:43:31 +00001146 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001147
Guido van Rossum79f25d91997-04-29 20:08:16 +00001148 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001149 if (x == -1)
1150 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001151 return PyLong_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001152}
1153
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001154PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001155"hash(object) -> integer\n\
1156\n\
1157Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001158the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001159
1160
Guido van Rossum79f25d91997-04-29 20:08:16 +00001161static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001162builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001163{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001164 return PyNumber_ToBase(v, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001165}
1166
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001167PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001168"hex(number) -> string\n\
1169\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001170Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001171
1172
Guido van Rossum79f25d91997-04-29 20:08:16 +00001173static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001174builtin_iter(PyObject *self, PyObject *args)
1175{
1176 PyObject *v, *w = NULL;
1177
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001178 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001179 return NULL;
1180 if (w == NULL)
1181 return PyObject_GetIter(v);
1182 if (!PyCallable_Check(v)) {
1183 PyErr_SetString(PyExc_TypeError,
1184 "iter(v, w): v must be callable");
1185 return NULL;
1186 }
1187 return PyCallIter_New(v, w);
1188}
1189
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001190PyDoc_STRVAR(iter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001191"iter(iterable) -> iterator\n\
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001192iter(callable, sentinel) -> iterator\n\
1193\n\
1194Get an iterator from an object. In the first form, the argument must\n\
1195supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001196In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001197
1198
1199static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001200builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001201{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001202 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001203
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001204 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001205 if (res < 0 && PyErr_Occurred())
1206 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001207 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001208}
1209
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001210PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001211"len(object) -> integer\n\
1212\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001213Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001214
1215
Guido van Rossum79f25d91997-04-29 20:08:16 +00001216static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001217builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001218{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001219 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001220
Guido van Rossum79f25d91997-04-29 20:08:16 +00001221 d = PyEval_GetLocals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00001222 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001223 return d;
1224}
1225
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001226PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001227"locals() -> dictionary\n\
1228\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001229Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001230
1231
Guido van Rossum79f25d91997-04-29 20:08:16 +00001232static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001233min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001234{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001235 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001236 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001237
Guido van Rossum79f25d91997-04-29 20:08:16 +00001238 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001239 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001240 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001241 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001242
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001243 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1244 keyfunc = PyDict_GetItemString(kwds, "key");
1245 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001246 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001247 "%s() got an unexpected keyword argument", name);
1248 return NULL;
1249 }
Christian Heimesbbffeb62008-01-24 09:42:52 +00001250 Py_INCREF(keyfunc);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001251 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001252
Tim Petersc3074532001-05-03 07:00:32 +00001253 it = PyObject_GetIter(v);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001254 if (it == NULL) {
1255 Py_XDECREF(keyfunc);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001256 return NULL;
Christian Heimesbbffeb62008-01-24 09:42:52 +00001257 }
Tim Petersc3074532001-05-03 07:00:32 +00001258
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001259 maxitem = NULL; /* the result */
1260 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001261 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001262 /* get the value from the key function */
1263 if (keyfunc != NULL) {
1264 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1265 if (val == NULL)
1266 goto Fail_it_item;
1267 }
1268 /* no key function; the value is the item */
1269 else {
1270 val = item;
1271 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001272 }
Tim Petersc3074532001-05-03 07:00:32 +00001273
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001274 /* maximum value and item are unset; set them */
1275 if (maxval == NULL) {
1276 maxitem = item;
1277 maxval = val;
1278 }
1279 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001280 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001281 int cmp = PyObject_RichCompareBool(val, maxval, op);
1282 if (cmp < 0)
1283 goto Fail_it_item_and_val;
1284 else if (cmp > 0) {
1285 Py_DECREF(maxval);
1286 Py_DECREF(maxitem);
1287 maxval = val;
1288 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001289 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001290 else {
1291 Py_DECREF(item);
1292 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001293 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001294 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001295 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001296 if (PyErr_Occurred())
1297 goto Fail_it;
1298 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001299 PyErr_Format(PyExc_ValueError,
1300 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001301 assert(maxitem == NULL);
1302 }
1303 else
1304 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001305 Py_DECREF(it);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001306 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001307 return maxitem;
1308
1309Fail_it_item_and_val:
1310 Py_DECREF(val);
1311Fail_it_item:
1312 Py_DECREF(item);
1313Fail_it:
1314 Py_XDECREF(maxval);
1315 Py_XDECREF(maxitem);
1316 Py_DECREF(it);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001317 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001318 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001319}
1320
Guido van Rossum79f25d91997-04-29 20:08:16 +00001321static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001322builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001323{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001324 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001325}
1326
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001327PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001328"min(iterable[, key=func]) -> value\n\
1329min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001330\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001331With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001332With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001333
1334
Guido van Rossum79f25d91997-04-29 20:08:16 +00001335static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001336builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001337{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001338 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001339}
1340
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001341PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001342"max(iterable[, key=func]) -> value\n\
1343max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001344\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001345With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001346With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001347
1348
Guido van Rossum79f25d91997-04-29 20:08:16 +00001349static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001350builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001351{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001352 return PyNumber_ToBase(v, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001353}
1354
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001355PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001356"oct(number) -> string\n\
1357\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001358Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001359
1360
Guido van Rossum79f25d91997-04-29 20:08:16 +00001361static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001362builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001363{
Guido van Rossum09095f32000-03-10 23:00:52 +00001364 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001365 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001366
Christian Heimes72b710a2008-05-26 13:28:38 +00001367 if (PyBytes_Check(obj)) {
1368 size = PyBytes_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001369 if (size == 1) {
Christian Heimes72b710a2008-05-26 13:28:38 +00001370 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
Christian Heimes217cfd12007-12-02 14:31:20 +00001371 return PyLong_FromLong(ord);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001372 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001373 }
1374 else if (PyUnicode_Check(obj)) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001375 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001376 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001377 ord = (long)*PyUnicode_AS_UNICODE(obj);
Christian Heimes217cfd12007-12-02 14:31:20 +00001378 return PyLong_FromLong(ord);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001379 }
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001380#ifndef Py_UNICODE_WIDE
1381 if (size == 2) {
1382 /* Decode a valid surrogate pair */
1383 int c0 = PyUnicode_AS_UNICODE(obj)[0];
1384 int c1 = PyUnicode_AS_UNICODE(obj)[1];
1385 if (0xD800 <= c0 && c0 <= 0xDBFF &&
1386 0xDC00 <= c1 && c1 <= 0xDFFF) {
1387 ord = ((((c0 & 0x03FF) << 10) | (c1 & 0x03FF)) +
1388 0x00010000);
Christian Heimes217cfd12007-12-02 14:31:20 +00001389 return PyLong_FromLong(ord);
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001390 }
1391 }
1392#endif
Guido van Rossum6f376c42007-05-24 14:31:33 +00001393 }
Christian Heimes9c4756e2008-05-26 13:22:05 +00001394 else if (PyByteArray_Check(obj)) {
Guido van Rossum98f97462007-04-13 03:31:13 +00001395 /* XXX Hopefully this is temporary */
Christian Heimes9c4756e2008-05-26 13:22:05 +00001396 size = PyByteArray_GET_SIZE(obj);
Guido van Rossum98f97462007-04-13 03:31:13 +00001397 if (size == 1) {
Christian Heimes9c4756e2008-05-26 13:22:05 +00001398 ord = (long)((unsigned char)*PyByteArray_AS_STRING(obj));
Christian Heimes217cfd12007-12-02 14:31:20 +00001399 return PyLong_FromLong(ord);
Guido van Rossum98f97462007-04-13 03:31:13 +00001400 }
1401 }
1402 else {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001403 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001404 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001405 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001406 return NULL;
1407 }
1408
Guido van Rossumad991772001-01-12 16:03:05 +00001409 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001410 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001411 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001412 size);
1413 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001414}
1415
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001416PyDoc_VAR(ord_doc) = PyDoc_STR(
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001417"ord(c) -> integer\n\
1418\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001419Return the integer ordinal of a one-character string."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001420)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001421#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001422PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001423"\nA valid surrogate pair is also accepted."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001424)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001425#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001426;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001427
1428
Guido van Rossum79f25d91997-04-29 20:08:16 +00001429static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001430builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001431{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001432 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001433
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001434 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001435 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001436 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001437}
1438
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001439PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001440"pow(x, y[, z]) -> number\n\
1441\n\
1442With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001443equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001444
1445
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001446
Guido van Rossum34343512006-11-30 22:13:52 +00001447static PyObject *
1448builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1449{
1450 static char *kwlist[] = {"sep", "end", "file", 0};
Georg Brandl257d3d92007-02-26 10:35:10 +00001451 static PyObject *dummy_args;
Guido van Rossum34343512006-11-30 22:13:52 +00001452 PyObject *sep = NULL, *end = NULL, *file = NULL;
1453 int i, err;
1454
Georg Brandl257d3d92007-02-26 10:35:10 +00001455 if (dummy_args == NULL) {
1456 if (!(dummy_args = PyTuple_New(0)))
1457 return NULL;
1458 }
Georg Brandl88fc6642007-02-09 21:28:07 +00001459 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
Guido van Rossum34343512006-11-30 22:13:52 +00001460 kwlist, &sep, &end, &file))
Christian Heimesfef9bba2007-11-13 15:24:14 +00001461 return NULL;
1462 if (file == NULL || file == Py_None) {
Guido van Rossum34343512006-11-30 22:13:52 +00001463 file = PySys_GetObject("stdout");
Christian Heimesfef9bba2007-11-13 15:24:14 +00001464 /* sys.stdout may be None when FILE* stdout isn't connected */
1465 if (file == Py_None)
1466 Py_RETURN_NONE;
1467 }
Guido van Rossum34343512006-11-30 22:13:52 +00001468
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001469 if (sep && sep != Py_None && !PyUnicode_Check(sep)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001470 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001471 "sep must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001472 sep->ob_type->tp_name);
1473 return NULL;
1474 }
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001475 if (end && end != Py_None && !PyUnicode_Check(end)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001476 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001477 "end must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001478 end->ob_type->tp_name);
1479 return NULL;
1480 }
Guido van Rossum34343512006-11-30 22:13:52 +00001481
1482 for (i = 0; i < PyTuple_Size(args); i++) {
1483 if (i > 0) {
1484 if (sep == NULL || sep == Py_None)
1485 err = PyFile_WriteString(" ", file);
1486 else
1487 err = PyFile_WriteObject(sep, file,
1488 Py_PRINT_RAW);
1489 if (err)
1490 return NULL;
1491 }
1492 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1493 Py_PRINT_RAW);
1494 if (err)
1495 return NULL;
1496 }
1497
1498 if (end == NULL || end == Py_None)
1499 err = PyFile_WriteString("\n", file);
1500 else
1501 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1502 if (err)
1503 return NULL;
1504
1505 Py_RETURN_NONE;
1506}
1507
1508PyDoc_STRVAR(print_doc,
Georg Brandlcd5da7d2008-02-01 15:47:37 +00001509"print(value, ..., sep=' ', end='\\n', file=sys.stdout)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001510\n\
1511Prints the values to a stream, or to sys.stdout by default.\n\
1512Optional keyword arguments:\n\
1513file: a file-like object (stream); defaults to the current sys.stdout.\n\
1514sep: string inserted between values, default a space.\n\
1515end: string appended after the last value, default a newline.");
1516
1517
Guido van Rossuma88a0332007-02-26 16:59:55 +00001518static PyObject *
1519builtin_input(PyObject *self, PyObject *args)
1520{
Guido van Rossumeba76962007-05-27 09:13:28 +00001521 PyObject *promptarg = NULL;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001522 PyObject *fin = PySys_GetObject("stdin");
1523 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossumeba76962007-05-27 09:13:28 +00001524 PyObject *ferr = PySys_GetObject("stderr");
1525 PyObject *tmp;
1526 long fd;
1527 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001528
Guido van Rossumeba76962007-05-27 09:13:28 +00001529 /* Parse arguments */
1530 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg))
Guido van Rossuma88a0332007-02-26 16:59:55 +00001531 return NULL;
1532
Guido van Rossumeba76962007-05-27 09:13:28 +00001533 /* Check that stdin/out/err are intact */
Christian Heimes2be03732007-11-15 02:26:46 +00001534 if (fin == NULL || fin == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001535 PyErr_SetString(PyExc_RuntimeError,
1536 "input(): lost sys.stdin");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001537 return NULL;
1538 }
Christian Heimes2be03732007-11-15 02:26:46 +00001539 if (fout == NULL || fout == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001540 PyErr_SetString(PyExc_RuntimeError,
1541 "input(): lost sys.stdout");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001542 return NULL;
1543 }
Christian Heimes2be03732007-11-15 02:26:46 +00001544 if (ferr == NULL || ferr == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001545 PyErr_SetString(PyExc_RuntimeError,
1546 "input(): lost sys.stderr");
1547 return NULL;
1548 }
1549
1550 /* First of all, flush stderr */
1551 tmp = PyObject_CallMethod(ferr, "flush", "");
1552 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001553 PyErr_Clear();
1554 else
1555 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001556
1557 /* We should only use (GNU) readline if Python's sys.stdin and
1558 sys.stdout are the same as C's stdin and stdout, because we
1559 need to pass it those. */
1560 tmp = PyObject_CallMethod(fin, "fileno", "");
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001561 if (tmp == NULL) {
1562 PyErr_Clear();
1563 tty = 0;
1564 }
1565 else {
Christian Heimes217cfd12007-12-02 14:31:20 +00001566 fd = PyLong_AsLong(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001567 Py_DECREF(tmp);
1568 if (fd < 0 && PyErr_Occurred())
1569 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001570 tty = fd == fileno(stdin) && isatty(fd);
1571 }
1572 if (tty) {
1573 tmp = PyObject_CallMethod(fout, "fileno", "");
1574 if (tmp == NULL)
1575 PyErr_Clear();
1576 else {
Christian Heimes217cfd12007-12-02 14:31:20 +00001577 fd = PyLong_AsLong(tmp);
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001578 Py_DECREF(tmp);
1579 if (fd < 0 && PyErr_Occurred())
1580 return NULL;
1581 tty = fd == fileno(stdout) && isatty(fd);
1582 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001583 }
1584
1585 /* If we're interactive, use (GNU) readline */
1586 if (tty) {
Guido van Rossuma88a0332007-02-26 16:59:55 +00001587 PyObject *po;
1588 char *prompt;
1589 char *s;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001590 PyObject *stdin_encoding;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001591 PyObject *result;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001592
1593 stdin_encoding = PyObject_GetAttrString(fin, "encoding");
1594 if (!stdin_encoding)
1595 /* stdin is a text stream, so it must have an
1596 encoding. */
1597 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001598 tmp = PyObject_CallMethod(fout, "flush", "");
1599 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001600 PyErr_Clear();
1601 else
1602 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001603 if (promptarg != NULL) {
1604 po = PyObject_Str(promptarg);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001605 if (po == NULL) {
1606 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001607 return NULL;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001608 }
Christian Heimes91c77302007-11-25 09:18:01 +00001609 prompt = PyUnicode_AsString(po);
Guido van Rossumeba76962007-05-27 09:13:28 +00001610 if (prompt == NULL) {
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001611 Py_DECREF(stdin_encoding);
Guido van Rossumeba76962007-05-27 09:13:28 +00001612 Py_DECREF(po);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001613 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001614 }
Guido van Rossuma88a0332007-02-26 16:59:55 +00001615 }
1616 else {
1617 po = NULL;
1618 prompt = "";
1619 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001620 s = PyOS_Readline(stdin, stdout, prompt);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001621 Py_XDECREF(po);
1622 if (s == NULL) {
1623 if (!PyErr_Occurred())
1624 PyErr_SetNone(PyExc_KeyboardInterrupt);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001625 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001626 return NULL;
1627 }
1628 if (*s == '\0') {
1629 PyErr_SetNone(PyExc_EOFError);
1630 result = NULL;
1631 }
1632 else { /* strip trailing '\n' */
1633 size_t len = strlen(s);
1634 if (len > PY_SSIZE_T_MAX) {
1635 PyErr_SetString(PyExc_OverflowError,
1636 "input: input too long");
1637 result = NULL;
1638 }
1639 else {
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001640 result = PyUnicode_Decode
1641 (s, len-1,
1642 PyUnicode_AsString(stdin_encoding),
1643 NULL);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001644 }
1645 }
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001646 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001647 PyMem_FREE(s);
1648 return result;
1649 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001650
1651 /* Fallback if we're not interactive */
1652 if (promptarg != NULL) {
1653 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0)
Guido van Rossuma88a0332007-02-26 16:59:55 +00001654 return NULL;
1655 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001656 tmp = PyObject_CallMethod(fout, "flush", "");
1657 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001658 PyErr_Clear();
1659 else
1660 Py_DECREF(tmp);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001661 return PyFile_GetLine(fin, -1);
1662}
1663
1664PyDoc_STRVAR(input_doc,
1665"input([prompt]) -> string\n\
1666\n\
1667Read a string from standard input. The trailing newline is stripped.\n\
1668If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1669On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1670is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001671
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001672
Guido van Rossum79f25d91997-04-29 20:08:16 +00001673static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001674builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001675{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001676 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001677}
1678
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001679PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001680"repr(object) -> string\n\
1681\n\
1682Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001683For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001684
1685
Guido van Rossum79f25d91997-04-29 20:08:16 +00001686static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001687builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001688{
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001689#define UNDEF_NDIGITS (-0x7fffffff) /* Unlikely ndigits value */
1690 static PyObject *round_str = NULL;
1691 int ndigits = UNDEF_NDIGITS;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001692 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001693 PyObject *number, *round;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001694
Alex Martelliae211f92007-08-22 23:21:33 +00001695 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|i:round",
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001696 kwlist, &number, &ndigits))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001697 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00001698
Christian Heimes90aa7642007-12-19 02:45:37 +00001699 if (Py_TYPE(number)->tp_dict == NULL) {
1700 if (PyType_Ready(Py_TYPE(number)) < 0)
Guido van Rossum15d3d042007-08-24 02:02:45 +00001701 return NULL;
1702 }
1703
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001704 if (round_str == NULL) {
Christian Heimesfe82e772008-01-28 02:38:20 +00001705 round_str = PyUnicode_InternFromString("__round__");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001706 if (round_str == NULL)
Alex Martelliae211f92007-08-22 23:21:33 +00001707 return NULL;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001708 }
1709
Christian Heimes90aa7642007-12-19 02:45:37 +00001710 round = _PyType_Lookup(Py_TYPE(number), round_str);
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001711 if (round == NULL) {
1712 PyErr_Format(PyExc_TypeError,
1713 "type %.100s doesn't define __round__ method",
Christian Heimes90aa7642007-12-19 02:45:37 +00001714 Py_TYPE(number)->tp_name);
Alex Martelliae211f92007-08-22 23:21:33 +00001715 return NULL;
1716 }
1717
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001718 if (ndigits == UNDEF_NDIGITS)
1719 return PyObject_CallFunction(round, "O", number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001720 else
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001721 return PyObject_CallFunction(round, "Oi", number, ndigits);
1722#undef UNDEF_NDIGITS
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001723}
1724
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001725PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001726"round(number[, ndigits]) -> floating point number\n\
1727\n\
1728Round a number to a given precision in decimal digits (default 0 digits).\n\
Mark Dickinson0d748c22008-07-05 11:29:03 +00001729This returns an int when called with one argument, otherwise the\n\
Georg Brandl809ddaa2008-07-01 20:39:59 +00001730same type as the number. ndigits may be negative.");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001731
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001732
Raymond Hettinger64958a12003-12-17 20:43:33 +00001733static PyObject *
1734builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1735{
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001736 PyObject *newlist, *v, *seq, *keyfunc=NULL, *newargs;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001737 PyObject *callable;
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001738 static char *kwlist[] = {"iterable", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001739 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001740
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001741 /* args 1-3 should match listsort in Objects/listobject.c */
1742 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted",
1743 kwlist, &seq, &keyfunc, &reverse))
Armin Rigo71d7e702005-09-20 18:13:03 +00001744 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001745
1746 newlist = PySequence_List(seq);
1747 if (newlist == NULL)
1748 return NULL;
1749
1750 callable = PyObject_GetAttrString(newlist, "sort");
1751 if (callable == NULL) {
1752 Py_DECREF(newlist);
1753 return NULL;
1754 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001755
Raymond Hettinger64958a12003-12-17 20:43:33 +00001756 newargs = PyTuple_GetSlice(args, 1, 4);
1757 if (newargs == NULL) {
1758 Py_DECREF(newlist);
1759 Py_DECREF(callable);
1760 return NULL;
1761 }
1762
1763 v = PyObject_Call(callable, newargs, kwds);
1764 Py_DECREF(newargs);
1765 Py_DECREF(callable);
1766 if (v == NULL) {
1767 Py_DECREF(newlist);
1768 return NULL;
1769 }
1770 Py_DECREF(v);
1771 return newlist;
1772}
1773
1774PyDoc_STRVAR(sorted_doc,
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001775"sorted(iterable, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001776
Guido van Rossum79f25d91997-04-29 20:08:16 +00001777static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001778builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001779{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001780 PyObject *v = NULL;
1781 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001782
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001783 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001784 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001785 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001786 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001787 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001788 if (!PyErr_Occurred())
1789 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001790 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001791 }
1792 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001793 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001794 }
1795 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001796 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001797 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001798 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001799 "vars() argument must have __dict__ attribute");
1800 return NULL;
1801 }
1802 }
1803 return d;
1804}
1805
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001806PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001807"vars([object]) -> dictionary\n\
1808\n\
1809Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001810With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001811
Alex Martellia70b1912003-04-22 08:12:33 +00001812static PyObject*
1813builtin_sum(PyObject *self, PyObject *args)
1814{
1815 PyObject *seq;
1816 PyObject *result = NULL;
1817 PyObject *temp, *item, *iter;
1818
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001819 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001820 return NULL;
1821
1822 iter = PyObject_GetIter(seq);
1823 if (iter == NULL)
1824 return NULL;
1825
1826 if (result == NULL) {
Christian Heimes217cfd12007-12-02 14:31:20 +00001827 result = PyLong_FromLong(0);
Alex Martellia70b1912003-04-22 08:12:33 +00001828 if (result == NULL) {
1829 Py_DECREF(iter);
1830 return NULL;
1831 }
1832 } else {
1833 /* reject string values for 'start' parameter */
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001834 if (PyUnicode_Check(result)) {
Alex Martellia70b1912003-04-22 08:12:33 +00001835 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001836 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001837 Py_DECREF(iter);
1838 return NULL;
1839 }
Christian Heimes9c4756e2008-05-26 13:22:05 +00001840 if (PyByteArray_Check(result)) {
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001841 PyErr_SetString(PyExc_TypeError,
1842 "sum() can't sum bytes [use b''.join(seq) instead]");
1843 Py_DECREF(iter);
1844 return NULL;
1845 }
1846
Alex Martelli41c9f882003-04-22 09:24:48 +00001847 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001848 }
1849
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001850#ifndef SLOW_SUM
1851 /* Fast addition by keeping temporary sums in C instead of new Python objects.
1852 Assumes all inputs are the same type. If the assumption fails, default
1853 to the more general routine.
1854 */
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001855 if (PyLong_CheckExact(result)) {
1856 int overflow;
1857 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
1858 /* If this already overflowed, don't even enter the loop. */
1859 if (overflow == 0) {
1860 Py_DECREF(result);
1861 result = NULL;
1862 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001863 while(result == NULL) {
1864 item = PyIter_Next(iter);
1865 if (item == NULL) {
1866 Py_DECREF(iter);
1867 if (PyErr_Occurred())
1868 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001869 return PyLong_FromLong(i_result);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001870 }
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001871 if (PyLong_CheckExact(item)) {
1872 long b = PyLong_AsLongAndOverflow(item, &overflow);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001873 long x = i_result + b;
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001874 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001875 i_result = x;
1876 Py_DECREF(item);
1877 continue;
1878 }
1879 }
1880 /* Either overflowed or is not an int. Restore real objects and process normally */
Christian Heimes217cfd12007-12-02 14:31:20 +00001881 result = PyLong_FromLong(i_result);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001882 temp = PyNumber_Add(result, item);
1883 Py_DECREF(result);
1884 Py_DECREF(item);
1885 result = temp;
1886 if (result == NULL) {
1887 Py_DECREF(iter);
1888 return NULL;
1889 }
1890 }
1891 }
1892
1893 if (PyFloat_CheckExact(result)) {
1894 double f_result = PyFloat_AS_DOUBLE(result);
1895 Py_DECREF(result);
1896 result = NULL;
1897 while(result == NULL) {
1898 item = PyIter_Next(iter);
1899 if (item == NULL) {
1900 Py_DECREF(iter);
1901 if (PyErr_Occurred())
1902 return NULL;
1903 return PyFloat_FromDouble(f_result);
1904 }
1905 if (PyFloat_CheckExact(item)) {
Georg Brandlf08a9dd2008-06-10 16:57:31 +00001906 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001907 f_result += PyFloat_AS_DOUBLE(item);
1908 PyFPE_END_PROTECT(f_result)
1909 Py_DECREF(item);
1910 continue;
1911 }
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001912 if (PyLong_CheckExact(item)) {
1913 long value;
1914 int overflow;
1915 value = PyLong_AsLongAndOverflow(item, &overflow);
1916 if (!overflow) {
Georg Brandlf08a9dd2008-06-10 16:57:31 +00001917 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001918 f_result += (double)value;
1919 PyFPE_END_PROTECT(f_result)
1920 Py_DECREF(item);
1921 continue;
1922 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001923 }
1924 result = PyFloat_FromDouble(f_result);
1925 temp = PyNumber_Add(result, item);
1926 Py_DECREF(result);
1927 Py_DECREF(item);
1928 result = temp;
1929 if (result == NULL) {
1930 Py_DECREF(iter);
1931 return NULL;
1932 }
1933 }
1934 }
1935#endif
1936
Alex Martellia70b1912003-04-22 08:12:33 +00001937 for(;;) {
1938 item = PyIter_Next(iter);
1939 if (item == NULL) {
1940 /* error, or end-of-sequence */
1941 if (PyErr_Occurred()) {
1942 Py_DECREF(result);
1943 result = NULL;
1944 }
1945 break;
1946 }
Alex Martellia253e182003-10-25 23:24:14 +00001947 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001948 Py_DECREF(result);
1949 Py_DECREF(item);
1950 result = temp;
1951 if (result == NULL)
1952 break;
1953 }
1954 Py_DECREF(iter);
1955 return result;
1956}
1957
1958PyDoc_STRVAR(sum_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001959"sum(iterable[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00001960\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +00001961Returns the sum of an iterable of numbers (NOT strings) plus the value\n\
1962of parameter 'start' (which defaults to 0). When the iterable is\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00001963empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00001964
1965
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001966static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001967builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001968{
1969 PyObject *inst;
1970 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001971 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001972
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001973 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001974 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001975
Guido van Rossum823649d2001-03-21 18:40:58 +00001976 retval = PyObject_IsInstance(inst, cls);
1977 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001978 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001979 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001980}
1981
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001982PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001983"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001984\n\
1985Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001986With a type as second argument, return whether that is the object's type.\n\
1987The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001988isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001989
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001990
1991static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001992builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001993{
1994 PyObject *derived;
1995 PyObject *cls;
1996 int retval;
1997
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001998 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001999 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002000
Guido van Rossum823649d2001-03-21 18:40:58 +00002001 retval = PyObject_IsSubclass(derived, cls);
2002 if (retval < 0)
2003 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002004 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002005}
2006
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002007PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002008"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002009\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002010Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2011When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2012is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002013
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002014
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002015typedef struct {
2016 PyObject_HEAD
2017 Py_ssize_t tuplesize;
2018 PyObject *ittuple; /* tuple of iterators */
2019 PyObject *result;
2020} zipobject;
2021
2022PyTypeObject PyZip_Type;
2023
2024static PyObject *
2025zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002026{
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002027 zipobject *lz;
2028 Py_ssize_t i;
2029 PyObject *ittuple; /* tuple of iterators */
2030 PyObject *result;
2031 Py_ssize_t tuplesize = PySequence_Length(args);
2032
2033 if (type == &PyZip_Type && !_PyArg_NoKeywords("zip()", kwds))
2034 return NULL;
2035
Guido van Rossumb65fb332006-08-25 23:26:40 +00002036 /* args must be a tuple */
2037 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00002038
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002039 /* obtain iterators */
2040 ittuple = PyTuple_New(tuplesize);
2041 if (ittuple == NULL)
2042 return NULL;
2043 for (i=0; i < tuplesize; ++i) {
2044 PyObject *item = PyTuple_GET_ITEM(args, i);
2045 PyObject *it = PyObject_GetIter(item);
2046 if (it == NULL) {
2047 if (PyErr_ExceptionMatches(PyExc_TypeError))
2048 PyErr_Format(PyExc_TypeError,
2049 "zip argument #%zd must support iteration",
2050 i+1);
2051 Py_DECREF(ittuple);
2052 return NULL;
2053 }
2054 PyTuple_SET_ITEM(ittuple, i, it);
2055 }
2056
2057 /* create a result holder */
2058 result = PyTuple_New(tuplesize);
2059 if (result == NULL) {
2060 Py_DECREF(ittuple);
2061 return NULL;
2062 }
2063 for (i=0 ; i < tuplesize ; i++) {
2064 Py_INCREF(Py_None);
2065 PyTuple_SET_ITEM(result, i, Py_None);
2066 }
2067
2068 /* create zipobject structure */
2069 lz = (zipobject *)type->tp_alloc(type, 0);
2070 if (lz == NULL) {
2071 Py_DECREF(ittuple);
2072 Py_DECREF(result);
2073 return NULL;
2074 }
2075 lz->ittuple = ittuple;
2076 lz->tuplesize = tuplesize;
2077 lz->result = result;
2078
2079 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002080}
2081
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002082static void
2083zip_dealloc(zipobject *lz)
2084{
2085 PyObject_GC_UnTrack(lz);
2086 Py_XDECREF(lz->ittuple);
2087 Py_XDECREF(lz->result);
2088 Py_TYPE(lz)->tp_free(lz);
2089}
2090
2091static int
2092zip_traverse(zipobject *lz, visitproc visit, void *arg)
2093{
2094 Py_VISIT(lz->ittuple);
2095 Py_VISIT(lz->result);
2096 return 0;
2097}
2098
2099static PyObject *
2100zip_next(zipobject *lz)
2101{
2102 Py_ssize_t i;
2103 Py_ssize_t tuplesize = lz->tuplesize;
2104 PyObject *result = lz->result;
2105 PyObject *it;
2106 PyObject *item;
2107 PyObject *olditem;
2108
2109 if (tuplesize == 0)
2110 return NULL;
2111 if (Py_REFCNT(result) == 1) {
2112 Py_INCREF(result);
2113 for (i=0 ; i < tuplesize ; i++) {
2114 it = PyTuple_GET_ITEM(lz->ittuple, i);
2115 assert(PyIter_Check(it));
2116 item = (*Py_TYPE(it)->tp_iternext)(it);
2117 if (item == NULL) {
2118 Py_DECREF(result);
2119 return NULL;
2120 }
2121 olditem = PyTuple_GET_ITEM(result, i);
2122 PyTuple_SET_ITEM(result, i, item);
2123 Py_DECREF(olditem);
2124 }
2125 } else {
2126 result = PyTuple_New(tuplesize);
2127 if (result == NULL)
2128 return NULL;
2129 for (i=0 ; i < tuplesize ; i++) {
2130 it = PyTuple_GET_ITEM(lz->ittuple, i);
2131 assert(PyIter_Check(it));
2132 item = (*Py_TYPE(it)->tp_iternext)(it);
2133 if (item == NULL) {
2134 Py_DECREF(result);
2135 return NULL;
2136 }
2137 PyTuple_SET_ITEM(result, i, item);
2138 }
2139 }
2140 return result;
2141}
Barry Warsawbd599b52000-08-03 15:45:29 +00002142
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002143PyDoc_STRVAR(zip_doc,
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002144"zip(iter1 [,iter2 [...]]) --> zip object\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002145\n\
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002146Return a zip object whose .__next__() method returns a tuple where\n\
2147the i-th element comes from the i-th iterable argument. The .__next__()\n\
2148method continues until the shortest iterable in the argument sequence\n\
2149is exhausted and then it raises StopIteration. Works like the zip()\n\
2150function but consumes less memory by returning an iterator instead of\n\
2151a list.");
2152
2153PyTypeObject PyZip_Type = {
2154 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2155 "zip", /* tp_name */
2156 sizeof(zipobject), /* tp_basicsize */
2157 0, /* tp_itemsize */
2158 /* methods */
2159 (destructor)zip_dealloc, /* tp_dealloc */
2160 0, /* tp_print */
2161 0, /* tp_getattr */
2162 0, /* tp_setattr */
2163 0, /* tp_compare */
2164 0, /* tp_repr */
2165 0, /* tp_as_number */
2166 0, /* tp_as_sequence */
2167 0, /* tp_as_mapping */
2168 0, /* tp_hash */
2169 0, /* tp_call */
2170 0, /* tp_str */
2171 PyObject_GenericGetAttr, /* tp_getattro */
2172 0, /* tp_setattro */
2173 0, /* tp_as_buffer */
2174 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2175 Py_TPFLAGS_BASETYPE, /* tp_flags */
2176 zip_doc, /* tp_doc */
2177 (traverseproc)zip_traverse, /* tp_traverse */
2178 0, /* tp_clear */
2179 0, /* tp_richcompare */
2180 0, /* tp_weaklistoffset */
2181 PyObject_SelfIter, /* tp_iter */
2182 (iternextfunc)zip_next, /* tp_iternext */
2183 0, /* tp_methods */
2184 0, /* tp_members */
2185 0, /* tp_getset */
2186 0, /* tp_base */
2187 0, /* tp_dict */
2188 0, /* tp_descr_get */
2189 0, /* tp_descr_set */
2190 0, /* tp_dictoffset */
2191 0, /* tp_init */
2192 PyType_GenericAlloc, /* tp_alloc */
2193 zip_new, /* tp_new */
2194 PyObject_GC_Del, /* tp_free */
2195};
Barry Warsawbd599b52000-08-03 15:45:29 +00002196
2197
Guido van Rossum79f25d91997-04-29 20:08:16 +00002198static PyMethodDef builtin_methods[] = {
Guido van Rossum52cc1d82007-03-18 15:41:51 +00002199 {"__build_class__", (PyCFunction)builtin___build_class__,
2200 METH_VARARGS | METH_KEYWORDS, build_class_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002201 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002202 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002203 {"all", builtin_all, METH_O, all_doc},
2204 {"any", builtin_any, METH_O, any_doc},
Georg Brandl559e5d72008-06-11 18:37:52 +00002205 {"ascii", builtin_ascii, METH_O, ascii_doc},
Guido van Rossumcd16bf62007-06-13 18:07:49 +00002206 {"bin", builtin_bin, METH_O, bin_doc},
Neal Norwitzc2550c72007-08-31 04:17:51 +00002207 {"chr", builtin_chr, METH_VARARGS, chr_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002208 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
Guido van Rossumd8faa362007-04-27 19:54:29 +00002209 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002210 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2211 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2212 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2213 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00002214 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Eric Smith8c663262007-08-25 02:26:07 +00002215 {"format", builtin_format, METH_VARARGS, format_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002216 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2217 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2218 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2219 {"hash", builtin_hash, METH_O, hash_doc},
2220 {"hex", builtin_hex, METH_O, hex_doc},
2221 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00002222 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002223 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2224 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2225 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2226 {"len", builtin_len, METH_O, len_doc},
2227 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002228 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2229 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandla18af4e2007-04-21 15:47:16 +00002230 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002231 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002232 {"ord", builtin_ord, METH_O, ord_doc},
2233 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00002234 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002235 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002236 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002237 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002238 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002239 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002240 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002241 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002242};
2243
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002244PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002245"Built-in functions, exceptions, and other objects.\n\
2246\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002247Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002248
Martin v. Löwis1a214512008-06-11 05:26:20 +00002249static struct PyModuleDef builtinsmodule = {
2250 PyModuleDef_HEAD_INIT,
2251 "builtins",
2252 builtin_doc,
2253 0,
2254 builtin_methods,
2255 NULL,
2256 NULL,
2257 NULL,
2258 NULL
2259};
2260
2261
Guido van Rossum25ce5661997-08-02 03:10:38 +00002262PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002263_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002264{
Fred Drake5550de32000-06-20 04:54:19 +00002265 PyObject *mod, *dict, *debug;
Martin v. Löwis1a214512008-06-11 05:26:20 +00002266 mod = PyModule_Create(&builtinsmodule);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002267 if (mod == NULL)
2268 return NULL;
2269 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002270
Tim Peters7571a0f2003-03-23 17:52:28 +00002271#ifdef Py_TRACE_REFS
Georg Brandl1a3284e2007-12-02 09:40:06 +00002272 /* "builtins" exposes a number of statically allocated objects
Tim Peters7571a0f2003-03-23 17:52:28 +00002273 * that, before this code was added in 2.3, never showed up in
2274 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2275 * result, programs leaking references to None and False (etc)
2276 * couldn't be diagnosed by examining sys.getobjects(0).
2277 */
2278#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2279#else
2280#define ADD_TO_ALL(OBJECT) (void)0
2281#endif
2282
Tim Peters4b7625e2001-09-13 21:37:17 +00002283#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002284 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2285 return NULL; \
2286 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002287
2288 SETBUILTIN("None", Py_None);
2289 SETBUILTIN("Ellipsis", Py_Ellipsis);
2290 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002291 SETBUILTIN("False", Py_False);
2292 SETBUILTIN("True", Py_True);
2293 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbae07c92007-10-08 02:46:15 +00002294 SETBUILTIN("memoryview", &PyMemoryView_Type);
Christian Heimes9c4756e2008-05-26 13:22:05 +00002295 SETBUILTIN("bytearray", &PyByteArray_Type);
Christian Heimes72b710a2008-05-26 13:28:38 +00002296 SETBUILTIN("bytes", &PyBytes_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002297 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002298#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002299 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002300#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002301 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002302 SETBUILTIN("enumerate", &PyEnum_Type);
Raymond Hettinger17301e92008-03-13 00:19:26 +00002303 SETBUILTIN("filter", &PyFilter_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002304 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002305 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002306 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00002307 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002308 SETBUILTIN("list", &PyList_Type);
Raymond Hettingera6c60372008-03-13 01:26:19 +00002309 SETBUILTIN("map", &PyMap_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002310 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossum805365e2007-05-07 22:24:25 +00002311 SETBUILTIN("range", &PyRange_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002312 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002313 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002314 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002315 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Guido van Rossum572dbf82007-04-27 23:53:51 +00002316 SETBUILTIN("str", &PyUnicode_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002317 SETBUILTIN("super", &PySuper_Type);
2318 SETBUILTIN("tuple", &PyTuple_Type);
2319 SETBUILTIN("type", &PyType_Type);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002320 SETBUILTIN("zip", &PyZip_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002321 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002322 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2323 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002324 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002325 }
2326 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002327
Guido van Rossum25ce5661997-08-02 03:10:38 +00002328 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002329#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002330#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002331}