blob: 98056970a67847db4910d7960feda9c385f9a5cb [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";
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000020int Py_HasFileSystemDefaultEncoding = 1;
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000021#elif defined(__APPLE__)
22const char *Py_FileSystemDefaultEncoding = "utf-8";
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000023int Py_HasFileSystemDefaultEncoding = 1;
Mark Hammond26cffde42001-05-14 12:17:34 +000024#else
25const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000026int Py_HasFileSystemDefaultEncoding = 0;
Mark Hammond26cffde42001-05-14 12:17:34 +000027#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000028
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000029int
30_Py_SetFileSystemEncoding(PyObject *s)
31{
32 PyObject *defenc;
33 if (!PyUnicode_Check(s)) {
34 PyErr_BadInternalCall();
35 return -1;
36 }
37 defenc = _PyUnicode_AsDefaultEncodedString(s, NULL);
38 if (!defenc)
39 return -1;
40 if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding)
41 /* A file system encoding was set at run-time */
42 free((char*)Py_FileSystemDefaultEncoding);
43 Py_FileSystemDefaultEncoding = strdup(PyBytes_AsString(defenc));
44 Py_HasFileSystemDefaultEncoding = 0;
45 return 0;
46}
47
Guido van Rossum79f25d91997-04-29 20:08:16 +000048static PyObject *
Guido van Rossum52cc1d82007-03-18 15:41:51 +000049builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds)
50{
Guido van Rossumcd16bf62007-06-13 18:07:49 +000051 PyObject *func, *name, *bases, *mkw, *meta, *prep, *ns, *cell;
52 PyObject *cls = NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +000053 Py_ssize_t nargs, nbases;
54
55 assert(args != NULL);
56 if (!PyTuple_Check(args)) {
57 PyErr_SetString(PyExc_TypeError,
58 "__build_class__: args is not a tuple");
59 return NULL;
60 }
61 nargs = PyTuple_GET_SIZE(args);
62 if (nargs < 2) {
63 PyErr_SetString(PyExc_TypeError,
64 "__build_class__: not enough arguments");
65 return NULL;
66 }
67 func = PyTuple_GET_ITEM(args, 0); /* Better be callable */
68 name = PyTuple_GET_ITEM(args, 1);
Neal Norwitz6ea45d32007-08-26 04:19:43 +000069 if (!PyUnicode_Check(name)) {
Guido van Rossum52cc1d82007-03-18 15:41:51 +000070 PyErr_SetString(PyExc_TypeError,
71 "__build_class__: name is not a string");
72 return NULL;
73 }
74 bases = PyTuple_GetSlice(args, 2, nargs);
75 if (bases == NULL)
76 return NULL;
77 nbases = nargs - 2;
78
79 if (kwds == NULL) {
80 meta = NULL;
81 mkw = NULL;
82 }
83 else {
84 mkw = PyDict_Copy(kwds); /* Don't modify kwds passed in! */
85 if (mkw == NULL) {
86 Py_DECREF(bases);
87 return NULL;
88 }
89 meta = PyDict_GetItemString(mkw, "metaclass");
90 if (meta != NULL) {
91 Py_INCREF(meta);
92 if (PyDict_DelItemString(mkw, "metaclass") < 0) {
93 Py_DECREF(meta);
94 Py_DECREF(mkw);
95 Py_DECREF(bases);
96 return NULL;
97 }
98 }
99 }
100 if (meta == NULL) {
101 if (PyTuple_GET_SIZE(bases) == 0)
102 meta = (PyObject *) (&PyType_Type);
103 else {
104 PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
105 meta = (PyObject *) (base0->ob_type);
106 }
107 Py_INCREF(meta);
108 }
109 prep = PyObject_GetAttrString(meta, "__prepare__");
110 if (prep == NULL) {
111 PyErr_Clear();
112 ns = PyDict_New();
113 }
114 else {
Raymond Hettinger5d1ff002009-01-06 09:37:13 +0000115 PyObject *pargs = PyTuple_Pack(2, name, bases);
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000116 if (pargs == NULL) {
117 Py_DECREF(prep);
118 Py_DECREF(meta);
119 Py_XDECREF(mkw);
120 Py_DECREF(bases);
121 return NULL;
122 }
123 ns = PyEval_CallObjectWithKeywords(prep, pargs, mkw);
124 Py_DECREF(pargs);
125 Py_DECREF(prep);
126 if (ns == NULL) {
127 Py_DECREF(meta);
128 Py_XDECREF(mkw);
129 Py_DECREF(bases);
130 return NULL;
131 }
132 }
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000133 cell = PyObject_CallFunctionObjArgs(func, ns, NULL);
134 if (cell != NULL) {
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000135 PyObject *margs;
Raymond Hettinger5d1ff002009-01-06 09:37:13 +0000136 margs = PyTuple_Pack(3, name, bases, ns);
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000137 if (margs != NULL) {
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000138 cls = PyEval_CallObjectWithKeywords(meta, margs, mkw);
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000139 Py_DECREF(margs);
140 }
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000141 if (cls != NULL && PyCell_Check(cell)) {
142 Py_INCREF(cls);
143 PyCell_SET(cell, cls);
144 }
145 Py_DECREF(cell);
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000146 }
147 Py_DECREF(ns);
148 Py_DECREF(meta);
149 Py_XDECREF(mkw);
150 Py_DECREF(bases);
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000151 return cls;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000152}
153
154PyDoc_STRVAR(build_class_doc,
155"__build_class__(func, name, *bases, metaclass=None, **kwds) -> class\n\
156\n\
157Internal helper function used by the class statement.");
158
159static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000160builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000161{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000162 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
163 "level", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000164 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000165 PyObject *globals = NULL;
166 PyObject *locals = NULL;
167 PyObject *fromlist = NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +0000168 int level = -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000169
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000170 if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|OOOi:__import__",
171 kwlist, &name, &globals, &locals, &fromlist, &level))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000172 return NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +0000173 return PyImport_ImportModuleLevel(name, globals, locals,
174 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000175}
176
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000177PyDoc_STRVAR(import_doc,
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000178"__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000179\n\
180Import a module. The globals are only used to determine the context;\n\
181they are not modified. The locals are currently unused. The fromlist\n\
182should be a list of names to emulate ``from name import ...'', or an\n\
183empty list to emulate ``import name''.\n\
184When importing a module from a package, note that __import__('A.B', ...)\n\
185returns package A when fromlist is empty, but its submodule B when\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000186fromlist is not empty. Level is used to determine whether to perform \n\
187absolute or relative imports. -1 is the original strategy of attempting\n\
188both absolute and relative imports, 0 is absolute, a positive number\n\
189is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000190
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000191
Guido van Rossum79f25d91997-04-29 20:08:16 +0000192static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000193builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000194{
Guido van Rossum09df08a1998-05-22 00:51:39 +0000195 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000196}
197
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000198PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000199"abs(number) -> number\n\
200\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000201Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000202
Raymond Hettinger96229b12005-03-11 06:49:40 +0000203static PyObject *
204builtin_all(PyObject *self, PyObject *v)
205{
206 PyObject *it, *item;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000207 PyObject *(*iternext)(PyObject *);
208 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000209
210 it = PyObject_GetIter(v);
211 if (it == NULL)
212 return NULL;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000213 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000214
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000215 for (;;) {
216 item = iternext(it);
217 if (item == NULL)
218 break;
219 cmp = PyObject_IsTrue(item);
Raymond Hettinger96229b12005-03-11 06:49:40 +0000220 Py_DECREF(item);
221 if (cmp < 0) {
222 Py_DECREF(it);
223 return NULL;
224 }
225 if (cmp == 0) {
226 Py_DECREF(it);
227 Py_RETURN_FALSE;
228 }
229 }
230 Py_DECREF(it);
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000231 if (PyErr_Occurred()) {
232 if (PyErr_ExceptionMatches(PyExc_StopIteration))
233 PyErr_Clear();
234 else
235 return NULL;
236 }
Raymond Hettinger96229b12005-03-11 06:49:40 +0000237 Py_RETURN_TRUE;
238}
239
240PyDoc_STRVAR(all_doc,
241"all(iterable) -> bool\n\
242\n\
243Return True if bool(x) is True for all values x in the iterable.");
244
245static PyObject *
246builtin_any(PyObject *self, PyObject *v)
247{
248 PyObject *it, *item;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000249 PyObject *(*iternext)(PyObject *);
250 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000251
252 it = PyObject_GetIter(v);
253 if (it == NULL)
254 return NULL;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000255 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000256
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000257 for (;;) {
258 item = iternext(it);
259 if (item == NULL)
260 break;
261 cmp = PyObject_IsTrue(item);
Raymond Hettinger96229b12005-03-11 06:49:40 +0000262 Py_DECREF(item);
263 if (cmp < 0) {
264 Py_DECREF(it);
265 return NULL;
266 }
267 if (cmp == 1) {
268 Py_DECREF(it);
269 Py_RETURN_TRUE;
270 }
271 }
272 Py_DECREF(it);
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000273 if (PyErr_Occurred()) {
274 if (PyErr_ExceptionMatches(PyExc_StopIteration))
275 PyErr_Clear();
276 else
277 return NULL;
278 }
Raymond Hettinger96229b12005-03-11 06:49:40 +0000279 Py_RETURN_FALSE;
280}
281
282PyDoc_STRVAR(any_doc,
283"any(iterable) -> bool\n\
284\n\
285Return True if bool(x) is True for any x in the iterable.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000286
Georg Brandl559e5d72008-06-11 18:37:52 +0000287static PyObject *
288builtin_ascii(PyObject *self, PyObject *v)
289{
290 return PyObject_ASCII(v);
291}
292
293PyDoc_STRVAR(ascii_doc,
294"ascii(object) -> string\n\
295\n\
296As repr(), return a string containing a printable representation of an\n\
297object, but escape the non-ASCII characters in the string returned by\n\
298repr() using \\x, \\u or \\U escapes. This generates a string similar\n\
299to that returned by repr() in Python 2.");
300
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000301
Guido van Rossum79f25d91997-04-29 20:08:16 +0000302static PyObject *
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000303builtin_bin(PyObject *self, PyObject *v)
304{
305 return PyNumber_ToBase(v, 2);
306}
307
308PyDoc_STRVAR(bin_doc,
309"bin(number) -> string\n\
310\n\
311Return the binary representation of an integer or long integer.");
312
313
Raymond Hettinger17301e92008-03-13 00:19:26 +0000314typedef struct {
315 PyObject_HEAD
316 PyObject *func;
317 PyObject *it;
318} filterobject;
319
320PyTypeObject PyFilter_Type;
321
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000322static PyObject *
Raymond Hettinger17301e92008-03-13 00:19:26 +0000323filter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000324{
Raymond Hettinger17301e92008-03-13 00:19:26 +0000325 PyObject *func, *seq;
326 PyObject *it;
327 filterobject *lz;
328
329 if (type == &PyFilter_Type && !_PyArg_NoKeywords("filter()", kwds))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000330 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000331
332 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
Georg Brandle35b6572005-07-19 22:20:20 +0000333 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000334
335 /* Get iterator. */
336 it = PyObject_GetIter(seq);
337 if (it == NULL)
338 return NULL;
339
340 /* create filterobject structure */
341 lz = (filterobject *)type->tp_alloc(type, 0);
342 if (lz == NULL) {
343 Py_DECREF(it);
344 return NULL;
345 }
346 Py_INCREF(func);
347 lz->func = func;
348 lz->it = it;
349
350 return (PyObject *)lz;
351}
352
353static void
354filter_dealloc(filterobject *lz)
355{
356 PyObject_GC_UnTrack(lz);
357 Py_XDECREF(lz->func);
358 Py_XDECREF(lz->it);
359 Py_TYPE(lz)->tp_free(lz);
360}
361
362static int
363filter_traverse(filterobject *lz, visitproc visit, void *arg)
364{
365 Py_VISIT(lz->it);
366 Py_VISIT(lz->func);
367 return 0;
368}
369
370static PyObject *
371filter_next(filterobject *lz)
372{
373 PyObject *item;
374 PyObject *it = lz->it;
375 long ok;
376 PyObject *(*iternext)(PyObject *);
377
Raymond Hettinger17301e92008-03-13 00:19:26 +0000378 iternext = *Py_TYPE(it)->tp_iternext;
379 for (;;) {
380 item = iternext(it);
381 if (item == NULL)
382 return NULL;
383
384 if (lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type) {
385 ok = PyObject_IsTrue(item);
386 } else {
387 PyObject *good;
388 good = PyObject_CallFunctionObjArgs(lz->func,
389 item, NULL);
390 if (good == NULL) {
391 Py_DECREF(item);
392 return NULL;
393 }
394 ok = PyObject_IsTrue(good);
395 Py_DECREF(good);
396 }
397 if (ok)
398 return item;
399 Py_DECREF(item);
400 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000401}
402
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000403PyDoc_STRVAR(filter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +0000404"filter(function or None, iterable) --> filter object\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000405\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +0000406Return an iterator yielding those items of iterable for which function(item)\n\
Raymond Hettinger17301e92008-03-13 00:19:26 +0000407is true. If function is None, return the items that are true.");
408
409PyTypeObject PyFilter_Type = {
410 PyVarObject_HEAD_INIT(&PyType_Type, 0)
411 "filter", /* tp_name */
412 sizeof(filterobject), /* tp_basicsize */
413 0, /* tp_itemsize */
414 /* methods */
415 (destructor)filter_dealloc, /* tp_dealloc */
416 0, /* tp_print */
417 0, /* tp_getattr */
418 0, /* tp_setattr */
Mark Dickinsone94c6792009-02-02 20:36:42 +0000419 0, /* tp_reserved */
Raymond Hettinger17301e92008-03-13 00:19:26 +0000420 0, /* tp_repr */
421 0, /* tp_as_number */
422 0, /* tp_as_sequence */
423 0, /* tp_as_mapping */
424 0, /* tp_hash */
425 0, /* tp_call */
426 0, /* tp_str */
427 PyObject_GenericGetAttr, /* tp_getattro */
428 0, /* tp_setattro */
429 0, /* tp_as_buffer */
430 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
431 Py_TPFLAGS_BASETYPE, /* tp_flags */
432 filter_doc, /* tp_doc */
433 (traverseproc)filter_traverse, /* tp_traverse */
434 0, /* tp_clear */
435 0, /* tp_richcompare */
436 0, /* tp_weaklistoffset */
437 PyObject_SelfIter, /* tp_iter */
438 (iternextfunc)filter_next, /* tp_iternext */
439 0, /* tp_methods */
440 0, /* tp_members */
441 0, /* tp_getset */
442 0, /* tp_base */
443 0, /* tp_dict */
444 0, /* tp_descr_get */
445 0, /* tp_descr_set */
446 0, /* tp_dictoffset */
447 0, /* tp_init */
448 PyType_GenericAlloc, /* tp_alloc */
449 filter_new, /* tp_new */
450 PyObject_GC_Del, /* tp_free */
451};
452
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000453
Eric Smith8c663262007-08-25 02:26:07 +0000454static PyObject *
455builtin_format(PyObject *self, PyObject *args)
456{
Christian Heimes94b7d3d2007-12-11 20:20:39 +0000457 PyObject *value;
Eric Smith8fd3eba2008-02-17 19:48:00 +0000458 PyObject *format_spec = NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000459
Eric Smith8fd3eba2008-02-17 19:48:00 +0000460 if (!PyArg_ParseTuple(args, "O|U:format", &value, &format_spec))
461 return NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000462
Eric Smith8fd3eba2008-02-17 19:48:00 +0000463 return PyObject_Format(value, format_spec);
Eric Smith8c663262007-08-25 02:26:07 +0000464}
465
Eric Smith8c663262007-08-25 02:26:07 +0000466PyDoc_STRVAR(format_doc,
Eric Smith81936692007-08-31 01:14:01 +0000467"format(value[, format_spec]) -> string\n\
Eric Smith8c663262007-08-25 02:26:07 +0000468\n\
Eric Smith81936692007-08-31 01:14:01 +0000469Returns value.__format__(format_spec)\n\
470format_spec defaults to \"\"");
471
Guido van Rossum7fcf2242007-05-04 17:43:11 +0000472static PyObject *
Walter Dörwalde7efd592007-06-05 20:07:21 +0000473builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000474{
Amaury Forgeot d'Arc7888d082008-08-01 01:06:32 +0000475 int x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000476
Amaury Forgeot d'Arc7888d082008-08-01 01:06:32 +0000477 if (!PyArg_ParseTuple(args, "i:chr", &x))
Guido van Rossum09095f32000-03-10 23:00:52 +0000478 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000479
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000480 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000481}
482
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000483PyDoc_VAR(chr_doc) = PyDoc_STR(
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000484"chr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000485\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000486Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000487)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000488#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000489PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000490"\nIf 0x10000 <= i, a surrogate pair is returned."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000491)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000492#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000493;
Guido van Rossum09095f32000-03-10 23:00:52 +0000494
495
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000496static char *
Georg Brandl2cabc562008-08-28 07:57:16 +0000497source_as_string(PyObject *cmd, char *funcname, char *what)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000498{
499 char *str;
500 Py_ssize_t size;
501
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000502 if (PyUnicode_Check(cmd)) {
503 cmd = _PyUnicode_AsDefaultEncodedString(cmd, NULL);
504 if (cmd == NULL)
505 return NULL;
506 }
Guido van Rossuma4b8d1d2007-08-27 15:02:28 +0000507 else if (!PyObject_CheckReadBuffer(cmd)) {
Georg Brandl2cabc562008-08-28 07:57:16 +0000508 PyErr_Format(PyExc_TypeError,
509 "%s() arg 1 must be a %s object",
510 funcname, what);
Guido van Rossuma4b8d1d2007-08-27 15:02:28 +0000511 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
Georg Brandl2cabc562008-08-28 07:57:16 +0000594 str = source_as_string(cmd, "compile", "string, bytes, AST or code");
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000595 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
Georg Brandl2cabc562008-08-28 07:57:16 +0000706 str = source_as_string(cmd, "eval", "string, bytes or code");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000707 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
Raymond Hettinger5d1ff002009-01-06 09:37:13 +0000737 if (!PyArg_UnpackTuple(args, "exec", 1, 3, &prog, &globals, &locals))
Georg Brandl7cae87c2006-09-06 06:51:57 +0000738 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;
Georg Brandl2cabc562008-08-28 07:57:16 +0000754
Georg Brandl7cae87c2006-09-06 06:51:57 +0000755 if (!PyDict_Check(globals)) {
756 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
757 globals->ob_type->tp_name);
758 return NULL;
759 }
760 if (!PyMapping_Check(locals)) {
761 PyErr_Format(PyExc_TypeError,
762 "arg 3 must be a mapping or None, not %.100s",
763 locals->ob_type->tp_name);
764 return NULL;
765 }
766 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
767 if (PyDict_SetItemString(globals, "__builtins__",
768 PyEval_GetBuiltins()) != 0)
769 return NULL;
770 }
771
772 if (PyCode_Check(prog)) {
773 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
774 PyErr_SetString(PyExc_TypeError,
775 "code object passed to exec() may not "
776 "contain free variables");
777 return NULL;
778 }
779 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
780 }
Georg Brandl7cae87c2006-09-06 06:51:57 +0000781 else {
Georg Brandl2cabc562008-08-28 07:57:16 +0000782 char *str = source_as_string(prog, "exec",
783 "string, bytes or code");
Georg Brandl7cae87c2006-09-06 06:51:57 +0000784 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000785 if (str == NULL)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000786 return NULL;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000787 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000788 if (PyEval_MergeCompilerFlags(&cf))
789 v = PyRun_StringFlags(str, Py_file_input, globals,
790 locals, &cf);
791 else
792 v = PyRun_String(str, Py_file_input, globals, locals);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000793 }
794 if (v == NULL)
795 return NULL;
796 Py_DECREF(v);
797 Py_RETURN_NONE;
798}
799
800PyDoc_STRVAR(exec_doc,
801"exec(object[, globals[, locals]])\n\
802\n\
Benjamin Peterson38090262009-01-04 15:30:39 +0000803Read and execute code from a object, which can be a string or a code\n\
804object.\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000805The globals and locals are dictionaries, defaulting to the current\n\
806globals and locals. If only globals is given, locals defaults to it.");
807
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000808
Guido van Rossum79f25d91997-04-29 20:08:16 +0000809static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000810builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000811{
Neal Norwitz6ea45d32007-08-26 04:19:43 +0000812 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000813 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000814
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000815 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000816 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000817
Martin v. Löwis5b222132007-06-10 09:51:05 +0000818 if (!PyUnicode_Check(name)) {
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000819 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000820 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000821 return NULL;
822 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000823 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000824 if (result == NULL && dflt != NULL &&
825 PyErr_ExceptionMatches(PyExc_AttributeError))
826 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000827 PyErr_Clear();
828 Py_INCREF(dflt);
829 result = dflt;
830 }
831 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000832}
833
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000834PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000835"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000836\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000837Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
838When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000839exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000840
841
Guido van Rossum79f25d91997-04-29 20:08:16 +0000842static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000843builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000844{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000845 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000846
Guido van Rossum79f25d91997-04-29 20:08:16 +0000847 d = PyEval_GetGlobals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000848 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000849 return d;
850}
851
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000852PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000853"globals() -> dictionary\n\
854\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000855Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000856
857
Guido van Rossum79f25d91997-04-29 20:08:16 +0000858static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000859builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000860{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000861 PyObject *v;
862 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000863
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000864 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000865 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000866 if (!PyUnicode_Check(name)) {
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000867 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000868 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000869 return NULL;
870 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000871 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000872 if (v == NULL) {
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000873 if (!PyErr_ExceptionMatches(PyExc_Exception))
874 return NULL;
875 else {
876 PyErr_Clear();
877 Py_INCREF(Py_False);
878 return Py_False;
879 }
Guido van Rossum9bfef441993-03-29 10:43:31 +0000880 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000881 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000882 Py_INCREF(Py_True);
883 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000884}
885
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000886PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000887"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000888\n\
889Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000890(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000891
892
Guido van Rossum79f25d91997-04-29 20:08:16 +0000893static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000894builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000895{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000896 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000897}
898
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000899PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000900"id(object) -> integer\n\
901\n\
902Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000903simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000904
905
Raymond Hettingera6c60372008-03-13 01:26:19 +0000906/* map object ************************************************************/
907
908typedef struct {
909 PyObject_HEAD
910 PyObject *iters;
911 PyObject *func;
912} mapobject;
913
914PyTypeObject PyMap_Type;
915
Guido van Rossum79f25d91997-04-29 20:08:16 +0000916static PyObject *
Raymond Hettingera6c60372008-03-13 01:26:19 +0000917map_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000918{
Raymond Hettingera6c60372008-03-13 01:26:19 +0000919 PyObject *it, *iters, *func;
920 mapobject *lz;
921 Py_ssize_t numargs, i;
922
923 if (type == &PyMap_Type && !_PyArg_NoKeywords("map()", kwds))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000924 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000925
926 numargs = PyTuple_Size(args);
927 if (numargs < 2) {
928 PyErr_SetString(PyExc_TypeError,
929 "map() must have at least two arguments.");
Tim Peters4e9afdc2001-05-03 23:54:49 +0000930 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000931 }
932
933 iters = PyTuple_New(numargs-1);
934 if (iters == NULL)
935 return NULL;
936
937 for (i=1 ; i<numargs ; i++) {
938 /* Get iterator. */
939 it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
940 if (it == NULL) {
941 Py_DECREF(iters);
942 return NULL;
943 }
944 PyTuple_SET_ITEM(iters, i-1, it);
945 }
946
947 /* create mapobject structure */
948 lz = (mapobject *)type->tp_alloc(type, 0);
949 if (lz == NULL) {
950 Py_DECREF(iters);
951 return NULL;
952 }
953 lz->iters = iters;
954 func = PyTuple_GET_ITEM(args, 0);
955 Py_INCREF(func);
956 lz->func = func;
957
958 return (PyObject *)lz;
959}
960
961static void
962map_dealloc(mapobject *lz)
963{
964 PyObject_GC_UnTrack(lz);
965 Py_XDECREF(lz->iters);
966 Py_XDECREF(lz->func);
967 Py_TYPE(lz)->tp_free(lz);
968}
969
970static int
971map_traverse(mapobject *lz, visitproc visit, void *arg)
972{
973 Py_VISIT(lz->iters);
974 Py_VISIT(lz->func);
975 return 0;
976}
977
978static PyObject *
979map_next(mapobject *lz)
980{
981 PyObject *val;
982 PyObject *argtuple;
983 PyObject *result;
984 Py_ssize_t numargs, i;
985
986 numargs = PyTuple_Size(lz->iters);
987 argtuple = PyTuple_New(numargs);
988 if (argtuple == NULL)
989 return NULL;
990
991 for (i=0 ; i<numargs ; i++) {
992 val = PyIter_Next(PyTuple_GET_ITEM(lz->iters, i));
993 if (val == NULL) {
994 Py_DECREF(argtuple);
995 return NULL;
996 }
997 PyTuple_SET_ITEM(argtuple, i, val);
998 }
999 result = PyObject_Call(lz->func, argtuple, NULL);
1000 Py_DECREF(argtuple);
Tim Peters4e9afdc2001-05-03 23:54:49 +00001001 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001002}
1003
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001004PyDoc_STRVAR(map_doc,
Raymond Hettingera6c60372008-03-13 01:26:19 +00001005"map(func, *iterables) --> map object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001006\n\
Raymond Hettingera6c60372008-03-13 01:26:19 +00001007Make an iterator that computes the function using arguments from\n\
1008each of the iterables. Stops when the shortest iterable is exhausted.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001009
Raymond Hettingera6c60372008-03-13 01:26:19 +00001010PyTypeObject PyMap_Type = {
1011 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1012 "map", /* tp_name */
1013 sizeof(mapobject), /* tp_basicsize */
1014 0, /* tp_itemsize */
1015 /* methods */
1016 (destructor)map_dealloc, /* tp_dealloc */
1017 0, /* tp_print */
1018 0, /* tp_getattr */
1019 0, /* tp_setattr */
Mark Dickinsone94c6792009-02-02 20:36:42 +00001020 0, /* tp_reserved */
Raymond Hettingera6c60372008-03-13 01:26:19 +00001021 0, /* tp_repr */
1022 0, /* tp_as_number */
1023 0, /* tp_as_sequence */
1024 0, /* tp_as_mapping */
1025 0, /* tp_hash */
1026 0, /* tp_call */
1027 0, /* tp_str */
1028 PyObject_GenericGetAttr, /* tp_getattro */
1029 0, /* tp_setattro */
1030 0, /* tp_as_buffer */
1031 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1032 Py_TPFLAGS_BASETYPE, /* tp_flags */
1033 map_doc, /* tp_doc */
1034 (traverseproc)map_traverse, /* tp_traverse */
1035 0, /* tp_clear */
1036 0, /* tp_richcompare */
1037 0, /* tp_weaklistoffset */
1038 PyObject_SelfIter, /* tp_iter */
1039 (iternextfunc)map_next, /* tp_iternext */
1040 0, /* tp_methods */
1041 0, /* tp_members */
1042 0, /* tp_getset */
1043 0, /* tp_base */
1044 0, /* tp_dict */
1045 0, /* tp_descr_get */
1046 0, /* tp_descr_set */
1047 0, /* tp_dictoffset */
1048 0, /* tp_init */
1049 PyType_GenericAlloc, /* tp_alloc */
1050 map_new, /* tp_new */
1051 PyObject_GC_Del, /* tp_free */
1052};
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001053
Guido van Rossum79f25d91997-04-29 20:08:16 +00001054static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +00001055builtin_next(PyObject *self, PyObject *args)
1056{
1057 PyObject *it, *res;
1058 PyObject *def = NULL;
1059
1060 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1061 return NULL;
1062 if (!PyIter_Check(it)) {
1063 PyErr_Format(PyExc_TypeError,
Georg Brandlaaa63922008-04-30 19:47:01 +00001064 "%.200s object is not an iterator",
1065 it->ob_type->tp_name);
Georg Brandla18af4e2007-04-21 15:47:16 +00001066 return NULL;
1067 }
1068
1069 res = (*it->ob_type->tp_iternext)(it);
Georg Brandlaaa63922008-04-30 19:47:01 +00001070 if (res != NULL) {
1071 return res;
1072 } else if (def != NULL) {
1073 if (PyErr_Occurred()) {
1074 if(!PyErr_ExceptionMatches(PyExc_StopIteration))
Georg Brandla18af4e2007-04-21 15:47:16 +00001075 return NULL;
1076 PyErr_Clear();
Georg Brandla18af4e2007-04-21 15:47:16 +00001077 }
Georg Brandlaaa63922008-04-30 19:47:01 +00001078 Py_INCREF(def);
1079 return def;
1080 } else if (PyErr_Occurred()) {
1081 return NULL;
1082 } else {
1083 PyErr_SetNone(PyExc_StopIteration);
1084 return NULL;
Georg Brandla18af4e2007-04-21 15:47:16 +00001085 }
Georg Brandla18af4e2007-04-21 15:47:16 +00001086}
1087
1088PyDoc_STRVAR(next_doc,
1089"next(iterator[, default])\n\
1090\n\
1091Return the next item from the iterator. If default is given and the iterator\n\
1092is exhausted, it is returned instead of raising StopIteration.");
1093
1094
1095static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001096builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001097{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001098 PyObject *v;
1099 PyObject *name;
1100 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001101
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001102 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001103 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001104 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001105 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001106 Py_INCREF(Py_None);
1107 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001108}
1109
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001110PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001111"setattr(object, name, value)\n\
1112\n\
1113Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001114``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001115
1116
Guido van Rossum79f25d91997-04-29 20:08:16 +00001117static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001118builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001119{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001120 PyObject *v;
1121 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001122
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001123 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001124 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001125 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001126 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001127 Py_INCREF(Py_None);
1128 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001129}
1130
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001131PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001132"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001133\n\
1134Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001135``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001136
1137
Guido van Rossum79f25d91997-04-29 20:08:16 +00001138static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001139builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001140{
Guido van Rossum9bfef441993-03-29 10:43:31 +00001141 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001142
Guido van Rossum79f25d91997-04-29 20:08:16 +00001143 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001144 if (x == -1)
1145 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001146 return PyLong_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001147}
1148
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001149PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001150"hash(object) -> integer\n\
1151\n\
1152Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001153the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001154
1155
Guido van Rossum79f25d91997-04-29 20:08:16 +00001156static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001157builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001158{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001159 return PyNumber_ToBase(v, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001160}
1161
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001162PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001163"hex(number) -> string\n\
1164\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001165Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001166
1167
Guido van Rossum79f25d91997-04-29 20:08:16 +00001168static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001169builtin_iter(PyObject *self, PyObject *args)
1170{
1171 PyObject *v, *w = NULL;
1172
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001173 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001174 return NULL;
1175 if (w == NULL)
1176 return PyObject_GetIter(v);
1177 if (!PyCallable_Check(v)) {
1178 PyErr_SetString(PyExc_TypeError,
1179 "iter(v, w): v must be callable");
1180 return NULL;
1181 }
1182 return PyCallIter_New(v, w);
1183}
1184
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001185PyDoc_STRVAR(iter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001186"iter(iterable) -> iterator\n\
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001187iter(callable, sentinel) -> iterator\n\
1188\n\
1189Get an iterator from an object. In the first form, the argument must\n\
1190supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001191In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001192
1193
1194static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001195builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001196{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001197 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001198
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001199 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001200 if (res < 0 && PyErr_Occurred())
1201 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001202 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001203}
1204
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001205PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001206"len(object) -> integer\n\
1207\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001208Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001209
1210
Guido van Rossum79f25d91997-04-29 20:08:16 +00001211static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001212builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001213{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001214 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001215
Guido van Rossum79f25d91997-04-29 20:08:16 +00001216 d = PyEval_GetLocals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00001217 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001218 return d;
1219}
1220
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001221PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001222"locals() -> dictionary\n\
1223\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001224Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001225
1226
Guido van Rossum79f25d91997-04-29 20:08:16 +00001227static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001228min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001229{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001230 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001231 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001232
Guido van Rossum79f25d91997-04-29 20:08:16 +00001233 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001234 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001235 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001236 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001237
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001238 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1239 keyfunc = PyDict_GetItemString(kwds, "key");
1240 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001241 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001242 "%s() got an unexpected keyword argument", name);
1243 return NULL;
1244 }
Christian Heimesbbffeb62008-01-24 09:42:52 +00001245 Py_INCREF(keyfunc);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001246 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001247
Tim Petersc3074532001-05-03 07:00:32 +00001248 it = PyObject_GetIter(v);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001249 if (it == NULL) {
1250 Py_XDECREF(keyfunc);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001251 return NULL;
Christian Heimesbbffeb62008-01-24 09:42:52 +00001252 }
Tim Petersc3074532001-05-03 07:00:32 +00001253
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001254 maxitem = NULL; /* the result */
1255 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001256 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001257 /* get the value from the key function */
1258 if (keyfunc != NULL) {
1259 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1260 if (val == NULL)
1261 goto Fail_it_item;
1262 }
1263 /* no key function; the value is the item */
1264 else {
1265 val = item;
1266 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001267 }
Tim Petersc3074532001-05-03 07:00:32 +00001268
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001269 /* maximum value and item are unset; set them */
1270 if (maxval == NULL) {
1271 maxitem = item;
1272 maxval = val;
1273 }
1274 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001275 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001276 int cmp = PyObject_RichCompareBool(val, maxval, op);
1277 if (cmp < 0)
1278 goto Fail_it_item_and_val;
1279 else if (cmp > 0) {
1280 Py_DECREF(maxval);
1281 Py_DECREF(maxitem);
1282 maxval = val;
1283 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001284 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001285 else {
1286 Py_DECREF(item);
1287 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001288 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001289 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001290 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001291 if (PyErr_Occurred())
1292 goto Fail_it;
1293 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001294 PyErr_Format(PyExc_ValueError,
1295 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001296 assert(maxitem == NULL);
1297 }
1298 else
1299 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001300 Py_DECREF(it);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001301 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001302 return maxitem;
1303
1304Fail_it_item_and_val:
1305 Py_DECREF(val);
1306Fail_it_item:
1307 Py_DECREF(item);
1308Fail_it:
1309 Py_XDECREF(maxval);
1310 Py_XDECREF(maxitem);
1311 Py_DECREF(it);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001312 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001313 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001314}
1315
Guido van Rossum79f25d91997-04-29 20:08:16 +00001316static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001317builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001318{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001319 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001320}
1321
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001322PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001323"min(iterable[, key=func]) -> value\n\
1324min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001325\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001326With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001327With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001328
1329
Guido van Rossum79f25d91997-04-29 20:08:16 +00001330static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001331builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001332{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001333 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001334}
1335
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001336PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001337"max(iterable[, key=func]) -> value\n\
1338max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001339\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001340With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001341With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001342
1343
Guido van Rossum79f25d91997-04-29 20:08:16 +00001344static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001345builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001346{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001347 return PyNumber_ToBase(v, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001348}
1349
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001350PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001351"oct(number) -> string\n\
1352\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001353Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001354
1355
Guido van Rossum79f25d91997-04-29 20:08:16 +00001356static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001357builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001358{
Guido van Rossum09095f32000-03-10 23:00:52 +00001359 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001360 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001361
Christian Heimes72b710a2008-05-26 13:28:38 +00001362 if (PyBytes_Check(obj)) {
1363 size = PyBytes_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001364 if (size == 1) {
Christian Heimes72b710a2008-05-26 13:28:38 +00001365 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
Christian Heimes217cfd12007-12-02 14:31:20 +00001366 return PyLong_FromLong(ord);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001367 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001368 }
1369 else if (PyUnicode_Check(obj)) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001370 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001371 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001372 ord = (long)*PyUnicode_AS_UNICODE(obj);
Christian Heimes217cfd12007-12-02 14:31:20 +00001373 return PyLong_FromLong(ord);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001374 }
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001375#ifndef Py_UNICODE_WIDE
1376 if (size == 2) {
1377 /* Decode a valid surrogate pair */
1378 int c0 = PyUnicode_AS_UNICODE(obj)[0];
1379 int c1 = PyUnicode_AS_UNICODE(obj)[1];
1380 if (0xD800 <= c0 && c0 <= 0xDBFF &&
1381 0xDC00 <= c1 && c1 <= 0xDFFF) {
1382 ord = ((((c0 & 0x03FF) << 10) | (c1 & 0x03FF)) +
1383 0x00010000);
Christian Heimes217cfd12007-12-02 14:31:20 +00001384 return PyLong_FromLong(ord);
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001385 }
1386 }
1387#endif
Guido van Rossum6f376c42007-05-24 14:31:33 +00001388 }
Christian Heimes9c4756e2008-05-26 13:22:05 +00001389 else if (PyByteArray_Check(obj)) {
Guido van Rossum98f97462007-04-13 03:31:13 +00001390 /* XXX Hopefully this is temporary */
Christian Heimes9c4756e2008-05-26 13:22:05 +00001391 size = PyByteArray_GET_SIZE(obj);
Guido van Rossum98f97462007-04-13 03:31:13 +00001392 if (size == 1) {
Christian Heimes9c4756e2008-05-26 13:22:05 +00001393 ord = (long)((unsigned char)*PyByteArray_AS_STRING(obj));
Christian Heimes217cfd12007-12-02 14:31:20 +00001394 return PyLong_FromLong(ord);
Guido van Rossum98f97462007-04-13 03:31:13 +00001395 }
1396 }
1397 else {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001398 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001399 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001400 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001401 return NULL;
1402 }
1403
Guido van Rossumad991772001-01-12 16:03:05 +00001404 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001405 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001406 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001407 size);
1408 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001409}
1410
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001411PyDoc_VAR(ord_doc) = PyDoc_STR(
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001412"ord(c) -> integer\n\
1413\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001414Return the integer ordinal of a one-character string."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001415)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001416#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001417PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001418"\nA valid surrogate pair is also accepted."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001419)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001420#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001421;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001422
1423
Guido van Rossum79f25d91997-04-29 20:08:16 +00001424static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001425builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001426{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001427 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001428
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001429 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001430 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001431 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001432}
1433
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001434PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001435"pow(x, y[, z]) -> number\n\
1436\n\
1437With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001438equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001439
1440
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001441
Guido van Rossum34343512006-11-30 22:13:52 +00001442static PyObject *
1443builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1444{
1445 static char *kwlist[] = {"sep", "end", "file", 0};
Georg Brandl257d3d92007-02-26 10:35:10 +00001446 static PyObject *dummy_args;
Guido van Rossum34343512006-11-30 22:13:52 +00001447 PyObject *sep = NULL, *end = NULL, *file = NULL;
1448 int i, err;
1449
Georg Brandl257d3d92007-02-26 10:35:10 +00001450 if (dummy_args == NULL) {
1451 if (!(dummy_args = PyTuple_New(0)))
1452 return NULL;
1453 }
Georg Brandl88fc6642007-02-09 21:28:07 +00001454 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
Guido van Rossum34343512006-11-30 22:13:52 +00001455 kwlist, &sep, &end, &file))
Christian Heimesfef9bba2007-11-13 15:24:14 +00001456 return NULL;
1457 if (file == NULL || file == Py_None) {
Guido van Rossum34343512006-11-30 22:13:52 +00001458 file = PySys_GetObject("stdout");
Christian Heimesfef9bba2007-11-13 15:24:14 +00001459 /* sys.stdout may be None when FILE* stdout isn't connected */
1460 if (file == Py_None)
1461 Py_RETURN_NONE;
1462 }
Guido van Rossum34343512006-11-30 22:13:52 +00001463
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001464 if (sep && sep != Py_None && !PyUnicode_Check(sep)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001465 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001466 "sep must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001467 sep->ob_type->tp_name);
1468 return NULL;
1469 }
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001470 if (end && end != Py_None && !PyUnicode_Check(end)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001471 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001472 "end must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001473 end->ob_type->tp_name);
1474 return NULL;
1475 }
Guido van Rossum34343512006-11-30 22:13:52 +00001476
1477 for (i = 0; i < PyTuple_Size(args); i++) {
1478 if (i > 0) {
1479 if (sep == NULL || sep == Py_None)
1480 err = PyFile_WriteString(" ", file);
1481 else
1482 err = PyFile_WriteObject(sep, file,
1483 Py_PRINT_RAW);
1484 if (err)
1485 return NULL;
1486 }
1487 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1488 Py_PRINT_RAW);
1489 if (err)
1490 return NULL;
1491 }
1492
1493 if (end == NULL || end == Py_None)
1494 err = PyFile_WriteString("\n", file);
1495 else
1496 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1497 if (err)
1498 return NULL;
1499
1500 Py_RETURN_NONE;
1501}
1502
1503PyDoc_STRVAR(print_doc,
Georg Brandlcd5da7d2008-02-01 15:47:37 +00001504"print(value, ..., sep=' ', end='\\n', file=sys.stdout)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001505\n\
1506Prints the values to a stream, or to sys.stdout by default.\n\
1507Optional keyword arguments:\n\
1508file: a file-like object (stream); defaults to the current sys.stdout.\n\
1509sep: string inserted between values, default a space.\n\
1510end: string appended after the last value, default a newline.");
1511
1512
Guido van Rossuma88a0332007-02-26 16:59:55 +00001513static PyObject *
1514builtin_input(PyObject *self, PyObject *args)
1515{
Guido van Rossumeba76962007-05-27 09:13:28 +00001516 PyObject *promptarg = NULL;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001517 PyObject *fin = PySys_GetObject("stdin");
1518 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossumeba76962007-05-27 09:13:28 +00001519 PyObject *ferr = PySys_GetObject("stderr");
1520 PyObject *tmp;
1521 long fd;
1522 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001523
Guido van Rossumeba76962007-05-27 09:13:28 +00001524 /* Parse arguments */
1525 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg))
Guido van Rossuma88a0332007-02-26 16:59:55 +00001526 return NULL;
1527
Guido van Rossumeba76962007-05-27 09:13:28 +00001528 /* Check that stdin/out/err are intact */
Christian Heimes2be03732007-11-15 02:26:46 +00001529 if (fin == NULL || fin == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001530 PyErr_SetString(PyExc_RuntimeError,
1531 "input(): lost sys.stdin");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001532 return NULL;
1533 }
Christian Heimes2be03732007-11-15 02:26:46 +00001534 if (fout == NULL || fout == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001535 PyErr_SetString(PyExc_RuntimeError,
1536 "input(): lost sys.stdout");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001537 return NULL;
1538 }
Christian Heimes2be03732007-11-15 02:26:46 +00001539 if (ferr == NULL || ferr == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001540 PyErr_SetString(PyExc_RuntimeError,
1541 "input(): lost sys.stderr");
1542 return NULL;
1543 }
1544
1545 /* First of all, flush stderr */
1546 tmp = PyObject_CallMethod(ferr, "flush", "");
1547 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001548 PyErr_Clear();
1549 else
1550 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001551
1552 /* We should only use (GNU) readline if Python's sys.stdin and
1553 sys.stdout are the same as C's stdin and stdout, because we
1554 need to pass it those. */
1555 tmp = PyObject_CallMethod(fin, "fileno", "");
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001556 if (tmp == NULL) {
1557 PyErr_Clear();
1558 tty = 0;
1559 }
1560 else {
Christian Heimes217cfd12007-12-02 14:31:20 +00001561 fd = PyLong_AsLong(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001562 Py_DECREF(tmp);
1563 if (fd < 0 && PyErr_Occurred())
1564 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001565 tty = fd == fileno(stdin) && isatty(fd);
1566 }
1567 if (tty) {
1568 tmp = PyObject_CallMethod(fout, "fileno", "");
1569 if (tmp == NULL)
1570 PyErr_Clear();
1571 else {
Christian Heimes217cfd12007-12-02 14:31:20 +00001572 fd = PyLong_AsLong(tmp);
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001573 Py_DECREF(tmp);
1574 if (fd < 0 && PyErr_Occurred())
1575 return NULL;
1576 tty = fd == fileno(stdout) && isatty(fd);
1577 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001578 }
1579
1580 /* If we're interactive, use (GNU) readline */
1581 if (tty) {
Guido van Rossuma88a0332007-02-26 16:59:55 +00001582 PyObject *po;
1583 char *prompt;
1584 char *s;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001585 PyObject *stdin_encoding;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001586 PyObject *result;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001587
1588 stdin_encoding = PyObject_GetAttrString(fin, "encoding");
1589 if (!stdin_encoding)
1590 /* stdin is a text stream, so it must have an
1591 encoding. */
1592 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001593 tmp = PyObject_CallMethod(fout, "flush", "");
1594 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001595 PyErr_Clear();
1596 else
1597 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001598 if (promptarg != NULL) {
Amaury Forgeot d'Arcd0db98f2008-09-21 21:49:01 +00001599 PyObject *stringpo;
1600 PyObject *stdout_encoding;
1601 stdout_encoding = PyObject_GetAttrString(fout,
1602 "encoding");
1603 if (stdout_encoding == NULL) {
1604 Py_DECREF(stdin_encoding);
1605 return NULL;
1606 }
1607 stringpo = PyObject_Str(promptarg);
1608 if (stringpo == NULL) {
1609 Py_DECREF(stdin_encoding);
1610 Py_DECREF(stdout_encoding);
1611 return NULL;
1612 }
1613 po = PyUnicode_AsEncodedString(stringpo,
1614 _PyUnicode_AsString(stdout_encoding), NULL);
1615 Py_DECREF(stdout_encoding);
1616 Py_DECREF(stringpo);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001617 if (po == NULL) {
1618 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001619 return NULL;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001620 }
Amaury Forgeot d'Arcd0db98f2008-09-21 21:49:01 +00001621 prompt = PyBytes_AsString(po);
Guido van Rossumeba76962007-05-27 09:13:28 +00001622 if (prompt == NULL) {
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001623 Py_DECREF(stdin_encoding);
Guido van Rossumeba76962007-05-27 09:13:28 +00001624 Py_DECREF(po);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001625 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001626 }
Guido van Rossuma88a0332007-02-26 16:59:55 +00001627 }
1628 else {
1629 po = NULL;
1630 prompt = "";
1631 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001632 s = PyOS_Readline(stdin, stdout, prompt);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001633 Py_XDECREF(po);
1634 if (s == NULL) {
1635 if (!PyErr_Occurred())
1636 PyErr_SetNone(PyExc_KeyboardInterrupt);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001637 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001638 return NULL;
1639 }
1640 if (*s == '\0') {
1641 PyErr_SetNone(PyExc_EOFError);
1642 result = NULL;
1643 }
1644 else { /* strip trailing '\n' */
1645 size_t len = strlen(s);
1646 if (len > PY_SSIZE_T_MAX) {
1647 PyErr_SetString(PyExc_OverflowError,
1648 "input: input too long");
1649 result = NULL;
1650 }
1651 else {
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001652 result = PyUnicode_Decode
1653 (s, len-1,
Marc-André Lemburg4cc0f242008-08-07 18:54:33 +00001654 _PyUnicode_AsString(stdin_encoding),
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001655 NULL);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001656 }
1657 }
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001658 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001659 PyMem_FREE(s);
1660 return result;
1661 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001662
1663 /* Fallback if we're not interactive */
1664 if (promptarg != NULL) {
1665 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0)
Guido van Rossuma88a0332007-02-26 16:59:55 +00001666 return NULL;
1667 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001668 tmp = PyObject_CallMethod(fout, "flush", "");
1669 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001670 PyErr_Clear();
1671 else
1672 Py_DECREF(tmp);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001673 return PyFile_GetLine(fin, -1);
1674}
1675
1676PyDoc_STRVAR(input_doc,
1677"input([prompt]) -> string\n\
1678\n\
1679Read a string from standard input. The trailing newline is stripped.\n\
1680If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1681On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1682is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001683
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001684
Guido van Rossum79f25d91997-04-29 20:08:16 +00001685static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001686builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001687{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001688 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001689}
1690
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001691PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001692"repr(object) -> string\n\
1693\n\
1694Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001695For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001696
1697
Guido van Rossum79f25d91997-04-29 20:08:16 +00001698static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001699builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001700{
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001701 static PyObject *round_str = NULL;
Mark Dickinson1124e712009-01-28 21:25:58 +00001702 PyObject *ndigits = NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001703 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001704 PyObject *number, *round;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001705
Mark Dickinson1124e712009-01-28 21:25:58 +00001706 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:round",
1707 kwlist, &number, &ndigits))
1708 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00001709
Christian Heimes90aa7642007-12-19 02:45:37 +00001710 if (Py_TYPE(number)->tp_dict == NULL) {
1711 if (PyType_Ready(Py_TYPE(number)) < 0)
Guido van Rossum15d3d042007-08-24 02:02:45 +00001712 return NULL;
1713 }
1714
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001715 if (round_str == NULL) {
Christian Heimesfe82e772008-01-28 02:38:20 +00001716 round_str = PyUnicode_InternFromString("__round__");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001717 if (round_str == NULL)
Alex Martelliae211f92007-08-22 23:21:33 +00001718 return NULL;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001719 }
1720
Christian Heimes90aa7642007-12-19 02:45:37 +00001721 round = _PyType_Lookup(Py_TYPE(number), round_str);
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001722 if (round == NULL) {
1723 PyErr_Format(PyExc_TypeError,
1724 "type %.100s doesn't define __round__ method",
Christian Heimes90aa7642007-12-19 02:45:37 +00001725 Py_TYPE(number)->tp_name);
Alex Martelliae211f92007-08-22 23:21:33 +00001726 return NULL;
1727 }
1728
Mark Dickinson1124e712009-01-28 21:25:58 +00001729 if (ndigits == NULL)
1730 return PyObject_CallFunction(round, "O", number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001731 else
Mark Dickinson1124e712009-01-28 21:25:58 +00001732 return PyObject_CallFunction(round, "OO", number, ndigits);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001733}
1734
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001735PyDoc_STRVAR(round_doc,
Mark Dickinson1124e712009-01-28 21:25:58 +00001736"round(number[, ndigits]) -> number\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001737\n\
1738Round a number to a given precision in decimal digits (default 0 digits).\n\
Mark Dickinson0d748c22008-07-05 11:29:03 +00001739This returns an int when called with one argument, otherwise the\n\
Georg Brandl809ddaa2008-07-01 20:39:59 +00001740same type as the number. ndigits may be negative.");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001741
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001742
Raymond Hettinger64958a12003-12-17 20:43:33 +00001743static PyObject *
1744builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1745{
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001746 PyObject *newlist, *v, *seq, *keyfunc=NULL, *newargs;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001747 PyObject *callable;
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001748 static char *kwlist[] = {"iterable", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001749 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001750
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001751 /* args 1-3 should match listsort in Objects/listobject.c */
1752 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted",
1753 kwlist, &seq, &keyfunc, &reverse))
Armin Rigo71d7e702005-09-20 18:13:03 +00001754 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001755
1756 newlist = PySequence_List(seq);
1757 if (newlist == NULL)
1758 return NULL;
1759
1760 callable = PyObject_GetAttrString(newlist, "sort");
1761 if (callable == NULL) {
1762 Py_DECREF(newlist);
1763 return NULL;
1764 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001765
Raymond Hettinger64958a12003-12-17 20:43:33 +00001766 newargs = PyTuple_GetSlice(args, 1, 4);
1767 if (newargs == NULL) {
1768 Py_DECREF(newlist);
1769 Py_DECREF(callable);
1770 return NULL;
1771 }
1772
1773 v = PyObject_Call(callable, newargs, kwds);
1774 Py_DECREF(newargs);
1775 Py_DECREF(callable);
1776 if (v == NULL) {
1777 Py_DECREF(newlist);
1778 return NULL;
1779 }
1780 Py_DECREF(v);
1781 return newlist;
1782}
1783
1784PyDoc_STRVAR(sorted_doc,
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001785"sorted(iterable, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001786
Guido van Rossum79f25d91997-04-29 20:08:16 +00001787static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001788builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001789{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001790 PyObject *v = NULL;
1791 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001792
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001793 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001794 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001795 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001796 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001797 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001798 if (!PyErr_Occurred())
1799 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001800 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001801 }
1802 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001803 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001804 }
1805 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001806 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001807 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001808 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001809 "vars() argument must have __dict__ attribute");
1810 return NULL;
1811 }
1812 }
1813 return d;
1814}
1815
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001816PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001817"vars([object]) -> dictionary\n\
1818\n\
1819Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001820With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001821
Alex Martellia70b1912003-04-22 08:12:33 +00001822static PyObject*
1823builtin_sum(PyObject *self, PyObject *args)
1824{
1825 PyObject *seq;
1826 PyObject *result = NULL;
1827 PyObject *temp, *item, *iter;
1828
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001829 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001830 return NULL;
1831
1832 iter = PyObject_GetIter(seq);
1833 if (iter == NULL)
1834 return NULL;
1835
1836 if (result == NULL) {
Christian Heimes217cfd12007-12-02 14:31:20 +00001837 result = PyLong_FromLong(0);
Alex Martellia70b1912003-04-22 08:12:33 +00001838 if (result == NULL) {
1839 Py_DECREF(iter);
1840 return NULL;
1841 }
1842 } else {
1843 /* reject string values for 'start' parameter */
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001844 if (PyUnicode_Check(result)) {
Alex Martellia70b1912003-04-22 08:12:33 +00001845 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001846 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001847 Py_DECREF(iter);
1848 return NULL;
1849 }
Christian Heimes9c4756e2008-05-26 13:22:05 +00001850 if (PyByteArray_Check(result)) {
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001851 PyErr_SetString(PyExc_TypeError,
1852 "sum() can't sum bytes [use b''.join(seq) instead]");
1853 Py_DECREF(iter);
1854 return NULL;
1855 }
1856
Alex Martelli41c9f882003-04-22 09:24:48 +00001857 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001858 }
1859
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001860#ifndef SLOW_SUM
1861 /* Fast addition by keeping temporary sums in C instead of new Python objects.
1862 Assumes all inputs are the same type. If the assumption fails, default
1863 to the more general routine.
1864 */
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001865 if (PyLong_CheckExact(result)) {
1866 int overflow;
1867 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
1868 /* If this already overflowed, don't even enter the loop. */
1869 if (overflow == 0) {
1870 Py_DECREF(result);
1871 result = NULL;
1872 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001873 while(result == NULL) {
1874 item = PyIter_Next(iter);
1875 if (item == NULL) {
1876 Py_DECREF(iter);
1877 if (PyErr_Occurred())
1878 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001879 return PyLong_FromLong(i_result);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001880 }
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001881 if (PyLong_CheckExact(item)) {
1882 long b = PyLong_AsLongAndOverflow(item, &overflow);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001883 long x = i_result + b;
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001884 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001885 i_result = x;
1886 Py_DECREF(item);
1887 continue;
1888 }
1889 }
1890 /* Either overflowed or is not an int. Restore real objects and process normally */
Christian Heimes217cfd12007-12-02 14:31:20 +00001891 result = PyLong_FromLong(i_result);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001892 temp = PyNumber_Add(result, item);
1893 Py_DECREF(result);
1894 Py_DECREF(item);
1895 result = temp;
1896 if (result == NULL) {
1897 Py_DECREF(iter);
1898 return NULL;
1899 }
1900 }
1901 }
1902
1903 if (PyFloat_CheckExact(result)) {
1904 double f_result = PyFloat_AS_DOUBLE(result);
1905 Py_DECREF(result);
1906 result = NULL;
1907 while(result == NULL) {
1908 item = PyIter_Next(iter);
1909 if (item == NULL) {
1910 Py_DECREF(iter);
1911 if (PyErr_Occurred())
1912 return NULL;
1913 return PyFloat_FromDouble(f_result);
1914 }
1915 if (PyFloat_CheckExact(item)) {
Georg Brandlf08a9dd2008-06-10 16:57:31 +00001916 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001917 f_result += PyFloat_AS_DOUBLE(item);
1918 PyFPE_END_PROTECT(f_result)
1919 Py_DECREF(item);
1920 continue;
1921 }
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001922 if (PyLong_CheckExact(item)) {
1923 long value;
1924 int overflow;
1925 value = PyLong_AsLongAndOverflow(item, &overflow);
1926 if (!overflow) {
Georg Brandlf08a9dd2008-06-10 16:57:31 +00001927 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001928 f_result += (double)value;
1929 PyFPE_END_PROTECT(f_result)
1930 Py_DECREF(item);
1931 continue;
1932 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001933 }
1934 result = PyFloat_FromDouble(f_result);
1935 temp = PyNumber_Add(result, item);
1936 Py_DECREF(result);
1937 Py_DECREF(item);
1938 result = temp;
1939 if (result == NULL) {
1940 Py_DECREF(iter);
1941 return NULL;
1942 }
1943 }
1944 }
1945#endif
1946
Alex Martellia70b1912003-04-22 08:12:33 +00001947 for(;;) {
1948 item = PyIter_Next(iter);
1949 if (item == NULL) {
1950 /* error, or end-of-sequence */
1951 if (PyErr_Occurred()) {
1952 Py_DECREF(result);
1953 result = NULL;
1954 }
1955 break;
1956 }
Alex Martellia253e182003-10-25 23:24:14 +00001957 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001958 Py_DECREF(result);
1959 Py_DECREF(item);
1960 result = temp;
1961 if (result == NULL)
1962 break;
1963 }
1964 Py_DECREF(iter);
1965 return result;
1966}
1967
1968PyDoc_STRVAR(sum_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001969"sum(iterable[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00001970\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +00001971Returns the sum of an iterable of numbers (NOT strings) plus the value\n\
1972of parameter 'start' (which defaults to 0). When the iterable is\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00001973empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00001974
1975
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001976static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001977builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001978{
1979 PyObject *inst;
1980 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001981 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001982
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001983 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001984 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001985
Guido van Rossum823649d2001-03-21 18:40:58 +00001986 retval = PyObject_IsInstance(inst, cls);
1987 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001988 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001989 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001990}
1991
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001992PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001993"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001994\n\
1995Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001996With a type as second argument, return whether that is the object's type.\n\
1997The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001998isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001999
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002000
2001static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002002builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002003{
2004 PyObject *derived;
2005 PyObject *cls;
2006 int retval;
2007
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002008 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002009 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002010
Guido van Rossum823649d2001-03-21 18:40:58 +00002011 retval = PyObject_IsSubclass(derived, cls);
2012 if (retval < 0)
2013 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002014 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002015}
2016
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002017PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002018"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002019\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002020Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2021When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2022is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002023
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002024
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002025typedef struct {
2026 PyObject_HEAD
2027 Py_ssize_t tuplesize;
2028 PyObject *ittuple; /* tuple of iterators */
2029 PyObject *result;
2030} zipobject;
2031
2032PyTypeObject PyZip_Type;
2033
2034static PyObject *
2035zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002036{
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002037 zipobject *lz;
2038 Py_ssize_t i;
2039 PyObject *ittuple; /* tuple of iterators */
2040 PyObject *result;
2041 Py_ssize_t tuplesize = PySequence_Length(args);
2042
2043 if (type == &PyZip_Type && !_PyArg_NoKeywords("zip()", kwds))
2044 return NULL;
2045
Guido van Rossumb65fb332006-08-25 23:26:40 +00002046 /* args must be a tuple */
2047 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00002048
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002049 /* obtain iterators */
2050 ittuple = PyTuple_New(tuplesize);
2051 if (ittuple == NULL)
2052 return NULL;
2053 for (i=0; i < tuplesize; ++i) {
2054 PyObject *item = PyTuple_GET_ITEM(args, i);
2055 PyObject *it = PyObject_GetIter(item);
2056 if (it == NULL) {
2057 if (PyErr_ExceptionMatches(PyExc_TypeError))
2058 PyErr_Format(PyExc_TypeError,
2059 "zip argument #%zd must support iteration",
2060 i+1);
2061 Py_DECREF(ittuple);
2062 return NULL;
2063 }
2064 PyTuple_SET_ITEM(ittuple, i, it);
2065 }
2066
2067 /* create a result holder */
2068 result = PyTuple_New(tuplesize);
2069 if (result == NULL) {
2070 Py_DECREF(ittuple);
2071 return NULL;
2072 }
2073 for (i=0 ; i < tuplesize ; i++) {
2074 Py_INCREF(Py_None);
2075 PyTuple_SET_ITEM(result, i, Py_None);
2076 }
2077
2078 /* create zipobject structure */
2079 lz = (zipobject *)type->tp_alloc(type, 0);
2080 if (lz == NULL) {
2081 Py_DECREF(ittuple);
2082 Py_DECREF(result);
2083 return NULL;
2084 }
2085 lz->ittuple = ittuple;
2086 lz->tuplesize = tuplesize;
2087 lz->result = result;
2088
2089 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002090}
2091
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002092static void
2093zip_dealloc(zipobject *lz)
2094{
2095 PyObject_GC_UnTrack(lz);
2096 Py_XDECREF(lz->ittuple);
2097 Py_XDECREF(lz->result);
2098 Py_TYPE(lz)->tp_free(lz);
2099}
2100
2101static int
2102zip_traverse(zipobject *lz, visitproc visit, void *arg)
2103{
2104 Py_VISIT(lz->ittuple);
2105 Py_VISIT(lz->result);
2106 return 0;
2107}
2108
2109static PyObject *
2110zip_next(zipobject *lz)
2111{
2112 Py_ssize_t i;
2113 Py_ssize_t tuplesize = lz->tuplesize;
2114 PyObject *result = lz->result;
2115 PyObject *it;
2116 PyObject *item;
2117 PyObject *olditem;
2118
2119 if (tuplesize == 0)
2120 return NULL;
2121 if (Py_REFCNT(result) == 1) {
2122 Py_INCREF(result);
2123 for (i=0 ; i < tuplesize ; i++) {
2124 it = PyTuple_GET_ITEM(lz->ittuple, i);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002125 item = (*Py_TYPE(it)->tp_iternext)(it);
2126 if (item == NULL) {
2127 Py_DECREF(result);
2128 return NULL;
2129 }
2130 olditem = PyTuple_GET_ITEM(result, i);
2131 PyTuple_SET_ITEM(result, i, item);
2132 Py_DECREF(olditem);
2133 }
2134 } else {
2135 result = PyTuple_New(tuplesize);
2136 if (result == NULL)
2137 return NULL;
2138 for (i=0 ; i < tuplesize ; i++) {
2139 it = PyTuple_GET_ITEM(lz->ittuple, i);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002140 item = (*Py_TYPE(it)->tp_iternext)(it);
2141 if (item == NULL) {
2142 Py_DECREF(result);
2143 return NULL;
2144 }
2145 PyTuple_SET_ITEM(result, i, item);
2146 }
2147 }
2148 return result;
2149}
Barry Warsawbd599b52000-08-03 15:45:29 +00002150
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002151PyDoc_STRVAR(zip_doc,
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002152"zip(iter1 [,iter2 [...]]) --> zip object\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002153\n\
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002154Return a zip object whose .__next__() method returns a tuple where\n\
2155the i-th element comes from the i-th iterable argument. The .__next__()\n\
2156method continues until the shortest iterable in the argument sequence\n\
Georg Brandlced51db2008-12-04 18:28:38 +00002157is exhausted and then it raises StopIteration.");
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002158
2159PyTypeObject PyZip_Type = {
2160 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2161 "zip", /* tp_name */
2162 sizeof(zipobject), /* tp_basicsize */
2163 0, /* tp_itemsize */
2164 /* methods */
2165 (destructor)zip_dealloc, /* tp_dealloc */
2166 0, /* tp_print */
2167 0, /* tp_getattr */
2168 0, /* tp_setattr */
Mark Dickinsone94c6792009-02-02 20:36:42 +00002169 0, /* tp_reserved */
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002170 0, /* tp_repr */
2171 0, /* tp_as_number */
2172 0, /* tp_as_sequence */
2173 0, /* tp_as_mapping */
2174 0, /* tp_hash */
2175 0, /* tp_call */
2176 0, /* tp_str */
2177 PyObject_GenericGetAttr, /* tp_getattro */
2178 0, /* tp_setattro */
2179 0, /* tp_as_buffer */
2180 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2181 Py_TPFLAGS_BASETYPE, /* tp_flags */
2182 zip_doc, /* tp_doc */
2183 (traverseproc)zip_traverse, /* tp_traverse */
2184 0, /* tp_clear */
2185 0, /* tp_richcompare */
2186 0, /* tp_weaklistoffset */
2187 PyObject_SelfIter, /* tp_iter */
2188 (iternextfunc)zip_next, /* tp_iternext */
2189 0, /* tp_methods */
2190 0, /* tp_members */
2191 0, /* tp_getset */
2192 0, /* tp_base */
2193 0, /* tp_dict */
2194 0, /* tp_descr_get */
2195 0, /* tp_descr_set */
2196 0, /* tp_dictoffset */
2197 0, /* tp_init */
2198 PyType_GenericAlloc, /* tp_alloc */
2199 zip_new, /* tp_new */
2200 PyObject_GC_Del, /* tp_free */
2201};
Barry Warsawbd599b52000-08-03 15:45:29 +00002202
2203
Guido van Rossum79f25d91997-04-29 20:08:16 +00002204static PyMethodDef builtin_methods[] = {
Guido van Rossum52cc1d82007-03-18 15:41:51 +00002205 {"__build_class__", (PyCFunction)builtin___build_class__,
2206 METH_VARARGS | METH_KEYWORDS, build_class_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002207 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002208 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002209 {"all", builtin_all, METH_O, all_doc},
2210 {"any", builtin_any, METH_O, any_doc},
Georg Brandl559e5d72008-06-11 18:37:52 +00002211 {"ascii", builtin_ascii, METH_O, ascii_doc},
Guido van Rossumcd16bf62007-06-13 18:07:49 +00002212 {"bin", builtin_bin, METH_O, bin_doc},
Neal Norwitzc2550c72007-08-31 04:17:51 +00002213 {"chr", builtin_chr, METH_VARARGS, chr_doc},
Guido van Rossumd8faa362007-04-27 19:54:29 +00002214 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002215 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2216 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2217 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2218 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00002219 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Eric Smith8c663262007-08-25 02:26:07 +00002220 {"format", builtin_format, METH_VARARGS, format_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002221 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2222 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2223 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2224 {"hash", builtin_hash, METH_O, hash_doc},
2225 {"hex", builtin_hex, METH_O, hex_doc},
2226 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00002227 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002228 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2229 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2230 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2231 {"len", builtin_len, METH_O, len_doc},
2232 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002233 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2234 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandla18af4e2007-04-21 15:47:16 +00002235 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002236 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002237 {"ord", builtin_ord, METH_O, ord_doc},
2238 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00002239 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002240 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002241 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002242 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002243 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002244 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002245 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002246 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002247};
2248
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002249PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002250"Built-in functions, exceptions, and other objects.\n\
2251\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002252Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002253
Martin v. Löwis1a214512008-06-11 05:26:20 +00002254static struct PyModuleDef builtinsmodule = {
2255 PyModuleDef_HEAD_INIT,
2256 "builtins",
2257 builtin_doc,
Christian Heimes6a27efa2008-10-30 21:48:26 +00002258 -1, /* multiple "initialization" just copies the module dict. */
Martin v. Löwis1a214512008-06-11 05:26:20 +00002259 builtin_methods,
2260 NULL,
2261 NULL,
2262 NULL,
2263 NULL
2264};
2265
2266
Guido van Rossum25ce5661997-08-02 03:10:38 +00002267PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002268_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002269{
Fred Drake5550de32000-06-20 04:54:19 +00002270 PyObject *mod, *dict, *debug;
Martin v. Löwis1a214512008-06-11 05:26:20 +00002271 mod = PyModule_Create(&builtinsmodule);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002272 if (mod == NULL)
2273 return NULL;
2274 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002275
Tim Peters7571a0f2003-03-23 17:52:28 +00002276#ifdef Py_TRACE_REFS
Georg Brandl1a3284e2007-12-02 09:40:06 +00002277 /* "builtins" exposes a number of statically allocated objects
Tim Peters7571a0f2003-03-23 17:52:28 +00002278 * that, before this code was added in 2.3, never showed up in
2279 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2280 * result, programs leaking references to None and False (etc)
2281 * couldn't be diagnosed by examining sys.getobjects(0).
2282 */
2283#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2284#else
2285#define ADD_TO_ALL(OBJECT) (void)0
2286#endif
2287
Tim Peters4b7625e2001-09-13 21:37:17 +00002288#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002289 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2290 return NULL; \
2291 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002292
2293 SETBUILTIN("None", Py_None);
2294 SETBUILTIN("Ellipsis", Py_Ellipsis);
2295 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002296 SETBUILTIN("False", Py_False);
2297 SETBUILTIN("True", Py_True);
2298 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbae07c92007-10-08 02:46:15 +00002299 SETBUILTIN("memoryview", &PyMemoryView_Type);
Christian Heimes9c4756e2008-05-26 13:22:05 +00002300 SETBUILTIN("bytearray", &PyByteArray_Type);
Christian Heimes72b710a2008-05-26 13:28:38 +00002301 SETBUILTIN("bytes", &PyBytes_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002302 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002303#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002304 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002305#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002306 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002307 SETBUILTIN("enumerate", &PyEnum_Type);
Raymond Hettinger17301e92008-03-13 00:19:26 +00002308 SETBUILTIN("filter", &PyFilter_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002309 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002310 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002311 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00002312 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002313 SETBUILTIN("list", &PyList_Type);
Raymond Hettingera6c60372008-03-13 01:26:19 +00002314 SETBUILTIN("map", &PyMap_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002315 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossum805365e2007-05-07 22:24:25 +00002316 SETBUILTIN("range", &PyRange_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002317 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002318 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002319 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002320 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Guido van Rossum572dbf82007-04-27 23:53:51 +00002321 SETBUILTIN("str", &PyUnicode_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002322 SETBUILTIN("super", &PySuper_Type);
2323 SETBUILTIN("tuple", &PyTuple_Type);
2324 SETBUILTIN("type", &PyType_Type);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002325 SETBUILTIN("zip", &PyZip_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002326 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002327 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2328 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002329 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002330 }
2331 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002332
Guido van Rossum25ce5661997-08-02 03:10:38 +00002333 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002334#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002335#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002336}