blob: 5597bc728e5a1ed4938a43d13111c3c5e53b4d51 [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 Hammond26cffde2001-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 Hammond26cffde2001-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 Hammond26cffde2001-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 Hammond26cffde2001-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 Hammond26cffde2001-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 static PyObject *round_str = NULL;
Mark Dickinson1124e712009-01-28 21:25:58 +00001721 PyObject *ndigits = NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001722 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001723 PyObject *number, *round;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001724
Mark Dickinson1124e712009-01-28 21:25:58 +00001725 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:round",
1726 kwlist, &number, &ndigits))
1727 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00001728
Christian Heimes90aa7642007-12-19 02:45:37 +00001729 if (Py_TYPE(number)->tp_dict == NULL) {
1730 if (PyType_Ready(Py_TYPE(number)) < 0)
Guido van Rossum15d3d042007-08-24 02:02:45 +00001731 return NULL;
1732 }
1733
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001734 if (round_str == NULL) {
Christian Heimesfe82e772008-01-28 02:38:20 +00001735 round_str = PyUnicode_InternFromString("__round__");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001736 if (round_str == NULL)
Alex Martelliae211f92007-08-22 23:21:33 +00001737 return NULL;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001738 }
1739
Christian Heimes90aa7642007-12-19 02:45:37 +00001740 round = _PyType_Lookup(Py_TYPE(number), round_str);
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001741 if (round == NULL) {
1742 PyErr_Format(PyExc_TypeError,
1743 "type %.100s doesn't define __round__ method",
Christian Heimes90aa7642007-12-19 02:45:37 +00001744 Py_TYPE(number)->tp_name);
Alex Martelliae211f92007-08-22 23:21:33 +00001745 return NULL;
1746 }
1747
Mark Dickinson1124e712009-01-28 21:25:58 +00001748 if (ndigits == NULL)
1749 return PyObject_CallFunction(round, "O", number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001750 else
Mark Dickinson1124e712009-01-28 21:25:58 +00001751 return PyObject_CallFunction(round, "OO", number, ndigits);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001752}
1753
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001754PyDoc_STRVAR(round_doc,
Mark Dickinson1124e712009-01-28 21:25:58 +00001755"round(number[, ndigits]) -> number\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001756\n\
1757Round a number to a given precision in decimal digits (default 0 digits).\n\
Mark Dickinson0d748c22008-07-05 11:29:03 +00001758This returns an int when called with one argument, otherwise the\n\
Georg Brandl809ddaa2008-07-01 20:39:59 +00001759same type as the number. ndigits may be negative.");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001760
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001761
Raymond Hettinger64958a12003-12-17 20:43:33 +00001762static PyObject *
1763builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1764{
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001765 PyObject *newlist, *v, *seq, *keyfunc=NULL, *newargs;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001766 PyObject *callable;
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001767 static char *kwlist[] = {"iterable", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001768 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001769
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001770 /* args 1-3 should match listsort in Objects/listobject.c */
1771 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted",
1772 kwlist, &seq, &keyfunc, &reverse))
Armin Rigo71d7e702005-09-20 18:13:03 +00001773 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001774
1775 newlist = PySequence_List(seq);
1776 if (newlist == NULL)
1777 return NULL;
1778
1779 callable = PyObject_GetAttrString(newlist, "sort");
1780 if (callable == NULL) {
1781 Py_DECREF(newlist);
1782 return NULL;
1783 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001784
Raymond Hettinger64958a12003-12-17 20:43:33 +00001785 newargs = PyTuple_GetSlice(args, 1, 4);
1786 if (newargs == NULL) {
1787 Py_DECREF(newlist);
1788 Py_DECREF(callable);
1789 return NULL;
1790 }
1791
1792 v = PyObject_Call(callable, newargs, kwds);
1793 Py_DECREF(newargs);
1794 Py_DECREF(callable);
1795 if (v == NULL) {
1796 Py_DECREF(newlist);
1797 return NULL;
1798 }
1799 Py_DECREF(v);
1800 return newlist;
1801}
1802
1803PyDoc_STRVAR(sorted_doc,
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001804"sorted(iterable, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001805
Guido van Rossum79f25d91997-04-29 20:08:16 +00001806static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001807builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001808{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001809 PyObject *v = NULL;
1810 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001811
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001812 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001813 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001814 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001815 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001816 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001817 if (!PyErr_Occurred())
1818 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001819 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001820 }
1821 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001822 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001823 }
1824 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001825 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001826 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001827 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001828 "vars() argument must have __dict__ attribute");
1829 return NULL;
1830 }
1831 }
1832 return d;
1833}
1834
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001835PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001836"vars([object]) -> dictionary\n\
1837\n\
1838Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001839With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001840
Alex Martellia70b1912003-04-22 08:12:33 +00001841static PyObject*
1842builtin_sum(PyObject *self, PyObject *args)
1843{
1844 PyObject *seq;
1845 PyObject *result = NULL;
1846 PyObject *temp, *item, *iter;
1847
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001848 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001849 return NULL;
1850
1851 iter = PyObject_GetIter(seq);
1852 if (iter == NULL)
1853 return NULL;
1854
1855 if (result == NULL) {
Christian Heimes217cfd12007-12-02 14:31:20 +00001856 result = PyLong_FromLong(0);
Alex Martellia70b1912003-04-22 08:12:33 +00001857 if (result == NULL) {
1858 Py_DECREF(iter);
1859 return NULL;
1860 }
1861 } else {
1862 /* reject string values for 'start' parameter */
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001863 if (PyUnicode_Check(result)) {
Alex Martellia70b1912003-04-22 08:12:33 +00001864 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001865 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001866 Py_DECREF(iter);
1867 return NULL;
1868 }
Christian Heimes9c4756e2008-05-26 13:22:05 +00001869 if (PyByteArray_Check(result)) {
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001870 PyErr_SetString(PyExc_TypeError,
1871 "sum() can't sum bytes [use b''.join(seq) instead]");
1872 Py_DECREF(iter);
1873 return NULL;
1874 }
1875
Alex Martelli41c9f882003-04-22 09:24:48 +00001876 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001877 }
1878
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001879#ifndef SLOW_SUM
1880 /* Fast addition by keeping temporary sums in C instead of new Python objects.
1881 Assumes all inputs are the same type. If the assumption fails, default
1882 to the more general routine.
1883 */
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001884 if (PyLong_CheckExact(result)) {
1885 int overflow;
1886 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
1887 /* If this already overflowed, don't even enter the loop. */
1888 if (overflow == 0) {
1889 Py_DECREF(result);
1890 result = NULL;
1891 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001892 while(result == NULL) {
1893 item = PyIter_Next(iter);
1894 if (item == NULL) {
1895 Py_DECREF(iter);
1896 if (PyErr_Occurred())
1897 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001898 return PyLong_FromLong(i_result);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001899 }
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001900 if (PyLong_CheckExact(item)) {
1901 long b = PyLong_AsLongAndOverflow(item, &overflow);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001902 long x = i_result + b;
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001903 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001904 i_result = x;
1905 Py_DECREF(item);
1906 continue;
1907 }
1908 }
1909 /* Either overflowed or is not an int. Restore real objects and process normally */
Christian Heimes217cfd12007-12-02 14:31:20 +00001910 result = PyLong_FromLong(i_result);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001911 temp = PyNumber_Add(result, item);
1912 Py_DECREF(result);
1913 Py_DECREF(item);
1914 result = temp;
1915 if (result == NULL) {
1916 Py_DECREF(iter);
1917 return NULL;
1918 }
1919 }
1920 }
1921
1922 if (PyFloat_CheckExact(result)) {
1923 double f_result = PyFloat_AS_DOUBLE(result);
1924 Py_DECREF(result);
1925 result = NULL;
1926 while(result == NULL) {
1927 item = PyIter_Next(iter);
1928 if (item == NULL) {
1929 Py_DECREF(iter);
1930 if (PyErr_Occurred())
1931 return NULL;
1932 return PyFloat_FromDouble(f_result);
1933 }
1934 if (PyFloat_CheckExact(item)) {
Georg Brandlf08a9dd2008-06-10 16:57:31 +00001935 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001936 f_result += PyFloat_AS_DOUBLE(item);
1937 PyFPE_END_PROTECT(f_result)
1938 Py_DECREF(item);
1939 continue;
1940 }
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001941 if (PyLong_CheckExact(item)) {
1942 long value;
1943 int overflow;
1944 value = PyLong_AsLongAndOverflow(item, &overflow);
1945 if (!overflow) {
Georg Brandlf08a9dd2008-06-10 16:57:31 +00001946 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001947 f_result += (double)value;
1948 PyFPE_END_PROTECT(f_result)
1949 Py_DECREF(item);
1950 continue;
1951 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001952 }
1953 result = PyFloat_FromDouble(f_result);
1954 temp = PyNumber_Add(result, item);
1955 Py_DECREF(result);
1956 Py_DECREF(item);
1957 result = temp;
1958 if (result == NULL) {
1959 Py_DECREF(iter);
1960 return NULL;
1961 }
1962 }
1963 }
1964#endif
1965
Alex Martellia70b1912003-04-22 08:12:33 +00001966 for(;;) {
1967 item = PyIter_Next(iter);
1968 if (item == NULL) {
1969 /* error, or end-of-sequence */
1970 if (PyErr_Occurred()) {
1971 Py_DECREF(result);
1972 result = NULL;
1973 }
1974 break;
1975 }
Alex Martellia253e182003-10-25 23:24:14 +00001976 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001977 Py_DECREF(result);
1978 Py_DECREF(item);
1979 result = temp;
1980 if (result == NULL)
1981 break;
1982 }
1983 Py_DECREF(iter);
1984 return result;
1985}
1986
1987PyDoc_STRVAR(sum_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001988"sum(iterable[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00001989\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +00001990Returns the sum of an iterable of numbers (NOT strings) plus the value\n\
1991of parameter 'start' (which defaults to 0). When the iterable is\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00001992empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00001993
1994
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001995static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001996builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001997{
1998 PyObject *inst;
1999 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00002000 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002001
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002002 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002003 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002004
Guido van Rossum823649d2001-03-21 18:40:58 +00002005 retval = PyObject_IsInstance(inst, cls);
2006 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00002007 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002008 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002009}
2010
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002011PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002012"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002013\n\
2014Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002015With a type as second argument, return whether that is the object's type.\n\
2016The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002017isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002018
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002019
2020static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002021builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002022{
2023 PyObject *derived;
2024 PyObject *cls;
2025 int retval;
2026
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002027 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002028 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002029
Guido van Rossum823649d2001-03-21 18:40:58 +00002030 retval = PyObject_IsSubclass(derived, cls);
2031 if (retval < 0)
2032 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002033 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002034}
2035
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002036PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002037"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002038\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002039Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2040When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2041is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002042
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002043
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002044typedef struct {
2045 PyObject_HEAD
2046 Py_ssize_t tuplesize;
2047 PyObject *ittuple; /* tuple of iterators */
2048 PyObject *result;
2049} zipobject;
2050
2051PyTypeObject PyZip_Type;
2052
2053static PyObject *
2054zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002055{
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002056 zipobject *lz;
2057 Py_ssize_t i;
2058 PyObject *ittuple; /* tuple of iterators */
2059 PyObject *result;
2060 Py_ssize_t tuplesize = PySequence_Length(args);
2061
2062 if (type == &PyZip_Type && !_PyArg_NoKeywords("zip()", kwds))
2063 return NULL;
2064
Guido van Rossumb65fb332006-08-25 23:26:40 +00002065 /* args must be a tuple */
2066 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00002067
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002068 /* obtain iterators */
2069 ittuple = PyTuple_New(tuplesize);
2070 if (ittuple == NULL)
2071 return NULL;
2072 for (i=0; i < tuplesize; ++i) {
2073 PyObject *item = PyTuple_GET_ITEM(args, i);
2074 PyObject *it = PyObject_GetIter(item);
2075 if (it == NULL) {
2076 if (PyErr_ExceptionMatches(PyExc_TypeError))
2077 PyErr_Format(PyExc_TypeError,
2078 "zip argument #%zd must support iteration",
2079 i+1);
2080 Py_DECREF(ittuple);
2081 return NULL;
2082 }
2083 PyTuple_SET_ITEM(ittuple, i, it);
2084 }
2085
2086 /* create a result holder */
2087 result = PyTuple_New(tuplesize);
2088 if (result == NULL) {
2089 Py_DECREF(ittuple);
2090 return NULL;
2091 }
2092 for (i=0 ; i < tuplesize ; i++) {
2093 Py_INCREF(Py_None);
2094 PyTuple_SET_ITEM(result, i, Py_None);
2095 }
2096
2097 /* create zipobject structure */
2098 lz = (zipobject *)type->tp_alloc(type, 0);
2099 if (lz == NULL) {
2100 Py_DECREF(ittuple);
2101 Py_DECREF(result);
2102 return NULL;
2103 }
2104 lz->ittuple = ittuple;
2105 lz->tuplesize = tuplesize;
2106 lz->result = result;
2107
2108 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002109}
2110
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002111static void
2112zip_dealloc(zipobject *lz)
2113{
2114 PyObject_GC_UnTrack(lz);
2115 Py_XDECREF(lz->ittuple);
2116 Py_XDECREF(lz->result);
2117 Py_TYPE(lz)->tp_free(lz);
2118}
2119
2120static int
2121zip_traverse(zipobject *lz, visitproc visit, void *arg)
2122{
2123 Py_VISIT(lz->ittuple);
2124 Py_VISIT(lz->result);
2125 return 0;
2126}
2127
2128static PyObject *
2129zip_next(zipobject *lz)
2130{
2131 Py_ssize_t i;
2132 Py_ssize_t tuplesize = lz->tuplesize;
2133 PyObject *result = lz->result;
2134 PyObject *it;
2135 PyObject *item;
2136 PyObject *olditem;
2137
2138 if (tuplesize == 0)
2139 return NULL;
2140 if (Py_REFCNT(result) == 1) {
2141 Py_INCREF(result);
2142 for (i=0 ; i < tuplesize ; i++) {
2143 it = PyTuple_GET_ITEM(lz->ittuple, i);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002144 item = (*Py_TYPE(it)->tp_iternext)(it);
2145 if (item == NULL) {
2146 Py_DECREF(result);
2147 return NULL;
2148 }
2149 olditem = PyTuple_GET_ITEM(result, i);
2150 PyTuple_SET_ITEM(result, i, item);
2151 Py_DECREF(olditem);
2152 }
2153 } else {
2154 result = PyTuple_New(tuplesize);
2155 if (result == NULL)
2156 return NULL;
2157 for (i=0 ; i < tuplesize ; i++) {
2158 it = PyTuple_GET_ITEM(lz->ittuple, i);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002159 item = (*Py_TYPE(it)->tp_iternext)(it);
2160 if (item == NULL) {
2161 Py_DECREF(result);
2162 return NULL;
2163 }
2164 PyTuple_SET_ITEM(result, i, item);
2165 }
2166 }
2167 return result;
2168}
Barry Warsawbd599b52000-08-03 15:45:29 +00002169
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002170PyDoc_STRVAR(zip_doc,
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002171"zip(iter1 [,iter2 [...]]) --> zip object\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002172\n\
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002173Return a zip object whose .__next__() method returns a tuple where\n\
2174the i-th element comes from the i-th iterable argument. The .__next__()\n\
2175method continues until the shortest iterable in the argument sequence\n\
Georg Brandlced51db2008-12-04 18:28:38 +00002176is exhausted and then it raises StopIteration.");
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002177
2178PyTypeObject PyZip_Type = {
2179 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2180 "zip", /* tp_name */
2181 sizeof(zipobject), /* tp_basicsize */
2182 0, /* tp_itemsize */
2183 /* methods */
2184 (destructor)zip_dealloc, /* tp_dealloc */
2185 0, /* tp_print */
2186 0, /* tp_getattr */
2187 0, /* tp_setattr */
2188 0, /* tp_compare */
2189 0, /* tp_repr */
2190 0, /* tp_as_number */
2191 0, /* tp_as_sequence */
2192 0, /* tp_as_mapping */
2193 0, /* tp_hash */
2194 0, /* tp_call */
2195 0, /* tp_str */
2196 PyObject_GenericGetAttr, /* tp_getattro */
2197 0, /* tp_setattro */
2198 0, /* tp_as_buffer */
2199 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2200 Py_TPFLAGS_BASETYPE, /* tp_flags */
2201 zip_doc, /* tp_doc */
2202 (traverseproc)zip_traverse, /* tp_traverse */
2203 0, /* tp_clear */
2204 0, /* tp_richcompare */
2205 0, /* tp_weaklistoffset */
2206 PyObject_SelfIter, /* tp_iter */
2207 (iternextfunc)zip_next, /* tp_iternext */
2208 0, /* tp_methods */
2209 0, /* tp_members */
2210 0, /* tp_getset */
2211 0, /* tp_base */
2212 0, /* tp_dict */
2213 0, /* tp_descr_get */
2214 0, /* tp_descr_set */
2215 0, /* tp_dictoffset */
2216 0, /* tp_init */
2217 PyType_GenericAlloc, /* tp_alloc */
2218 zip_new, /* tp_new */
2219 PyObject_GC_Del, /* tp_free */
2220};
Barry Warsawbd599b52000-08-03 15:45:29 +00002221
2222
Guido van Rossum79f25d91997-04-29 20:08:16 +00002223static PyMethodDef builtin_methods[] = {
Guido van Rossum52cc1d82007-03-18 15:41:51 +00002224 {"__build_class__", (PyCFunction)builtin___build_class__,
2225 METH_VARARGS | METH_KEYWORDS, build_class_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002226 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002227 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002228 {"all", builtin_all, METH_O, all_doc},
2229 {"any", builtin_any, METH_O, any_doc},
Georg Brandl559e5d72008-06-11 18:37:52 +00002230 {"ascii", builtin_ascii, METH_O, ascii_doc},
Guido van Rossumcd16bf62007-06-13 18:07:49 +00002231 {"bin", builtin_bin, METH_O, bin_doc},
Neal Norwitzc2550c72007-08-31 04:17:51 +00002232 {"chr", builtin_chr, METH_VARARGS, chr_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002233 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
Guido van Rossumd8faa362007-04-27 19:54:29 +00002234 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002235 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2236 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2237 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2238 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00002239 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Eric Smith8c663262007-08-25 02:26:07 +00002240 {"format", builtin_format, METH_VARARGS, format_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002241 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2242 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2243 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2244 {"hash", builtin_hash, METH_O, hash_doc},
2245 {"hex", builtin_hex, METH_O, hex_doc},
2246 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00002247 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002248 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2249 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2250 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2251 {"len", builtin_len, METH_O, len_doc},
2252 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002253 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2254 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandla18af4e2007-04-21 15:47:16 +00002255 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002256 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002257 {"ord", builtin_ord, METH_O, ord_doc},
2258 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00002259 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002260 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002261 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002262 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002263 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002264 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002265 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002266 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002267};
2268
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002269PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002270"Built-in functions, exceptions, and other objects.\n\
2271\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002272Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002273
Martin v. Löwis1a214512008-06-11 05:26:20 +00002274static struct PyModuleDef builtinsmodule = {
2275 PyModuleDef_HEAD_INIT,
2276 "builtins",
2277 builtin_doc,
Christian Heimes6a27efa2008-10-30 21:48:26 +00002278 -1, /* multiple "initialization" just copies the module dict. */
Martin v. Löwis1a214512008-06-11 05:26:20 +00002279 builtin_methods,
2280 NULL,
2281 NULL,
2282 NULL,
2283 NULL
2284};
2285
2286
Guido van Rossum25ce5661997-08-02 03:10:38 +00002287PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002288_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002289{
Fred Drake5550de32000-06-20 04:54:19 +00002290 PyObject *mod, *dict, *debug;
Martin v. Löwis1a214512008-06-11 05:26:20 +00002291 mod = PyModule_Create(&builtinsmodule);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002292 if (mod == NULL)
2293 return NULL;
2294 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002295
Tim Peters7571a0f2003-03-23 17:52:28 +00002296#ifdef Py_TRACE_REFS
Georg Brandl1a3284e2007-12-02 09:40:06 +00002297 /* "builtins" exposes a number of statically allocated objects
Tim Peters7571a0f2003-03-23 17:52:28 +00002298 * that, before this code was added in 2.3, never showed up in
2299 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2300 * result, programs leaking references to None and False (etc)
2301 * couldn't be diagnosed by examining sys.getobjects(0).
2302 */
2303#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2304#else
2305#define ADD_TO_ALL(OBJECT) (void)0
2306#endif
2307
Tim Peters4b7625e2001-09-13 21:37:17 +00002308#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002309 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2310 return NULL; \
2311 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002312
2313 SETBUILTIN("None", Py_None);
2314 SETBUILTIN("Ellipsis", Py_Ellipsis);
2315 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002316 SETBUILTIN("False", Py_False);
2317 SETBUILTIN("True", Py_True);
2318 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbae07c92007-10-08 02:46:15 +00002319 SETBUILTIN("memoryview", &PyMemoryView_Type);
Christian Heimes9c4756e2008-05-26 13:22:05 +00002320 SETBUILTIN("bytearray", &PyByteArray_Type);
Christian Heimes72b710a2008-05-26 13:28:38 +00002321 SETBUILTIN("bytes", &PyBytes_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002322 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002323#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002324 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002325#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002326 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002327 SETBUILTIN("enumerate", &PyEnum_Type);
Raymond Hettinger17301e92008-03-13 00:19:26 +00002328 SETBUILTIN("filter", &PyFilter_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002329 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002330 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002331 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00002332 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002333 SETBUILTIN("list", &PyList_Type);
Raymond Hettingera6c60372008-03-13 01:26:19 +00002334 SETBUILTIN("map", &PyMap_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002335 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossum805365e2007-05-07 22:24:25 +00002336 SETBUILTIN("range", &PyRange_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002337 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002338 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002339 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002340 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Guido van Rossum572dbf82007-04-27 23:53:51 +00002341 SETBUILTIN("str", &PyUnicode_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002342 SETBUILTIN("super", &PySuper_Type);
2343 SETBUILTIN("tuple", &PyTuple_Type);
2344 SETBUILTIN("type", &PyType_Type);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002345 SETBUILTIN("zip", &PyZip_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002346 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002347 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2348 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002349 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002350 }
2351 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002352
Guido van Rossum25ce5661997-08-02 03:10:38 +00002353 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002354#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002355#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002356}