blob: 7a27fba42ec997c5329ed536c77c04d5c5d7d1e8 [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 *
Benjamin Petersonf5b52242009-03-02 23:31:26 +0000497source_as_string(PyObject *cmd, char *funcname, char *what, PyCompilerFlags *cf)
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)) {
Benjamin Petersonf5b52242009-03-02 23:31:26 +0000503 cf->cf_flags |= PyCF_IGNORE_COOKIE;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000504 cmd = _PyUnicode_AsDefaultEncodedString(cmd, NULL);
505 if (cmd == NULL)
506 return NULL;
507 }
Guido van Rossuma4b8d1d2007-08-27 15:02:28 +0000508 else if (!PyObject_CheckReadBuffer(cmd)) {
Georg Brandl2cabc562008-08-28 07:57:16 +0000509 PyErr_Format(PyExc_TypeError,
510 "%s() arg 1 must be a %s object",
511 funcname, what);
Guido van Rossuma4b8d1d2007-08-27 15:02:28 +0000512 return NULL;
513 }
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000514 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &size) < 0) {
515 return NULL;
516 }
517 if (strlen(str) != size) {
518 PyErr_SetString(PyExc_TypeError,
519 "source code string cannot contain null bytes");
520 return NULL;
521 }
522 return str;
523}
524
Guido van Rossum79f25d91997-04-29 20:08:16 +0000525static PyObject *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000526builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000527{
528 char *str;
529 char *filename;
530 char *startstr;
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000531 int mode = -1;
Tim Peters6cd6a822001-08-17 22:11:27 +0000532 int dont_inherit = 0;
533 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000534 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000535 PyObject *cmd;
Guido van Rossumd8faa362007-04-27 19:54:29 +0000536 static char *kwlist[] = {"source", "filename", "mode", "flags",
537 "dont_inherit", NULL};
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000538 int start[] = {Py_file_input, Py_eval_input, Py_single_input};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000539
Guido van Rossumd8faa362007-04-27 19:54:29 +0000540 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
541 kwlist, &cmd, &filename, &startstr,
542 &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000543 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000544
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000545 cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000546
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000547 if (supplied_flags &
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000548 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000549 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000550 PyErr_SetString(PyExc_ValueError,
551 "compile(): unrecognised flags");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000552 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000553 }
554 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
555
Tim Peters6cd6a822001-08-17 22:11:27 +0000556 if (!dont_inherit) {
557 PyEval_MergeCompilerFlags(&cf);
558 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000559
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000560 if (strcmp(startstr, "exec") == 0)
561 mode = 0;
562 else if (strcmp(startstr, "eval") == 0)
563 mode = 1;
564 else if (strcmp(startstr, "single") == 0)
565 mode = 2;
566 else {
567 PyErr_SetString(PyExc_ValueError,
568 "compile() arg 3 must be 'exec', 'eval' or 'single'");
569 return NULL;
570 }
571
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000572 if (PyAST_Check(cmd)) {
573 PyObject *result;
574 if (supplied_flags & PyCF_ONLY_AST) {
575 Py_INCREF(cmd);
576 result = cmd;
577 }
578 else {
579 PyArena *arena;
580 mod_ty mod;
581
582 arena = PyArena_New();
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000583 mod = PyAST_obj2mod(cmd, arena, mode);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000584 if (mod == NULL) {
585 PyArena_Free(arena);
586 return NULL;
587 }
588 result = (PyObject*)PyAST_Compile(mod, filename,
589 &cf, arena);
590 PyArena_Free(arena);
591 }
592 return result;
593 }
594
Benjamin Petersonf5b52242009-03-02 23:31:26 +0000595 str = source_as_string(cmd, "compile", "string, bytes, AST or code", &cf);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000596 if (str == NULL)
597 return NULL;
598
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000599 return Py_CompileStringFlags(str, filename, start[mode], &cf);
Guido van Rossum5b722181993-03-30 17:46:03 +0000600}
601
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000602PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000603"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000604\n\
605Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000606into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000607The filename will be used for run-time error messages.\n\
608The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000609single (interactive) statement, or 'eval' to compile an expression.\n\
610The flags argument, if present, controls which future statements influence\n\
611the compilation of the code.\n\
612The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
613the effects of any future statements in effect in the code calling\n\
614compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000615in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000616
Guido van Rossum79f25d91997-04-29 20:08:16 +0000617static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000618builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000619{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000620 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000621
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000622 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000623 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000624 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000625}
626
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000627PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000628"dir([object]) -> list of strings\n"
629"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000630"If called without an argument, return the names in the current scope.\n"
631"Else, return an alphabetized list of names comprising (some of) the attributes\n"
632"of the given object, and of attributes reachable from it.\n"
633"If the object supplies a method named __dir__, it will be used; otherwise\n"
634"the default dir() logic is used and returns:\n"
635" for a module object: the module's attributes.\n"
636" for a class object: its attributes, and recursively the attributes\n"
637" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000638" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000639" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000640
Guido van Rossum79f25d91997-04-29 20:08:16 +0000641static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000642builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000643{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000644 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000645
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000646 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000647 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000648 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000649}
650
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000651PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000652"divmod(x, y) -> (div, mod)\n\
653\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000654Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000655
656
Guido van Rossum79f25d91997-04-29 20:08:16 +0000657static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000658builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000659{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000660 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000661 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000662 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000663 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000664
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000665 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000666 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000667 if (locals != Py_None && !PyMapping_Check(locals)) {
668 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000669 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000670 }
671 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000672 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000673 "globals must be a real dict; try eval(expr, {}, mapping)"
674 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000675 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000676 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000677 if (globals == Py_None) {
678 globals = PyEval_GetGlobals();
679 if (locals == Py_None)
680 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000681 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000682 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000683 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000684
Georg Brandl77c85e62005-09-15 10:46:13 +0000685 if (globals == NULL || locals == NULL) {
686 PyErr_SetString(PyExc_TypeError,
687 "eval must be given globals and locals "
688 "when called without a frame");
689 return NULL;
690 }
691
Guido van Rossum79f25d91997-04-29 20:08:16 +0000692 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
693 if (PyDict_SetItemString(globals, "__builtins__",
694 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000695 return NULL;
696 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000697
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000698 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000699 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000700 PyErr_SetString(PyExc_TypeError,
701 "code object passed to eval() may not contain free variables");
702 return NULL;
703 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000704 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000705 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000706
Benjamin Petersonf5b52242009-03-02 23:31:26 +0000707 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
708 str = source_as_string(cmd, "eval", "string, bytes or code", &cf);
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000709 if (str == NULL)
Guido van Rossum94390a41992-08-14 15:14:30 +0000710 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000711
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000712 while (*str == ' ' || *str == '\t')
713 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000714
Tim Peters9fa96be2001-08-17 23:04:59 +0000715 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000716 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
717 Py_XDECREF(tmp);
718 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000719}
720
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000721PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000722"eval(source[, globals[, locals]]) -> value\n\
723\n\
724Evaluate the source in the context of globals and locals.\n\
725The source may be a string representing a Python expression\n\
726or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000727The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000728defaulting to the current globals and locals.\n\
729If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000730
Georg Brandl7cae87c2006-09-06 06:51:57 +0000731static PyObject *
732builtin_exec(PyObject *self, PyObject *args)
733{
734 PyObject *v;
735 PyObject *prog, *globals = Py_None, *locals = Py_None;
736 int plain = 0;
737
Raymond Hettinger5d1ff002009-01-06 09:37:13 +0000738 if (!PyArg_UnpackTuple(args, "exec", 1, 3, &prog, &globals, &locals))
Georg Brandl7cae87c2006-09-06 06:51:57 +0000739 return NULL;
740
741 if (globals == Py_None) {
742 globals = PyEval_GetGlobals();
743 if (locals == Py_None) {
744 locals = PyEval_GetLocals();
745 plain = 1;
746 }
747 if (!globals || !locals) {
748 PyErr_SetString(PyExc_SystemError,
749 "globals and locals cannot be NULL");
750 return NULL;
751 }
752 }
753 else if (locals == Py_None)
754 locals = globals;
Georg Brandl2cabc562008-08-28 07:57:16 +0000755
Georg Brandl7cae87c2006-09-06 06:51:57 +0000756 if (!PyDict_Check(globals)) {
757 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
758 globals->ob_type->tp_name);
759 return NULL;
760 }
761 if (!PyMapping_Check(locals)) {
762 PyErr_Format(PyExc_TypeError,
763 "arg 3 must be a mapping or None, not %.100s",
764 locals->ob_type->tp_name);
765 return NULL;
766 }
767 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
768 if (PyDict_SetItemString(globals, "__builtins__",
769 PyEval_GetBuiltins()) != 0)
770 return NULL;
771 }
772
773 if (PyCode_Check(prog)) {
774 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
775 PyErr_SetString(PyExc_TypeError,
776 "code object passed to exec() may not "
777 "contain free variables");
778 return NULL;
779 }
780 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
781 }
Georg Brandl7cae87c2006-09-06 06:51:57 +0000782 else {
Benjamin Petersonf5b52242009-03-02 23:31:26 +0000783 char *str;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000784 PyCompilerFlags cf;
Benjamin Petersonf5b52242009-03-02 23:31:26 +0000785 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
786 str = source_as_string(prog, "exec",
787 "string, bytes or code", &cf);
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000788 if (str == NULL)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000789 return NULL;
790 if (PyEval_MergeCompilerFlags(&cf))
791 v = PyRun_StringFlags(str, Py_file_input, globals,
792 locals, &cf);
793 else
794 v = PyRun_String(str, Py_file_input, globals, locals);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000795 }
796 if (v == NULL)
797 return NULL;
798 Py_DECREF(v);
799 Py_RETURN_NONE;
800}
801
802PyDoc_STRVAR(exec_doc,
803"exec(object[, globals[, locals]])\n\
804\n\
Benjamin Peterson38090262009-01-04 15:30:39 +0000805Read and execute code from a object, which can be a string or a code\n\
806object.\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000807The globals and locals are dictionaries, defaulting to the current\n\
808globals and locals. If only globals is given, locals defaults to it.");
809
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000810
Guido van Rossum79f25d91997-04-29 20:08:16 +0000811static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000812builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000813{
Neal Norwitz6ea45d32007-08-26 04:19:43 +0000814 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000815 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000816
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000817 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000818 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000819
Martin v. Löwis5b222132007-06-10 09:51:05 +0000820 if (!PyUnicode_Check(name)) {
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000821 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000822 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000823 return NULL;
824 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000825 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000826 if (result == NULL && dflt != NULL &&
827 PyErr_ExceptionMatches(PyExc_AttributeError))
828 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000829 PyErr_Clear();
830 Py_INCREF(dflt);
831 result = dflt;
832 }
833 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000834}
835
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000836PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000837"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000838\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000839Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
840When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000841exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000842
843
Guido van Rossum79f25d91997-04-29 20:08:16 +0000844static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000845builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000846{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000847 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000848
Guido van Rossum79f25d91997-04-29 20:08:16 +0000849 d = PyEval_GetGlobals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000850 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000851 return d;
852}
853
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000854PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000855"globals() -> dictionary\n\
856\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000857Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000858
859
Guido van Rossum79f25d91997-04-29 20:08:16 +0000860static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000861builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000862{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000863 PyObject *v;
864 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000865
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000866 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000867 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000868 if (!PyUnicode_Check(name)) {
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000869 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000870 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000871 return NULL;
872 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000873 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000874 if (v == NULL) {
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000875 if (!PyErr_ExceptionMatches(PyExc_Exception))
876 return NULL;
877 else {
878 PyErr_Clear();
879 Py_INCREF(Py_False);
880 return Py_False;
881 }
Guido van Rossum9bfef441993-03-29 10:43:31 +0000882 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000883 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000884 Py_INCREF(Py_True);
885 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000886}
887
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000888PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000889"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000890\n\
891Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000892(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000893
894
Guido van Rossum79f25d91997-04-29 20:08:16 +0000895static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000896builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000897{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000898 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000899}
900
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000901PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000902"id(object) -> integer\n\
903\n\
904Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000905simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000906
907
Raymond Hettingera6c60372008-03-13 01:26:19 +0000908/* map object ************************************************************/
909
910typedef struct {
911 PyObject_HEAD
912 PyObject *iters;
913 PyObject *func;
914} mapobject;
915
916PyTypeObject PyMap_Type;
917
Guido van Rossum79f25d91997-04-29 20:08:16 +0000918static PyObject *
Raymond Hettingera6c60372008-03-13 01:26:19 +0000919map_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000920{
Raymond Hettingera6c60372008-03-13 01:26:19 +0000921 PyObject *it, *iters, *func;
922 mapobject *lz;
923 Py_ssize_t numargs, i;
924
925 if (type == &PyMap_Type && !_PyArg_NoKeywords("map()", kwds))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000926 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000927
928 numargs = PyTuple_Size(args);
929 if (numargs < 2) {
930 PyErr_SetString(PyExc_TypeError,
931 "map() must have at least two arguments.");
Tim Peters4e9afdc2001-05-03 23:54:49 +0000932 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000933 }
934
935 iters = PyTuple_New(numargs-1);
936 if (iters == NULL)
937 return NULL;
938
939 for (i=1 ; i<numargs ; i++) {
940 /* Get iterator. */
941 it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
942 if (it == NULL) {
943 Py_DECREF(iters);
944 return NULL;
945 }
946 PyTuple_SET_ITEM(iters, i-1, it);
947 }
948
949 /* create mapobject structure */
950 lz = (mapobject *)type->tp_alloc(type, 0);
951 if (lz == NULL) {
952 Py_DECREF(iters);
953 return NULL;
954 }
955 lz->iters = iters;
956 func = PyTuple_GET_ITEM(args, 0);
957 Py_INCREF(func);
958 lz->func = func;
959
960 return (PyObject *)lz;
961}
962
963static void
964map_dealloc(mapobject *lz)
965{
966 PyObject_GC_UnTrack(lz);
967 Py_XDECREF(lz->iters);
968 Py_XDECREF(lz->func);
969 Py_TYPE(lz)->tp_free(lz);
970}
971
972static int
973map_traverse(mapobject *lz, visitproc visit, void *arg)
974{
975 Py_VISIT(lz->iters);
976 Py_VISIT(lz->func);
977 return 0;
978}
979
980static PyObject *
981map_next(mapobject *lz)
982{
983 PyObject *val;
984 PyObject *argtuple;
985 PyObject *result;
986 Py_ssize_t numargs, i;
987
988 numargs = PyTuple_Size(lz->iters);
989 argtuple = PyTuple_New(numargs);
990 if (argtuple == NULL)
991 return NULL;
992
993 for (i=0 ; i<numargs ; i++) {
994 val = PyIter_Next(PyTuple_GET_ITEM(lz->iters, i));
995 if (val == NULL) {
996 Py_DECREF(argtuple);
997 return NULL;
998 }
999 PyTuple_SET_ITEM(argtuple, i, val);
1000 }
1001 result = PyObject_Call(lz->func, argtuple, NULL);
1002 Py_DECREF(argtuple);
Tim Peters4e9afdc2001-05-03 23:54:49 +00001003 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001004}
1005
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001006PyDoc_STRVAR(map_doc,
Raymond Hettingera6c60372008-03-13 01:26:19 +00001007"map(func, *iterables) --> map object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001008\n\
Raymond Hettingera6c60372008-03-13 01:26:19 +00001009Make an iterator that computes the function using arguments from\n\
1010each of the iterables. Stops when the shortest iterable is exhausted.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001011
Raymond Hettingera6c60372008-03-13 01:26:19 +00001012PyTypeObject PyMap_Type = {
1013 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1014 "map", /* tp_name */
1015 sizeof(mapobject), /* tp_basicsize */
1016 0, /* tp_itemsize */
1017 /* methods */
1018 (destructor)map_dealloc, /* tp_dealloc */
1019 0, /* tp_print */
1020 0, /* tp_getattr */
1021 0, /* tp_setattr */
Mark Dickinsone94c6792009-02-02 20:36:42 +00001022 0, /* tp_reserved */
Raymond Hettingera6c60372008-03-13 01:26:19 +00001023 0, /* tp_repr */
1024 0, /* tp_as_number */
1025 0, /* tp_as_sequence */
1026 0, /* tp_as_mapping */
1027 0, /* tp_hash */
1028 0, /* tp_call */
1029 0, /* tp_str */
1030 PyObject_GenericGetAttr, /* tp_getattro */
1031 0, /* tp_setattro */
1032 0, /* tp_as_buffer */
1033 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1034 Py_TPFLAGS_BASETYPE, /* tp_flags */
1035 map_doc, /* tp_doc */
1036 (traverseproc)map_traverse, /* tp_traverse */
1037 0, /* tp_clear */
1038 0, /* tp_richcompare */
1039 0, /* tp_weaklistoffset */
1040 PyObject_SelfIter, /* tp_iter */
1041 (iternextfunc)map_next, /* tp_iternext */
1042 0, /* tp_methods */
1043 0, /* tp_members */
1044 0, /* tp_getset */
1045 0, /* tp_base */
1046 0, /* tp_dict */
1047 0, /* tp_descr_get */
1048 0, /* tp_descr_set */
1049 0, /* tp_dictoffset */
1050 0, /* tp_init */
1051 PyType_GenericAlloc, /* tp_alloc */
1052 map_new, /* tp_new */
1053 PyObject_GC_Del, /* tp_free */
1054};
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001055
Guido van Rossum79f25d91997-04-29 20:08:16 +00001056static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +00001057builtin_next(PyObject *self, PyObject *args)
1058{
1059 PyObject *it, *res;
1060 PyObject *def = NULL;
1061
1062 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1063 return NULL;
1064 if (!PyIter_Check(it)) {
1065 PyErr_Format(PyExc_TypeError,
Georg Brandlaaa63922008-04-30 19:47:01 +00001066 "%.200s object is not an iterator",
1067 it->ob_type->tp_name);
Georg Brandla18af4e2007-04-21 15:47:16 +00001068 return NULL;
1069 }
1070
1071 res = (*it->ob_type->tp_iternext)(it);
Georg Brandlaaa63922008-04-30 19:47:01 +00001072 if (res != NULL) {
1073 return res;
1074 } else if (def != NULL) {
1075 if (PyErr_Occurred()) {
1076 if(!PyErr_ExceptionMatches(PyExc_StopIteration))
Georg Brandla18af4e2007-04-21 15:47:16 +00001077 return NULL;
1078 PyErr_Clear();
Georg Brandla18af4e2007-04-21 15:47:16 +00001079 }
Georg Brandlaaa63922008-04-30 19:47:01 +00001080 Py_INCREF(def);
1081 return def;
1082 } else if (PyErr_Occurred()) {
1083 return NULL;
1084 } else {
1085 PyErr_SetNone(PyExc_StopIteration);
1086 return NULL;
Georg Brandla18af4e2007-04-21 15:47:16 +00001087 }
Georg Brandla18af4e2007-04-21 15:47:16 +00001088}
1089
1090PyDoc_STRVAR(next_doc,
1091"next(iterator[, default])\n\
1092\n\
1093Return the next item from the iterator. If default is given and the iterator\n\
1094is exhausted, it is returned instead of raising StopIteration.");
1095
1096
1097static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001098builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001099{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001100 PyObject *v;
1101 PyObject *name;
1102 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001103
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001104 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001105 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001106 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001107 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001108 Py_INCREF(Py_None);
1109 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001110}
1111
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001112PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001113"setattr(object, name, value)\n\
1114\n\
1115Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001116``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001117
1118
Guido van Rossum79f25d91997-04-29 20:08:16 +00001119static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001120builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001121{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001122 PyObject *v;
1123 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001124
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001125 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001126 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001127 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001128 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001129 Py_INCREF(Py_None);
1130 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001131}
1132
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001133PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001134"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001135\n\
1136Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001137``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001138
1139
Guido van Rossum79f25d91997-04-29 20:08:16 +00001140static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001141builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001142{
Guido van Rossum9bfef441993-03-29 10:43:31 +00001143 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001144
Guido van Rossum79f25d91997-04-29 20:08:16 +00001145 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001146 if (x == -1)
1147 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001148 return PyLong_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001149}
1150
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001151PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001152"hash(object) -> integer\n\
1153\n\
1154Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001155the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001156
1157
Guido van Rossum79f25d91997-04-29 20:08:16 +00001158static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001159builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001160{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001161 return PyNumber_ToBase(v, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001162}
1163
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001164PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001165"hex(number) -> string\n\
1166\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001167Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001168
1169
Guido van Rossum79f25d91997-04-29 20:08:16 +00001170static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001171builtin_iter(PyObject *self, PyObject *args)
1172{
1173 PyObject *v, *w = NULL;
1174
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001175 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001176 return NULL;
1177 if (w == NULL)
1178 return PyObject_GetIter(v);
1179 if (!PyCallable_Check(v)) {
1180 PyErr_SetString(PyExc_TypeError,
1181 "iter(v, w): v must be callable");
1182 return NULL;
1183 }
1184 return PyCallIter_New(v, w);
1185}
1186
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001187PyDoc_STRVAR(iter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001188"iter(iterable) -> iterator\n\
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001189iter(callable, sentinel) -> iterator\n\
1190\n\
1191Get an iterator from an object. In the first form, the argument must\n\
1192supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001193In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001194
1195
1196static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001197builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001198{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001199 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001200
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001201 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001202 if (res < 0 && PyErr_Occurred())
1203 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001204 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001205}
1206
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001207PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001208"len(object) -> integer\n\
1209\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001210Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001211
1212
Guido van Rossum79f25d91997-04-29 20:08:16 +00001213static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001214builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001215{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001216 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001217
Guido van Rossum79f25d91997-04-29 20:08:16 +00001218 d = PyEval_GetLocals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00001219 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001220 return d;
1221}
1222
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001223PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001224"locals() -> dictionary\n\
1225\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001226Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001227
1228
Guido van Rossum79f25d91997-04-29 20:08:16 +00001229static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001230min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001231{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001232 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001233 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001234
Guido van Rossum79f25d91997-04-29 20:08:16 +00001235 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001236 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001237 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001238 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001239
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001240 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1241 keyfunc = PyDict_GetItemString(kwds, "key");
1242 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001243 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001244 "%s() got an unexpected keyword argument", name);
1245 return NULL;
1246 }
Christian Heimesbbffeb62008-01-24 09:42:52 +00001247 Py_INCREF(keyfunc);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001248 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001249
Tim Petersc3074532001-05-03 07:00:32 +00001250 it = PyObject_GetIter(v);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001251 if (it == NULL) {
1252 Py_XDECREF(keyfunc);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001253 return NULL;
Christian Heimesbbffeb62008-01-24 09:42:52 +00001254 }
Tim Petersc3074532001-05-03 07:00:32 +00001255
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001256 maxitem = NULL; /* the result */
1257 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001258 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001259 /* get the value from the key function */
1260 if (keyfunc != NULL) {
1261 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1262 if (val == NULL)
1263 goto Fail_it_item;
1264 }
1265 /* no key function; the value is the item */
1266 else {
1267 val = item;
1268 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001269 }
Tim Petersc3074532001-05-03 07:00:32 +00001270
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001271 /* maximum value and item are unset; set them */
1272 if (maxval == NULL) {
1273 maxitem = item;
1274 maxval = val;
1275 }
1276 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001277 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001278 int cmp = PyObject_RichCompareBool(val, maxval, op);
1279 if (cmp < 0)
1280 goto Fail_it_item_and_val;
1281 else if (cmp > 0) {
1282 Py_DECREF(maxval);
1283 Py_DECREF(maxitem);
1284 maxval = val;
1285 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001286 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001287 else {
1288 Py_DECREF(item);
1289 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001290 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001291 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001292 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001293 if (PyErr_Occurred())
1294 goto Fail_it;
1295 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001296 PyErr_Format(PyExc_ValueError,
1297 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001298 assert(maxitem == NULL);
1299 }
1300 else
1301 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001302 Py_DECREF(it);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001303 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001304 return maxitem;
1305
1306Fail_it_item_and_val:
1307 Py_DECREF(val);
1308Fail_it_item:
1309 Py_DECREF(item);
1310Fail_it:
1311 Py_XDECREF(maxval);
1312 Py_XDECREF(maxitem);
1313 Py_DECREF(it);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001314 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001315 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001316}
1317
Guido van Rossum79f25d91997-04-29 20:08:16 +00001318static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001319builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001320{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001321 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001322}
1323
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001324PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001325"min(iterable[, key=func]) -> value\n\
1326min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001327\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001328With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001329With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001330
1331
Guido van Rossum79f25d91997-04-29 20:08:16 +00001332static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001333builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001334{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001335 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001336}
1337
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001338PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001339"max(iterable[, key=func]) -> value\n\
1340max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001341\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001342With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001343With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001344
1345
Guido van Rossum79f25d91997-04-29 20:08:16 +00001346static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001347builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001348{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001349 return PyNumber_ToBase(v, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001350}
1351
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001352PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001353"oct(number) -> string\n\
1354\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001355Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001356
1357
Guido van Rossum79f25d91997-04-29 20:08:16 +00001358static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001359builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001360{
Guido van Rossum09095f32000-03-10 23:00:52 +00001361 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001362 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001363
Christian Heimes72b710a2008-05-26 13:28:38 +00001364 if (PyBytes_Check(obj)) {
1365 size = PyBytes_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001366 if (size == 1) {
Christian Heimes72b710a2008-05-26 13:28:38 +00001367 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
Christian Heimes217cfd12007-12-02 14:31:20 +00001368 return PyLong_FromLong(ord);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001369 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001370 }
1371 else if (PyUnicode_Check(obj)) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001372 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001373 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001374 ord = (long)*PyUnicode_AS_UNICODE(obj);
Christian Heimes217cfd12007-12-02 14:31:20 +00001375 return PyLong_FromLong(ord);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001376 }
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001377#ifndef Py_UNICODE_WIDE
1378 if (size == 2) {
1379 /* Decode a valid surrogate pair */
1380 int c0 = PyUnicode_AS_UNICODE(obj)[0];
1381 int c1 = PyUnicode_AS_UNICODE(obj)[1];
1382 if (0xD800 <= c0 && c0 <= 0xDBFF &&
1383 0xDC00 <= c1 && c1 <= 0xDFFF) {
1384 ord = ((((c0 & 0x03FF) << 10) | (c1 & 0x03FF)) +
1385 0x00010000);
Christian Heimes217cfd12007-12-02 14:31:20 +00001386 return PyLong_FromLong(ord);
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001387 }
1388 }
1389#endif
Guido van Rossum6f376c42007-05-24 14:31:33 +00001390 }
Christian Heimes9c4756e2008-05-26 13:22:05 +00001391 else if (PyByteArray_Check(obj)) {
Guido van Rossum98f97462007-04-13 03:31:13 +00001392 /* XXX Hopefully this is temporary */
Christian Heimes9c4756e2008-05-26 13:22:05 +00001393 size = PyByteArray_GET_SIZE(obj);
Guido van Rossum98f97462007-04-13 03:31:13 +00001394 if (size == 1) {
Christian Heimes9c4756e2008-05-26 13:22:05 +00001395 ord = (long)((unsigned char)*PyByteArray_AS_STRING(obj));
Christian Heimes217cfd12007-12-02 14:31:20 +00001396 return PyLong_FromLong(ord);
Guido van Rossum98f97462007-04-13 03:31:13 +00001397 }
1398 }
1399 else {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001400 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001401 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001402 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001403 return NULL;
1404 }
1405
Guido van Rossumad991772001-01-12 16:03:05 +00001406 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001407 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001408 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001409 size);
1410 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001411}
1412
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001413PyDoc_VAR(ord_doc) = PyDoc_STR(
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001414"ord(c) -> integer\n\
1415\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001416Return the integer ordinal of a one-character string."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001417)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001418#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001419PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001420"\nA valid surrogate pair is also accepted."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001421)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001422#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001423;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001424
1425
Guido van Rossum79f25d91997-04-29 20:08:16 +00001426static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001427builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001428{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001429 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001430
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001431 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001432 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001433 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001434}
1435
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001436PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001437"pow(x, y[, z]) -> number\n\
1438\n\
1439With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001440equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001441
1442
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001443
Guido van Rossum34343512006-11-30 22:13:52 +00001444static PyObject *
1445builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1446{
1447 static char *kwlist[] = {"sep", "end", "file", 0};
Georg Brandl257d3d92007-02-26 10:35:10 +00001448 static PyObject *dummy_args;
Guido van Rossum34343512006-11-30 22:13:52 +00001449 PyObject *sep = NULL, *end = NULL, *file = NULL;
1450 int i, err;
1451
Georg Brandl257d3d92007-02-26 10:35:10 +00001452 if (dummy_args == NULL) {
1453 if (!(dummy_args = PyTuple_New(0)))
1454 return NULL;
1455 }
Georg Brandl88fc6642007-02-09 21:28:07 +00001456 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
Guido van Rossum34343512006-11-30 22:13:52 +00001457 kwlist, &sep, &end, &file))
Christian Heimesfef9bba2007-11-13 15:24:14 +00001458 return NULL;
1459 if (file == NULL || file == Py_None) {
Guido van Rossum34343512006-11-30 22:13:52 +00001460 file = PySys_GetObject("stdout");
Christian Heimesfef9bba2007-11-13 15:24:14 +00001461 /* sys.stdout may be None when FILE* stdout isn't connected */
1462 if (file == Py_None)
1463 Py_RETURN_NONE;
1464 }
Guido van Rossum34343512006-11-30 22:13:52 +00001465
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001466 if (sep && sep != Py_None && !PyUnicode_Check(sep)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001467 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001468 "sep must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001469 sep->ob_type->tp_name);
1470 return NULL;
1471 }
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001472 if (end && end != Py_None && !PyUnicode_Check(end)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001473 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001474 "end must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001475 end->ob_type->tp_name);
1476 return NULL;
1477 }
Guido van Rossum34343512006-11-30 22:13:52 +00001478
1479 for (i = 0; i < PyTuple_Size(args); i++) {
1480 if (i > 0) {
1481 if (sep == NULL || sep == Py_None)
1482 err = PyFile_WriteString(" ", file);
1483 else
1484 err = PyFile_WriteObject(sep, file,
1485 Py_PRINT_RAW);
1486 if (err)
1487 return NULL;
1488 }
1489 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1490 Py_PRINT_RAW);
1491 if (err)
1492 return NULL;
1493 }
1494
1495 if (end == NULL || end == Py_None)
1496 err = PyFile_WriteString("\n", file);
1497 else
1498 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1499 if (err)
1500 return NULL;
1501
1502 Py_RETURN_NONE;
1503}
1504
1505PyDoc_STRVAR(print_doc,
Georg Brandlcd5da7d2008-02-01 15:47:37 +00001506"print(value, ..., sep=' ', end='\\n', file=sys.stdout)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001507\n\
1508Prints the values to a stream, or to sys.stdout by default.\n\
1509Optional keyword arguments:\n\
1510file: a file-like object (stream); defaults to the current sys.stdout.\n\
1511sep: string inserted between values, default a space.\n\
1512end: string appended after the last value, default a newline.");
1513
1514
Guido van Rossuma88a0332007-02-26 16:59:55 +00001515static PyObject *
1516builtin_input(PyObject *self, PyObject *args)
1517{
Guido van Rossumeba76962007-05-27 09:13:28 +00001518 PyObject *promptarg = NULL;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001519 PyObject *fin = PySys_GetObject("stdin");
1520 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossumeba76962007-05-27 09:13:28 +00001521 PyObject *ferr = PySys_GetObject("stderr");
1522 PyObject *tmp;
1523 long fd;
1524 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001525
Guido van Rossumeba76962007-05-27 09:13:28 +00001526 /* Parse arguments */
1527 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg))
Guido van Rossuma88a0332007-02-26 16:59:55 +00001528 return NULL;
1529
Guido van Rossumeba76962007-05-27 09:13:28 +00001530 /* Check that stdin/out/err are intact */
Christian Heimes2be03732007-11-15 02:26:46 +00001531 if (fin == NULL || fin == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001532 PyErr_SetString(PyExc_RuntimeError,
1533 "input(): lost sys.stdin");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001534 return NULL;
1535 }
Christian Heimes2be03732007-11-15 02:26:46 +00001536 if (fout == NULL || fout == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001537 PyErr_SetString(PyExc_RuntimeError,
1538 "input(): lost sys.stdout");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001539 return NULL;
1540 }
Christian Heimes2be03732007-11-15 02:26:46 +00001541 if (ferr == NULL || ferr == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001542 PyErr_SetString(PyExc_RuntimeError,
1543 "input(): lost sys.stderr");
1544 return NULL;
1545 }
1546
1547 /* First of all, flush stderr */
1548 tmp = PyObject_CallMethod(ferr, "flush", "");
1549 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001550 PyErr_Clear();
1551 else
1552 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001553
1554 /* We should only use (GNU) readline if Python's sys.stdin and
1555 sys.stdout are the same as C's stdin and stdout, because we
1556 need to pass it those. */
1557 tmp = PyObject_CallMethod(fin, "fileno", "");
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001558 if (tmp == NULL) {
1559 PyErr_Clear();
1560 tty = 0;
1561 }
1562 else {
Christian Heimes217cfd12007-12-02 14:31:20 +00001563 fd = PyLong_AsLong(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001564 Py_DECREF(tmp);
1565 if (fd < 0 && PyErr_Occurred())
1566 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001567 tty = fd == fileno(stdin) && isatty(fd);
1568 }
1569 if (tty) {
1570 tmp = PyObject_CallMethod(fout, "fileno", "");
1571 if (tmp == NULL)
1572 PyErr_Clear();
1573 else {
Christian Heimes217cfd12007-12-02 14:31:20 +00001574 fd = PyLong_AsLong(tmp);
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001575 Py_DECREF(tmp);
1576 if (fd < 0 && PyErr_Occurred())
1577 return NULL;
1578 tty = fd == fileno(stdout) && isatty(fd);
1579 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001580 }
1581
1582 /* If we're interactive, use (GNU) readline */
1583 if (tty) {
Guido van Rossuma88a0332007-02-26 16:59:55 +00001584 PyObject *po;
1585 char *prompt;
1586 char *s;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001587 PyObject *stdin_encoding;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001588 PyObject *result;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001589
1590 stdin_encoding = PyObject_GetAttrString(fin, "encoding");
1591 if (!stdin_encoding)
1592 /* stdin is a text stream, so it must have an
1593 encoding. */
1594 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001595 tmp = PyObject_CallMethod(fout, "flush", "");
1596 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001597 PyErr_Clear();
1598 else
1599 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001600 if (promptarg != NULL) {
Amaury Forgeot d'Arcd0db98f2008-09-21 21:49:01 +00001601 PyObject *stringpo;
1602 PyObject *stdout_encoding;
1603 stdout_encoding = PyObject_GetAttrString(fout,
1604 "encoding");
1605 if (stdout_encoding == NULL) {
1606 Py_DECREF(stdin_encoding);
1607 return NULL;
1608 }
1609 stringpo = PyObject_Str(promptarg);
1610 if (stringpo == NULL) {
1611 Py_DECREF(stdin_encoding);
1612 Py_DECREF(stdout_encoding);
1613 return NULL;
1614 }
1615 po = PyUnicode_AsEncodedString(stringpo,
1616 _PyUnicode_AsString(stdout_encoding), NULL);
1617 Py_DECREF(stdout_encoding);
1618 Py_DECREF(stringpo);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001619 if (po == NULL) {
1620 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001621 return NULL;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001622 }
Amaury Forgeot d'Arcd0db98f2008-09-21 21:49:01 +00001623 prompt = PyBytes_AsString(po);
Guido van Rossumeba76962007-05-27 09:13:28 +00001624 if (prompt == NULL) {
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001625 Py_DECREF(stdin_encoding);
Guido van Rossumeba76962007-05-27 09:13:28 +00001626 Py_DECREF(po);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001627 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001628 }
Guido van Rossuma88a0332007-02-26 16:59:55 +00001629 }
1630 else {
1631 po = NULL;
1632 prompt = "";
1633 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001634 s = PyOS_Readline(stdin, stdout, prompt);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001635 Py_XDECREF(po);
1636 if (s == NULL) {
1637 if (!PyErr_Occurred())
1638 PyErr_SetNone(PyExc_KeyboardInterrupt);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001639 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001640 return NULL;
1641 }
1642 if (*s == '\0') {
1643 PyErr_SetNone(PyExc_EOFError);
1644 result = NULL;
1645 }
1646 else { /* strip trailing '\n' */
1647 size_t len = strlen(s);
1648 if (len > PY_SSIZE_T_MAX) {
1649 PyErr_SetString(PyExc_OverflowError,
1650 "input: input too long");
1651 result = NULL;
1652 }
1653 else {
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001654 result = PyUnicode_Decode
1655 (s, len-1,
Marc-André Lemburg4cc0f242008-08-07 18:54:33 +00001656 _PyUnicode_AsString(stdin_encoding),
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001657 NULL);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001658 }
1659 }
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001660 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001661 PyMem_FREE(s);
1662 return result;
1663 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001664
1665 /* Fallback if we're not interactive */
1666 if (promptarg != NULL) {
1667 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0)
Guido van Rossuma88a0332007-02-26 16:59:55 +00001668 return NULL;
1669 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001670 tmp = PyObject_CallMethod(fout, "flush", "");
1671 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001672 PyErr_Clear();
1673 else
1674 Py_DECREF(tmp);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001675 return PyFile_GetLine(fin, -1);
1676}
1677
1678PyDoc_STRVAR(input_doc,
1679"input([prompt]) -> string\n\
1680\n\
1681Read a string from standard input. The trailing newline is stripped.\n\
1682If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1683On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1684is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001685
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001686
Guido van Rossum79f25d91997-04-29 20:08:16 +00001687static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001688builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001689{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001690 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001691}
1692
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001693PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001694"repr(object) -> string\n\
1695\n\
1696Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001697For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001698
1699
Guido van Rossum79f25d91997-04-29 20:08:16 +00001700static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001701builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001702{
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001703 static PyObject *round_str = NULL;
Mark Dickinson1124e712009-01-28 21:25:58 +00001704 PyObject *ndigits = NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001705 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001706 PyObject *number, *round;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001707
Mark Dickinson1124e712009-01-28 21:25:58 +00001708 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:round",
1709 kwlist, &number, &ndigits))
1710 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00001711
Christian Heimes90aa7642007-12-19 02:45:37 +00001712 if (Py_TYPE(number)->tp_dict == NULL) {
1713 if (PyType_Ready(Py_TYPE(number)) < 0)
Guido van Rossum15d3d042007-08-24 02:02:45 +00001714 return NULL;
1715 }
1716
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001717 if (round_str == NULL) {
Christian Heimesfe82e772008-01-28 02:38:20 +00001718 round_str = PyUnicode_InternFromString("__round__");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001719 if (round_str == NULL)
Alex Martelliae211f92007-08-22 23:21:33 +00001720 return NULL;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001721 }
1722
Christian Heimes90aa7642007-12-19 02:45:37 +00001723 round = _PyType_Lookup(Py_TYPE(number), round_str);
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001724 if (round == NULL) {
1725 PyErr_Format(PyExc_TypeError,
1726 "type %.100s doesn't define __round__ method",
Christian Heimes90aa7642007-12-19 02:45:37 +00001727 Py_TYPE(number)->tp_name);
Alex Martelliae211f92007-08-22 23:21:33 +00001728 return NULL;
1729 }
1730
Mark Dickinson1124e712009-01-28 21:25:58 +00001731 if (ndigits == NULL)
1732 return PyObject_CallFunction(round, "O", number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001733 else
Mark Dickinson1124e712009-01-28 21:25:58 +00001734 return PyObject_CallFunction(round, "OO", number, ndigits);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001735}
1736
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001737PyDoc_STRVAR(round_doc,
Mark Dickinson1124e712009-01-28 21:25:58 +00001738"round(number[, ndigits]) -> number\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001739\n\
1740Round a number to a given precision in decimal digits (default 0 digits).\n\
Mark Dickinson0d748c22008-07-05 11:29:03 +00001741This returns an int when called with one argument, otherwise the\n\
Georg Brandl809ddaa2008-07-01 20:39:59 +00001742same type as the number. ndigits may be negative.");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001743
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001744
Raymond Hettinger64958a12003-12-17 20:43:33 +00001745static PyObject *
1746builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1747{
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001748 PyObject *newlist, *v, *seq, *keyfunc=NULL, *newargs;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001749 PyObject *callable;
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001750 static char *kwlist[] = {"iterable", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001751 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001752
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001753 /* args 1-3 should match listsort in Objects/listobject.c */
1754 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted",
1755 kwlist, &seq, &keyfunc, &reverse))
Armin Rigo71d7e702005-09-20 18:13:03 +00001756 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001757
1758 newlist = PySequence_List(seq);
1759 if (newlist == NULL)
1760 return NULL;
1761
1762 callable = PyObject_GetAttrString(newlist, "sort");
1763 if (callable == NULL) {
1764 Py_DECREF(newlist);
1765 return NULL;
1766 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001767
Raymond Hettinger64958a12003-12-17 20:43:33 +00001768 newargs = PyTuple_GetSlice(args, 1, 4);
1769 if (newargs == NULL) {
1770 Py_DECREF(newlist);
1771 Py_DECREF(callable);
1772 return NULL;
1773 }
1774
1775 v = PyObject_Call(callable, newargs, kwds);
1776 Py_DECREF(newargs);
1777 Py_DECREF(callable);
1778 if (v == NULL) {
1779 Py_DECREF(newlist);
1780 return NULL;
1781 }
1782 Py_DECREF(v);
1783 return newlist;
1784}
1785
1786PyDoc_STRVAR(sorted_doc,
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001787"sorted(iterable, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001788
Guido van Rossum79f25d91997-04-29 20:08:16 +00001789static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001790builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001791{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001792 PyObject *v = NULL;
1793 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001794
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001795 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001796 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001797 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001798 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001799 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001800 if (!PyErr_Occurred())
1801 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001802 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001803 }
1804 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001805 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001806 }
1807 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001808 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001809 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001810 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001811 "vars() argument must have __dict__ attribute");
1812 return NULL;
1813 }
1814 }
1815 return d;
1816}
1817
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001818PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001819"vars([object]) -> dictionary\n\
1820\n\
1821Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001822With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001823
Alex Martellia70b1912003-04-22 08:12:33 +00001824static PyObject*
1825builtin_sum(PyObject *self, PyObject *args)
1826{
1827 PyObject *seq;
1828 PyObject *result = NULL;
1829 PyObject *temp, *item, *iter;
1830
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001831 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001832 return NULL;
1833
1834 iter = PyObject_GetIter(seq);
1835 if (iter == NULL)
1836 return NULL;
1837
1838 if (result == NULL) {
Christian Heimes217cfd12007-12-02 14:31:20 +00001839 result = PyLong_FromLong(0);
Alex Martellia70b1912003-04-22 08:12:33 +00001840 if (result == NULL) {
1841 Py_DECREF(iter);
1842 return NULL;
1843 }
1844 } else {
1845 /* reject string values for 'start' parameter */
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001846 if (PyUnicode_Check(result)) {
Alex Martellia70b1912003-04-22 08:12:33 +00001847 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001848 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001849 Py_DECREF(iter);
1850 return NULL;
1851 }
Christian Heimes9c4756e2008-05-26 13:22:05 +00001852 if (PyByteArray_Check(result)) {
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001853 PyErr_SetString(PyExc_TypeError,
1854 "sum() can't sum bytes [use b''.join(seq) instead]");
1855 Py_DECREF(iter);
1856 return NULL;
1857 }
1858
Alex Martelli41c9f882003-04-22 09:24:48 +00001859 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001860 }
1861
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001862#ifndef SLOW_SUM
1863 /* Fast addition by keeping temporary sums in C instead of new Python objects.
1864 Assumes all inputs are the same type. If the assumption fails, default
1865 to the more general routine.
1866 */
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001867 if (PyLong_CheckExact(result)) {
1868 int overflow;
1869 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
1870 /* If this already overflowed, don't even enter the loop. */
1871 if (overflow == 0) {
1872 Py_DECREF(result);
1873 result = NULL;
1874 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001875 while(result == NULL) {
1876 item = PyIter_Next(iter);
1877 if (item == NULL) {
1878 Py_DECREF(iter);
1879 if (PyErr_Occurred())
1880 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001881 return PyLong_FromLong(i_result);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001882 }
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001883 if (PyLong_CheckExact(item)) {
1884 long b = PyLong_AsLongAndOverflow(item, &overflow);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001885 long x = i_result + b;
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001886 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001887 i_result = x;
1888 Py_DECREF(item);
1889 continue;
1890 }
1891 }
1892 /* Either overflowed or is not an int. Restore real objects and process normally */
Christian Heimes217cfd12007-12-02 14:31:20 +00001893 result = PyLong_FromLong(i_result);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001894 temp = PyNumber_Add(result, item);
1895 Py_DECREF(result);
1896 Py_DECREF(item);
1897 result = temp;
1898 if (result == NULL) {
1899 Py_DECREF(iter);
1900 return NULL;
1901 }
1902 }
1903 }
1904
1905 if (PyFloat_CheckExact(result)) {
1906 double f_result = PyFloat_AS_DOUBLE(result);
1907 Py_DECREF(result);
1908 result = NULL;
1909 while(result == NULL) {
1910 item = PyIter_Next(iter);
1911 if (item == NULL) {
1912 Py_DECREF(iter);
1913 if (PyErr_Occurred())
1914 return NULL;
1915 return PyFloat_FromDouble(f_result);
1916 }
1917 if (PyFloat_CheckExact(item)) {
Georg Brandlf08a9dd2008-06-10 16:57:31 +00001918 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001919 f_result += PyFloat_AS_DOUBLE(item);
1920 PyFPE_END_PROTECT(f_result)
1921 Py_DECREF(item);
1922 continue;
1923 }
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001924 if (PyLong_CheckExact(item)) {
1925 long value;
1926 int overflow;
1927 value = PyLong_AsLongAndOverflow(item, &overflow);
1928 if (!overflow) {
Georg Brandlf08a9dd2008-06-10 16:57:31 +00001929 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001930 f_result += (double)value;
1931 PyFPE_END_PROTECT(f_result)
1932 Py_DECREF(item);
1933 continue;
1934 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001935 }
1936 result = PyFloat_FromDouble(f_result);
1937 temp = PyNumber_Add(result, item);
1938 Py_DECREF(result);
1939 Py_DECREF(item);
1940 result = temp;
1941 if (result == NULL) {
1942 Py_DECREF(iter);
1943 return NULL;
1944 }
1945 }
1946 }
1947#endif
1948
Alex Martellia70b1912003-04-22 08:12:33 +00001949 for(;;) {
1950 item = PyIter_Next(iter);
1951 if (item == NULL) {
1952 /* error, or end-of-sequence */
1953 if (PyErr_Occurred()) {
1954 Py_DECREF(result);
1955 result = NULL;
1956 }
1957 break;
1958 }
Alex Martellia253e182003-10-25 23:24:14 +00001959 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001960 Py_DECREF(result);
1961 Py_DECREF(item);
1962 result = temp;
1963 if (result == NULL)
1964 break;
1965 }
1966 Py_DECREF(iter);
1967 return result;
1968}
1969
1970PyDoc_STRVAR(sum_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001971"sum(iterable[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00001972\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +00001973Returns the sum of an iterable of numbers (NOT strings) plus the value\n\
1974of parameter 'start' (which defaults to 0). When the iterable is\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00001975empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00001976
1977
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001978static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001979builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001980{
1981 PyObject *inst;
1982 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001983 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001984
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001985 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001986 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001987
Guido van Rossum823649d2001-03-21 18:40:58 +00001988 retval = PyObject_IsInstance(inst, cls);
1989 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001990 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001991 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001992}
1993
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001994PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001995"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001996\n\
1997Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001998With a type as second argument, return whether that is the object's type.\n\
1999The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002000isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002001
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002002
2003static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002004builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002005{
2006 PyObject *derived;
2007 PyObject *cls;
2008 int retval;
2009
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002010 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002011 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002012
Guido van Rossum823649d2001-03-21 18:40:58 +00002013 retval = PyObject_IsSubclass(derived, cls);
2014 if (retval < 0)
2015 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002016 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002017}
2018
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002019PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002020"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002021\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002022Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2023When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2024is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002025
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002026
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002027typedef struct {
2028 PyObject_HEAD
2029 Py_ssize_t tuplesize;
2030 PyObject *ittuple; /* tuple of iterators */
2031 PyObject *result;
2032} zipobject;
2033
2034PyTypeObject PyZip_Type;
2035
2036static PyObject *
2037zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002038{
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002039 zipobject *lz;
2040 Py_ssize_t i;
2041 PyObject *ittuple; /* tuple of iterators */
2042 PyObject *result;
2043 Py_ssize_t tuplesize = PySequence_Length(args);
2044
2045 if (type == &PyZip_Type && !_PyArg_NoKeywords("zip()", kwds))
2046 return NULL;
2047
Guido van Rossumb65fb332006-08-25 23:26:40 +00002048 /* args must be a tuple */
2049 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00002050
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002051 /* obtain iterators */
2052 ittuple = PyTuple_New(tuplesize);
2053 if (ittuple == NULL)
2054 return NULL;
2055 for (i=0; i < tuplesize; ++i) {
2056 PyObject *item = PyTuple_GET_ITEM(args, i);
2057 PyObject *it = PyObject_GetIter(item);
2058 if (it == NULL) {
2059 if (PyErr_ExceptionMatches(PyExc_TypeError))
2060 PyErr_Format(PyExc_TypeError,
2061 "zip argument #%zd must support iteration",
2062 i+1);
2063 Py_DECREF(ittuple);
2064 return NULL;
2065 }
2066 PyTuple_SET_ITEM(ittuple, i, it);
2067 }
2068
2069 /* create a result holder */
2070 result = PyTuple_New(tuplesize);
2071 if (result == NULL) {
2072 Py_DECREF(ittuple);
2073 return NULL;
2074 }
2075 for (i=0 ; i < tuplesize ; i++) {
2076 Py_INCREF(Py_None);
2077 PyTuple_SET_ITEM(result, i, Py_None);
2078 }
2079
2080 /* create zipobject structure */
2081 lz = (zipobject *)type->tp_alloc(type, 0);
2082 if (lz == NULL) {
2083 Py_DECREF(ittuple);
2084 Py_DECREF(result);
2085 return NULL;
2086 }
2087 lz->ittuple = ittuple;
2088 lz->tuplesize = tuplesize;
2089 lz->result = result;
2090
2091 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002092}
2093
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002094static void
2095zip_dealloc(zipobject *lz)
2096{
2097 PyObject_GC_UnTrack(lz);
2098 Py_XDECREF(lz->ittuple);
2099 Py_XDECREF(lz->result);
2100 Py_TYPE(lz)->tp_free(lz);
2101}
2102
2103static int
2104zip_traverse(zipobject *lz, visitproc visit, void *arg)
2105{
2106 Py_VISIT(lz->ittuple);
2107 Py_VISIT(lz->result);
2108 return 0;
2109}
2110
2111static PyObject *
2112zip_next(zipobject *lz)
2113{
2114 Py_ssize_t i;
2115 Py_ssize_t tuplesize = lz->tuplesize;
2116 PyObject *result = lz->result;
2117 PyObject *it;
2118 PyObject *item;
2119 PyObject *olditem;
2120
2121 if (tuplesize == 0)
2122 return NULL;
2123 if (Py_REFCNT(result) == 1) {
2124 Py_INCREF(result);
2125 for (i=0 ; i < tuplesize ; i++) {
2126 it = PyTuple_GET_ITEM(lz->ittuple, i);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002127 item = (*Py_TYPE(it)->tp_iternext)(it);
2128 if (item == NULL) {
2129 Py_DECREF(result);
2130 return NULL;
2131 }
2132 olditem = PyTuple_GET_ITEM(result, i);
2133 PyTuple_SET_ITEM(result, i, item);
2134 Py_DECREF(olditem);
2135 }
2136 } else {
2137 result = PyTuple_New(tuplesize);
2138 if (result == NULL)
2139 return NULL;
2140 for (i=0 ; i < tuplesize ; i++) {
2141 it = PyTuple_GET_ITEM(lz->ittuple, i);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002142 item = (*Py_TYPE(it)->tp_iternext)(it);
2143 if (item == NULL) {
2144 Py_DECREF(result);
2145 return NULL;
2146 }
2147 PyTuple_SET_ITEM(result, i, item);
2148 }
2149 }
2150 return result;
2151}
Barry Warsawbd599b52000-08-03 15:45:29 +00002152
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002153PyDoc_STRVAR(zip_doc,
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002154"zip(iter1 [,iter2 [...]]) --> zip object\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002155\n\
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002156Return a zip object whose .__next__() method returns a tuple where\n\
2157the i-th element comes from the i-th iterable argument. The .__next__()\n\
2158method continues until the shortest iterable in the argument sequence\n\
Georg Brandlced51db2008-12-04 18:28:38 +00002159is exhausted and then it raises StopIteration.");
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002160
2161PyTypeObject PyZip_Type = {
2162 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2163 "zip", /* tp_name */
2164 sizeof(zipobject), /* tp_basicsize */
2165 0, /* tp_itemsize */
2166 /* methods */
2167 (destructor)zip_dealloc, /* tp_dealloc */
2168 0, /* tp_print */
2169 0, /* tp_getattr */
2170 0, /* tp_setattr */
Mark Dickinsone94c6792009-02-02 20:36:42 +00002171 0, /* tp_reserved */
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002172 0, /* tp_repr */
2173 0, /* tp_as_number */
2174 0, /* tp_as_sequence */
2175 0, /* tp_as_mapping */
2176 0, /* tp_hash */
2177 0, /* tp_call */
2178 0, /* tp_str */
2179 PyObject_GenericGetAttr, /* tp_getattro */
2180 0, /* tp_setattro */
2181 0, /* tp_as_buffer */
2182 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2183 Py_TPFLAGS_BASETYPE, /* tp_flags */
2184 zip_doc, /* tp_doc */
2185 (traverseproc)zip_traverse, /* tp_traverse */
2186 0, /* tp_clear */
2187 0, /* tp_richcompare */
2188 0, /* tp_weaklistoffset */
2189 PyObject_SelfIter, /* tp_iter */
2190 (iternextfunc)zip_next, /* tp_iternext */
2191 0, /* tp_methods */
2192 0, /* tp_members */
2193 0, /* tp_getset */
2194 0, /* tp_base */
2195 0, /* tp_dict */
2196 0, /* tp_descr_get */
2197 0, /* tp_descr_set */
2198 0, /* tp_dictoffset */
2199 0, /* tp_init */
2200 PyType_GenericAlloc, /* tp_alloc */
2201 zip_new, /* tp_new */
2202 PyObject_GC_Del, /* tp_free */
2203};
Barry Warsawbd599b52000-08-03 15:45:29 +00002204
2205
Guido van Rossum79f25d91997-04-29 20:08:16 +00002206static PyMethodDef builtin_methods[] = {
Guido van Rossum52cc1d82007-03-18 15:41:51 +00002207 {"__build_class__", (PyCFunction)builtin___build_class__,
2208 METH_VARARGS | METH_KEYWORDS, build_class_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002209 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002210 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002211 {"all", builtin_all, METH_O, all_doc},
2212 {"any", builtin_any, METH_O, any_doc},
Georg Brandl559e5d72008-06-11 18:37:52 +00002213 {"ascii", builtin_ascii, METH_O, ascii_doc},
Guido van Rossumcd16bf62007-06-13 18:07:49 +00002214 {"bin", builtin_bin, METH_O, bin_doc},
Neal Norwitzc2550c72007-08-31 04:17:51 +00002215 {"chr", builtin_chr, METH_VARARGS, chr_doc},
Guido van Rossumd8faa362007-04-27 19:54:29 +00002216 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002217 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2218 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2219 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2220 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00002221 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Eric Smith8c663262007-08-25 02:26:07 +00002222 {"format", builtin_format, METH_VARARGS, format_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002223 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2224 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2225 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2226 {"hash", builtin_hash, METH_O, hash_doc},
2227 {"hex", builtin_hex, METH_O, hex_doc},
2228 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00002229 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002230 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2231 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2232 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2233 {"len", builtin_len, METH_O, len_doc},
2234 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002235 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2236 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandla18af4e2007-04-21 15:47:16 +00002237 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002238 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002239 {"ord", builtin_ord, METH_O, ord_doc},
2240 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00002241 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002242 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002243 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002244 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002245 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002246 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002247 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002248 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002249};
2250
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002251PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002252"Built-in functions, exceptions, and other objects.\n\
2253\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002254Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002255
Martin v. Löwis1a214512008-06-11 05:26:20 +00002256static struct PyModuleDef builtinsmodule = {
2257 PyModuleDef_HEAD_INIT,
2258 "builtins",
2259 builtin_doc,
Christian Heimes6a27efa2008-10-30 21:48:26 +00002260 -1, /* multiple "initialization" just copies the module dict. */
Martin v. Löwis1a214512008-06-11 05:26:20 +00002261 builtin_methods,
2262 NULL,
2263 NULL,
2264 NULL,
2265 NULL
2266};
2267
2268
Guido van Rossum25ce5661997-08-02 03:10:38 +00002269PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002270_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002271{
Fred Drake5550de32000-06-20 04:54:19 +00002272 PyObject *mod, *dict, *debug;
Martin v. Löwis1a214512008-06-11 05:26:20 +00002273 mod = PyModule_Create(&builtinsmodule);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002274 if (mod == NULL)
2275 return NULL;
2276 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002277
Tim Peters7571a0f2003-03-23 17:52:28 +00002278#ifdef Py_TRACE_REFS
Georg Brandl1a3284e2007-12-02 09:40:06 +00002279 /* "builtins" exposes a number of statically allocated objects
Tim Peters7571a0f2003-03-23 17:52:28 +00002280 * that, before this code was added in 2.3, never showed up in
2281 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2282 * result, programs leaking references to None and False (etc)
2283 * couldn't be diagnosed by examining sys.getobjects(0).
2284 */
2285#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2286#else
2287#define ADD_TO_ALL(OBJECT) (void)0
2288#endif
2289
Tim Peters4b7625e2001-09-13 21:37:17 +00002290#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002291 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2292 return NULL; \
2293 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002294
2295 SETBUILTIN("None", Py_None);
2296 SETBUILTIN("Ellipsis", Py_Ellipsis);
2297 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002298 SETBUILTIN("False", Py_False);
2299 SETBUILTIN("True", Py_True);
2300 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbae07c92007-10-08 02:46:15 +00002301 SETBUILTIN("memoryview", &PyMemoryView_Type);
Christian Heimes9c4756e2008-05-26 13:22:05 +00002302 SETBUILTIN("bytearray", &PyByteArray_Type);
Christian Heimes72b710a2008-05-26 13:28:38 +00002303 SETBUILTIN("bytes", &PyBytes_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002304 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002305#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002306 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002307#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002308 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002309 SETBUILTIN("enumerate", &PyEnum_Type);
Raymond Hettinger17301e92008-03-13 00:19:26 +00002310 SETBUILTIN("filter", &PyFilter_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002311 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002312 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002313 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00002314 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002315 SETBUILTIN("list", &PyList_Type);
Raymond Hettingera6c60372008-03-13 01:26:19 +00002316 SETBUILTIN("map", &PyMap_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002317 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossum805365e2007-05-07 22:24:25 +00002318 SETBUILTIN("range", &PyRange_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002319 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002320 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002321 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002322 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Guido van Rossum572dbf82007-04-27 23:53:51 +00002323 SETBUILTIN("str", &PyUnicode_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002324 SETBUILTIN("super", &PySuper_Type);
2325 SETBUILTIN("tuple", &PyTuple_Type);
2326 SETBUILTIN("type", &PyType_Type);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002327 SETBUILTIN("zip", &PyZip_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002328 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002329 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2330 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002331 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002332 }
2333 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002334
Guido van Rossum25ce5661997-08-02 03:10:38 +00002335 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002336#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002337#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002338}