blob: d7f5084a588d53a00d78af3c517f6e25384f550f [file] [log] [blame]
Guido van Rossum3f5da241990-12-20 15:06:42 +00001/* Built-in functions */
2
Guido van Rossum79f25d91997-04-29 20:08:16 +00003#include "Python.h"
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004#include "Python-ast.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00005
6#include "node.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00007#include "code.h"
Guido van Rossum5b722181993-03-30 17:46:03 +00008#include "eval.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00009
Guido van Rossum6bf62da1997-04-11 20:37:35 +000010#include <ctype.h>
11
Mark Hammond26cffde42001-05-14 12:17:34 +000012/* The default encoding used by the platform file system APIs
13 Can remain NULL for all platforms that don't have such a concept
Guido van Rossum00bc0e02007-10-15 02:52:41 +000014
15 Don't forget to modify PyUnicode_DecodeFSDefault() if you touch any of the
16 values for Py_FileSystemDefaultEncoding!
Mark Hammond26cffde42001-05-14 12:17:34 +000017*/
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000018#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
Mark Hammond26cffde42001-05-14 12:17:34 +000019const char *Py_FileSystemDefaultEncoding = "mbcs";
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000020int Py_HasFileSystemDefaultEncoding = 1;
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000021#elif defined(__APPLE__)
22const char *Py_FileSystemDefaultEncoding = "utf-8";
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000023int Py_HasFileSystemDefaultEncoding = 1;
Mark Hammond26cffde42001-05-14 12:17:34 +000024#else
25const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000026int Py_HasFileSystemDefaultEncoding = 0;
Mark Hammond26cffde42001-05-14 12:17:34 +000027#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000028
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000029int
30_Py_SetFileSystemEncoding(PyObject *s)
31{
32 PyObject *defenc;
33 if (!PyUnicode_Check(s)) {
34 PyErr_BadInternalCall();
35 return -1;
36 }
37 defenc = _PyUnicode_AsDefaultEncodedString(s, NULL);
38 if (!defenc)
39 return -1;
40 if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding)
41 /* A file system encoding was set at run-time */
42 free((char*)Py_FileSystemDefaultEncoding);
43 Py_FileSystemDefaultEncoding = strdup(PyBytes_AsString(defenc));
44 Py_HasFileSystemDefaultEncoding = 0;
45 return 0;
46}
47
Guido van Rossum79f25d91997-04-29 20:08:16 +000048static PyObject *
Guido van Rossum52cc1d82007-03-18 15:41:51 +000049builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds)
50{
Guido van Rossumcd16bf62007-06-13 18:07:49 +000051 PyObject *func, *name, *bases, *mkw, *meta, *prep, *ns, *cell;
52 PyObject *cls = NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +000053 Py_ssize_t nargs, nbases;
54
55 assert(args != NULL);
56 if (!PyTuple_Check(args)) {
57 PyErr_SetString(PyExc_TypeError,
58 "__build_class__: args is not a tuple");
59 return NULL;
60 }
61 nargs = PyTuple_GET_SIZE(args);
62 if (nargs < 2) {
63 PyErr_SetString(PyExc_TypeError,
64 "__build_class__: not enough arguments");
65 return NULL;
66 }
67 func = PyTuple_GET_ITEM(args, 0); /* Better be callable */
68 name = PyTuple_GET_ITEM(args, 1);
Neal Norwitz6ea45d32007-08-26 04:19:43 +000069 if (!PyUnicode_Check(name)) {
Guido van Rossum52cc1d82007-03-18 15:41:51 +000070 PyErr_SetString(PyExc_TypeError,
71 "__build_class__: name is not a string");
72 return NULL;
73 }
74 bases = PyTuple_GetSlice(args, 2, nargs);
75 if (bases == NULL)
76 return NULL;
77 nbases = nargs - 2;
78
79 if (kwds == NULL) {
80 meta = NULL;
81 mkw = NULL;
82 }
83 else {
84 mkw = PyDict_Copy(kwds); /* Don't modify kwds passed in! */
85 if (mkw == NULL) {
86 Py_DECREF(bases);
87 return NULL;
88 }
89 meta = PyDict_GetItemString(mkw, "metaclass");
90 if (meta != NULL) {
91 Py_INCREF(meta);
92 if (PyDict_DelItemString(mkw, "metaclass") < 0) {
93 Py_DECREF(meta);
94 Py_DECREF(mkw);
95 Py_DECREF(bases);
96 return NULL;
97 }
98 }
99 }
100 if (meta == NULL) {
101 if (PyTuple_GET_SIZE(bases) == 0)
102 meta = (PyObject *) (&PyType_Type);
103 else {
104 PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
105 meta = (PyObject *) (base0->ob_type);
106 }
107 Py_INCREF(meta);
108 }
109 prep = PyObject_GetAttrString(meta, "__prepare__");
110 if (prep == NULL) {
111 PyErr_Clear();
112 ns = PyDict_New();
113 }
114 else {
115 PyObject *pargs = Py_BuildValue("OO", name, bases);
116 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;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000136 margs = Py_BuildValue("OOO", name, bases, ns);
137 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
378 assert(PyIter_Check(it));
379 iternext = *Py_TYPE(it)->tp_iternext;
380 for (;;) {
381 item = iternext(it);
382 if (item == NULL)
383 return NULL;
384
385 if (lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type) {
386 ok = PyObject_IsTrue(item);
387 } else {
388 PyObject *good;
389 good = PyObject_CallFunctionObjArgs(lz->func,
390 item, NULL);
391 if (good == NULL) {
392 Py_DECREF(item);
393 return NULL;
394 }
395 ok = PyObject_IsTrue(good);
396 Py_DECREF(good);
397 }
398 if (ok)
399 return item;
400 Py_DECREF(item);
401 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000402}
403
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000404PyDoc_STRVAR(filter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +0000405"filter(function or None, iterable) --> filter object\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000406\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +0000407Return an iterator yielding those items of iterable for which function(item)\n\
Raymond Hettinger17301e92008-03-13 00:19:26 +0000408is true. If function is None, return the items that are true.");
409
410PyTypeObject PyFilter_Type = {
411 PyVarObject_HEAD_INIT(&PyType_Type, 0)
412 "filter", /* tp_name */
413 sizeof(filterobject), /* tp_basicsize */
414 0, /* tp_itemsize */
415 /* methods */
416 (destructor)filter_dealloc, /* tp_dealloc */
417 0, /* tp_print */
418 0, /* tp_getattr */
419 0, /* tp_setattr */
420 0, /* tp_compare */
421 0, /* tp_repr */
422 0, /* tp_as_number */
423 0, /* tp_as_sequence */
424 0, /* tp_as_mapping */
425 0, /* tp_hash */
426 0, /* tp_call */
427 0, /* tp_str */
428 PyObject_GenericGetAttr, /* tp_getattro */
429 0, /* tp_setattro */
430 0, /* tp_as_buffer */
431 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
432 Py_TPFLAGS_BASETYPE, /* tp_flags */
433 filter_doc, /* tp_doc */
434 (traverseproc)filter_traverse, /* tp_traverse */
435 0, /* tp_clear */
436 0, /* tp_richcompare */
437 0, /* tp_weaklistoffset */
438 PyObject_SelfIter, /* tp_iter */
439 (iternextfunc)filter_next, /* tp_iternext */
440 0, /* tp_methods */
441 0, /* tp_members */
442 0, /* tp_getset */
443 0, /* tp_base */
444 0, /* tp_dict */
445 0, /* tp_descr_get */
446 0, /* tp_descr_set */
447 0, /* tp_dictoffset */
448 0, /* tp_init */
449 PyType_GenericAlloc, /* tp_alloc */
450 filter_new, /* tp_new */
451 PyObject_GC_Del, /* tp_free */
452};
453
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000454
Eric Smith8c663262007-08-25 02:26:07 +0000455static PyObject *
456builtin_format(PyObject *self, PyObject *args)
457{
Christian Heimes94b7d3d2007-12-11 20:20:39 +0000458 PyObject *value;
Eric Smith8fd3eba2008-02-17 19:48:00 +0000459 PyObject *format_spec = NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000460
Eric Smith8fd3eba2008-02-17 19:48:00 +0000461 if (!PyArg_ParseTuple(args, "O|U:format", &value, &format_spec))
462 return NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000463
Eric Smith8fd3eba2008-02-17 19:48:00 +0000464 return PyObject_Format(value, format_spec);
Eric Smith8c663262007-08-25 02:26:07 +0000465}
466
Eric Smith8c663262007-08-25 02:26:07 +0000467PyDoc_STRVAR(format_doc,
Eric Smith81936692007-08-31 01:14:01 +0000468"format(value[, format_spec]) -> string\n\
Eric Smith8c663262007-08-25 02:26:07 +0000469\n\
Eric Smith81936692007-08-31 01:14:01 +0000470Returns value.__format__(format_spec)\n\
471format_spec defaults to \"\"");
472
Guido van Rossum7fcf2242007-05-04 17:43:11 +0000473static PyObject *
Walter Dörwalde7efd592007-06-05 20:07:21 +0000474builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000475{
Amaury Forgeot d'Arc7888d082008-08-01 01:06:32 +0000476 int x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000477
Amaury Forgeot d'Arc7888d082008-08-01 01:06:32 +0000478 if (!PyArg_ParseTuple(args, "i:chr", &x))
Guido van Rossum09095f32000-03-10 23:00:52 +0000479 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000480
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000481 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000482}
483
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000484PyDoc_VAR(chr_doc) = PyDoc_STR(
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000485"chr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000486\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000487Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000488)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000489#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000490PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000491"\nIf 0x10000 <= i, a surrogate pair is returned."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000492)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000493#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000494;
Guido van Rossum09095f32000-03-10 23:00:52 +0000495
496
497static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000498builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000499{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000500 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000501 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000502
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000503 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000504 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000505 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000506 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +0000507 return PyLong_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000508}
509
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000510PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000511"cmp(x, y) -> integer\n\
512\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000513Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000514
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000515
516static char *
Georg Brandl2cabc562008-08-28 07:57:16 +0000517source_as_string(PyObject *cmd, char *funcname, char *what)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000518{
519 char *str;
520 Py_ssize_t size;
521
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000522 if (PyUnicode_Check(cmd)) {
523 cmd = _PyUnicode_AsDefaultEncodedString(cmd, NULL);
524 if (cmd == NULL)
525 return NULL;
526 }
Guido van Rossuma4b8d1d2007-08-27 15:02:28 +0000527 else if (!PyObject_CheckReadBuffer(cmd)) {
Georg Brandl2cabc562008-08-28 07:57:16 +0000528 PyErr_Format(PyExc_TypeError,
529 "%s() arg 1 must be a %s object",
530 funcname, what);
Guido van Rossuma4b8d1d2007-08-27 15:02:28 +0000531 return NULL;
532 }
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000533 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &size) < 0) {
534 return NULL;
535 }
536 if (strlen(str) != size) {
537 PyErr_SetString(PyExc_TypeError,
538 "source code string cannot contain null bytes");
539 return NULL;
540 }
541 return str;
542}
543
Guido van Rossum79f25d91997-04-29 20:08:16 +0000544static PyObject *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000545builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000546{
547 char *str;
548 char *filename;
549 char *startstr;
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000550 int mode = -1;
Tim Peters6cd6a822001-08-17 22:11:27 +0000551 int dont_inherit = 0;
552 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000553 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000554 PyObject *cmd;
Guido van Rossumd8faa362007-04-27 19:54:29 +0000555 static char *kwlist[] = {"source", "filename", "mode", "flags",
556 "dont_inherit", NULL};
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000557 int start[] = {Py_file_input, Py_eval_input, Py_single_input};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000558
Guido van Rossumd8faa362007-04-27 19:54:29 +0000559 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
560 kwlist, &cmd, &filename, &startstr,
561 &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000562 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000563
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000564 cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000565
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000566 if (supplied_flags &
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000567 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000568 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000569 PyErr_SetString(PyExc_ValueError,
570 "compile(): unrecognised flags");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000571 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000572 }
573 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
574
Tim Peters6cd6a822001-08-17 22:11:27 +0000575 if (!dont_inherit) {
576 PyEval_MergeCompilerFlags(&cf);
577 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000578
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000579 if (strcmp(startstr, "exec") == 0)
580 mode = 0;
581 else if (strcmp(startstr, "eval") == 0)
582 mode = 1;
583 else if (strcmp(startstr, "single") == 0)
584 mode = 2;
585 else {
586 PyErr_SetString(PyExc_ValueError,
587 "compile() arg 3 must be 'exec', 'eval' or 'single'");
588 return NULL;
589 }
590
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000591 if (PyAST_Check(cmd)) {
592 PyObject *result;
593 if (supplied_flags & PyCF_ONLY_AST) {
594 Py_INCREF(cmd);
595 result = cmd;
596 }
597 else {
598 PyArena *arena;
599 mod_ty mod;
600
601 arena = PyArena_New();
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000602 mod = PyAST_obj2mod(cmd, arena, mode);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000603 if (mod == NULL) {
604 PyArena_Free(arena);
605 return NULL;
606 }
607 result = (PyObject*)PyAST_Compile(mod, filename,
608 &cf, arena);
609 PyArena_Free(arena);
610 }
611 return result;
612 }
613
Georg Brandl2cabc562008-08-28 07:57:16 +0000614 str = source_as_string(cmd, "compile", "string, bytes, AST or code");
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000615 if (str == NULL)
616 return NULL;
617
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000618 return Py_CompileStringFlags(str, filename, start[mode], &cf);
Guido van Rossum5b722181993-03-30 17:46:03 +0000619}
620
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000621PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000622"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000623\n\
624Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000625into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000626The filename will be used for run-time error messages.\n\
627The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000628single (interactive) statement, or 'eval' to compile an expression.\n\
629The flags argument, if present, controls which future statements influence\n\
630the compilation of the code.\n\
631The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
632the effects of any future statements in effect in the code calling\n\
633compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000634in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000635
Guido van Rossum79f25d91997-04-29 20:08:16 +0000636static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000637builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000638{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000639 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000640
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000641 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000642 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000643 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000644}
645
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000646PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000647"dir([object]) -> list of strings\n"
648"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000649"If called without an argument, return the names in the current scope.\n"
650"Else, return an alphabetized list of names comprising (some of) the attributes\n"
651"of the given object, and of attributes reachable from it.\n"
652"If the object supplies a method named __dir__, it will be used; otherwise\n"
653"the default dir() logic is used and returns:\n"
654" for a module object: the module's attributes.\n"
655" for a class object: its attributes, and recursively the attributes\n"
656" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000657" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000658" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000659
Guido van Rossum79f25d91997-04-29 20:08:16 +0000660static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000661builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000662{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000663 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000664
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000665 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000666 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000667 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000668}
669
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000670PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000671"divmod(x, y) -> (div, mod)\n\
672\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000673Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000674
675
Guido van Rossum79f25d91997-04-29 20:08:16 +0000676static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000677builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000678{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000679 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000680 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000681 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000682 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000683
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000684 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000685 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000686 if (locals != Py_None && !PyMapping_Check(locals)) {
687 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000688 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000689 }
690 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000691 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000692 "globals must be a real dict; try eval(expr, {}, mapping)"
693 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000694 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000695 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000696 if (globals == Py_None) {
697 globals = PyEval_GetGlobals();
698 if (locals == Py_None)
699 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000700 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000701 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000702 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000703
Georg Brandl77c85e62005-09-15 10:46:13 +0000704 if (globals == NULL || locals == NULL) {
705 PyErr_SetString(PyExc_TypeError,
706 "eval must be given globals and locals "
707 "when called without a frame");
708 return NULL;
709 }
710
Guido van Rossum79f25d91997-04-29 20:08:16 +0000711 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
712 if (PyDict_SetItemString(globals, "__builtins__",
713 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000714 return NULL;
715 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000716
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000717 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000718 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000719 PyErr_SetString(PyExc_TypeError,
720 "code object passed to eval() may not contain free variables");
721 return NULL;
722 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000723 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000724 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000725
Georg Brandl2cabc562008-08-28 07:57:16 +0000726 str = source_as_string(cmd, "eval", "string, bytes or code");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000727 if (str == NULL)
Guido van Rossum94390a41992-08-14 15:14:30 +0000728 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000729
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000730 while (*str == ' ' || *str == '\t')
731 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000732
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000733 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Tim Peters9fa96be2001-08-17 23:04:59 +0000734 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000735 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
736 Py_XDECREF(tmp);
737 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000738}
739
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000740PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000741"eval(source[, globals[, locals]]) -> value\n\
742\n\
743Evaluate the source in the context of globals and locals.\n\
744The source may be a string representing a Python expression\n\
745or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000746The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000747defaulting to the current globals and locals.\n\
748If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000749
Georg Brandl7cae87c2006-09-06 06:51:57 +0000750static PyObject *
751builtin_exec(PyObject *self, PyObject *args)
752{
753 PyObject *v;
754 PyObject *prog, *globals = Py_None, *locals = Py_None;
755 int plain = 0;
756
757 if (!PyArg_ParseTuple(args, "O|OO:exec", &prog, &globals, &locals))
758 return NULL;
759
760 if (globals == Py_None) {
761 globals = PyEval_GetGlobals();
762 if (locals == Py_None) {
763 locals = PyEval_GetLocals();
764 plain = 1;
765 }
766 if (!globals || !locals) {
767 PyErr_SetString(PyExc_SystemError,
768 "globals and locals cannot be NULL");
769 return NULL;
770 }
771 }
772 else if (locals == Py_None)
773 locals = globals;
Georg Brandl2cabc562008-08-28 07:57:16 +0000774
Georg Brandl7cae87c2006-09-06 06:51:57 +0000775 if (!PyDict_Check(globals)) {
776 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
777 globals->ob_type->tp_name);
778 return NULL;
779 }
780 if (!PyMapping_Check(locals)) {
781 PyErr_Format(PyExc_TypeError,
782 "arg 3 must be a mapping or None, not %.100s",
783 locals->ob_type->tp_name);
784 return NULL;
785 }
786 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
787 if (PyDict_SetItemString(globals, "__builtins__",
788 PyEval_GetBuiltins()) != 0)
789 return NULL;
790 }
791
792 if (PyCode_Check(prog)) {
793 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
794 PyErr_SetString(PyExc_TypeError,
795 "code object passed to exec() may not "
796 "contain free variables");
797 return NULL;
798 }
799 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
800 }
Georg Brandl7cae87c2006-09-06 06:51:57 +0000801 else {
Georg Brandl2cabc562008-08-28 07:57:16 +0000802 char *str = source_as_string(prog, "exec",
803 "string, bytes or code");
Georg Brandl7cae87c2006-09-06 06:51:57 +0000804 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000805 if (str == NULL)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000806 return NULL;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000807 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000808 if (PyEval_MergeCompilerFlags(&cf))
809 v = PyRun_StringFlags(str, Py_file_input, globals,
810 locals, &cf);
811 else
812 v = PyRun_String(str, Py_file_input, globals, locals);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000813 }
814 if (v == NULL)
815 return NULL;
816 Py_DECREF(v);
817 Py_RETURN_NONE;
818}
819
820PyDoc_STRVAR(exec_doc,
821"exec(object[, globals[, locals]])\n\
822\n\
823Read and execute code from a object, which can be a string, a code\n\
824object or a file object.\n\
825The globals and locals are dictionaries, defaulting to the current\n\
826globals and locals. If only globals is given, locals defaults to it.");
827
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000828
Guido van Rossum79f25d91997-04-29 20:08:16 +0000829static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000830builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000831{
Neal Norwitz6ea45d32007-08-26 04:19:43 +0000832 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000833 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000834
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000835 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000836 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000837
Martin v. Löwis5b222132007-06-10 09:51:05 +0000838 if (!PyUnicode_Check(name)) {
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000839 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000840 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000841 return NULL;
842 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000843 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000844 if (result == NULL && dflt != NULL &&
845 PyErr_ExceptionMatches(PyExc_AttributeError))
846 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000847 PyErr_Clear();
848 Py_INCREF(dflt);
849 result = dflt;
850 }
851 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000852}
853
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000854PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000855"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000856\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000857Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
858When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000859exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000860
861
Guido van Rossum79f25d91997-04-29 20:08:16 +0000862static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000863builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000864{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000865 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000866
Guido van Rossum79f25d91997-04-29 20:08:16 +0000867 d = PyEval_GetGlobals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000868 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000869 return d;
870}
871
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000872PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000873"globals() -> dictionary\n\
874\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000875Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000876
877
Guido van Rossum79f25d91997-04-29 20:08:16 +0000878static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000879builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000880{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000881 PyObject *v;
882 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000883
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000884 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000885 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000886 if (!PyUnicode_Check(name)) {
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000887 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000888 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000889 return NULL;
890 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000891 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000892 if (v == NULL) {
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000893 if (!PyErr_ExceptionMatches(PyExc_Exception))
894 return NULL;
895 else {
896 PyErr_Clear();
897 Py_INCREF(Py_False);
898 return Py_False;
899 }
Guido van Rossum9bfef441993-03-29 10:43:31 +0000900 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000901 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000902 Py_INCREF(Py_True);
903 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000904}
905
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000906PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000907"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000908\n\
909Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000910(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000911
912
Guido van Rossum79f25d91997-04-29 20:08:16 +0000913static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000914builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000915{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000916 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000917}
918
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000919PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000920"id(object) -> integer\n\
921\n\
922Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000923simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000924
925
Raymond Hettingera6c60372008-03-13 01:26:19 +0000926/* map object ************************************************************/
927
928typedef struct {
929 PyObject_HEAD
930 PyObject *iters;
931 PyObject *func;
932} mapobject;
933
934PyTypeObject PyMap_Type;
935
Guido van Rossum79f25d91997-04-29 20:08:16 +0000936static PyObject *
Raymond Hettingera6c60372008-03-13 01:26:19 +0000937map_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000938{
Raymond Hettingera6c60372008-03-13 01:26:19 +0000939 PyObject *it, *iters, *func;
940 mapobject *lz;
941 Py_ssize_t numargs, i;
942
943 if (type == &PyMap_Type && !_PyArg_NoKeywords("map()", kwds))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000944 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000945
946 numargs = PyTuple_Size(args);
947 if (numargs < 2) {
948 PyErr_SetString(PyExc_TypeError,
949 "map() must have at least two arguments.");
Tim Peters4e9afdc2001-05-03 23:54:49 +0000950 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000951 }
952
953 iters = PyTuple_New(numargs-1);
954 if (iters == NULL)
955 return NULL;
956
957 for (i=1 ; i<numargs ; i++) {
958 /* Get iterator. */
959 it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
960 if (it == NULL) {
961 Py_DECREF(iters);
962 return NULL;
963 }
964 PyTuple_SET_ITEM(iters, i-1, it);
965 }
966
967 /* create mapobject structure */
968 lz = (mapobject *)type->tp_alloc(type, 0);
969 if (lz == NULL) {
970 Py_DECREF(iters);
971 return NULL;
972 }
973 lz->iters = iters;
974 func = PyTuple_GET_ITEM(args, 0);
975 Py_INCREF(func);
976 lz->func = func;
977
978 return (PyObject *)lz;
979}
980
981static void
982map_dealloc(mapobject *lz)
983{
984 PyObject_GC_UnTrack(lz);
985 Py_XDECREF(lz->iters);
986 Py_XDECREF(lz->func);
987 Py_TYPE(lz)->tp_free(lz);
988}
989
990static int
991map_traverse(mapobject *lz, visitproc visit, void *arg)
992{
993 Py_VISIT(lz->iters);
994 Py_VISIT(lz->func);
995 return 0;
996}
997
998static PyObject *
999map_next(mapobject *lz)
1000{
1001 PyObject *val;
1002 PyObject *argtuple;
1003 PyObject *result;
1004 Py_ssize_t numargs, i;
1005
1006 numargs = PyTuple_Size(lz->iters);
1007 argtuple = PyTuple_New(numargs);
1008 if (argtuple == NULL)
1009 return NULL;
1010
1011 for (i=0 ; i<numargs ; i++) {
1012 val = PyIter_Next(PyTuple_GET_ITEM(lz->iters, i));
1013 if (val == NULL) {
1014 Py_DECREF(argtuple);
1015 return NULL;
1016 }
1017 PyTuple_SET_ITEM(argtuple, i, val);
1018 }
1019 result = PyObject_Call(lz->func, argtuple, NULL);
1020 Py_DECREF(argtuple);
Tim Peters4e9afdc2001-05-03 23:54:49 +00001021 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001022}
1023
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001024PyDoc_STRVAR(map_doc,
Raymond Hettingera6c60372008-03-13 01:26:19 +00001025"map(func, *iterables) --> map object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001026\n\
Raymond Hettingera6c60372008-03-13 01:26:19 +00001027Make an iterator that computes the function using arguments from\n\
1028each of the iterables. Stops when the shortest iterable is exhausted.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001029
Raymond Hettingera6c60372008-03-13 01:26:19 +00001030PyTypeObject PyMap_Type = {
1031 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1032 "map", /* tp_name */
1033 sizeof(mapobject), /* tp_basicsize */
1034 0, /* tp_itemsize */
1035 /* methods */
1036 (destructor)map_dealloc, /* tp_dealloc */
1037 0, /* tp_print */
1038 0, /* tp_getattr */
1039 0, /* tp_setattr */
1040 0, /* tp_compare */
1041 0, /* tp_repr */
1042 0, /* tp_as_number */
1043 0, /* tp_as_sequence */
1044 0, /* tp_as_mapping */
1045 0, /* tp_hash */
1046 0, /* tp_call */
1047 0, /* tp_str */
1048 PyObject_GenericGetAttr, /* tp_getattro */
1049 0, /* tp_setattro */
1050 0, /* tp_as_buffer */
1051 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1052 Py_TPFLAGS_BASETYPE, /* tp_flags */
1053 map_doc, /* tp_doc */
1054 (traverseproc)map_traverse, /* tp_traverse */
1055 0, /* tp_clear */
1056 0, /* tp_richcompare */
1057 0, /* tp_weaklistoffset */
1058 PyObject_SelfIter, /* tp_iter */
1059 (iternextfunc)map_next, /* tp_iternext */
1060 0, /* tp_methods */
1061 0, /* tp_members */
1062 0, /* tp_getset */
1063 0, /* tp_base */
1064 0, /* tp_dict */
1065 0, /* tp_descr_get */
1066 0, /* tp_descr_set */
1067 0, /* tp_dictoffset */
1068 0, /* tp_init */
1069 PyType_GenericAlloc, /* tp_alloc */
1070 map_new, /* tp_new */
1071 PyObject_GC_Del, /* tp_free */
1072};
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001073
Guido van Rossum79f25d91997-04-29 20:08:16 +00001074static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +00001075builtin_next(PyObject *self, PyObject *args)
1076{
1077 PyObject *it, *res;
1078 PyObject *def = NULL;
1079
1080 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1081 return NULL;
1082 if (!PyIter_Check(it)) {
1083 PyErr_Format(PyExc_TypeError,
Georg Brandlaaa63922008-04-30 19:47:01 +00001084 "%.200s object is not an iterator",
1085 it->ob_type->tp_name);
Georg Brandla18af4e2007-04-21 15:47:16 +00001086 return NULL;
1087 }
1088
1089 res = (*it->ob_type->tp_iternext)(it);
Georg Brandlaaa63922008-04-30 19:47:01 +00001090 if (res != NULL) {
1091 return res;
1092 } else if (def != NULL) {
1093 if (PyErr_Occurred()) {
1094 if(!PyErr_ExceptionMatches(PyExc_StopIteration))
Georg Brandla18af4e2007-04-21 15:47:16 +00001095 return NULL;
1096 PyErr_Clear();
Georg Brandla18af4e2007-04-21 15:47:16 +00001097 }
Georg Brandlaaa63922008-04-30 19:47:01 +00001098 Py_INCREF(def);
1099 return def;
1100 } else if (PyErr_Occurred()) {
1101 return NULL;
1102 } else {
1103 PyErr_SetNone(PyExc_StopIteration);
1104 return NULL;
Georg Brandla18af4e2007-04-21 15:47:16 +00001105 }
Georg Brandla18af4e2007-04-21 15:47:16 +00001106}
1107
1108PyDoc_STRVAR(next_doc,
1109"next(iterator[, default])\n\
1110\n\
1111Return the next item from the iterator. If default is given and the iterator\n\
1112is exhausted, it is returned instead of raising StopIteration.");
1113
1114
1115static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001116builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001117{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001118 PyObject *v;
1119 PyObject *name;
1120 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001121
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001122 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001123 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001124 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001125 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001126 Py_INCREF(Py_None);
1127 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001128}
1129
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001130PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001131"setattr(object, name, value)\n\
1132\n\
1133Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001134``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001135
1136
Guido van Rossum79f25d91997-04-29 20:08:16 +00001137static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001138builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001139{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001140 PyObject *v;
1141 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001142
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001143 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001144 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001145 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001146 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001147 Py_INCREF(Py_None);
1148 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001149}
1150
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001151PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001152"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001153\n\
1154Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001155``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001156
1157
Guido van Rossum79f25d91997-04-29 20:08:16 +00001158static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001159builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001160{
Guido van Rossum9bfef441993-03-29 10:43:31 +00001161 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001162
Guido van Rossum79f25d91997-04-29 20:08:16 +00001163 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001164 if (x == -1)
1165 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001166 return PyLong_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001167}
1168
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001169PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001170"hash(object) -> integer\n\
1171\n\
1172Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001173the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001174
1175
Guido van Rossum79f25d91997-04-29 20:08:16 +00001176static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001177builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001178{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001179 return PyNumber_ToBase(v, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001180}
1181
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001182PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001183"hex(number) -> string\n\
1184\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001185Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001186
1187
Guido van Rossum79f25d91997-04-29 20:08:16 +00001188static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001189builtin_iter(PyObject *self, PyObject *args)
1190{
1191 PyObject *v, *w = NULL;
1192
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001193 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001194 return NULL;
1195 if (w == NULL)
1196 return PyObject_GetIter(v);
1197 if (!PyCallable_Check(v)) {
1198 PyErr_SetString(PyExc_TypeError,
1199 "iter(v, w): v must be callable");
1200 return NULL;
1201 }
1202 return PyCallIter_New(v, w);
1203}
1204
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001205PyDoc_STRVAR(iter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001206"iter(iterable) -> iterator\n\
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001207iter(callable, sentinel) -> iterator\n\
1208\n\
1209Get an iterator from an object. In the first form, the argument must\n\
1210supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001211In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001212
1213
1214static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001215builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001216{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001217 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001218
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001219 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001220 if (res < 0 && PyErr_Occurred())
1221 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001222 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001223}
1224
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001225PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001226"len(object) -> integer\n\
1227\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001228Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001229
1230
Guido van Rossum79f25d91997-04-29 20:08:16 +00001231static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001232builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001233{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001234 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001235
Guido van Rossum79f25d91997-04-29 20:08:16 +00001236 d = PyEval_GetLocals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00001237 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001238 return d;
1239}
1240
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001241PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001242"locals() -> dictionary\n\
1243\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001244Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001245
1246
Guido van Rossum79f25d91997-04-29 20:08:16 +00001247static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001248min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001249{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001250 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001251 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001252
Guido van Rossum79f25d91997-04-29 20:08:16 +00001253 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001254 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001255 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001256 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001257
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001258 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1259 keyfunc = PyDict_GetItemString(kwds, "key");
1260 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001261 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001262 "%s() got an unexpected keyword argument", name);
1263 return NULL;
1264 }
Christian Heimesbbffeb62008-01-24 09:42:52 +00001265 Py_INCREF(keyfunc);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001266 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001267
Tim Petersc3074532001-05-03 07:00:32 +00001268 it = PyObject_GetIter(v);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001269 if (it == NULL) {
1270 Py_XDECREF(keyfunc);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001271 return NULL;
Christian Heimesbbffeb62008-01-24 09:42:52 +00001272 }
Tim Petersc3074532001-05-03 07:00:32 +00001273
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001274 maxitem = NULL; /* the result */
1275 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001276 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001277 /* get the value from the key function */
1278 if (keyfunc != NULL) {
1279 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1280 if (val == NULL)
1281 goto Fail_it_item;
1282 }
1283 /* no key function; the value is the item */
1284 else {
1285 val = item;
1286 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001287 }
Tim Petersc3074532001-05-03 07:00:32 +00001288
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001289 /* maximum value and item are unset; set them */
1290 if (maxval == NULL) {
1291 maxitem = item;
1292 maxval = val;
1293 }
1294 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001295 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001296 int cmp = PyObject_RichCompareBool(val, maxval, op);
1297 if (cmp < 0)
1298 goto Fail_it_item_and_val;
1299 else if (cmp > 0) {
1300 Py_DECREF(maxval);
1301 Py_DECREF(maxitem);
1302 maxval = val;
1303 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001304 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001305 else {
1306 Py_DECREF(item);
1307 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001308 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001309 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001310 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001311 if (PyErr_Occurred())
1312 goto Fail_it;
1313 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001314 PyErr_Format(PyExc_ValueError,
1315 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001316 assert(maxitem == NULL);
1317 }
1318 else
1319 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001320 Py_DECREF(it);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001321 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001322 return maxitem;
1323
1324Fail_it_item_and_val:
1325 Py_DECREF(val);
1326Fail_it_item:
1327 Py_DECREF(item);
1328Fail_it:
1329 Py_XDECREF(maxval);
1330 Py_XDECREF(maxitem);
1331 Py_DECREF(it);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001332 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001333 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001334}
1335
Guido van Rossum79f25d91997-04-29 20:08:16 +00001336static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001337builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001338{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001339 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001340}
1341
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001342PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001343"min(iterable[, key=func]) -> value\n\
1344min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001345\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001346With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001347With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001348
1349
Guido van Rossum79f25d91997-04-29 20:08:16 +00001350static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001351builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001352{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001353 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001354}
1355
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001356PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001357"max(iterable[, key=func]) -> value\n\
1358max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001359\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001360With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001361With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001362
1363
Guido van Rossum79f25d91997-04-29 20:08:16 +00001364static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001365builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001366{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001367 return PyNumber_ToBase(v, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001368}
1369
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001370PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001371"oct(number) -> string\n\
1372\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001373Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001374
1375
Guido van Rossum79f25d91997-04-29 20:08:16 +00001376static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001377builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001378{
Guido van Rossum09095f32000-03-10 23:00:52 +00001379 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001380 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001381
Christian Heimes72b710a2008-05-26 13:28:38 +00001382 if (PyBytes_Check(obj)) {
1383 size = PyBytes_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001384 if (size == 1) {
Christian Heimes72b710a2008-05-26 13:28:38 +00001385 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
Christian Heimes217cfd12007-12-02 14:31:20 +00001386 return PyLong_FromLong(ord);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001387 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001388 }
1389 else if (PyUnicode_Check(obj)) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001390 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001391 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001392 ord = (long)*PyUnicode_AS_UNICODE(obj);
Christian Heimes217cfd12007-12-02 14:31:20 +00001393 return PyLong_FromLong(ord);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001394 }
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001395#ifndef Py_UNICODE_WIDE
1396 if (size == 2) {
1397 /* Decode a valid surrogate pair */
1398 int c0 = PyUnicode_AS_UNICODE(obj)[0];
1399 int c1 = PyUnicode_AS_UNICODE(obj)[1];
1400 if (0xD800 <= c0 && c0 <= 0xDBFF &&
1401 0xDC00 <= c1 && c1 <= 0xDFFF) {
1402 ord = ((((c0 & 0x03FF) << 10) | (c1 & 0x03FF)) +
1403 0x00010000);
Christian Heimes217cfd12007-12-02 14:31:20 +00001404 return PyLong_FromLong(ord);
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001405 }
1406 }
1407#endif
Guido van Rossum6f376c42007-05-24 14:31:33 +00001408 }
Christian Heimes9c4756e2008-05-26 13:22:05 +00001409 else if (PyByteArray_Check(obj)) {
Guido van Rossum98f97462007-04-13 03:31:13 +00001410 /* XXX Hopefully this is temporary */
Christian Heimes9c4756e2008-05-26 13:22:05 +00001411 size = PyByteArray_GET_SIZE(obj);
Guido van Rossum98f97462007-04-13 03:31:13 +00001412 if (size == 1) {
Christian Heimes9c4756e2008-05-26 13:22:05 +00001413 ord = (long)((unsigned char)*PyByteArray_AS_STRING(obj));
Christian Heimes217cfd12007-12-02 14:31:20 +00001414 return PyLong_FromLong(ord);
Guido van Rossum98f97462007-04-13 03:31:13 +00001415 }
1416 }
1417 else {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001418 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001419 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001420 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001421 return NULL;
1422 }
1423
Guido van Rossumad991772001-01-12 16:03:05 +00001424 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001425 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001426 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001427 size);
1428 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001429}
1430
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001431PyDoc_VAR(ord_doc) = PyDoc_STR(
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001432"ord(c) -> integer\n\
1433\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001434Return the integer ordinal of a one-character string."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001435)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001436#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001437PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001438"\nA valid surrogate pair is also accepted."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001439)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001440#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001441;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001442
1443
Guido van Rossum79f25d91997-04-29 20:08:16 +00001444static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001445builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001446{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001447 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001448
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001449 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001450 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001451 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001452}
1453
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001454PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001455"pow(x, y[, z]) -> number\n\
1456\n\
1457With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001458equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001459
1460
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001461
Guido van Rossum34343512006-11-30 22:13:52 +00001462static PyObject *
1463builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1464{
1465 static char *kwlist[] = {"sep", "end", "file", 0};
Georg Brandl257d3d92007-02-26 10:35:10 +00001466 static PyObject *dummy_args;
Guido van Rossum34343512006-11-30 22:13:52 +00001467 PyObject *sep = NULL, *end = NULL, *file = NULL;
1468 int i, err;
1469
Georg Brandl257d3d92007-02-26 10:35:10 +00001470 if (dummy_args == NULL) {
1471 if (!(dummy_args = PyTuple_New(0)))
1472 return NULL;
1473 }
Georg Brandl88fc6642007-02-09 21:28:07 +00001474 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
Guido van Rossum34343512006-11-30 22:13:52 +00001475 kwlist, &sep, &end, &file))
Christian Heimesfef9bba2007-11-13 15:24:14 +00001476 return NULL;
1477 if (file == NULL || file == Py_None) {
Guido van Rossum34343512006-11-30 22:13:52 +00001478 file = PySys_GetObject("stdout");
Christian Heimesfef9bba2007-11-13 15:24:14 +00001479 /* sys.stdout may be None when FILE* stdout isn't connected */
1480 if (file == Py_None)
1481 Py_RETURN_NONE;
1482 }
Guido van Rossum34343512006-11-30 22:13:52 +00001483
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001484 if (sep && sep != Py_None && !PyUnicode_Check(sep)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001485 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001486 "sep must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001487 sep->ob_type->tp_name);
1488 return NULL;
1489 }
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001490 if (end && end != Py_None && !PyUnicode_Check(end)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001491 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001492 "end must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001493 end->ob_type->tp_name);
1494 return NULL;
1495 }
Guido van Rossum34343512006-11-30 22:13:52 +00001496
1497 for (i = 0; i < PyTuple_Size(args); i++) {
1498 if (i > 0) {
1499 if (sep == NULL || sep == Py_None)
1500 err = PyFile_WriteString(" ", file);
1501 else
1502 err = PyFile_WriteObject(sep, file,
1503 Py_PRINT_RAW);
1504 if (err)
1505 return NULL;
1506 }
1507 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1508 Py_PRINT_RAW);
1509 if (err)
1510 return NULL;
1511 }
1512
1513 if (end == NULL || end == Py_None)
1514 err = PyFile_WriteString("\n", file);
1515 else
1516 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1517 if (err)
1518 return NULL;
1519
1520 Py_RETURN_NONE;
1521}
1522
1523PyDoc_STRVAR(print_doc,
Georg Brandlcd5da7d2008-02-01 15:47:37 +00001524"print(value, ..., sep=' ', end='\\n', file=sys.stdout)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001525\n\
1526Prints the values to a stream, or to sys.stdout by default.\n\
1527Optional keyword arguments:\n\
1528file: a file-like object (stream); defaults to the current sys.stdout.\n\
1529sep: string inserted between values, default a space.\n\
1530end: string appended after the last value, default a newline.");
1531
1532
Guido van Rossuma88a0332007-02-26 16:59:55 +00001533static PyObject *
1534builtin_input(PyObject *self, PyObject *args)
1535{
Guido van Rossumeba76962007-05-27 09:13:28 +00001536 PyObject *promptarg = NULL;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001537 PyObject *fin = PySys_GetObject("stdin");
1538 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossumeba76962007-05-27 09:13:28 +00001539 PyObject *ferr = PySys_GetObject("stderr");
1540 PyObject *tmp;
1541 long fd;
1542 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001543
Guido van Rossumeba76962007-05-27 09:13:28 +00001544 /* Parse arguments */
1545 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg))
Guido van Rossuma88a0332007-02-26 16:59:55 +00001546 return NULL;
1547
Guido van Rossumeba76962007-05-27 09:13:28 +00001548 /* Check that stdin/out/err are intact */
Christian Heimes2be03732007-11-15 02:26:46 +00001549 if (fin == NULL || fin == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001550 PyErr_SetString(PyExc_RuntimeError,
1551 "input(): lost sys.stdin");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001552 return NULL;
1553 }
Christian Heimes2be03732007-11-15 02:26:46 +00001554 if (fout == NULL || fout == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001555 PyErr_SetString(PyExc_RuntimeError,
1556 "input(): lost sys.stdout");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001557 return NULL;
1558 }
Christian Heimes2be03732007-11-15 02:26:46 +00001559 if (ferr == NULL || ferr == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001560 PyErr_SetString(PyExc_RuntimeError,
1561 "input(): lost sys.stderr");
1562 return NULL;
1563 }
1564
1565 /* First of all, flush stderr */
1566 tmp = PyObject_CallMethod(ferr, "flush", "");
1567 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001568 PyErr_Clear();
1569 else
1570 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001571
1572 /* We should only use (GNU) readline if Python's sys.stdin and
1573 sys.stdout are the same as C's stdin and stdout, because we
1574 need to pass it those. */
1575 tmp = PyObject_CallMethod(fin, "fileno", "");
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001576 if (tmp == NULL) {
1577 PyErr_Clear();
1578 tty = 0;
1579 }
1580 else {
Christian Heimes217cfd12007-12-02 14:31:20 +00001581 fd = PyLong_AsLong(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001582 Py_DECREF(tmp);
1583 if (fd < 0 && PyErr_Occurred())
1584 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001585 tty = fd == fileno(stdin) && isatty(fd);
1586 }
1587 if (tty) {
1588 tmp = PyObject_CallMethod(fout, "fileno", "");
1589 if (tmp == NULL)
1590 PyErr_Clear();
1591 else {
Christian Heimes217cfd12007-12-02 14:31:20 +00001592 fd = PyLong_AsLong(tmp);
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001593 Py_DECREF(tmp);
1594 if (fd < 0 && PyErr_Occurred())
1595 return NULL;
1596 tty = fd == fileno(stdout) && isatty(fd);
1597 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001598 }
1599
1600 /* If we're interactive, use (GNU) readline */
1601 if (tty) {
Guido van Rossuma88a0332007-02-26 16:59:55 +00001602 PyObject *po;
1603 char *prompt;
1604 char *s;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001605 PyObject *stdin_encoding;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001606 PyObject *result;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001607
1608 stdin_encoding = PyObject_GetAttrString(fin, "encoding");
1609 if (!stdin_encoding)
1610 /* stdin is a text stream, so it must have an
1611 encoding. */
1612 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001613 tmp = PyObject_CallMethod(fout, "flush", "");
1614 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001615 PyErr_Clear();
1616 else
1617 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001618 if (promptarg != NULL) {
Amaury Forgeot d'Arcd0db98f2008-09-21 21:49:01 +00001619 PyObject *stringpo;
1620 PyObject *stdout_encoding;
1621 stdout_encoding = PyObject_GetAttrString(fout,
1622 "encoding");
1623 if (stdout_encoding == NULL) {
1624 Py_DECREF(stdin_encoding);
1625 return NULL;
1626 }
1627 stringpo = PyObject_Str(promptarg);
1628 if (stringpo == NULL) {
1629 Py_DECREF(stdin_encoding);
1630 Py_DECREF(stdout_encoding);
1631 return NULL;
1632 }
1633 po = PyUnicode_AsEncodedString(stringpo,
1634 _PyUnicode_AsString(stdout_encoding), NULL);
1635 Py_DECREF(stdout_encoding);
1636 Py_DECREF(stringpo);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001637 if (po == NULL) {
1638 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001639 return NULL;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001640 }
Amaury Forgeot d'Arcd0db98f2008-09-21 21:49:01 +00001641 prompt = PyBytes_AsString(po);
Guido van Rossumeba76962007-05-27 09:13:28 +00001642 if (prompt == NULL) {
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001643 Py_DECREF(stdin_encoding);
Guido van Rossumeba76962007-05-27 09:13:28 +00001644 Py_DECREF(po);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001645 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001646 }
Guido van Rossuma88a0332007-02-26 16:59:55 +00001647 }
1648 else {
1649 po = NULL;
1650 prompt = "";
1651 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001652 s = PyOS_Readline(stdin, stdout, prompt);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001653 Py_XDECREF(po);
1654 if (s == NULL) {
1655 if (!PyErr_Occurred())
1656 PyErr_SetNone(PyExc_KeyboardInterrupt);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001657 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001658 return NULL;
1659 }
1660 if (*s == '\0') {
1661 PyErr_SetNone(PyExc_EOFError);
1662 result = NULL;
1663 }
1664 else { /* strip trailing '\n' */
1665 size_t len = strlen(s);
1666 if (len > PY_SSIZE_T_MAX) {
1667 PyErr_SetString(PyExc_OverflowError,
1668 "input: input too long");
1669 result = NULL;
1670 }
1671 else {
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001672 result = PyUnicode_Decode
1673 (s, len-1,
Marc-André Lemburg4cc0f242008-08-07 18:54:33 +00001674 _PyUnicode_AsString(stdin_encoding),
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001675 NULL);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001676 }
1677 }
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001678 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001679 PyMem_FREE(s);
1680 return result;
1681 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001682
1683 /* Fallback if we're not interactive */
1684 if (promptarg != NULL) {
1685 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0)
Guido van Rossuma88a0332007-02-26 16:59:55 +00001686 return NULL;
1687 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001688 tmp = PyObject_CallMethod(fout, "flush", "");
1689 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001690 PyErr_Clear();
1691 else
1692 Py_DECREF(tmp);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001693 return PyFile_GetLine(fin, -1);
1694}
1695
1696PyDoc_STRVAR(input_doc,
1697"input([prompt]) -> string\n\
1698\n\
1699Read a string from standard input. The trailing newline is stripped.\n\
1700If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1701On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1702is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001703
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001704
Guido van Rossum79f25d91997-04-29 20:08:16 +00001705static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001706builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001707{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001708 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001709}
1710
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001711PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001712"repr(object) -> string\n\
1713\n\
1714Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001715For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001716
1717
Guido van Rossum79f25d91997-04-29 20:08:16 +00001718static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001719builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001720{
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001721#define UNDEF_NDIGITS (-0x7fffffff) /* Unlikely ndigits value */
1722 static PyObject *round_str = NULL;
1723 int ndigits = UNDEF_NDIGITS;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001724 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001725 PyObject *number, *round;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001726
Alex Martelliae211f92007-08-22 23:21:33 +00001727 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|i:round",
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001728 kwlist, &number, &ndigits))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001729 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00001730
Christian Heimes90aa7642007-12-19 02:45:37 +00001731 if (Py_TYPE(number)->tp_dict == NULL) {
1732 if (PyType_Ready(Py_TYPE(number)) < 0)
Guido van Rossum15d3d042007-08-24 02:02:45 +00001733 return NULL;
1734 }
1735
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001736 if (round_str == NULL) {
Christian Heimesfe82e772008-01-28 02:38:20 +00001737 round_str = PyUnicode_InternFromString("__round__");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001738 if (round_str == NULL)
Alex Martelliae211f92007-08-22 23:21:33 +00001739 return NULL;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001740 }
1741
Christian Heimes90aa7642007-12-19 02:45:37 +00001742 round = _PyType_Lookup(Py_TYPE(number), round_str);
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001743 if (round == NULL) {
1744 PyErr_Format(PyExc_TypeError,
1745 "type %.100s doesn't define __round__ method",
Christian Heimes90aa7642007-12-19 02:45:37 +00001746 Py_TYPE(number)->tp_name);
Alex Martelliae211f92007-08-22 23:21:33 +00001747 return NULL;
1748 }
1749
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001750 if (ndigits == UNDEF_NDIGITS)
1751 return PyObject_CallFunction(round, "O", number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001752 else
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001753 return PyObject_CallFunction(round, "Oi", number, ndigits);
1754#undef UNDEF_NDIGITS
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001755}
1756
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001757PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001758"round(number[, ndigits]) -> floating point number\n\
1759\n\
1760Round a number to a given precision in decimal digits (default 0 digits).\n\
Mark Dickinson0d748c22008-07-05 11:29:03 +00001761This returns an int when called with one argument, otherwise the\n\
Georg Brandl809ddaa2008-07-01 20:39:59 +00001762same type as the number. ndigits may be negative.");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001763
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001764
Raymond Hettinger64958a12003-12-17 20:43:33 +00001765static PyObject *
1766builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1767{
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001768 PyObject *newlist, *v, *seq, *keyfunc=NULL, *newargs;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001769 PyObject *callable;
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001770 static char *kwlist[] = {"iterable", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001771 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001772
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001773 /* args 1-3 should match listsort in Objects/listobject.c */
1774 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted",
1775 kwlist, &seq, &keyfunc, &reverse))
Armin Rigo71d7e702005-09-20 18:13:03 +00001776 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001777
1778 newlist = PySequence_List(seq);
1779 if (newlist == NULL)
1780 return NULL;
1781
1782 callable = PyObject_GetAttrString(newlist, "sort");
1783 if (callable == NULL) {
1784 Py_DECREF(newlist);
1785 return NULL;
1786 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001787
Raymond Hettinger64958a12003-12-17 20:43:33 +00001788 newargs = PyTuple_GetSlice(args, 1, 4);
1789 if (newargs == NULL) {
1790 Py_DECREF(newlist);
1791 Py_DECREF(callable);
1792 return NULL;
1793 }
1794
1795 v = PyObject_Call(callable, newargs, kwds);
1796 Py_DECREF(newargs);
1797 Py_DECREF(callable);
1798 if (v == NULL) {
1799 Py_DECREF(newlist);
1800 return NULL;
1801 }
1802 Py_DECREF(v);
1803 return newlist;
1804}
1805
1806PyDoc_STRVAR(sorted_doc,
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001807"sorted(iterable, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001808
Guido van Rossum79f25d91997-04-29 20:08:16 +00001809static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001810builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001811{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001812 PyObject *v = NULL;
1813 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001814
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001815 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001816 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001817 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001818 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001819 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001820 if (!PyErr_Occurred())
1821 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001822 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001823 }
1824 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001825 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001826 }
1827 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001828 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001829 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001830 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001831 "vars() argument must have __dict__ attribute");
1832 return NULL;
1833 }
1834 }
1835 return d;
1836}
1837
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001838PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001839"vars([object]) -> dictionary\n\
1840\n\
1841Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001842With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001843
Alex Martellia70b1912003-04-22 08:12:33 +00001844static PyObject*
1845builtin_sum(PyObject *self, PyObject *args)
1846{
1847 PyObject *seq;
1848 PyObject *result = NULL;
1849 PyObject *temp, *item, *iter;
1850
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001851 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001852 return NULL;
1853
1854 iter = PyObject_GetIter(seq);
1855 if (iter == NULL)
1856 return NULL;
1857
1858 if (result == NULL) {
Christian Heimes217cfd12007-12-02 14:31:20 +00001859 result = PyLong_FromLong(0);
Alex Martellia70b1912003-04-22 08:12:33 +00001860 if (result == NULL) {
1861 Py_DECREF(iter);
1862 return NULL;
1863 }
1864 } else {
1865 /* reject string values for 'start' parameter */
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001866 if (PyUnicode_Check(result)) {
Alex Martellia70b1912003-04-22 08:12:33 +00001867 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001868 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001869 Py_DECREF(iter);
1870 return NULL;
1871 }
Christian Heimes9c4756e2008-05-26 13:22:05 +00001872 if (PyByteArray_Check(result)) {
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001873 PyErr_SetString(PyExc_TypeError,
1874 "sum() can't sum bytes [use b''.join(seq) instead]");
1875 Py_DECREF(iter);
1876 return NULL;
1877 }
1878
Alex Martelli41c9f882003-04-22 09:24:48 +00001879 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001880 }
1881
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001882#ifndef SLOW_SUM
1883 /* Fast addition by keeping temporary sums in C instead of new Python objects.
1884 Assumes all inputs are the same type. If the assumption fails, default
1885 to the more general routine.
1886 */
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001887 if (PyLong_CheckExact(result)) {
1888 int overflow;
1889 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
1890 /* If this already overflowed, don't even enter the loop. */
1891 if (overflow == 0) {
1892 Py_DECREF(result);
1893 result = NULL;
1894 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001895 while(result == NULL) {
1896 item = PyIter_Next(iter);
1897 if (item == NULL) {
1898 Py_DECREF(iter);
1899 if (PyErr_Occurred())
1900 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001901 return PyLong_FromLong(i_result);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001902 }
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001903 if (PyLong_CheckExact(item)) {
1904 long b = PyLong_AsLongAndOverflow(item, &overflow);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001905 long x = i_result + b;
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001906 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001907 i_result = x;
1908 Py_DECREF(item);
1909 continue;
1910 }
1911 }
1912 /* Either overflowed or is not an int. Restore real objects and process normally */
Christian Heimes217cfd12007-12-02 14:31:20 +00001913 result = PyLong_FromLong(i_result);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001914 temp = PyNumber_Add(result, item);
1915 Py_DECREF(result);
1916 Py_DECREF(item);
1917 result = temp;
1918 if (result == NULL) {
1919 Py_DECREF(iter);
1920 return NULL;
1921 }
1922 }
1923 }
1924
1925 if (PyFloat_CheckExact(result)) {
1926 double f_result = PyFloat_AS_DOUBLE(result);
1927 Py_DECREF(result);
1928 result = NULL;
1929 while(result == NULL) {
1930 item = PyIter_Next(iter);
1931 if (item == NULL) {
1932 Py_DECREF(iter);
1933 if (PyErr_Occurred())
1934 return NULL;
1935 return PyFloat_FromDouble(f_result);
1936 }
1937 if (PyFloat_CheckExact(item)) {
Georg Brandlf08a9dd2008-06-10 16:57:31 +00001938 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001939 f_result += PyFloat_AS_DOUBLE(item);
1940 PyFPE_END_PROTECT(f_result)
1941 Py_DECREF(item);
1942 continue;
1943 }
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001944 if (PyLong_CheckExact(item)) {
1945 long value;
1946 int overflow;
1947 value = PyLong_AsLongAndOverflow(item, &overflow);
1948 if (!overflow) {
Georg Brandlf08a9dd2008-06-10 16:57:31 +00001949 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001950 f_result += (double)value;
1951 PyFPE_END_PROTECT(f_result)
1952 Py_DECREF(item);
1953 continue;
1954 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001955 }
1956 result = PyFloat_FromDouble(f_result);
1957 temp = PyNumber_Add(result, item);
1958 Py_DECREF(result);
1959 Py_DECREF(item);
1960 result = temp;
1961 if (result == NULL) {
1962 Py_DECREF(iter);
1963 return NULL;
1964 }
1965 }
1966 }
1967#endif
1968
Alex Martellia70b1912003-04-22 08:12:33 +00001969 for(;;) {
1970 item = PyIter_Next(iter);
1971 if (item == NULL) {
1972 /* error, or end-of-sequence */
1973 if (PyErr_Occurred()) {
1974 Py_DECREF(result);
1975 result = NULL;
1976 }
1977 break;
1978 }
Alex Martellia253e182003-10-25 23:24:14 +00001979 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001980 Py_DECREF(result);
1981 Py_DECREF(item);
1982 result = temp;
1983 if (result == NULL)
1984 break;
1985 }
1986 Py_DECREF(iter);
1987 return result;
1988}
1989
1990PyDoc_STRVAR(sum_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001991"sum(iterable[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00001992\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +00001993Returns the sum of an iterable of numbers (NOT strings) plus the value\n\
1994of parameter 'start' (which defaults to 0). When the iterable is\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00001995empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00001996
1997
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001998static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001999builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002000{
2001 PyObject *inst;
2002 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00002003 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002004
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002005 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002006 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002007
Guido van Rossum823649d2001-03-21 18:40:58 +00002008 retval = PyObject_IsInstance(inst, cls);
2009 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00002010 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002011 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002012}
2013
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002014PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002015"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002016\n\
2017Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002018With a type as second argument, return whether that is the object's type.\n\
2019The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002020isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002021
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002022
2023static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002024builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002025{
2026 PyObject *derived;
2027 PyObject *cls;
2028 int retval;
2029
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002030 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002031 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002032
Guido van Rossum823649d2001-03-21 18:40:58 +00002033 retval = PyObject_IsSubclass(derived, cls);
2034 if (retval < 0)
2035 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002036 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002037}
2038
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002039PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002040"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002041\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002042Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2043When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2044is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002045
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002046
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002047typedef struct {
2048 PyObject_HEAD
2049 Py_ssize_t tuplesize;
2050 PyObject *ittuple; /* tuple of iterators */
2051 PyObject *result;
2052} zipobject;
2053
2054PyTypeObject PyZip_Type;
2055
2056static PyObject *
2057zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002058{
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002059 zipobject *lz;
2060 Py_ssize_t i;
2061 PyObject *ittuple; /* tuple of iterators */
2062 PyObject *result;
2063 Py_ssize_t tuplesize = PySequence_Length(args);
2064
2065 if (type == &PyZip_Type && !_PyArg_NoKeywords("zip()", kwds))
2066 return NULL;
2067
Guido van Rossumb65fb332006-08-25 23:26:40 +00002068 /* args must be a tuple */
2069 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00002070
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002071 /* obtain iterators */
2072 ittuple = PyTuple_New(tuplesize);
2073 if (ittuple == NULL)
2074 return NULL;
2075 for (i=0; i < tuplesize; ++i) {
2076 PyObject *item = PyTuple_GET_ITEM(args, i);
2077 PyObject *it = PyObject_GetIter(item);
2078 if (it == NULL) {
2079 if (PyErr_ExceptionMatches(PyExc_TypeError))
2080 PyErr_Format(PyExc_TypeError,
2081 "zip argument #%zd must support iteration",
2082 i+1);
2083 Py_DECREF(ittuple);
2084 return NULL;
2085 }
2086 PyTuple_SET_ITEM(ittuple, i, it);
2087 }
2088
2089 /* create a result holder */
2090 result = PyTuple_New(tuplesize);
2091 if (result == NULL) {
2092 Py_DECREF(ittuple);
2093 return NULL;
2094 }
2095 for (i=0 ; i < tuplesize ; i++) {
2096 Py_INCREF(Py_None);
2097 PyTuple_SET_ITEM(result, i, Py_None);
2098 }
2099
2100 /* create zipobject structure */
2101 lz = (zipobject *)type->tp_alloc(type, 0);
2102 if (lz == NULL) {
2103 Py_DECREF(ittuple);
2104 Py_DECREF(result);
2105 return NULL;
2106 }
2107 lz->ittuple = ittuple;
2108 lz->tuplesize = tuplesize;
2109 lz->result = result;
2110
2111 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002112}
2113
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002114static void
2115zip_dealloc(zipobject *lz)
2116{
2117 PyObject_GC_UnTrack(lz);
2118 Py_XDECREF(lz->ittuple);
2119 Py_XDECREF(lz->result);
2120 Py_TYPE(lz)->tp_free(lz);
2121}
2122
2123static int
2124zip_traverse(zipobject *lz, visitproc visit, void *arg)
2125{
2126 Py_VISIT(lz->ittuple);
2127 Py_VISIT(lz->result);
2128 return 0;
2129}
2130
2131static PyObject *
2132zip_next(zipobject *lz)
2133{
2134 Py_ssize_t i;
2135 Py_ssize_t tuplesize = lz->tuplesize;
2136 PyObject *result = lz->result;
2137 PyObject *it;
2138 PyObject *item;
2139 PyObject *olditem;
2140
2141 if (tuplesize == 0)
2142 return NULL;
2143 if (Py_REFCNT(result) == 1) {
2144 Py_INCREF(result);
2145 for (i=0 ; i < tuplesize ; i++) {
2146 it = PyTuple_GET_ITEM(lz->ittuple, i);
2147 assert(PyIter_Check(it));
2148 item = (*Py_TYPE(it)->tp_iternext)(it);
2149 if (item == NULL) {
2150 Py_DECREF(result);
2151 return NULL;
2152 }
2153 olditem = PyTuple_GET_ITEM(result, i);
2154 PyTuple_SET_ITEM(result, i, item);
2155 Py_DECREF(olditem);
2156 }
2157 } else {
2158 result = PyTuple_New(tuplesize);
2159 if (result == NULL)
2160 return NULL;
2161 for (i=0 ; i < tuplesize ; i++) {
2162 it = PyTuple_GET_ITEM(lz->ittuple, i);
2163 assert(PyIter_Check(it));
2164 item = (*Py_TYPE(it)->tp_iternext)(it);
2165 if (item == NULL) {
2166 Py_DECREF(result);
2167 return NULL;
2168 }
2169 PyTuple_SET_ITEM(result, i, item);
2170 }
2171 }
2172 return result;
2173}
Barry Warsawbd599b52000-08-03 15:45:29 +00002174
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002175PyDoc_STRVAR(zip_doc,
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002176"zip(iter1 [,iter2 [...]]) --> zip object\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002177\n\
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002178Return a zip object whose .__next__() method returns a tuple where\n\
2179the i-th element comes from the i-th iterable argument. The .__next__()\n\
2180method continues until the shortest iterable in the argument sequence\n\
2181is exhausted and then it raises StopIteration. Works like the zip()\n\
2182function but consumes less memory by returning an iterator instead of\n\
2183a list.");
2184
2185PyTypeObject PyZip_Type = {
2186 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2187 "zip", /* tp_name */
2188 sizeof(zipobject), /* tp_basicsize */
2189 0, /* tp_itemsize */
2190 /* methods */
2191 (destructor)zip_dealloc, /* tp_dealloc */
2192 0, /* tp_print */
2193 0, /* tp_getattr */
2194 0, /* tp_setattr */
2195 0, /* tp_compare */
2196 0, /* tp_repr */
2197 0, /* tp_as_number */
2198 0, /* tp_as_sequence */
2199 0, /* tp_as_mapping */
2200 0, /* tp_hash */
2201 0, /* tp_call */
2202 0, /* tp_str */
2203 PyObject_GenericGetAttr, /* tp_getattro */
2204 0, /* tp_setattro */
2205 0, /* tp_as_buffer */
2206 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2207 Py_TPFLAGS_BASETYPE, /* tp_flags */
2208 zip_doc, /* tp_doc */
2209 (traverseproc)zip_traverse, /* tp_traverse */
2210 0, /* tp_clear */
2211 0, /* tp_richcompare */
2212 0, /* tp_weaklistoffset */
2213 PyObject_SelfIter, /* tp_iter */
2214 (iternextfunc)zip_next, /* tp_iternext */
2215 0, /* tp_methods */
2216 0, /* tp_members */
2217 0, /* tp_getset */
2218 0, /* tp_base */
2219 0, /* tp_dict */
2220 0, /* tp_descr_get */
2221 0, /* tp_descr_set */
2222 0, /* tp_dictoffset */
2223 0, /* tp_init */
2224 PyType_GenericAlloc, /* tp_alloc */
2225 zip_new, /* tp_new */
2226 PyObject_GC_Del, /* tp_free */
2227};
Barry Warsawbd599b52000-08-03 15:45:29 +00002228
2229
Guido van Rossum79f25d91997-04-29 20:08:16 +00002230static PyMethodDef builtin_methods[] = {
Guido van Rossum52cc1d82007-03-18 15:41:51 +00002231 {"__build_class__", (PyCFunction)builtin___build_class__,
2232 METH_VARARGS | METH_KEYWORDS, build_class_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002233 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002234 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002235 {"all", builtin_all, METH_O, all_doc},
2236 {"any", builtin_any, METH_O, any_doc},
Georg Brandl559e5d72008-06-11 18:37:52 +00002237 {"ascii", builtin_ascii, METH_O, ascii_doc},
Guido van Rossumcd16bf62007-06-13 18:07:49 +00002238 {"bin", builtin_bin, METH_O, bin_doc},
Neal Norwitzc2550c72007-08-31 04:17:51 +00002239 {"chr", builtin_chr, METH_VARARGS, chr_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002240 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
Guido van Rossumd8faa362007-04-27 19:54:29 +00002241 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002242 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2243 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2244 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2245 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00002246 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Eric Smith8c663262007-08-25 02:26:07 +00002247 {"format", builtin_format, METH_VARARGS, format_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002248 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2249 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2250 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2251 {"hash", builtin_hash, METH_O, hash_doc},
2252 {"hex", builtin_hex, METH_O, hex_doc},
2253 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00002254 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002255 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2256 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2257 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2258 {"len", builtin_len, METH_O, len_doc},
2259 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002260 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2261 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandla18af4e2007-04-21 15:47:16 +00002262 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002263 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002264 {"ord", builtin_ord, METH_O, ord_doc},
2265 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00002266 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002267 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002268 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002269 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002270 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002271 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002272 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002273 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002274};
2275
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002276PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002277"Built-in functions, exceptions, and other objects.\n\
2278\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002279Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002280
Martin v. Löwis1a214512008-06-11 05:26:20 +00002281static struct PyModuleDef builtinsmodule = {
2282 PyModuleDef_HEAD_INIT,
2283 "builtins",
2284 builtin_doc,
Christian Heimes6a27efa2008-10-30 21:48:26 +00002285 -1, /* multiple "initialization" just copies the module dict. */
Martin v. Löwis1a214512008-06-11 05:26:20 +00002286 builtin_methods,
2287 NULL,
2288 NULL,
2289 NULL,
2290 NULL
2291};
2292
2293
Guido van Rossum25ce5661997-08-02 03:10:38 +00002294PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002295_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002296{
Fred Drake5550de32000-06-20 04:54:19 +00002297 PyObject *mod, *dict, *debug;
Martin v. Löwis1a214512008-06-11 05:26:20 +00002298 mod = PyModule_Create(&builtinsmodule);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002299 if (mod == NULL)
2300 return NULL;
2301 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002302
Tim Peters7571a0f2003-03-23 17:52:28 +00002303#ifdef Py_TRACE_REFS
Georg Brandl1a3284e2007-12-02 09:40:06 +00002304 /* "builtins" exposes a number of statically allocated objects
Tim Peters7571a0f2003-03-23 17:52:28 +00002305 * that, before this code was added in 2.3, never showed up in
2306 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2307 * result, programs leaking references to None and False (etc)
2308 * couldn't be diagnosed by examining sys.getobjects(0).
2309 */
2310#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2311#else
2312#define ADD_TO_ALL(OBJECT) (void)0
2313#endif
2314
Tim Peters4b7625e2001-09-13 21:37:17 +00002315#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002316 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2317 return NULL; \
2318 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002319
2320 SETBUILTIN("None", Py_None);
2321 SETBUILTIN("Ellipsis", Py_Ellipsis);
2322 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002323 SETBUILTIN("False", Py_False);
2324 SETBUILTIN("True", Py_True);
2325 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbae07c92007-10-08 02:46:15 +00002326 SETBUILTIN("memoryview", &PyMemoryView_Type);
Christian Heimes9c4756e2008-05-26 13:22:05 +00002327 SETBUILTIN("bytearray", &PyByteArray_Type);
Christian Heimes72b710a2008-05-26 13:28:38 +00002328 SETBUILTIN("bytes", &PyBytes_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002329 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002330#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002331 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002332#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002333 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002334 SETBUILTIN("enumerate", &PyEnum_Type);
Raymond Hettinger17301e92008-03-13 00:19:26 +00002335 SETBUILTIN("filter", &PyFilter_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002336 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002337 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002338 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00002339 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002340 SETBUILTIN("list", &PyList_Type);
Raymond Hettingera6c60372008-03-13 01:26:19 +00002341 SETBUILTIN("map", &PyMap_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002342 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossum805365e2007-05-07 22:24:25 +00002343 SETBUILTIN("range", &PyRange_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002344 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002345 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002346 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002347 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Guido van Rossum572dbf82007-04-27 23:53:51 +00002348 SETBUILTIN("str", &PyUnicode_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002349 SETBUILTIN("super", &PySuper_Type);
2350 SETBUILTIN("tuple", &PyTuple_Type);
2351 SETBUILTIN("type", &PyType_Type);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002352 SETBUILTIN("zip", &PyZip_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002353 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002354 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2355 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002356 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002357 }
2358 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002359
Guido van Rossum25ce5661997-08-02 03:10:38 +00002360 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002361#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002362#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002363}