blob: f87fdd2a79dcead8c5d3f5705f0068fcdb914efb [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 */
419 0, /* tp_compare */
420 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
496static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000497builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000498{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000499 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000500 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000501
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000502 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000503 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000504 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000505 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +0000506 return PyLong_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000507}
508
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000509PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000510"cmp(x, y) -> integer\n\
511\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000512Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000513
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000514
515static char *
Georg Brandl2cabc562008-08-28 07:57:16 +0000516source_as_string(PyObject *cmd, char *funcname, char *what)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000517{
518 char *str;
519 Py_ssize_t size;
520
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000521 if (PyUnicode_Check(cmd)) {
522 cmd = _PyUnicode_AsDefaultEncodedString(cmd, NULL);
523 if (cmd == NULL)
524 return NULL;
525 }
Guido van Rossuma4b8d1d2007-08-27 15:02:28 +0000526 else if (!PyObject_CheckReadBuffer(cmd)) {
Georg Brandl2cabc562008-08-28 07:57:16 +0000527 PyErr_Format(PyExc_TypeError,
528 "%s() arg 1 must be a %s object",
529 funcname, what);
Guido van Rossuma4b8d1d2007-08-27 15:02:28 +0000530 return NULL;
531 }
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000532 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &size) < 0) {
533 return NULL;
534 }
535 if (strlen(str) != size) {
536 PyErr_SetString(PyExc_TypeError,
537 "source code string cannot contain null bytes");
538 return NULL;
539 }
540 return str;
541}
542
Guido van Rossum79f25d91997-04-29 20:08:16 +0000543static PyObject *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000544builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000545{
546 char *str;
547 char *filename;
548 char *startstr;
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000549 int mode = -1;
Tim Peters6cd6a822001-08-17 22:11:27 +0000550 int dont_inherit = 0;
551 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000552 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000553 PyObject *cmd;
Guido van Rossumd8faa362007-04-27 19:54:29 +0000554 static char *kwlist[] = {"source", "filename", "mode", "flags",
555 "dont_inherit", NULL};
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000556 int start[] = {Py_file_input, Py_eval_input, Py_single_input};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000557
Guido van Rossumd8faa362007-04-27 19:54:29 +0000558 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
559 kwlist, &cmd, &filename, &startstr,
560 &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000561 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000562
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000563 cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000564
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000565 if (supplied_flags &
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000566 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000567 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000568 PyErr_SetString(PyExc_ValueError,
569 "compile(): unrecognised flags");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000570 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000571 }
572 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
573
Tim Peters6cd6a822001-08-17 22:11:27 +0000574 if (!dont_inherit) {
575 PyEval_MergeCompilerFlags(&cf);
576 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000577
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000578 if (strcmp(startstr, "exec") == 0)
579 mode = 0;
580 else if (strcmp(startstr, "eval") == 0)
581 mode = 1;
582 else if (strcmp(startstr, "single") == 0)
583 mode = 2;
584 else {
585 PyErr_SetString(PyExc_ValueError,
586 "compile() arg 3 must be 'exec', 'eval' or 'single'");
587 return NULL;
588 }
589
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000590 if (PyAST_Check(cmd)) {
591 PyObject *result;
592 if (supplied_flags & PyCF_ONLY_AST) {
593 Py_INCREF(cmd);
594 result = cmd;
595 }
596 else {
597 PyArena *arena;
598 mod_ty mod;
599
600 arena = PyArena_New();
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000601 mod = PyAST_obj2mod(cmd, arena, mode);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000602 if (mod == NULL) {
603 PyArena_Free(arena);
604 return NULL;
605 }
606 result = (PyObject*)PyAST_Compile(mod, filename,
607 &cf, arena);
608 PyArena_Free(arena);
609 }
610 return result;
611 }
612
Georg Brandl2cabc562008-08-28 07:57:16 +0000613 str = source_as_string(cmd, "compile", "string, bytes, AST or code");
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000614 if (str == NULL)
615 return NULL;
616
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000617 return Py_CompileStringFlags(str, filename, start[mode], &cf);
Guido van Rossum5b722181993-03-30 17:46:03 +0000618}
619
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000620PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000621"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000622\n\
623Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000624into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000625The filename will be used for run-time error messages.\n\
626The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000627single (interactive) statement, or 'eval' to compile an expression.\n\
628The flags argument, if present, controls which future statements influence\n\
629the compilation of the code.\n\
630The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
631the effects of any future statements in effect in the code calling\n\
632compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000633in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000634
Guido van Rossum79f25d91997-04-29 20:08:16 +0000635static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000636builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000637{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000638 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000639
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000640 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000641 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000642 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000643}
644
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000645PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000646"dir([object]) -> list of strings\n"
647"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000648"If called without an argument, return the names in the current scope.\n"
649"Else, return an alphabetized list of names comprising (some of) the attributes\n"
650"of the given object, and of attributes reachable from it.\n"
651"If the object supplies a method named __dir__, it will be used; otherwise\n"
652"the default dir() logic is used and returns:\n"
653" for a module object: the module's attributes.\n"
654" for a class object: its attributes, and recursively the attributes\n"
655" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000656" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000657" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000658
Guido van Rossum79f25d91997-04-29 20:08:16 +0000659static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000660builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000661{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000662 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000663
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000664 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000665 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000666 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000667}
668
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000669PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000670"divmod(x, y) -> (div, mod)\n\
671\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000672Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000673
674
Guido van Rossum79f25d91997-04-29 20:08:16 +0000675static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000676builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000677{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000678 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000679 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000680 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000681 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000682
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000683 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000684 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000685 if (locals != Py_None && !PyMapping_Check(locals)) {
686 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000687 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000688 }
689 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000690 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000691 "globals must be a real dict; try eval(expr, {}, mapping)"
692 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000693 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000694 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000695 if (globals == Py_None) {
696 globals = PyEval_GetGlobals();
697 if (locals == Py_None)
698 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000699 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000700 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000701 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000702
Georg Brandl77c85e62005-09-15 10:46:13 +0000703 if (globals == NULL || locals == NULL) {
704 PyErr_SetString(PyExc_TypeError,
705 "eval must be given globals and locals "
706 "when called without a frame");
707 return NULL;
708 }
709
Guido van Rossum79f25d91997-04-29 20:08:16 +0000710 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
711 if (PyDict_SetItemString(globals, "__builtins__",
712 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000713 return NULL;
714 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000715
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000716 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000717 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000718 PyErr_SetString(PyExc_TypeError,
719 "code object passed to eval() may not contain free variables");
720 return NULL;
721 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000722 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000723 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000724
Georg Brandl2cabc562008-08-28 07:57:16 +0000725 str = source_as_string(cmd, "eval", "string, bytes or code");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000726 if (str == NULL)
Guido van Rossum94390a41992-08-14 15:14:30 +0000727 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000728
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000729 while (*str == ' ' || *str == '\t')
730 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000731
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000732 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Tim Peters9fa96be2001-08-17 23:04:59 +0000733 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000734 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
735 Py_XDECREF(tmp);
736 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000737}
738
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000739PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000740"eval(source[, globals[, locals]]) -> value\n\
741\n\
742Evaluate the source in the context of globals and locals.\n\
743The source may be a string representing a Python expression\n\
744or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000745The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000746defaulting to the current globals and locals.\n\
747If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000748
Georg Brandl7cae87c2006-09-06 06:51:57 +0000749static PyObject *
750builtin_exec(PyObject *self, PyObject *args)
751{
752 PyObject *v;
753 PyObject *prog, *globals = Py_None, *locals = Py_None;
754 int plain = 0;
755
Raymond Hettinger5d1ff002009-01-06 09:37:13 +0000756 if (!PyArg_UnpackTuple(args, "exec", 1, 3, &prog, &globals, &locals))
Georg Brandl7cae87c2006-09-06 06:51:57 +0000757 return NULL;
758
759 if (globals == Py_None) {
760 globals = PyEval_GetGlobals();
761 if (locals == Py_None) {
762 locals = PyEval_GetLocals();
763 plain = 1;
764 }
765 if (!globals || !locals) {
766 PyErr_SetString(PyExc_SystemError,
767 "globals and locals cannot be NULL");
768 return NULL;
769 }
770 }
771 else if (locals == Py_None)
772 locals = globals;
Georg Brandl2cabc562008-08-28 07:57:16 +0000773
Georg Brandl7cae87c2006-09-06 06:51:57 +0000774 if (!PyDict_Check(globals)) {
775 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
776 globals->ob_type->tp_name);
777 return NULL;
778 }
779 if (!PyMapping_Check(locals)) {
780 PyErr_Format(PyExc_TypeError,
781 "arg 3 must be a mapping or None, not %.100s",
782 locals->ob_type->tp_name);
783 return NULL;
784 }
785 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
786 if (PyDict_SetItemString(globals, "__builtins__",
787 PyEval_GetBuiltins()) != 0)
788 return NULL;
789 }
790
791 if (PyCode_Check(prog)) {
792 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
793 PyErr_SetString(PyExc_TypeError,
794 "code object passed to exec() may not "
795 "contain free variables");
796 return NULL;
797 }
798 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
799 }
Georg Brandl7cae87c2006-09-06 06:51:57 +0000800 else {
Georg Brandl2cabc562008-08-28 07:57:16 +0000801 char *str = source_as_string(prog, "exec",
802 "string, bytes or code");
Georg Brandl7cae87c2006-09-06 06:51:57 +0000803 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000804 if (str == NULL)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000805 return NULL;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000806 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000807 if (PyEval_MergeCompilerFlags(&cf))
808 v = PyRun_StringFlags(str, Py_file_input, globals,
809 locals, &cf);
810 else
811 v = PyRun_String(str, Py_file_input, globals, locals);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000812 }
813 if (v == NULL)
814 return NULL;
815 Py_DECREF(v);
816 Py_RETURN_NONE;
817}
818
819PyDoc_STRVAR(exec_doc,
820"exec(object[, globals[, locals]])\n\
821\n\
Benjamin Peterson38090262009-01-04 15:30:39 +0000822Read and execute code from a object, which can be a string or a code\n\
823object.\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000824The globals and locals are dictionaries, defaulting to the current\n\
825globals and locals. If only globals is given, locals defaults to it.");
826
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000827
Guido van Rossum79f25d91997-04-29 20:08:16 +0000828static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000829builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000830{
Neal Norwitz6ea45d32007-08-26 04:19:43 +0000831 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000832 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000833
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000834 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000835 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000836
Martin v. Löwis5b222132007-06-10 09:51:05 +0000837 if (!PyUnicode_Check(name)) {
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000838 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000839 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000840 return NULL;
841 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000842 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000843 if (result == NULL && dflt != NULL &&
844 PyErr_ExceptionMatches(PyExc_AttributeError))
845 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000846 PyErr_Clear();
847 Py_INCREF(dflt);
848 result = dflt;
849 }
850 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000851}
852
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000853PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000854"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000855\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000856Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
857When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000858exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000859
860
Guido van Rossum79f25d91997-04-29 20:08:16 +0000861static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000862builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000863{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000864 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000865
Guido van Rossum79f25d91997-04-29 20:08:16 +0000866 d = PyEval_GetGlobals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000867 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000868 return d;
869}
870
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000871PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000872"globals() -> dictionary\n\
873\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000874Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000875
876
Guido van Rossum79f25d91997-04-29 20:08:16 +0000877static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000878builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000879{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000880 PyObject *v;
881 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000882
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000883 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000884 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000885 if (!PyUnicode_Check(name)) {
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000886 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000887 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000888 return NULL;
889 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000890 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000891 if (v == NULL) {
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000892 if (!PyErr_ExceptionMatches(PyExc_Exception))
893 return NULL;
894 else {
895 PyErr_Clear();
896 Py_INCREF(Py_False);
897 return Py_False;
898 }
Guido van Rossum9bfef441993-03-29 10:43:31 +0000899 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000900 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000901 Py_INCREF(Py_True);
902 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000903}
904
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000905PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000906"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000907\n\
908Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000909(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000910
911
Guido van Rossum79f25d91997-04-29 20:08:16 +0000912static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000913builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000914{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000915 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000916}
917
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000918PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000919"id(object) -> integer\n\
920\n\
921Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000922simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000923
924
Raymond Hettingera6c60372008-03-13 01:26:19 +0000925/* map object ************************************************************/
926
927typedef struct {
928 PyObject_HEAD
929 PyObject *iters;
930 PyObject *func;
931} mapobject;
932
933PyTypeObject PyMap_Type;
934
Guido van Rossum79f25d91997-04-29 20:08:16 +0000935static PyObject *
Raymond Hettingera6c60372008-03-13 01:26:19 +0000936map_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000937{
Raymond Hettingera6c60372008-03-13 01:26:19 +0000938 PyObject *it, *iters, *func;
939 mapobject *lz;
940 Py_ssize_t numargs, i;
941
942 if (type == &PyMap_Type && !_PyArg_NoKeywords("map()", kwds))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000943 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000944
945 numargs = PyTuple_Size(args);
946 if (numargs < 2) {
947 PyErr_SetString(PyExc_TypeError,
948 "map() must have at least two arguments.");
Tim Peters4e9afdc2001-05-03 23:54:49 +0000949 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000950 }
951
952 iters = PyTuple_New(numargs-1);
953 if (iters == NULL)
954 return NULL;
955
956 for (i=1 ; i<numargs ; i++) {
957 /* Get iterator. */
958 it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
959 if (it == NULL) {
960 Py_DECREF(iters);
961 return NULL;
962 }
963 PyTuple_SET_ITEM(iters, i-1, it);
964 }
965
966 /* create mapobject structure */
967 lz = (mapobject *)type->tp_alloc(type, 0);
968 if (lz == NULL) {
969 Py_DECREF(iters);
970 return NULL;
971 }
972 lz->iters = iters;
973 func = PyTuple_GET_ITEM(args, 0);
974 Py_INCREF(func);
975 lz->func = func;
976
977 return (PyObject *)lz;
978}
979
980static void
981map_dealloc(mapobject *lz)
982{
983 PyObject_GC_UnTrack(lz);
984 Py_XDECREF(lz->iters);
985 Py_XDECREF(lz->func);
986 Py_TYPE(lz)->tp_free(lz);
987}
988
989static int
990map_traverse(mapobject *lz, visitproc visit, void *arg)
991{
992 Py_VISIT(lz->iters);
993 Py_VISIT(lz->func);
994 return 0;
995}
996
997static PyObject *
998map_next(mapobject *lz)
999{
1000 PyObject *val;
1001 PyObject *argtuple;
1002 PyObject *result;
1003 Py_ssize_t numargs, i;
1004
1005 numargs = PyTuple_Size(lz->iters);
1006 argtuple = PyTuple_New(numargs);
1007 if (argtuple == NULL)
1008 return NULL;
1009
1010 for (i=0 ; i<numargs ; i++) {
1011 val = PyIter_Next(PyTuple_GET_ITEM(lz->iters, i));
1012 if (val == NULL) {
1013 Py_DECREF(argtuple);
1014 return NULL;
1015 }
1016 PyTuple_SET_ITEM(argtuple, i, val);
1017 }
1018 result = PyObject_Call(lz->func, argtuple, NULL);
1019 Py_DECREF(argtuple);
Tim Peters4e9afdc2001-05-03 23:54:49 +00001020 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001021}
1022
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001023PyDoc_STRVAR(map_doc,
Raymond Hettingera6c60372008-03-13 01:26:19 +00001024"map(func, *iterables) --> map object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001025\n\
Raymond Hettingera6c60372008-03-13 01:26:19 +00001026Make an iterator that computes the function using arguments from\n\
1027each of the iterables. Stops when the shortest iterable is exhausted.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001028
Raymond Hettingera6c60372008-03-13 01:26:19 +00001029PyTypeObject PyMap_Type = {
1030 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1031 "map", /* tp_name */
1032 sizeof(mapobject), /* tp_basicsize */
1033 0, /* tp_itemsize */
1034 /* methods */
1035 (destructor)map_dealloc, /* tp_dealloc */
1036 0, /* tp_print */
1037 0, /* tp_getattr */
1038 0, /* tp_setattr */
1039 0, /* tp_compare */
1040 0, /* tp_repr */
1041 0, /* tp_as_number */
1042 0, /* tp_as_sequence */
1043 0, /* tp_as_mapping */
1044 0, /* tp_hash */
1045 0, /* tp_call */
1046 0, /* tp_str */
1047 PyObject_GenericGetAttr, /* tp_getattro */
1048 0, /* tp_setattro */
1049 0, /* tp_as_buffer */
1050 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1051 Py_TPFLAGS_BASETYPE, /* tp_flags */
1052 map_doc, /* tp_doc */
1053 (traverseproc)map_traverse, /* tp_traverse */
1054 0, /* tp_clear */
1055 0, /* tp_richcompare */
1056 0, /* tp_weaklistoffset */
1057 PyObject_SelfIter, /* tp_iter */
1058 (iternextfunc)map_next, /* tp_iternext */
1059 0, /* tp_methods */
1060 0, /* tp_members */
1061 0, /* tp_getset */
1062 0, /* tp_base */
1063 0, /* tp_dict */
1064 0, /* tp_descr_get */
1065 0, /* tp_descr_set */
1066 0, /* tp_dictoffset */
1067 0, /* tp_init */
1068 PyType_GenericAlloc, /* tp_alloc */
1069 map_new, /* tp_new */
1070 PyObject_GC_Del, /* tp_free */
1071};
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001072
Guido van Rossum79f25d91997-04-29 20:08:16 +00001073static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +00001074builtin_next(PyObject *self, PyObject *args)
1075{
1076 PyObject *it, *res;
1077 PyObject *def = NULL;
1078
1079 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1080 return NULL;
1081 if (!PyIter_Check(it)) {
1082 PyErr_Format(PyExc_TypeError,
Georg Brandlaaa63922008-04-30 19:47:01 +00001083 "%.200s object is not an iterator",
1084 it->ob_type->tp_name);
Georg Brandla18af4e2007-04-21 15:47:16 +00001085 return NULL;
1086 }
1087
1088 res = (*it->ob_type->tp_iternext)(it);
Georg Brandlaaa63922008-04-30 19:47:01 +00001089 if (res != NULL) {
1090 return res;
1091 } else if (def != NULL) {
1092 if (PyErr_Occurred()) {
1093 if(!PyErr_ExceptionMatches(PyExc_StopIteration))
Georg Brandla18af4e2007-04-21 15:47:16 +00001094 return NULL;
1095 PyErr_Clear();
Georg Brandla18af4e2007-04-21 15:47:16 +00001096 }
Georg Brandlaaa63922008-04-30 19:47:01 +00001097 Py_INCREF(def);
1098 return def;
1099 } else if (PyErr_Occurred()) {
1100 return NULL;
1101 } else {
1102 PyErr_SetNone(PyExc_StopIteration);
1103 return NULL;
Georg Brandla18af4e2007-04-21 15:47:16 +00001104 }
Georg Brandla18af4e2007-04-21 15:47:16 +00001105}
1106
1107PyDoc_STRVAR(next_doc,
1108"next(iterator[, default])\n\
1109\n\
1110Return the next item from the iterator. If default is given and the iterator\n\
1111is exhausted, it is returned instead of raising StopIteration.");
1112
1113
1114static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001115builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001116{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001117 PyObject *v;
1118 PyObject *name;
1119 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001120
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001121 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001122 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001123 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001124 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001125 Py_INCREF(Py_None);
1126 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001127}
1128
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001129PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001130"setattr(object, name, value)\n\
1131\n\
1132Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001133``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001134
1135
Guido van Rossum79f25d91997-04-29 20:08:16 +00001136static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001137builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001138{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001139 PyObject *v;
1140 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001141
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001142 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001143 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001144 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001145 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001146 Py_INCREF(Py_None);
1147 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001148}
1149
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001150PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001151"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001152\n\
1153Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001154``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001155
1156
Guido van Rossum79f25d91997-04-29 20:08:16 +00001157static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001158builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001159{
Guido van Rossum9bfef441993-03-29 10:43:31 +00001160 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001161
Guido van Rossum79f25d91997-04-29 20:08:16 +00001162 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001163 if (x == -1)
1164 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001165 return PyLong_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001166}
1167
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001168PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001169"hash(object) -> integer\n\
1170\n\
1171Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001172the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001173
1174
Guido van Rossum79f25d91997-04-29 20:08:16 +00001175static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001176builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001177{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001178 return PyNumber_ToBase(v, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001179}
1180
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001181PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001182"hex(number) -> string\n\
1183\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001184Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001185
1186
Guido van Rossum79f25d91997-04-29 20:08:16 +00001187static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001188builtin_iter(PyObject *self, PyObject *args)
1189{
1190 PyObject *v, *w = NULL;
1191
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001192 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001193 return NULL;
1194 if (w == NULL)
1195 return PyObject_GetIter(v);
1196 if (!PyCallable_Check(v)) {
1197 PyErr_SetString(PyExc_TypeError,
1198 "iter(v, w): v must be callable");
1199 return NULL;
1200 }
1201 return PyCallIter_New(v, w);
1202}
1203
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001204PyDoc_STRVAR(iter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001205"iter(iterable) -> iterator\n\
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001206iter(callable, sentinel) -> iterator\n\
1207\n\
1208Get an iterator from an object. In the first form, the argument must\n\
1209supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001210In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001211
1212
1213static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001214builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001215{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001216 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001217
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001218 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001219 if (res < 0 && PyErr_Occurred())
1220 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001221 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001222}
1223
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001224PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001225"len(object) -> integer\n\
1226\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001227Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001228
1229
Guido van Rossum79f25d91997-04-29 20:08:16 +00001230static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001231builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001232{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001233 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001234
Guido van Rossum79f25d91997-04-29 20:08:16 +00001235 d = PyEval_GetLocals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00001236 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001237 return d;
1238}
1239
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001240PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001241"locals() -> dictionary\n\
1242\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001243Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001244
1245
Guido van Rossum79f25d91997-04-29 20:08:16 +00001246static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001247min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001248{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001249 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001250 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001251
Guido van Rossum79f25d91997-04-29 20:08:16 +00001252 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001253 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001254 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001255 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001256
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001257 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1258 keyfunc = PyDict_GetItemString(kwds, "key");
1259 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001260 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001261 "%s() got an unexpected keyword argument", name);
1262 return NULL;
1263 }
Christian Heimesbbffeb62008-01-24 09:42:52 +00001264 Py_INCREF(keyfunc);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001265 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001266
Tim Petersc3074532001-05-03 07:00:32 +00001267 it = PyObject_GetIter(v);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001268 if (it == NULL) {
1269 Py_XDECREF(keyfunc);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001270 return NULL;
Christian Heimesbbffeb62008-01-24 09:42:52 +00001271 }
Tim Petersc3074532001-05-03 07:00:32 +00001272
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001273 maxitem = NULL; /* the result */
1274 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001275 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001276 /* get the value from the key function */
1277 if (keyfunc != NULL) {
1278 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1279 if (val == NULL)
1280 goto Fail_it_item;
1281 }
1282 /* no key function; the value is the item */
1283 else {
1284 val = item;
1285 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001286 }
Tim Petersc3074532001-05-03 07:00:32 +00001287
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001288 /* maximum value and item are unset; set them */
1289 if (maxval == NULL) {
1290 maxitem = item;
1291 maxval = val;
1292 }
1293 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001294 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001295 int cmp = PyObject_RichCompareBool(val, maxval, op);
1296 if (cmp < 0)
1297 goto Fail_it_item_and_val;
1298 else if (cmp > 0) {
1299 Py_DECREF(maxval);
1300 Py_DECREF(maxitem);
1301 maxval = val;
1302 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001303 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001304 else {
1305 Py_DECREF(item);
1306 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001307 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001308 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001309 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001310 if (PyErr_Occurred())
1311 goto Fail_it;
1312 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001313 PyErr_Format(PyExc_ValueError,
1314 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001315 assert(maxitem == NULL);
1316 }
1317 else
1318 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001319 Py_DECREF(it);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001320 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001321 return maxitem;
1322
1323Fail_it_item_and_val:
1324 Py_DECREF(val);
1325Fail_it_item:
1326 Py_DECREF(item);
1327Fail_it:
1328 Py_XDECREF(maxval);
1329 Py_XDECREF(maxitem);
1330 Py_DECREF(it);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001331 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001332 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001333}
1334
Guido van Rossum79f25d91997-04-29 20:08:16 +00001335static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001336builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001337{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001338 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001339}
1340
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001341PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001342"min(iterable[, key=func]) -> value\n\
1343min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001344\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001345With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001346With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001347
1348
Guido van Rossum79f25d91997-04-29 20:08:16 +00001349static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001350builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001351{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001352 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001353}
1354
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001355PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001356"max(iterable[, key=func]) -> value\n\
1357max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001358\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001359With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001360With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001361
1362
Guido van Rossum79f25d91997-04-29 20:08:16 +00001363static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001364builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001365{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001366 return PyNumber_ToBase(v, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001367}
1368
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001369PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001370"oct(number) -> string\n\
1371\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001372Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001373
1374
Guido van Rossum79f25d91997-04-29 20:08:16 +00001375static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001376builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001377{
Guido van Rossum09095f32000-03-10 23:00:52 +00001378 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001379 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001380
Christian Heimes72b710a2008-05-26 13:28:38 +00001381 if (PyBytes_Check(obj)) {
1382 size = PyBytes_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001383 if (size == 1) {
Christian Heimes72b710a2008-05-26 13:28:38 +00001384 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
Christian Heimes217cfd12007-12-02 14:31:20 +00001385 return PyLong_FromLong(ord);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001386 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001387 }
1388 else if (PyUnicode_Check(obj)) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001389 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001390 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001391 ord = (long)*PyUnicode_AS_UNICODE(obj);
Christian Heimes217cfd12007-12-02 14:31:20 +00001392 return PyLong_FromLong(ord);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001393 }
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001394#ifndef Py_UNICODE_WIDE
1395 if (size == 2) {
1396 /* Decode a valid surrogate pair */
1397 int c0 = PyUnicode_AS_UNICODE(obj)[0];
1398 int c1 = PyUnicode_AS_UNICODE(obj)[1];
1399 if (0xD800 <= c0 && c0 <= 0xDBFF &&
1400 0xDC00 <= c1 && c1 <= 0xDFFF) {
1401 ord = ((((c0 & 0x03FF) << 10) | (c1 & 0x03FF)) +
1402 0x00010000);
Christian Heimes217cfd12007-12-02 14:31:20 +00001403 return PyLong_FromLong(ord);
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001404 }
1405 }
1406#endif
Guido van Rossum6f376c42007-05-24 14:31:33 +00001407 }
Christian Heimes9c4756e2008-05-26 13:22:05 +00001408 else if (PyByteArray_Check(obj)) {
Guido van Rossum98f97462007-04-13 03:31:13 +00001409 /* XXX Hopefully this is temporary */
Christian Heimes9c4756e2008-05-26 13:22:05 +00001410 size = PyByteArray_GET_SIZE(obj);
Guido van Rossum98f97462007-04-13 03:31:13 +00001411 if (size == 1) {
Christian Heimes9c4756e2008-05-26 13:22:05 +00001412 ord = (long)((unsigned char)*PyByteArray_AS_STRING(obj));
Christian Heimes217cfd12007-12-02 14:31:20 +00001413 return PyLong_FromLong(ord);
Guido van Rossum98f97462007-04-13 03:31:13 +00001414 }
1415 }
1416 else {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001417 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001418 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001419 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001420 return NULL;
1421 }
1422
Guido van Rossumad991772001-01-12 16:03:05 +00001423 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001424 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001425 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001426 size);
1427 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001428}
1429
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001430PyDoc_VAR(ord_doc) = PyDoc_STR(
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001431"ord(c) -> integer\n\
1432\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001433Return the integer ordinal of a one-character string."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001434)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001435#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001436PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001437"\nA valid surrogate pair is also accepted."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001438)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001439#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001440;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001441
1442
Guido van Rossum79f25d91997-04-29 20:08:16 +00001443static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001444builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001445{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001446 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001447
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001448 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001449 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001450 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001451}
1452
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001453PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001454"pow(x, y[, z]) -> number\n\
1455\n\
1456With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001457equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001458
1459
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001460
Guido van Rossum34343512006-11-30 22:13:52 +00001461static PyObject *
1462builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1463{
1464 static char *kwlist[] = {"sep", "end", "file", 0};
Georg Brandl257d3d92007-02-26 10:35:10 +00001465 static PyObject *dummy_args;
Guido van Rossum34343512006-11-30 22:13:52 +00001466 PyObject *sep = NULL, *end = NULL, *file = NULL;
1467 int i, err;
1468
Georg Brandl257d3d92007-02-26 10:35:10 +00001469 if (dummy_args == NULL) {
1470 if (!(dummy_args = PyTuple_New(0)))
1471 return NULL;
1472 }
Georg Brandl88fc6642007-02-09 21:28:07 +00001473 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
Guido van Rossum34343512006-11-30 22:13:52 +00001474 kwlist, &sep, &end, &file))
Christian Heimesfef9bba2007-11-13 15:24:14 +00001475 return NULL;
1476 if (file == NULL || file == Py_None) {
Guido van Rossum34343512006-11-30 22:13:52 +00001477 file = PySys_GetObject("stdout");
Christian Heimesfef9bba2007-11-13 15:24:14 +00001478 /* sys.stdout may be None when FILE* stdout isn't connected */
1479 if (file == Py_None)
1480 Py_RETURN_NONE;
1481 }
Guido van Rossum34343512006-11-30 22:13:52 +00001482
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001483 if (sep && sep != Py_None && !PyUnicode_Check(sep)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001484 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001485 "sep must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001486 sep->ob_type->tp_name);
1487 return NULL;
1488 }
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001489 if (end && end != Py_None && !PyUnicode_Check(end)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001490 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001491 "end must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001492 end->ob_type->tp_name);
1493 return NULL;
1494 }
Guido van Rossum34343512006-11-30 22:13:52 +00001495
1496 for (i = 0; i < PyTuple_Size(args); i++) {
1497 if (i > 0) {
1498 if (sep == NULL || sep == Py_None)
1499 err = PyFile_WriteString(" ", file);
1500 else
1501 err = PyFile_WriteObject(sep, file,
1502 Py_PRINT_RAW);
1503 if (err)
1504 return NULL;
1505 }
1506 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1507 Py_PRINT_RAW);
1508 if (err)
1509 return NULL;
1510 }
1511
1512 if (end == NULL || end == Py_None)
1513 err = PyFile_WriteString("\n", file);
1514 else
1515 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1516 if (err)
1517 return NULL;
1518
1519 Py_RETURN_NONE;
1520}
1521
1522PyDoc_STRVAR(print_doc,
Georg Brandlcd5da7d2008-02-01 15:47:37 +00001523"print(value, ..., sep=' ', end='\\n', file=sys.stdout)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001524\n\
1525Prints the values to a stream, or to sys.stdout by default.\n\
1526Optional keyword arguments:\n\
1527file: a file-like object (stream); defaults to the current sys.stdout.\n\
1528sep: string inserted between values, default a space.\n\
1529end: string appended after the last value, default a newline.");
1530
1531
Guido van Rossuma88a0332007-02-26 16:59:55 +00001532static PyObject *
1533builtin_input(PyObject *self, PyObject *args)
1534{
Guido van Rossumeba76962007-05-27 09:13:28 +00001535 PyObject *promptarg = NULL;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001536 PyObject *fin = PySys_GetObject("stdin");
1537 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossumeba76962007-05-27 09:13:28 +00001538 PyObject *ferr = PySys_GetObject("stderr");
1539 PyObject *tmp;
1540 long fd;
1541 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001542
Guido van Rossumeba76962007-05-27 09:13:28 +00001543 /* Parse arguments */
1544 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg))
Guido van Rossuma88a0332007-02-26 16:59:55 +00001545 return NULL;
1546
Guido van Rossumeba76962007-05-27 09:13:28 +00001547 /* Check that stdin/out/err are intact */
Christian Heimes2be03732007-11-15 02:26:46 +00001548 if (fin == NULL || fin == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001549 PyErr_SetString(PyExc_RuntimeError,
1550 "input(): lost sys.stdin");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001551 return NULL;
1552 }
Christian Heimes2be03732007-11-15 02:26:46 +00001553 if (fout == NULL || fout == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001554 PyErr_SetString(PyExc_RuntimeError,
1555 "input(): lost sys.stdout");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001556 return NULL;
1557 }
Christian Heimes2be03732007-11-15 02:26:46 +00001558 if (ferr == NULL || ferr == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001559 PyErr_SetString(PyExc_RuntimeError,
1560 "input(): lost sys.stderr");
1561 return NULL;
1562 }
1563
1564 /* First of all, flush stderr */
1565 tmp = PyObject_CallMethod(ferr, "flush", "");
1566 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001567 PyErr_Clear();
1568 else
1569 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001570
1571 /* We should only use (GNU) readline if Python's sys.stdin and
1572 sys.stdout are the same as C's stdin and stdout, because we
1573 need to pass it those. */
1574 tmp = PyObject_CallMethod(fin, "fileno", "");
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001575 if (tmp == NULL) {
1576 PyErr_Clear();
1577 tty = 0;
1578 }
1579 else {
Christian Heimes217cfd12007-12-02 14:31:20 +00001580 fd = PyLong_AsLong(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001581 Py_DECREF(tmp);
1582 if (fd < 0 && PyErr_Occurred())
1583 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001584 tty = fd == fileno(stdin) && isatty(fd);
1585 }
1586 if (tty) {
1587 tmp = PyObject_CallMethod(fout, "fileno", "");
1588 if (tmp == NULL)
1589 PyErr_Clear();
1590 else {
Christian Heimes217cfd12007-12-02 14:31:20 +00001591 fd = PyLong_AsLong(tmp);
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001592 Py_DECREF(tmp);
1593 if (fd < 0 && PyErr_Occurred())
1594 return NULL;
1595 tty = fd == fileno(stdout) && isatty(fd);
1596 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001597 }
1598
1599 /* If we're interactive, use (GNU) readline */
1600 if (tty) {
Guido van Rossuma88a0332007-02-26 16:59:55 +00001601 PyObject *po;
1602 char *prompt;
1603 char *s;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001604 PyObject *stdin_encoding;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001605 PyObject *result;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001606
1607 stdin_encoding = PyObject_GetAttrString(fin, "encoding");
1608 if (!stdin_encoding)
1609 /* stdin is a text stream, so it must have an
1610 encoding. */
1611 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001612 tmp = PyObject_CallMethod(fout, "flush", "");
1613 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001614 PyErr_Clear();
1615 else
1616 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001617 if (promptarg != NULL) {
Amaury Forgeot d'Arcd0db98f2008-09-21 21:49:01 +00001618 PyObject *stringpo;
1619 PyObject *stdout_encoding;
1620 stdout_encoding = PyObject_GetAttrString(fout,
1621 "encoding");
1622 if (stdout_encoding == NULL) {
1623 Py_DECREF(stdin_encoding);
1624 return NULL;
1625 }
1626 stringpo = PyObject_Str(promptarg);
1627 if (stringpo == NULL) {
1628 Py_DECREF(stdin_encoding);
1629 Py_DECREF(stdout_encoding);
1630 return NULL;
1631 }
1632 po = PyUnicode_AsEncodedString(stringpo,
1633 _PyUnicode_AsString(stdout_encoding), NULL);
1634 Py_DECREF(stdout_encoding);
1635 Py_DECREF(stringpo);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001636 if (po == NULL) {
1637 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001638 return NULL;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001639 }
Amaury Forgeot d'Arcd0db98f2008-09-21 21:49:01 +00001640 prompt = PyBytes_AsString(po);
Guido van Rossumeba76962007-05-27 09:13:28 +00001641 if (prompt == NULL) {
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001642 Py_DECREF(stdin_encoding);
Guido van Rossumeba76962007-05-27 09:13:28 +00001643 Py_DECREF(po);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001644 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001645 }
Guido van Rossuma88a0332007-02-26 16:59:55 +00001646 }
1647 else {
1648 po = NULL;
1649 prompt = "";
1650 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001651 s = PyOS_Readline(stdin, stdout, prompt);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001652 Py_XDECREF(po);
1653 if (s == NULL) {
1654 if (!PyErr_Occurred())
1655 PyErr_SetNone(PyExc_KeyboardInterrupt);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001656 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001657 return NULL;
1658 }
1659 if (*s == '\0') {
1660 PyErr_SetNone(PyExc_EOFError);
1661 result = NULL;
1662 }
1663 else { /* strip trailing '\n' */
1664 size_t len = strlen(s);
1665 if (len > PY_SSIZE_T_MAX) {
1666 PyErr_SetString(PyExc_OverflowError,
1667 "input: input too long");
1668 result = NULL;
1669 }
1670 else {
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001671 result = PyUnicode_Decode
1672 (s, len-1,
Marc-André Lemburg4cc0f242008-08-07 18:54:33 +00001673 _PyUnicode_AsString(stdin_encoding),
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001674 NULL);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001675 }
1676 }
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001677 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001678 PyMem_FREE(s);
1679 return result;
1680 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001681
1682 /* Fallback if we're not interactive */
1683 if (promptarg != NULL) {
1684 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0)
Guido van Rossuma88a0332007-02-26 16:59:55 +00001685 return NULL;
1686 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001687 tmp = PyObject_CallMethod(fout, "flush", "");
1688 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001689 PyErr_Clear();
1690 else
1691 Py_DECREF(tmp);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001692 return PyFile_GetLine(fin, -1);
1693}
1694
1695PyDoc_STRVAR(input_doc,
1696"input([prompt]) -> string\n\
1697\n\
1698Read a string from standard input. The trailing newline is stripped.\n\
1699If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1700On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1701is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001702
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001703
Guido van Rossum79f25d91997-04-29 20:08:16 +00001704static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001705builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001706{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001707 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001708}
1709
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001710PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001711"repr(object) -> string\n\
1712\n\
1713Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001714For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001715
1716
Guido van Rossum79f25d91997-04-29 20:08:16 +00001717static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001718builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001719{
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001720#define UNDEF_NDIGITS (-0x7fffffff) /* Unlikely ndigits value */
1721 static PyObject *round_str = NULL;
1722 int ndigits = UNDEF_NDIGITS;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001723 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001724 PyObject *number, *round;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001725
Alex Martelliae211f92007-08-22 23:21:33 +00001726 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|i:round",
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001727 kwlist, &number, &ndigits))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001728 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00001729
Christian Heimes90aa7642007-12-19 02:45:37 +00001730 if (Py_TYPE(number)->tp_dict == NULL) {
1731 if (PyType_Ready(Py_TYPE(number)) < 0)
Guido van Rossum15d3d042007-08-24 02:02:45 +00001732 return NULL;
1733 }
1734
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001735 if (round_str == NULL) {
Christian Heimesfe82e772008-01-28 02:38:20 +00001736 round_str = PyUnicode_InternFromString("__round__");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001737 if (round_str == NULL)
Alex Martelliae211f92007-08-22 23:21:33 +00001738 return NULL;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001739 }
1740
Christian Heimes90aa7642007-12-19 02:45:37 +00001741 round = _PyType_Lookup(Py_TYPE(number), round_str);
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001742 if (round == NULL) {
1743 PyErr_Format(PyExc_TypeError,
1744 "type %.100s doesn't define __round__ method",
Christian Heimes90aa7642007-12-19 02:45:37 +00001745 Py_TYPE(number)->tp_name);
Alex Martelliae211f92007-08-22 23:21:33 +00001746 return NULL;
1747 }
1748
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001749 if (ndigits == UNDEF_NDIGITS)
1750 return PyObject_CallFunction(round, "O", number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001751 else
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001752 return PyObject_CallFunction(round, "Oi", number, ndigits);
1753#undef UNDEF_NDIGITS
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001754}
1755
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001756PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001757"round(number[, ndigits]) -> floating point number\n\
1758\n\
1759Round a number to a given precision in decimal digits (default 0 digits).\n\
Mark Dickinson0d748c22008-07-05 11:29:03 +00001760This returns an int when called with one argument, otherwise the\n\
Georg Brandl809ddaa2008-07-01 20:39:59 +00001761same type as the number. ndigits may be negative.");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001762
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001763
Raymond Hettinger64958a12003-12-17 20:43:33 +00001764static PyObject *
1765builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1766{
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001767 PyObject *newlist, *v, *seq, *keyfunc=NULL, *newargs;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001768 PyObject *callable;
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001769 static char *kwlist[] = {"iterable", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001770 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001771
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001772 /* args 1-3 should match listsort in Objects/listobject.c */
1773 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted",
1774 kwlist, &seq, &keyfunc, &reverse))
Armin Rigo71d7e702005-09-20 18:13:03 +00001775 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001776
1777 newlist = PySequence_List(seq);
1778 if (newlist == NULL)
1779 return NULL;
1780
1781 callable = PyObject_GetAttrString(newlist, "sort");
1782 if (callable == NULL) {
1783 Py_DECREF(newlist);
1784 return NULL;
1785 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001786
Raymond Hettinger64958a12003-12-17 20:43:33 +00001787 newargs = PyTuple_GetSlice(args, 1, 4);
1788 if (newargs == NULL) {
1789 Py_DECREF(newlist);
1790 Py_DECREF(callable);
1791 return NULL;
1792 }
1793
1794 v = PyObject_Call(callable, newargs, kwds);
1795 Py_DECREF(newargs);
1796 Py_DECREF(callable);
1797 if (v == NULL) {
1798 Py_DECREF(newlist);
1799 return NULL;
1800 }
1801 Py_DECREF(v);
1802 return newlist;
1803}
1804
1805PyDoc_STRVAR(sorted_doc,
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001806"sorted(iterable, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001807
Guido van Rossum79f25d91997-04-29 20:08:16 +00001808static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001809builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001810{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001811 PyObject *v = NULL;
1812 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001813
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001814 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001815 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001816 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001817 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001818 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001819 if (!PyErr_Occurred())
1820 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001821 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001822 }
1823 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001824 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001825 }
1826 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001827 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001828 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001829 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001830 "vars() argument must have __dict__ attribute");
1831 return NULL;
1832 }
1833 }
1834 return d;
1835}
1836
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001837PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001838"vars([object]) -> dictionary\n\
1839\n\
1840Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001841With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001842
Alex Martellia70b1912003-04-22 08:12:33 +00001843static PyObject*
1844builtin_sum(PyObject *self, PyObject *args)
1845{
1846 PyObject *seq;
1847 PyObject *result = NULL;
1848 PyObject *temp, *item, *iter;
1849
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001850 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001851 return NULL;
1852
1853 iter = PyObject_GetIter(seq);
1854 if (iter == NULL)
1855 return NULL;
1856
1857 if (result == NULL) {
Christian Heimes217cfd12007-12-02 14:31:20 +00001858 result = PyLong_FromLong(0);
Alex Martellia70b1912003-04-22 08:12:33 +00001859 if (result == NULL) {
1860 Py_DECREF(iter);
1861 return NULL;
1862 }
1863 } else {
1864 /* reject string values for 'start' parameter */
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001865 if (PyUnicode_Check(result)) {
Alex Martellia70b1912003-04-22 08:12:33 +00001866 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001867 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001868 Py_DECREF(iter);
1869 return NULL;
1870 }
Christian Heimes9c4756e2008-05-26 13:22:05 +00001871 if (PyByteArray_Check(result)) {
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001872 PyErr_SetString(PyExc_TypeError,
1873 "sum() can't sum bytes [use b''.join(seq) instead]");
1874 Py_DECREF(iter);
1875 return NULL;
1876 }
1877
Alex Martelli41c9f882003-04-22 09:24:48 +00001878 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001879 }
1880
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001881#ifndef SLOW_SUM
1882 /* Fast addition by keeping temporary sums in C instead of new Python objects.
1883 Assumes all inputs are the same type. If the assumption fails, default
1884 to the more general routine.
1885 */
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001886 if (PyLong_CheckExact(result)) {
1887 int overflow;
1888 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
1889 /* If this already overflowed, don't even enter the loop. */
1890 if (overflow == 0) {
1891 Py_DECREF(result);
1892 result = NULL;
1893 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001894 while(result == NULL) {
1895 item = PyIter_Next(iter);
1896 if (item == NULL) {
1897 Py_DECREF(iter);
1898 if (PyErr_Occurred())
1899 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001900 return PyLong_FromLong(i_result);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001901 }
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001902 if (PyLong_CheckExact(item)) {
1903 long b = PyLong_AsLongAndOverflow(item, &overflow);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001904 long x = i_result + b;
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001905 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001906 i_result = x;
1907 Py_DECREF(item);
1908 continue;
1909 }
1910 }
1911 /* Either overflowed or is not an int. Restore real objects and process normally */
Christian Heimes217cfd12007-12-02 14:31:20 +00001912 result = PyLong_FromLong(i_result);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001913 temp = PyNumber_Add(result, item);
1914 Py_DECREF(result);
1915 Py_DECREF(item);
1916 result = temp;
1917 if (result == NULL) {
1918 Py_DECREF(iter);
1919 return NULL;
1920 }
1921 }
1922 }
1923
1924 if (PyFloat_CheckExact(result)) {
1925 double f_result = PyFloat_AS_DOUBLE(result);
1926 Py_DECREF(result);
1927 result = NULL;
1928 while(result == NULL) {
1929 item = PyIter_Next(iter);
1930 if (item == NULL) {
1931 Py_DECREF(iter);
1932 if (PyErr_Occurred())
1933 return NULL;
1934 return PyFloat_FromDouble(f_result);
1935 }
1936 if (PyFloat_CheckExact(item)) {
Georg Brandlf08a9dd2008-06-10 16:57:31 +00001937 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001938 f_result += PyFloat_AS_DOUBLE(item);
1939 PyFPE_END_PROTECT(f_result)
1940 Py_DECREF(item);
1941 continue;
1942 }
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001943 if (PyLong_CheckExact(item)) {
1944 long value;
1945 int overflow;
1946 value = PyLong_AsLongAndOverflow(item, &overflow);
1947 if (!overflow) {
Georg Brandlf08a9dd2008-06-10 16:57:31 +00001948 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001949 f_result += (double)value;
1950 PyFPE_END_PROTECT(f_result)
1951 Py_DECREF(item);
1952 continue;
1953 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001954 }
1955 result = PyFloat_FromDouble(f_result);
1956 temp = PyNumber_Add(result, item);
1957 Py_DECREF(result);
1958 Py_DECREF(item);
1959 result = temp;
1960 if (result == NULL) {
1961 Py_DECREF(iter);
1962 return NULL;
1963 }
1964 }
1965 }
1966#endif
1967
Alex Martellia70b1912003-04-22 08:12:33 +00001968 for(;;) {
1969 item = PyIter_Next(iter);
1970 if (item == NULL) {
1971 /* error, or end-of-sequence */
1972 if (PyErr_Occurred()) {
1973 Py_DECREF(result);
1974 result = NULL;
1975 }
1976 break;
1977 }
Alex Martellia253e182003-10-25 23:24:14 +00001978 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001979 Py_DECREF(result);
1980 Py_DECREF(item);
1981 result = temp;
1982 if (result == NULL)
1983 break;
1984 }
1985 Py_DECREF(iter);
1986 return result;
1987}
1988
1989PyDoc_STRVAR(sum_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001990"sum(iterable[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00001991\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +00001992Returns the sum of an iterable of numbers (NOT strings) plus the value\n\
1993of parameter 'start' (which defaults to 0). When the iterable is\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00001994empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00001995
1996
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001997static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001998builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001999{
2000 PyObject *inst;
2001 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00002002 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002003
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002004 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002005 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002006
Guido van Rossum823649d2001-03-21 18:40:58 +00002007 retval = PyObject_IsInstance(inst, cls);
2008 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00002009 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002010 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002011}
2012
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002013PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002014"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002015\n\
2016Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002017With a type as second argument, return whether that is the object's type.\n\
2018The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002019isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002020
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002021
2022static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002023builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002024{
2025 PyObject *derived;
2026 PyObject *cls;
2027 int retval;
2028
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002029 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002030 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002031
Guido van Rossum823649d2001-03-21 18:40:58 +00002032 retval = PyObject_IsSubclass(derived, cls);
2033 if (retval < 0)
2034 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002035 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002036}
2037
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002038PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002039"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002040\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002041Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2042When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2043is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002044
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002045
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002046typedef struct {
2047 PyObject_HEAD
2048 Py_ssize_t tuplesize;
2049 PyObject *ittuple; /* tuple of iterators */
2050 PyObject *result;
2051} zipobject;
2052
2053PyTypeObject PyZip_Type;
2054
2055static PyObject *
2056zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002057{
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002058 zipobject *lz;
2059 Py_ssize_t i;
2060 PyObject *ittuple; /* tuple of iterators */
2061 PyObject *result;
2062 Py_ssize_t tuplesize = PySequence_Length(args);
2063
2064 if (type == &PyZip_Type && !_PyArg_NoKeywords("zip()", kwds))
2065 return NULL;
2066
Guido van Rossumb65fb332006-08-25 23:26:40 +00002067 /* args must be a tuple */
2068 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00002069
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002070 /* obtain iterators */
2071 ittuple = PyTuple_New(tuplesize);
2072 if (ittuple == NULL)
2073 return NULL;
2074 for (i=0; i < tuplesize; ++i) {
2075 PyObject *item = PyTuple_GET_ITEM(args, i);
2076 PyObject *it = PyObject_GetIter(item);
2077 if (it == NULL) {
2078 if (PyErr_ExceptionMatches(PyExc_TypeError))
2079 PyErr_Format(PyExc_TypeError,
2080 "zip argument #%zd must support iteration",
2081 i+1);
2082 Py_DECREF(ittuple);
2083 return NULL;
2084 }
2085 PyTuple_SET_ITEM(ittuple, i, it);
2086 }
2087
2088 /* create a result holder */
2089 result = PyTuple_New(tuplesize);
2090 if (result == NULL) {
2091 Py_DECREF(ittuple);
2092 return NULL;
2093 }
2094 for (i=0 ; i < tuplesize ; i++) {
2095 Py_INCREF(Py_None);
2096 PyTuple_SET_ITEM(result, i, Py_None);
2097 }
2098
2099 /* create zipobject structure */
2100 lz = (zipobject *)type->tp_alloc(type, 0);
2101 if (lz == NULL) {
2102 Py_DECREF(ittuple);
2103 Py_DECREF(result);
2104 return NULL;
2105 }
2106 lz->ittuple = ittuple;
2107 lz->tuplesize = tuplesize;
2108 lz->result = result;
2109
2110 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002111}
2112
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002113static void
2114zip_dealloc(zipobject *lz)
2115{
2116 PyObject_GC_UnTrack(lz);
2117 Py_XDECREF(lz->ittuple);
2118 Py_XDECREF(lz->result);
2119 Py_TYPE(lz)->tp_free(lz);
2120}
2121
2122static int
2123zip_traverse(zipobject *lz, visitproc visit, void *arg)
2124{
2125 Py_VISIT(lz->ittuple);
2126 Py_VISIT(lz->result);
2127 return 0;
2128}
2129
2130static PyObject *
2131zip_next(zipobject *lz)
2132{
2133 Py_ssize_t i;
2134 Py_ssize_t tuplesize = lz->tuplesize;
2135 PyObject *result = lz->result;
2136 PyObject *it;
2137 PyObject *item;
2138 PyObject *olditem;
2139
2140 if (tuplesize == 0)
2141 return NULL;
2142 if (Py_REFCNT(result) == 1) {
2143 Py_INCREF(result);
2144 for (i=0 ; i < tuplesize ; i++) {
2145 it = PyTuple_GET_ITEM(lz->ittuple, i);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002146 item = (*Py_TYPE(it)->tp_iternext)(it);
2147 if (item == NULL) {
2148 Py_DECREF(result);
2149 return NULL;
2150 }
2151 olditem = PyTuple_GET_ITEM(result, i);
2152 PyTuple_SET_ITEM(result, i, item);
2153 Py_DECREF(olditem);
2154 }
2155 } else {
2156 result = PyTuple_New(tuplesize);
2157 if (result == NULL)
2158 return NULL;
2159 for (i=0 ; i < tuplesize ; i++) {
2160 it = PyTuple_GET_ITEM(lz->ittuple, i);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002161 item = (*Py_TYPE(it)->tp_iternext)(it);
2162 if (item == NULL) {
2163 Py_DECREF(result);
2164 return NULL;
2165 }
2166 PyTuple_SET_ITEM(result, i, item);
2167 }
2168 }
2169 return result;
2170}
Barry Warsawbd599b52000-08-03 15:45:29 +00002171
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002172PyDoc_STRVAR(zip_doc,
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002173"zip(iter1 [,iter2 [...]]) --> zip object\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002174\n\
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002175Return a zip object whose .__next__() method returns a tuple where\n\
2176the i-th element comes from the i-th iterable argument. The .__next__()\n\
2177method continues until the shortest iterable in the argument sequence\n\
Georg Brandlced51db2008-12-04 18:28:38 +00002178is exhausted and then it raises StopIteration.");
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002179
2180PyTypeObject PyZip_Type = {
2181 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2182 "zip", /* tp_name */
2183 sizeof(zipobject), /* tp_basicsize */
2184 0, /* tp_itemsize */
2185 /* methods */
2186 (destructor)zip_dealloc, /* tp_dealloc */
2187 0, /* tp_print */
2188 0, /* tp_getattr */
2189 0, /* tp_setattr */
2190 0, /* tp_compare */
2191 0, /* tp_repr */
2192 0, /* tp_as_number */
2193 0, /* tp_as_sequence */
2194 0, /* tp_as_mapping */
2195 0, /* tp_hash */
2196 0, /* tp_call */
2197 0, /* tp_str */
2198 PyObject_GenericGetAttr, /* tp_getattro */
2199 0, /* tp_setattro */
2200 0, /* tp_as_buffer */
2201 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2202 Py_TPFLAGS_BASETYPE, /* tp_flags */
2203 zip_doc, /* tp_doc */
2204 (traverseproc)zip_traverse, /* tp_traverse */
2205 0, /* tp_clear */
2206 0, /* tp_richcompare */
2207 0, /* tp_weaklistoffset */
2208 PyObject_SelfIter, /* tp_iter */
2209 (iternextfunc)zip_next, /* tp_iternext */
2210 0, /* tp_methods */
2211 0, /* tp_members */
2212 0, /* tp_getset */
2213 0, /* tp_base */
2214 0, /* tp_dict */
2215 0, /* tp_descr_get */
2216 0, /* tp_descr_set */
2217 0, /* tp_dictoffset */
2218 0, /* tp_init */
2219 PyType_GenericAlloc, /* tp_alloc */
2220 zip_new, /* tp_new */
2221 PyObject_GC_Del, /* tp_free */
2222};
Barry Warsawbd599b52000-08-03 15:45:29 +00002223
2224
Guido van Rossum79f25d91997-04-29 20:08:16 +00002225static PyMethodDef builtin_methods[] = {
Guido van Rossum52cc1d82007-03-18 15:41:51 +00002226 {"__build_class__", (PyCFunction)builtin___build_class__,
2227 METH_VARARGS | METH_KEYWORDS, build_class_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002228 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002229 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002230 {"all", builtin_all, METH_O, all_doc},
2231 {"any", builtin_any, METH_O, any_doc},
Georg Brandl559e5d72008-06-11 18:37:52 +00002232 {"ascii", builtin_ascii, METH_O, ascii_doc},
Guido van Rossumcd16bf62007-06-13 18:07:49 +00002233 {"bin", builtin_bin, METH_O, bin_doc},
Neal Norwitzc2550c72007-08-31 04:17:51 +00002234 {"chr", builtin_chr, METH_VARARGS, chr_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002235 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
Guido van Rossumd8faa362007-04-27 19:54:29 +00002236 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002237 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2238 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2239 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2240 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00002241 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Eric Smith8c663262007-08-25 02:26:07 +00002242 {"format", builtin_format, METH_VARARGS, format_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002243 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2244 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2245 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2246 {"hash", builtin_hash, METH_O, hash_doc},
2247 {"hex", builtin_hex, METH_O, hex_doc},
2248 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00002249 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002250 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2251 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2252 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2253 {"len", builtin_len, METH_O, len_doc},
2254 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002255 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2256 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandla18af4e2007-04-21 15:47:16 +00002257 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002258 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002259 {"ord", builtin_ord, METH_O, ord_doc},
2260 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00002261 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002262 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002263 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002264 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002265 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002266 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002267 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002268 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002269};
2270
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002271PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002272"Built-in functions, exceptions, and other objects.\n\
2273\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002274Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002275
Martin v. Löwis1a214512008-06-11 05:26:20 +00002276static struct PyModuleDef builtinsmodule = {
2277 PyModuleDef_HEAD_INIT,
2278 "builtins",
2279 builtin_doc,
Christian Heimes6a27efa2008-10-30 21:48:26 +00002280 -1, /* multiple "initialization" just copies the module dict. */
Martin v. Löwis1a214512008-06-11 05:26:20 +00002281 builtin_methods,
2282 NULL,
2283 NULL,
2284 NULL,
2285 NULL
2286};
2287
2288
Guido van Rossum25ce5661997-08-02 03:10:38 +00002289PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002290_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002291{
Fred Drake5550de32000-06-20 04:54:19 +00002292 PyObject *mod, *dict, *debug;
Martin v. Löwis1a214512008-06-11 05:26:20 +00002293 mod = PyModule_Create(&builtinsmodule);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002294 if (mod == NULL)
2295 return NULL;
2296 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002297
Tim Peters7571a0f2003-03-23 17:52:28 +00002298#ifdef Py_TRACE_REFS
Georg Brandl1a3284e2007-12-02 09:40:06 +00002299 /* "builtins" exposes a number of statically allocated objects
Tim Peters7571a0f2003-03-23 17:52:28 +00002300 * that, before this code was added in 2.3, never showed up in
2301 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2302 * result, programs leaking references to None and False (etc)
2303 * couldn't be diagnosed by examining sys.getobjects(0).
2304 */
2305#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2306#else
2307#define ADD_TO_ALL(OBJECT) (void)0
2308#endif
2309
Tim Peters4b7625e2001-09-13 21:37:17 +00002310#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002311 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2312 return NULL; \
2313 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002314
2315 SETBUILTIN("None", Py_None);
2316 SETBUILTIN("Ellipsis", Py_Ellipsis);
2317 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002318 SETBUILTIN("False", Py_False);
2319 SETBUILTIN("True", Py_True);
2320 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbae07c92007-10-08 02:46:15 +00002321 SETBUILTIN("memoryview", &PyMemoryView_Type);
Christian Heimes9c4756e2008-05-26 13:22:05 +00002322 SETBUILTIN("bytearray", &PyByteArray_Type);
Christian Heimes72b710a2008-05-26 13:28:38 +00002323 SETBUILTIN("bytes", &PyBytes_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002324 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002325#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002326 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002327#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002328 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002329 SETBUILTIN("enumerate", &PyEnum_Type);
Raymond Hettinger17301e92008-03-13 00:19:26 +00002330 SETBUILTIN("filter", &PyFilter_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002331 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002332 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002333 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00002334 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002335 SETBUILTIN("list", &PyList_Type);
Raymond Hettingera6c60372008-03-13 01:26:19 +00002336 SETBUILTIN("map", &PyMap_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002337 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossum805365e2007-05-07 22:24:25 +00002338 SETBUILTIN("range", &PyRange_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002339 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002340 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002341 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002342 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Guido van Rossum572dbf82007-04-27 23:53:51 +00002343 SETBUILTIN("str", &PyUnicode_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002344 SETBUILTIN("super", &PySuper_Type);
2345 SETBUILTIN("tuple", &PyTuple_Type);
2346 SETBUILTIN("type", &PyType_Type);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002347 SETBUILTIN("zip", &PyZip_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002348 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002349 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2350 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002351 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002352 }
2353 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002354
Guido van Rossum25ce5661997-08-02 03:10:38 +00002355 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002356#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002357#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002358}