blob: 5710c0724c0d14519efbeab3e3341297eddda615 [file] [log] [blame]
Guido van Rossum3f5da241990-12-20 15:06:42 +00001/* Built-in functions */
2
Guido van Rossum79f25d91997-04-29 20:08:16 +00003#include "Python.h"
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004#include "Python-ast.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00005
6#include "node.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00007#include "code.h"
Guido van Rossum5b722181993-03-30 17:46:03 +00008#include "eval.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00009
Guido van Rossum6bf62da1997-04-11 20:37:35 +000010#include <ctype.h>
11
Mark Hammond26cffde42001-05-14 12:17:34 +000012/* The default encoding used by the platform file system APIs
13 Can remain NULL for all platforms that don't have such a concept
Guido van Rossum00bc0e02007-10-15 02:52:41 +000014
15 Don't forget to modify PyUnicode_DecodeFSDefault() if you touch any of the
16 values for Py_FileSystemDefaultEncoding!
Mark Hammond26cffde42001-05-14 12:17:34 +000017*/
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000018#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
Mark Hammond26cffde42001-05-14 12:17:34 +000019const char *Py_FileSystemDefaultEncoding = "mbcs";
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000020int Py_HasFileSystemDefaultEncoding = 1;
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000021#elif defined(__APPLE__)
22const char *Py_FileSystemDefaultEncoding = "utf-8";
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000023int Py_HasFileSystemDefaultEncoding = 1;
Mark Hammond26cffde42001-05-14 12:17:34 +000024#else
25const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000026int Py_HasFileSystemDefaultEncoding = 0;
Mark Hammond26cffde42001-05-14 12:17:34 +000027#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000028
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000029int
30_Py_SetFileSystemEncoding(PyObject *s)
31{
32 PyObject *defenc;
33 if (!PyUnicode_Check(s)) {
34 PyErr_BadInternalCall();
35 return -1;
36 }
37 defenc = _PyUnicode_AsDefaultEncodedString(s, NULL);
38 if (!defenc)
39 return -1;
40 if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding)
41 /* A file system encoding was set at run-time */
42 free((char*)Py_FileSystemDefaultEncoding);
43 Py_FileSystemDefaultEncoding = strdup(PyBytes_AsString(defenc));
44 Py_HasFileSystemDefaultEncoding = 0;
45 return 0;
46}
47
Guido van Rossum79f25d91997-04-29 20:08:16 +000048static PyObject *
Guido van Rossum52cc1d82007-03-18 15:41:51 +000049builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds)
50{
Guido van Rossumcd16bf62007-06-13 18:07:49 +000051 PyObject *func, *name, *bases, *mkw, *meta, *prep, *ns, *cell;
52 PyObject *cls = NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +000053 Py_ssize_t nargs, nbases;
54
55 assert(args != NULL);
56 if (!PyTuple_Check(args)) {
57 PyErr_SetString(PyExc_TypeError,
58 "__build_class__: args is not a tuple");
59 return NULL;
60 }
61 nargs = PyTuple_GET_SIZE(args);
62 if (nargs < 2) {
63 PyErr_SetString(PyExc_TypeError,
64 "__build_class__: not enough arguments");
65 return NULL;
66 }
67 func = PyTuple_GET_ITEM(args, 0); /* Better be callable */
68 name = PyTuple_GET_ITEM(args, 1);
Neal Norwitz6ea45d32007-08-26 04:19:43 +000069 if (!PyUnicode_Check(name)) {
Guido van Rossum52cc1d82007-03-18 15:41:51 +000070 PyErr_SetString(PyExc_TypeError,
71 "__build_class__: name is not a string");
72 return NULL;
73 }
74 bases = PyTuple_GetSlice(args, 2, nargs);
75 if (bases == NULL)
76 return NULL;
77 nbases = nargs - 2;
78
79 if (kwds == NULL) {
80 meta = NULL;
81 mkw = NULL;
82 }
83 else {
84 mkw = PyDict_Copy(kwds); /* Don't modify kwds passed in! */
85 if (mkw == NULL) {
86 Py_DECREF(bases);
87 return NULL;
88 }
89 meta = PyDict_GetItemString(mkw, "metaclass");
90 if (meta != NULL) {
91 Py_INCREF(meta);
92 if (PyDict_DelItemString(mkw, "metaclass") < 0) {
93 Py_DECREF(meta);
94 Py_DECREF(mkw);
95 Py_DECREF(bases);
96 return NULL;
97 }
98 }
99 }
100 if (meta == NULL) {
101 if (PyTuple_GET_SIZE(bases) == 0)
102 meta = (PyObject *) (&PyType_Type);
103 else {
104 PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
105 meta = (PyObject *) (base0->ob_type);
106 }
107 Py_INCREF(meta);
108 }
109 prep = PyObject_GetAttrString(meta, "__prepare__");
110 if (prep == NULL) {
111 PyErr_Clear();
112 ns = PyDict_New();
113 }
114 else {
Raymond Hettinger5d1ff002009-01-06 09:37:13 +0000115 PyObject *pargs = PyTuple_Pack(2, name, bases);
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000116 if (pargs == NULL) {
117 Py_DECREF(prep);
118 Py_DECREF(meta);
119 Py_XDECREF(mkw);
120 Py_DECREF(bases);
121 return NULL;
122 }
123 ns = PyEval_CallObjectWithKeywords(prep, pargs, mkw);
124 Py_DECREF(pargs);
125 Py_DECREF(prep);
126 if (ns == NULL) {
127 Py_DECREF(meta);
128 Py_XDECREF(mkw);
129 Py_DECREF(bases);
130 return NULL;
131 }
132 }
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000133 cell = PyObject_CallFunctionObjArgs(func, ns, NULL);
134 if (cell != NULL) {
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000135 PyObject *margs;
Raymond Hettinger5d1ff002009-01-06 09:37:13 +0000136 margs = PyTuple_Pack(3, name, bases, ns);
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000137 if (margs != NULL) {
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000138 cls = PyEval_CallObjectWithKeywords(meta, margs, mkw);
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000139 Py_DECREF(margs);
140 }
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000141 if (cls != NULL && PyCell_Check(cell)) {
142 Py_INCREF(cls);
143 PyCell_SET(cell, cls);
144 }
145 Py_DECREF(cell);
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000146 }
147 Py_DECREF(ns);
148 Py_DECREF(meta);
149 Py_XDECREF(mkw);
150 Py_DECREF(bases);
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000151 return cls;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000152}
153
154PyDoc_STRVAR(build_class_doc,
155"__build_class__(func, name, *bases, metaclass=None, **kwds) -> class\n\
156\n\
157Internal helper function used by the class statement.");
158
159static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000160builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000161{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000162 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
163 "level", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000164 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000165 PyObject *globals = NULL;
166 PyObject *locals = NULL;
167 PyObject *fromlist = NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +0000168 int level = -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000169
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000170 if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|OOOi:__import__",
171 kwlist, &name, &globals, &locals, &fromlist, &level))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000172 return NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +0000173 return PyImport_ImportModuleLevel(name, globals, locals,
174 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000175}
176
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000177PyDoc_STRVAR(import_doc,
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000178"__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000179\n\
180Import a module. The globals are only used to determine the context;\n\
181they are not modified. The locals are currently unused. The fromlist\n\
182should be a list of names to emulate ``from name import ...'', or an\n\
183empty list to emulate ``import name''.\n\
184When importing a module from a package, note that __import__('A.B', ...)\n\
185returns package A when fromlist is empty, but its submodule B when\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000186fromlist is not empty. Level is used to determine whether to perform \n\
187absolute or relative imports. -1 is the original strategy of attempting\n\
188both absolute and relative imports, 0 is absolute, a positive number\n\
189is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000190
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000191
Guido van Rossum79f25d91997-04-29 20:08:16 +0000192static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000193builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000194{
Guido van Rossum09df08a1998-05-22 00:51:39 +0000195 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000196}
197
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000198PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000199"abs(number) -> number\n\
200\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000201Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000202
Raymond Hettinger96229b12005-03-11 06:49:40 +0000203static PyObject *
204builtin_all(PyObject *self, PyObject *v)
205{
206 PyObject *it, *item;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000207 PyObject *(*iternext)(PyObject *);
208 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000209
210 it = PyObject_GetIter(v);
211 if (it == NULL)
212 return NULL;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000213 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000214
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000215 for (;;) {
216 item = iternext(it);
217 if (item == NULL)
218 break;
219 cmp = PyObject_IsTrue(item);
Raymond Hettinger96229b12005-03-11 06:49:40 +0000220 Py_DECREF(item);
221 if (cmp < 0) {
222 Py_DECREF(it);
223 return NULL;
224 }
225 if (cmp == 0) {
226 Py_DECREF(it);
227 Py_RETURN_FALSE;
228 }
229 }
230 Py_DECREF(it);
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000231 if (PyErr_Occurred()) {
232 if (PyErr_ExceptionMatches(PyExc_StopIteration))
233 PyErr_Clear();
234 else
235 return NULL;
236 }
Raymond Hettinger96229b12005-03-11 06:49:40 +0000237 Py_RETURN_TRUE;
238}
239
240PyDoc_STRVAR(all_doc,
241"all(iterable) -> bool\n\
242\n\
243Return True if bool(x) is True for all values x in the iterable.");
244
245static PyObject *
246builtin_any(PyObject *self, PyObject *v)
247{
248 PyObject *it, *item;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000249 PyObject *(*iternext)(PyObject *);
250 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000251
252 it = PyObject_GetIter(v);
253 if (it == NULL)
254 return NULL;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000255 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000256
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000257 for (;;) {
258 item = iternext(it);
259 if (item == NULL)
260 break;
261 cmp = PyObject_IsTrue(item);
Raymond Hettinger96229b12005-03-11 06:49:40 +0000262 Py_DECREF(item);
263 if (cmp < 0) {
264 Py_DECREF(it);
265 return NULL;
266 }
267 if (cmp == 1) {
268 Py_DECREF(it);
269 Py_RETURN_TRUE;
270 }
271 }
272 Py_DECREF(it);
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000273 if (PyErr_Occurred()) {
274 if (PyErr_ExceptionMatches(PyExc_StopIteration))
275 PyErr_Clear();
276 else
277 return NULL;
278 }
Raymond Hettinger96229b12005-03-11 06:49:40 +0000279 Py_RETURN_FALSE;
280}
281
282PyDoc_STRVAR(any_doc,
283"any(iterable) -> bool\n\
284\n\
285Return True if bool(x) is True for any x in the iterable.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000286
Georg Brandl559e5d72008-06-11 18:37:52 +0000287static PyObject *
288builtin_ascii(PyObject *self, PyObject *v)
289{
290 return PyObject_ASCII(v);
291}
292
293PyDoc_STRVAR(ascii_doc,
294"ascii(object) -> string\n\
295\n\
296As repr(), return a string containing a printable representation of an\n\
297object, but escape the non-ASCII characters in the string returned by\n\
298repr() using \\x, \\u or \\U escapes. This generates a string similar\n\
299to that returned by repr() in Python 2.");
300
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000301
Guido van Rossum79f25d91997-04-29 20:08:16 +0000302static PyObject *
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000303builtin_bin(PyObject *self, PyObject *v)
304{
305 return PyNumber_ToBase(v, 2);
306}
307
308PyDoc_STRVAR(bin_doc,
309"bin(number) -> string\n\
310\n\
311Return the binary representation of an integer or long integer.");
312
313
Raymond Hettinger17301e92008-03-13 00:19:26 +0000314typedef struct {
315 PyObject_HEAD
316 PyObject *func;
317 PyObject *it;
318} filterobject;
319
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000320static PyObject *
Raymond Hettinger17301e92008-03-13 00:19:26 +0000321filter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000322{
Raymond Hettinger17301e92008-03-13 00:19:26 +0000323 PyObject *func, *seq;
324 PyObject *it;
325 filterobject *lz;
326
327 if (type == &PyFilter_Type && !_PyArg_NoKeywords("filter()", kwds))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000328 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000329
330 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
Georg Brandle35b6572005-07-19 22:20:20 +0000331 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000332
333 /* Get iterator. */
334 it = PyObject_GetIter(seq);
335 if (it == NULL)
336 return NULL;
337
338 /* create filterobject structure */
339 lz = (filterobject *)type->tp_alloc(type, 0);
340 if (lz == NULL) {
341 Py_DECREF(it);
342 return NULL;
343 }
344 Py_INCREF(func);
345 lz->func = func;
346 lz->it = it;
347
348 return (PyObject *)lz;
349}
350
351static void
352filter_dealloc(filterobject *lz)
353{
354 PyObject_GC_UnTrack(lz);
355 Py_XDECREF(lz->func);
356 Py_XDECREF(lz->it);
357 Py_TYPE(lz)->tp_free(lz);
358}
359
360static int
361filter_traverse(filterobject *lz, visitproc visit, void *arg)
362{
363 Py_VISIT(lz->it);
364 Py_VISIT(lz->func);
365 return 0;
366}
367
368static PyObject *
369filter_next(filterobject *lz)
370{
371 PyObject *item;
372 PyObject *it = lz->it;
373 long ok;
374 PyObject *(*iternext)(PyObject *);
375
Raymond Hettinger17301e92008-03-13 00:19:26 +0000376 iternext = *Py_TYPE(it)->tp_iternext;
377 for (;;) {
378 item = iternext(it);
379 if (item == NULL)
380 return NULL;
381
382 if (lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type) {
383 ok = PyObject_IsTrue(item);
384 } else {
385 PyObject *good;
386 good = PyObject_CallFunctionObjArgs(lz->func,
387 item, NULL);
388 if (good == NULL) {
389 Py_DECREF(item);
390 return NULL;
391 }
392 ok = PyObject_IsTrue(good);
393 Py_DECREF(good);
394 }
395 if (ok)
396 return item;
397 Py_DECREF(item);
398 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000399}
400
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000401PyDoc_STRVAR(filter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +0000402"filter(function or None, iterable) --> filter object\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000403\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +0000404Return an iterator yielding those items of iterable for which function(item)\n\
Raymond Hettinger17301e92008-03-13 00:19:26 +0000405is true. If function is None, return the items that are true.");
406
407PyTypeObject PyFilter_Type = {
408 PyVarObject_HEAD_INIT(&PyType_Type, 0)
409 "filter", /* tp_name */
410 sizeof(filterobject), /* tp_basicsize */
411 0, /* tp_itemsize */
412 /* methods */
413 (destructor)filter_dealloc, /* tp_dealloc */
414 0, /* tp_print */
415 0, /* tp_getattr */
416 0, /* tp_setattr */
Mark Dickinsone94c6792009-02-02 20:36:42 +0000417 0, /* tp_reserved */
Raymond Hettinger17301e92008-03-13 00:19:26 +0000418 0, /* tp_repr */
419 0, /* tp_as_number */
420 0, /* tp_as_sequence */
421 0, /* tp_as_mapping */
422 0, /* tp_hash */
423 0, /* tp_call */
424 0, /* tp_str */
425 PyObject_GenericGetAttr, /* tp_getattro */
426 0, /* tp_setattro */
427 0, /* tp_as_buffer */
428 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
429 Py_TPFLAGS_BASETYPE, /* tp_flags */
430 filter_doc, /* tp_doc */
431 (traverseproc)filter_traverse, /* tp_traverse */
432 0, /* tp_clear */
433 0, /* tp_richcompare */
434 0, /* tp_weaklistoffset */
435 PyObject_SelfIter, /* tp_iter */
436 (iternextfunc)filter_next, /* tp_iternext */
437 0, /* tp_methods */
438 0, /* tp_members */
439 0, /* tp_getset */
440 0, /* tp_base */
441 0, /* tp_dict */
442 0, /* tp_descr_get */
443 0, /* tp_descr_set */
444 0, /* tp_dictoffset */
445 0, /* tp_init */
446 PyType_GenericAlloc, /* tp_alloc */
447 filter_new, /* tp_new */
448 PyObject_GC_Del, /* tp_free */
449};
450
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000451
Eric Smith8c663262007-08-25 02:26:07 +0000452static PyObject *
453builtin_format(PyObject *self, PyObject *args)
454{
Christian Heimes94b7d3d2007-12-11 20:20:39 +0000455 PyObject *value;
Eric Smith8fd3eba2008-02-17 19:48:00 +0000456 PyObject *format_spec = NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000457
Eric Smith8fd3eba2008-02-17 19:48:00 +0000458 if (!PyArg_ParseTuple(args, "O|U:format", &value, &format_spec))
459 return NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000460
Eric Smith8fd3eba2008-02-17 19:48:00 +0000461 return PyObject_Format(value, format_spec);
Eric Smith8c663262007-08-25 02:26:07 +0000462}
463
Eric Smith8c663262007-08-25 02:26:07 +0000464PyDoc_STRVAR(format_doc,
Eric Smith81936692007-08-31 01:14:01 +0000465"format(value[, format_spec]) -> string\n\
Eric Smith8c663262007-08-25 02:26:07 +0000466\n\
Eric Smith81936692007-08-31 01:14:01 +0000467Returns value.__format__(format_spec)\n\
468format_spec defaults to \"\"");
469
Guido van Rossum7fcf2242007-05-04 17:43:11 +0000470static PyObject *
Walter Dörwalde7efd592007-06-05 20:07:21 +0000471builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000472{
Amaury Forgeot d'Arc7888d082008-08-01 01:06:32 +0000473 int x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000474
Amaury Forgeot d'Arc7888d082008-08-01 01:06:32 +0000475 if (!PyArg_ParseTuple(args, "i:chr", &x))
Guido van Rossum09095f32000-03-10 23:00:52 +0000476 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000477
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000478 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000479}
480
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000481PyDoc_VAR(chr_doc) = PyDoc_STR(
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000482"chr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000483\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000484Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000485)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000486#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000487PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000488"\nIf 0x10000 <= i, a surrogate pair is returned."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000489)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000490#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000491;
Guido van Rossum09095f32000-03-10 23:00:52 +0000492
493
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000494static char *
Benjamin Petersonf5b52242009-03-02 23:31:26 +0000495source_as_string(PyObject *cmd, char *funcname, char *what, PyCompilerFlags *cf)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000496{
497 char *str;
498 Py_ssize_t size;
499
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000500 if (PyUnicode_Check(cmd)) {
Benjamin Petersonf5b52242009-03-02 23:31:26 +0000501 cf->cf_flags |= PyCF_IGNORE_COOKIE;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000502 cmd = _PyUnicode_AsDefaultEncodedString(cmd, NULL);
503 if (cmd == NULL)
504 return NULL;
505 }
Guido van Rossuma4b8d1d2007-08-27 15:02:28 +0000506 else if (!PyObject_CheckReadBuffer(cmd)) {
Georg Brandl2cabc562008-08-28 07:57:16 +0000507 PyErr_Format(PyExc_TypeError,
508 "%s() arg 1 must be a %s object",
509 funcname, what);
Guido van Rossuma4b8d1d2007-08-27 15:02:28 +0000510 return NULL;
511 }
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000512 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &size) < 0) {
513 return NULL;
514 }
515 if (strlen(str) != size) {
516 PyErr_SetString(PyExc_TypeError,
517 "source code string cannot contain null bytes");
518 return NULL;
519 }
520 return str;
521}
522
Guido van Rossum79f25d91997-04-29 20:08:16 +0000523static PyObject *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000524builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000525{
526 char *str;
527 char *filename;
528 char *startstr;
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000529 int mode = -1;
Tim Peters6cd6a822001-08-17 22:11:27 +0000530 int dont_inherit = 0;
531 int supplied_flags = 0;
Benjamin Peterson97dd9872009-12-13 01:23:39 +0000532 int is_ast;
Tim Peters5ba58662001-07-16 02:29:45 +0000533 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000534 PyObject *cmd;
Guido van Rossumd8faa362007-04-27 19:54:29 +0000535 static char *kwlist[] = {"source", "filename", "mode", "flags",
536 "dont_inherit", NULL};
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000537 int start[] = {Py_file_input, Py_eval_input, Py_single_input};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000538
Guido van Rossumd8faa362007-04-27 19:54:29 +0000539 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
540 kwlist, &cmd, &filename, &startstr,
541 &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000542 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000543
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000544 cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000545
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000546 if (supplied_flags &
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000547 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000548 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000549 PyErr_SetString(PyExc_ValueError,
550 "compile(): unrecognised flags");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000551 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000552 }
553 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
554
Tim Peters6cd6a822001-08-17 22:11:27 +0000555 if (!dont_inherit) {
556 PyEval_MergeCompilerFlags(&cf);
557 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000558
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000559 if (strcmp(startstr, "exec") == 0)
560 mode = 0;
561 else if (strcmp(startstr, "eval") == 0)
562 mode = 1;
563 else if (strcmp(startstr, "single") == 0)
564 mode = 2;
565 else {
566 PyErr_SetString(PyExc_ValueError,
567 "compile() arg 3 must be 'exec', 'eval' or 'single'");
568 return NULL;
569 }
570
Benjamin Peterson97dd9872009-12-13 01:23:39 +0000571 is_ast = PyAST_Check(cmd);
572 if (is_ast == -1)
573 return NULL;
574 if (is_ast) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000575 PyObject *result;
576 if (supplied_flags & PyCF_ONLY_AST) {
577 Py_INCREF(cmd);
578 result = cmd;
579 }
580 else {
581 PyArena *arena;
582 mod_ty mod;
583
584 arena = PyArena_New();
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000585 mod = PyAST_obj2mod(cmd, arena, mode);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000586 if (mod == NULL) {
587 PyArena_Free(arena);
588 return NULL;
589 }
590 result = (PyObject*)PyAST_Compile(mod, filename,
591 &cf, arena);
592 PyArena_Free(arena);
593 }
594 return result;
595 }
596
Benjamin Petersonf5b52242009-03-02 23:31:26 +0000597 str = source_as_string(cmd, "compile", "string, bytes, AST or code", &cf);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000598 if (str == NULL)
599 return NULL;
600
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000601 return Py_CompileStringFlags(str, filename, start[mode], &cf);
Guido van Rossum5b722181993-03-30 17:46:03 +0000602}
603
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000604PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000605"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000606\n\
607Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000608into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000609The filename will be used for run-time error messages.\n\
610The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000611single (interactive) statement, or 'eval' to compile an expression.\n\
612The flags argument, if present, controls which future statements influence\n\
613the compilation of the code.\n\
614The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
615the effects of any future statements in effect in the code calling\n\
616compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000617in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000618
Guido van Rossum79f25d91997-04-29 20:08:16 +0000619static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000620builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000621{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000622 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000623
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000624 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000625 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000626 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000627}
628
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000629PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000630"dir([object]) -> list of strings\n"
631"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000632"If called without an argument, return the names in the current scope.\n"
633"Else, return an alphabetized list of names comprising (some of) the attributes\n"
634"of the given object, and of attributes reachable from it.\n"
635"If the object supplies a method named __dir__, it will be used; otherwise\n"
636"the default dir() logic is used and returns:\n"
637" for a module object: the module's attributes.\n"
638" for a class object: its attributes, and recursively the attributes\n"
639" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000640" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000641" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000642
Guido van Rossum79f25d91997-04-29 20:08:16 +0000643static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000644builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000645{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000646 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000647
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000648 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000649 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000650 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000651}
652
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000653PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000654"divmod(x, y) -> (div, mod)\n\
655\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000656Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000657
658
Guido van Rossum79f25d91997-04-29 20:08:16 +0000659static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000660builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000661{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000662 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000663 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000664 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000665 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000666
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000667 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000668 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000669 if (locals != Py_None && !PyMapping_Check(locals)) {
670 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000671 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000672 }
673 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000674 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000675 "globals must be a real dict; try eval(expr, {}, mapping)"
676 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000677 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000678 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000679 if (globals == Py_None) {
680 globals = PyEval_GetGlobals();
681 if (locals == Py_None)
682 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000683 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000684 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000685 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000686
Georg Brandl77c85e62005-09-15 10:46:13 +0000687 if (globals == NULL || locals == NULL) {
688 PyErr_SetString(PyExc_TypeError,
689 "eval must be given globals and locals "
690 "when called without a frame");
691 return NULL;
692 }
693
Guido van Rossum79f25d91997-04-29 20:08:16 +0000694 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
695 if (PyDict_SetItemString(globals, "__builtins__",
696 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000697 return NULL;
698 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000699
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000700 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000701 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000702 PyErr_SetString(PyExc_TypeError,
703 "code object passed to eval() may not contain free variables");
704 return NULL;
705 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000706 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000707 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000708
Benjamin Petersonf5b52242009-03-02 23:31:26 +0000709 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
710 str = source_as_string(cmd, "eval", "string, bytes or code", &cf);
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000711 if (str == NULL)
Guido van Rossum94390a41992-08-14 15:14:30 +0000712 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000713
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000714 while (*str == ' ' || *str == '\t')
715 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000716
Tim Peters9fa96be2001-08-17 23:04:59 +0000717 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000718 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
719 Py_XDECREF(tmp);
720 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000721}
722
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000723PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000724"eval(source[, globals[, locals]]) -> value\n\
725\n\
726Evaluate the source in the context of globals and locals.\n\
727The source may be a string representing a Python expression\n\
728or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000729The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000730defaulting to the current globals and locals.\n\
731If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000732
Georg Brandl7cae87c2006-09-06 06:51:57 +0000733static PyObject *
734builtin_exec(PyObject *self, PyObject *args)
735{
736 PyObject *v;
737 PyObject *prog, *globals = Py_None, *locals = Py_None;
738 int plain = 0;
739
Raymond Hettinger5d1ff002009-01-06 09:37:13 +0000740 if (!PyArg_UnpackTuple(args, "exec", 1, 3, &prog, &globals, &locals))
Georg Brandl7cae87c2006-09-06 06:51:57 +0000741 return NULL;
742
743 if (globals == Py_None) {
744 globals = PyEval_GetGlobals();
745 if (locals == Py_None) {
746 locals = PyEval_GetLocals();
747 plain = 1;
748 }
749 if (!globals || !locals) {
750 PyErr_SetString(PyExc_SystemError,
751 "globals and locals cannot be NULL");
752 return NULL;
753 }
754 }
755 else if (locals == Py_None)
756 locals = globals;
Georg Brandl2cabc562008-08-28 07:57:16 +0000757
Georg Brandl7cae87c2006-09-06 06:51:57 +0000758 if (!PyDict_Check(globals)) {
759 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
760 globals->ob_type->tp_name);
761 return NULL;
762 }
763 if (!PyMapping_Check(locals)) {
764 PyErr_Format(PyExc_TypeError,
765 "arg 3 must be a mapping or None, not %.100s",
766 locals->ob_type->tp_name);
767 return NULL;
768 }
769 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
770 if (PyDict_SetItemString(globals, "__builtins__",
771 PyEval_GetBuiltins()) != 0)
772 return NULL;
773 }
774
775 if (PyCode_Check(prog)) {
776 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
777 PyErr_SetString(PyExc_TypeError,
778 "code object passed to exec() may not "
779 "contain free variables");
780 return NULL;
781 }
782 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
783 }
Georg Brandl7cae87c2006-09-06 06:51:57 +0000784 else {
Benjamin Petersonf5b52242009-03-02 23:31:26 +0000785 char *str;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000786 PyCompilerFlags cf;
Benjamin Petersonf5b52242009-03-02 23:31:26 +0000787 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
788 str = source_as_string(prog, "exec",
789 "string, bytes or code", &cf);
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000790 if (str == NULL)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000791 return NULL;
792 if (PyEval_MergeCompilerFlags(&cf))
793 v = PyRun_StringFlags(str, Py_file_input, globals,
794 locals, &cf);
795 else
796 v = PyRun_String(str, Py_file_input, globals, locals);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000797 }
798 if (v == NULL)
799 return NULL;
800 Py_DECREF(v);
801 Py_RETURN_NONE;
802}
803
804PyDoc_STRVAR(exec_doc,
805"exec(object[, globals[, locals]])\n\
806\n\
Benjamin Peterson38090262009-01-04 15:30:39 +0000807Read and execute code from a object, which can be a string or a code\n\
808object.\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000809The globals and locals are dictionaries, defaulting to the current\n\
810globals and locals. If only globals is given, locals defaults to it.");
811
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000812
Guido van Rossum79f25d91997-04-29 20:08:16 +0000813static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000814builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000815{
Neal Norwitz6ea45d32007-08-26 04:19:43 +0000816 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000817 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000818
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000819 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000820 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000821
Martin v. Löwis5b222132007-06-10 09:51:05 +0000822 if (!PyUnicode_Check(name)) {
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000823 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000824 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000825 return NULL;
826 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000827 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000828 if (result == NULL && dflt != NULL &&
829 PyErr_ExceptionMatches(PyExc_AttributeError))
830 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000831 PyErr_Clear();
832 Py_INCREF(dflt);
833 result = dflt;
834 }
835 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000836}
837
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000838PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000839"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000840\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000841Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
842When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000843exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000844
845
Guido van Rossum79f25d91997-04-29 20:08:16 +0000846static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000847builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000848{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000849 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000850
Guido van Rossum79f25d91997-04-29 20:08:16 +0000851 d = PyEval_GetGlobals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000852 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000853 return d;
854}
855
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000856PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000857"globals() -> dictionary\n\
858\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000859Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000860
861
Guido van Rossum79f25d91997-04-29 20:08:16 +0000862static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000863builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000864{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000865 PyObject *v;
866 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000867
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000868 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000869 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000870 if (!PyUnicode_Check(name)) {
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000871 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000872 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000873 return NULL;
874 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000875 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000876 if (v == NULL) {
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000877 if (!PyErr_ExceptionMatches(PyExc_Exception))
878 return NULL;
879 else {
880 PyErr_Clear();
881 Py_INCREF(Py_False);
882 return Py_False;
883 }
Guido van Rossum9bfef441993-03-29 10:43:31 +0000884 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000885 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000886 Py_INCREF(Py_True);
887 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000888}
889
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000890PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000891"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000892\n\
893Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000894(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000895
896
Guido van Rossum79f25d91997-04-29 20:08:16 +0000897static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000898builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000899{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000900 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000901}
902
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000903PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000904"id(object) -> integer\n\
905\n\
906Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000907simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000908
909
Raymond Hettingera6c60372008-03-13 01:26:19 +0000910/* map object ************************************************************/
911
912typedef struct {
913 PyObject_HEAD
914 PyObject *iters;
915 PyObject *func;
916} mapobject;
917
Guido van Rossum79f25d91997-04-29 20:08:16 +0000918static PyObject *
Raymond Hettingera6c60372008-03-13 01:26:19 +0000919map_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000920{
Raymond Hettingera6c60372008-03-13 01:26:19 +0000921 PyObject *it, *iters, *func;
922 mapobject *lz;
923 Py_ssize_t numargs, i;
924
925 if (type == &PyMap_Type && !_PyArg_NoKeywords("map()", kwds))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000926 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000927
928 numargs = PyTuple_Size(args);
929 if (numargs < 2) {
930 PyErr_SetString(PyExc_TypeError,
931 "map() must have at least two arguments.");
Tim Peters4e9afdc2001-05-03 23:54:49 +0000932 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000933 }
934
935 iters = PyTuple_New(numargs-1);
936 if (iters == NULL)
937 return NULL;
938
939 for (i=1 ; i<numargs ; i++) {
940 /* Get iterator. */
941 it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
942 if (it == NULL) {
943 Py_DECREF(iters);
944 return NULL;
945 }
946 PyTuple_SET_ITEM(iters, i-1, it);
947 }
948
949 /* create mapobject structure */
950 lz = (mapobject *)type->tp_alloc(type, 0);
951 if (lz == NULL) {
952 Py_DECREF(iters);
953 return NULL;
954 }
955 lz->iters = iters;
956 func = PyTuple_GET_ITEM(args, 0);
957 Py_INCREF(func);
958 lz->func = func;
959
960 return (PyObject *)lz;
961}
962
963static void
964map_dealloc(mapobject *lz)
965{
966 PyObject_GC_UnTrack(lz);
967 Py_XDECREF(lz->iters);
968 Py_XDECREF(lz->func);
969 Py_TYPE(lz)->tp_free(lz);
970}
971
972static int
973map_traverse(mapobject *lz, visitproc visit, void *arg)
974{
975 Py_VISIT(lz->iters);
976 Py_VISIT(lz->func);
977 return 0;
978}
979
980static PyObject *
981map_next(mapobject *lz)
982{
983 PyObject *val;
984 PyObject *argtuple;
985 PyObject *result;
986 Py_ssize_t numargs, i;
987
988 numargs = PyTuple_Size(lz->iters);
989 argtuple = PyTuple_New(numargs);
990 if (argtuple == NULL)
991 return NULL;
992
993 for (i=0 ; i<numargs ; i++) {
994 val = PyIter_Next(PyTuple_GET_ITEM(lz->iters, i));
995 if (val == NULL) {
996 Py_DECREF(argtuple);
997 return NULL;
998 }
999 PyTuple_SET_ITEM(argtuple, i, val);
1000 }
1001 result = PyObject_Call(lz->func, argtuple, NULL);
1002 Py_DECREF(argtuple);
Tim Peters4e9afdc2001-05-03 23:54:49 +00001003 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001004}
1005
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001006PyDoc_STRVAR(map_doc,
Raymond Hettingera6c60372008-03-13 01:26:19 +00001007"map(func, *iterables) --> map object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001008\n\
Raymond Hettingera6c60372008-03-13 01:26:19 +00001009Make an iterator that computes the function using arguments from\n\
1010each of the iterables. Stops when the shortest iterable is exhausted.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001011
Raymond Hettingera6c60372008-03-13 01:26:19 +00001012PyTypeObject PyMap_Type = {
1013 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1014 "map", /* tp_name */
1015 sizeof(mapobject), /* tp_basicsize */
1016 0, /* tp_itemsize */
1017 /* methods */
1018 (destructor)map_dealloc, /* tp_dealloc */
1019 0, /* tp_print */
1020 0, /* tp_getattr */
1021 0, /* tp_setattr */
Mark Dickinsone94c6792009-02-02 20:36:42 +00001022 0, /* tp_reserved */
Raymond Hettingera6c60372008-03-13 01:26:19 +00001023 0, /* tp_repr */
1024 0, /* tp_as_number */
1025 0, /* tp_as_sequence */
1026 0, /* tp_as_mapping */
1027 0, /* tp_hash */
1028 0, /* tp_call */
1029 0, /* tp_str */
1030 PyObject_GenericGetAttr, /* tp_getattro */
1031 0, /* tp_setattro */
1032 0, /* tp_as_buffer */
1033 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1034 Py_TPFLAGS_BASETYPE, /* tp_flags */
1035 map_doc, /* tp_doc */
1036 (traverseproc)map_traverse, /* tp_traverse */
1037 0, /* tp_clear */
1038 0, /* tp_richcompare */
1039 0, /* tp_weaklistoffset */
1040 PyObject_SelfIter, /* tp_iter */
1041 (iternextfunc)map_next, /* tp_iternext */
1042 0, /* tp_methods */
1043 0, /* tp_members */
1044 0, /* tp_getset */
1045 0, /* tp_base */
1046 0, /* tp_dict */
1047 0, /* tp_descr_get */
1048 0, /* tp_descr_set */
1049 0, /* tp_dictoffset */
1050 0, /* tp_init */
1051 PyType_GenericAlloc, /* tp_alloc */
1052 map_new, /* tp_new */
1053 PyObject_GC_Del, /* tp_free */
1054};
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001055
Guido van Rossum79f25d91997-04-29 20:08:16 +00001056static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +00001057builtin_next(PyObject *self, PyObject *args)
1058{
1059 PyObject *it, *res;
1060 PyObject *def = NULL;
1061
1062 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1063 return NULL;
1064 if (!PyIter_Check(it)) {
1065 PyErr_Format(PyExc_TypeError,
Georg Brandlaaa63922008-04-30 19:47:01 +00001066 "%.200s object is not an iterator",
1067 it->ob_type->tp_name);
Georg Brandla18af4e2007-04-21 15:47:16 +00001068 return NULL;
1069 }
1070
1071 res = (*it->ob_type->tp_iternext)(it);
Georg Brandlaaa63922008-04-30 19:47:01 +00001072 if (res != NULL) {
1073 return res;
1074 } else if (def != NULL) {
1075 if (PyErr_Occurred()) {
1076 if(!PyErr_ExceptionMatches(PyExc_StopIteration))
Georg Brandla18af4e2007-04-21 15:47:16 +00001077 return NULL;
1078 PyErr_Clear();
Georg Brandla18af4e2007-04-21 15:47:16 +00001079 }
Georg Brandlaaa63922008-04-30 19:47:01 +00001080 Py_INCREF(def);
1081 return def;
1082 } else if (PyErr_Occurred()) {
1083 return NULL;
1084 } else {
1085 PyErr_SetNone(PyExc_StopIteration);
1086 return NULL;
Georg Brandla18af4e2007-04-21 15:47:16 +00001087 }
Georg Brandla18af4e2007-04-21 15:47:16 +00001088}
1089
1090PyDoc_STRVAR(next_doc,
1091"next(iterator[, default])\n\
1092\n\
1093Return the next item from the iterator. If default is given and the iterator\n\
1094is exhausted, it is returned instead of raising StopIteration.");
1095
1096
1097static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001098builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001099{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001100 PyObject *v;
1101 PyObject *name;
1102 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001103
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001104 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001105 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001106 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001107 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001108 Py_INCREF(Py_None);
1109 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001110}
1111
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001112PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001113"setattr(object, name, value)\n\
1114\n\
1115Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001116``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001117
1118
Guido van Rossum79f25d91997-04-29 20:08:16 +00001119static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001120builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001121{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001122 PyObject *v;
1123 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001124
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001125 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001126 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001127 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001128 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001129 Py_INCREF(Py_None);
1130 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001131}
1132
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001133PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001134"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001135\n\
1136Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001137``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001138
1139
Guido van Rossum79f25d91997-04-29 20:08:16 +00001140static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001141builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001142{
Guido van Rossum9bfef441993-03-29 10:43:31 +00001143 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001144
Guido van Rossum79f25d91997-04-29 20:08:16 +00001145 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001146 if (x == -1)
1147 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001148 return PyLong_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001149}
1150
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001151PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001152"hash(object) -> integer\n\
1153\n\
1154Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001155the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001156
1157
Guido van Rossum79f25d91997-04-29 20:08:16 +00001158static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001159builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001160{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001161 return PyNumber_ToBase(v, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001162}
1163
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001164PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001165"hex(number) -> string\n\
1166\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001167Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001168
1169
Guido van Rossum79f25d91997-04-29 20:08:16 +00001170static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001171builtin_iter(PyObject *self, PyObject *args)
1172{
1173 PyObject *v, *w = NULL;
1174
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001175 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001176 return NULL;
1177 if (w == NULL)
1178 return PyObject_GetIter(v);
1179 if (!PyCallable_Check(v)) {
1180 PyErr_SetString(PyExc_TypeError,
1181 "iter(v, w): v must be callable");
1182 return NULL;
1183 }
1184 return PyCallIter_New(v, w);
1185}
1186
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001187PyDoc_STRVAR(iter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001188"iter(iterable) -> iterator\n\
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001189iter(callable, sentinel) -> iterator\n\
1190\n\
1191Get an iterator from an object. In the first form, the argument must\n\
1192supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001193In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001194
1195
1196static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001197builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001198{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001199 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001200
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001201 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001202 if (res < 0 && PyErr_Occurred())
1203 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001204 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001205}
1206
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001207PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001208"len(object) -> integer\n\
1209\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001210Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001211
1212
Guido van Rossum79f25d91997-04-29 20:08:16 +00001213static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001214builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001215{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001216 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001217
Guido van Rossum79f25d91997-04-29 20:08:16 +00001218 d = PyEval_GetLocals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00001219 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001220 return d;
1221}
1222
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001223PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001224"locals() -> dictionary\n\
1225\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001226Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001227
1228
Guido van Rossum79f25d91997-04-29 20:08:16 +00001229static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001230min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001231{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001232 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001233 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001234
Guido van Rossum79f25d91997-04-29 20:08:16 +00001235 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001236 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001237 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001238 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001239
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001240 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1241 keyfunc = PyDict_GetItemString(kwds, "key");
1242 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001243 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001244 "%s() got an unexpected keyword argument", name);
1245 return NULL;
1246 }
Christian Heimesbbffeb62008-01-24 09:42:52 +00001247 Py_INCREF(keyfunc);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001248 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001249
Tim Petersc3074532001-05-03 07:00:32 +00001250 it = PyObject_GetIter(v);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001251 if (it == NULL) {
1252 Py_XDECREF(keyfunc);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001253 return NULL;
Christian Heimesbbffeb62008-01-24 09:42:52 +00001254 }
Tim Petersc3074532001-05-03 07:00:32 +00001255
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001256 maxitem = NULL; /* the result */
1257 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001258 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001259 /* get the value from the key function */
1260 if (keyfunc != NULL) {
1261 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1262 if (val == NULL)
1263 goto Fail_it_item;
1264 }
1265 /* no key function; the value is the item */
1266 else {
1267 val = item;
1268 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001269 }
Tim Petersc3074532001-05-03 07:00:32 +00001270
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001271 /* maximum value and item are unset; set them */
1272 if (maxval == NULL) {
1273 maxitem = item;
1274 maxval = val;
1275 }
1276 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001277 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001278 int cmp = PyObject_RichCompareBool(val, maxval, op);
1279 if (cmp < 0)
1280 goto Fail_it_item_and_val;
1281 else if (cmp > 0) {
1282 Py_DECREF(maxval);
1283 Py_DECREF(maxitem);
1284 maxval = val;
1285 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001286 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001287 else {
1288 Py_DECREF(item);
1289 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001290 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001291 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001292 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001293 if (PyErr_Occurred())
1294 goto Fail_it;
1295 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001296 PyErr_Format(PyExc_ValueError,
1297 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001298 assert(maxitem == NULL);
1299 }
1300 else
1301 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001302 Py_DECREF(it);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001303 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001304 return maxitem;
1305
1306Fail_it_item_and_val:
1307 Py_DECREF(val);
1308Fail_it_item:
1309 Py_DECREF(item);
1310Fail_it:
1311 Py_XDECREF(maxval);
1312 Py_XDECREF(maxitem);
1313 Py_DECREF(it);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001314 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001315 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001316}
1317
Guido van Rossum79f25d91997-04-29 20:08:16 +00001318static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001319builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001320{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001321 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001322}
1323
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001324PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001325"min(iterable[, key=func]) -> value\n\
1326min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001327\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001328With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001329With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001330
1331
Guido van Rossum79f25d91997-04-29 20:08:16 +00001332static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001333builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001334{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001335 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001336}
1337
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001338PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001339"max(iterable[, key=func]) -> value\n\
1340max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001341\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001342With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001343With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001344
1345
Guido van Rossum79f25d91997-04-29 20:08:16 +00001346static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001347builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001348{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001349 return PyNumber_ToBase(v, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001350}
1351
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001352PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001353"oct(number) -> string\n\
1354\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001355Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001356
1357
Guido van Rossum79f25d91997-04-29 20:08:16 +00001358static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001359builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001360{
Guido van Rossum09095f32000-03-10 23:00:52 +00001361 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001362 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001363
Christian Heimes72b710a2008-05-26 13:28:38 +00001364 if (PyBytes_Check(obj)) {
1365 size = PyBytes_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001366 if (size == 1) {
Christian Heimes72b710a2008-05-26 13:28:38 +00001367 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
Christian Heimes217cfd12007-12-02 14:31:20 +00001368 return PyLong_FromLong(ord);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001369 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001370 }
1371 else if (PyUnicode_Check(obj)) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001372 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001373 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001374 ord = (long)*PyUnicode_AS_UNICODE(obj);
Christian Heimes217cfd12007-12-02 14:31:20 +00001375 return PyLong_FromLong(ord);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001376 }
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001377#ifndef Py_UNICODE_WIDE
1378 if (size == 2) {
1379 /* Decode a valid surrogate pair */
1380 int c0 = PyUnicode_AS_UNICODE(obj)[0];
1381 int c1 = PyUnicode_AS_UNICODE(obj)[1];
1382 if (0xD800 <= c0 && c0 <= 0xDBFF &&
1383 0xDC00 <= c1 && c1 <= 0xDFFF) {
1384 ord = ((((c0 & 0x03FF) << 10) | (c1 & 0x03FF)) +
1385 0x00010000);
Christian Heimes217cfd12007-12-02 14:31:20 +00001386 return PyLong_FromLong(ord);
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001387 }
1388 }
1389#endif
Guido van Rossum6f376c42007-05-24 14:31:33 +00001390 }
Christian Heimes9c4756e2008-05-26 13:22:05 +00001391 else if (PyByteArray_Check(obj)) {
Guido van Rossum98f97462007-04-13 03:31:13 +00001392 /* XXX Hopefully this is temporary */
Christian Heimes9c4756e2008-05-26 13:22:05 +00001393 size = PyByteArray_GET_SIZE(obj);
Guido van Rossum98f97462007-04-13 03:31:13 +00001394 if (size == 1) {
Christian Heimes9c4756e2008-05-26 13:22:05 +00001395 ord = (long)((unsigned char)*PyByteArray_AS_STRING(obj));
Christian Heimes217cfd12007-12-02 14:31:20 +00001396 return PyLong_FromLong(ord);
Guido van Rossum98f97462007-04-13 03:31:13 +00001397 }
1398 }
1399 else {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001400 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001401 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001402 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001403 return NULL;
1404 }
1405
Guido van Rossumad991772001-01-12 16:03:05 +00001406 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001407 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001408 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001409 size);
1410 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001411}
1412
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001413PyDoc_VAR(ord_doc) = PyDoc_STR(
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001414"ord(c) -> integer\n\
1415\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001416Return the integer ordinal of a one-character string."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001417)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001418#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001419PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001420"\nA valid surrogate pair is also accepted."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001421)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001422#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001423;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001424
1425
Guido van Rossum79f25d91997-04-29 20:08:16 +00001426static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001427builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001428{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001429 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001430
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001431 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001432 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001433 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001434}
1435
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001436PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001437"pow(x, y[, z]) -> number\n\
1438\n\
1439With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001440equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001441
1442
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001443
Guido van Rossum34343512006-11-30 22:13:52 +00001444static PyObject *
1445builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1446{
1447 static char *kwlist[] = {"sep", "end", "file", 0};
Georg Brandl257d3d92007-02-26 10:35:10 +00001448 static PyObject *dummy_args;
Guido van Rossum34343512006-11-30 22:13:52 +00001449 PyObject *sep = NULL, *end = NULL, *file = NULL;
1450 int i, err;
1451
Georg Brandl257d3d92007-02-26 10:35:10 +00001452 if (dummy_args == NULL) {
1453 if (!(dummy_args = PyTuple_New(0)))
1454 return NULL;
1455 }
Georg Brandl88fc6642007-02-09 21:28:07 +00001456 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
Guido van Rossum34343512006-11-30 22:13:52 +00001457 kwlist, &sep, &end, &file))
Christian Heimesfef9bba2007-11-13 15:24:14 +00001458 return NULL;
1459 if (file == NULL || file == Py_None) {
Guido van Rossum34343512006-11-30 22:13:52 +00001460 file = PySys_GetObject("stdout");
Christian Heimesfef9bba2007-11-13 15:24:14 +00001461 /* sys.stdout may be None when FILE* stdout isn't connected */
1462 if (file == Py_None)
1463 Py_RETURN_NONE;
1464 }
Guido van Rossum34343512006-11-30 22:13:52 +00001465
Benjamin Petersonc9637312009-07-02 18:25:26 +00001466 if (sep == Py_None) {
1467 sep = NULL;
1468 }
1469 else if (sep && !PyUnicode_Check(sep)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001470 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001471 "sep must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001472 sep->ob_type->tp_name);
1473 return NULL;
1474 }
Benjamin Petersonc9637312009-07-02 18:25:26 +00001475 if (end == Py_None) {
1476 end = NULL;
1477 }
1478 else if (end && !PyUnicode_Check(end)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001479 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001480 "end must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001481 end->ob_type->tp_name);
1482 return NULL;
1483 }
Guido van Rossum34343512006-11-30 22:13:52 +00001484
1485 for (i = 0; i < PyTuple_Size(args); i++) {
1486 if (i > 0) {
Benjamin Petersonc9637312009-07-02 18:25:26 +00001487 if (sep == NULL)
Guido van Rossum34343512006-11-30 22:13:52 +00001488 err = PyFile_WriteString(" ", file);
1489 else
1490 err = PyFile_WriteObject(sep, file,
1491 Py_PRINT_RAW);
1492 if (err)
1493 return NULL;
1494 }
1495 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1496 Py_PRINT_RAW);
1497 if (err)
1498 return NULL;
1499 }
1500
Benjamin Petersonc9637312009-07-02 18:25:26 +00001501 if (end == NULL)
Guido van Rossum34343512006-11-30 22:13:52 +00001502 err = PyFile_WriteString("\n", file);
1503 else
1504 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1505 if (err)
1506 return NULL;
1507
1508 Py_RETURN_NONE;
1509}
1510
1511PyDoc_STRVAR(print_doc,
Georg Brandlcd5da7d2008-02-01 15:47:37 +00001512"print(value, ..., sep=' ', end='\\n', file=sys.stdout)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001513\n\
1514Prints the values to a stream, or to sys.stdout by default.\n\
1515Optional keyword arguments:\n\
1516file: a file-like object (stream); defaults to the current sys.stdout.\n\
1517sep: string inserted between values, default a space.\n\
1518end: string appended after the last value, default a newline.");
1519
1520
Guido van Rossuma88a0332007-02-26 16:59:55 +00001521static PyObject *
1522builtin_input(PyObject *self, PyObject *args)
1523{
Guido van Rossumeba76962007-05-27 09:13:28 +00001524 PyObject *promptarg = NULL;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001525 PyObject *fin = PySys_GetObject("stdin");
1526 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossumeba76962007-05-27 09:13:28 +00001527 PyObject *ferr = PySys_GetObject("stderr");
1528 PyObject *tmp;
1529 long fd;
1530 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001531
Guido van Rossumeba76962007-05-27 09:13:28 +00001532 /* Parse arguments */
1533 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg))
Guido van Rossuma88a0332007-02-26 16:59:55 +00001534 return NULL;
1535
Guido van Rossumeba76962007-05-27 09:13:28 +00001536 /* Check that stdin/out/err are intact */
Christian Heimes2be03732007-11-15 02:26:46 +00001537 if (fin == NULL || fin == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001538 PyErr_SetString(PyExc_RuntimeError,
1539 "input(): lost sys.stdin");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001540 return NULL;
1541 }
Christian Heimes2be03732007-11-15 02:26:46 +00001542 if (fout == NULL || fout == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001543 PyErr_SetString(PyExc_RuntimeError,
1544 "input(): lost sys.stdout");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001545 return NULL;
1546 }
Christian Heimes2be03732007-11-15 02:26:46 +00001547 if (ferr == NULL || ferr == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001548 PyErr_SetString(PyExc_RuntimeError,
1549 "input(): lost sys.stderr");
1550 return NULL;
1551 }
1552
1553 /* First of all, flush stderr */
1554 tmp = PyObject_CallMethod(ferr, "flush", "");
1555 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001556 PyErr_Clear();
1557 else
1558 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001559
1560 /* We should only use (GNU) readline if Python's sys.stdin and
1561 sys.stdout are the same as C's stdin and stdout, because we
1562 need to pass it those. */
1563 tmp = PyObject_CallMethod(fin, "fileno", "");
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001564 if (tmp == NULL) {
1565 PyErr_Clear();
1566 tty = 0;
1567 }
1568 else {
Christian Heimes217cfd12007-12-02 14:31:20 +00001569 fd = PyLong_AsLong(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001570 Py_DECREF(tmp);
1571 if (fd < 0 && PyErr_Occurred())
1572 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001573 tty = fd == fileno(stdin) && isatty(fd);
1574 }
1575 if (tty) {
1576 tmp = PyObject_CallMethod(fout, "fileno", "");
1577 if (tmp == NULL)
1578 PyErr_Clear();
1579 else {
Christian Heimes217cfd12007-12-02 14:31:20 +00001580 fd = PyLong_AsLong(tmp);
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001581 Py_DECREF(tmp);
1582 if (fd < 0 && PyErr_Occurred())
1583 return NULL;
1584 tty = fd == fileno(stdout) && isatty(fd);
1585 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001586 }
1587
1588 /* If we're interactive, use (GNU) readline */
1589 if (tty) {
Guido van Rossuma88a0332007-02-26 16:59:55 +00001590 PyObject *po;
1591 char *prompt;
1592 char *s;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001593 PyObject *stdin_encoding;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001594 PyObject *result;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001595
1596 stdin_encoding = PyObject_GetAttrString(fin, "encoding");
1597 if (!stdin_encoding)
1598 /* stdin is a text stream, so it must have an
1599 encoding. */
1600 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001601 tmp = PyObject_CallMethod(fout, "flush", "");
1602 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001603 PyErr_Clear();
1604 else
1605 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001606 if (promptarg != NULL) {
Amaury Forgeot d'Arcd0db98f2008-09-21 21:49:01 +00001607 PyObject *stringpo;
1608 PyObject *stdout_encoding;
1609 stdout_encoding = PyObject_GetAttrString(fout,
1610 "encoding");
1611 if (stdout_encoding == NULL) {
1612 Py_DECREF(stdin_encoding);
1613 return NULL;
1614 }
1615 stringpo = PyObject_Str(promptarg);
1616 if (stringpo == NULL) {
1617 Py_DECREF(stdin_encoding);
1618 Py_DECREF(stdout_encoding);
1619 return NULL;
1620 }
1621 po = PyUnicode_AsEncodedString(stringpo,
1622 _PyUnicode_AsString(stdout_encoding), NULL);
1623 Py_DECREF(stdout_encoding);
1624 Py_DECREF(stringpo);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001625 if (po == NULL) {
1626 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001627 return NULL;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001628 }
Amaury Forgeot d'Arcd0db98f2008-09-21 21:49:01 +00001629 prompt = PyBytes_AsString(po);
Guido van Rossumeba76962007-05-27 09:13:28 +00001630 if (prompt == NULL) {
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001631 Py_DECREF(stdin_encoding);
Guido van Rossumeba76962007-05-27 09:13:28 +00001632 Py_DECREF(po);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001633 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001634 }
Guido van Rossuma88a0332007-02-26 16:59:55 +00001635 }
1636 else {
1637 po = NULL;
1638 prompt = "";
1639 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001640 s = PyOS_Readline(stdin, stdout, prompt);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001641 Py_XDECREF(po);
1642 if (s == NULL) {
1643 if (!PyErr_Occurred())
1644 PyErr_SetNone(PyExc_KeyboardInterrupt);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001645 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001646 return NULL;
1647 }
1648 if (*s == '\0') {
1649 PyErr_SetNone(PyExc_EOFError);
1650 result = NULL;
1651 }
1652 else { /* strip trailing '\n' */
1653 size_t len = strlen(s);
1654 if (len > PY_SSIZE_T_MAX) {
1655 PyErr_SetString(PyExc_OverflowError,
1656 "input: input too long");
1657 result = NULL;
1658 }
1659 else {
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001660 result = PyUnicode_Decode
1661 (s, len-1,
Marc-André Lemburg4cc0f242008-08-07 18:54:33 +00001662 _PyUnicode_AsString(stdin_encoding),
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001663 NULL);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001664 }
1665 }
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001666 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001667 PyMem_FREE(s);
1668 return result;
1669 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001670
1671 /* Fallback if we're not interactive */
1672 if (promptarg != NULL) {
1673 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0)
Guido van Rossuma88a0332007-02-26 16:59:55 +00001674 return NULL;
1675 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001676 tmp = PyObject_CallMethod(fout, "flush", "");
1677 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001678 PyErr_Clear();
1679 else
1680 Py_DECREF(tmp);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001681 return PyFile_GetLine(fin, -1);
1682}
1683
1684PyDoc_STRVAR(input_doc,
1685"input([prompt]) -> string\n\
1686\n\
1687Read a string from standard input. The trailing newline is stripped.\n\
1688If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1689On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1690is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001691
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001692
Guido van Rossum79f25d91997-04-29 20:08:16 +00001693static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001694builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001695{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001696 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001697}
1698
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001699PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001700"repr(object) -> string\n\
1701\n\
1702Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001703For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001704
1705
Guido van Rossum79f25d91997-04-29 20:08:16 +00001706static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001707builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001708{
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001709 static PyObject *round_str = NULL;
Mark Dickinson1124e712009-01-28 21:25:58 +00001710 PyObject *ndigits = NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001711 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001712 PyObject *number, *round;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001713
Mark Dickinson1124e712009-01-28 21:25:58 +00001714 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:round",
1715 kwlist, &number, &ndigits))
1716 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00001717
Christian Heimes90aa7642007-12-19 02:45:37 +00001718 if (Py_TYPE(number)->tp_dict == NULL) {
1719 if (PyType_Ready(Py_TYPE(number)) < 0)
Guido van Rossum15d3d042007-08-24 02:02:45 +00001720 return NULL;
1721 }
1722
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001723 if (round_str == NULL) {
Christian Heimesfe82e772008-01-28 02:38:20 +00001724 round_str = PyUnicode_InternFromString("__round__");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001725 if (round_str == NULL)
Alex Martelliae211f92007-08-22 23:21:33 +00001726 return NULL;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001727 }
1728
Christian Heimes90aa7642007-12-19 02:45:37 +00001729 round = _PyType_Lookup(Py_TYPE(number), round_str);
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001730 if (round == NULL) {
1731 PyErr_Format(PyExc_TypeError,
1732 "type %.100s doesn't define __round__ method",
Christian Heimes90aa7642007-12-19 02:45:37 +00001733 Py_TYPE(number)->tp_name);
Alex Martelliae211f92007-08-22 23:21:33 +00001734 return NULL;
1735 }
1736
Mark Dickinson1124e712009-01-28 21:25:58 +00001737 if (ndigits == NULL)
1738 return PyObject_CallFunction(round, "O", number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001739 else
Mark Dickinson1124e712009-01-28 21:25:58 +00001740 return PyObject_CallFunction(round, "OO", number, ndigits);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001741}
1742
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001743PyDoc_STRVAR(round_doc,
Mark Dickinson1124e712009-01-28 21:25:58 +00001744"round(number[, ndigits]) -> number\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001745\n\
1746Round a number to a given precision in decimal digits (default 0 digits).\n\
Mark Dickinson0d748c22008-07-05 11:29:03 +00001747This returns an int when called with one argument, otherwise the\n\
Georg Brandl809ddaa2008-07-01 20:39:59 +00001748same type as the number. ndigits may be negative.");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001749
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001750
Raymond Hettinger64958a12003-12-17 20:43:33 +00001751static PyObject *
1752builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1753{
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001754 PyObject *newlist, *v, *seq, *keyfunc=NULL, *newargs;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001755 PyObject *callable;
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001756 static char *kwlist[] = {"iterable", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001757 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001758
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001759 /* args 1-3 should match listsort in Objects/listobject.c */
1760 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted",
1761 kwlist, &seq, &keyfunc, &reverse))
Armin Rigo71d7e702005-09-20 18:13:03 +00001762 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001763
1764 newlist = PySequence_List(seq);
1765 if (newlist == NULL)
1766 return NULL;
1767
1768 callable = PyObject_GetAttrString(newlist, "sort");
1769 if (callable == NULL) {
1770 Py_DECREF(newlist);
1771 return NULL;
1772 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001773
Raymond Hettinger64958a12003-12-17 20:43:33 +00001774 newargs = PyTuple_GetSlice(args, 1, 4);
1775 if (newargs == NULL) {
1776 Py_DECREF(newlist);
1777 Py_DECREF(callable);
1778 return NULL;
1779 }
1780
1781 v = PyObject_Call(callable, newargs, kwds);
1782 Py_DECREF(newargs);
1783 Py_DECREF(callable);
1784 if (v == NULL) {
1785 Py_DECREF(newlist);
1786 return NULL;
1787 }
1788 Py_DECREF(v);
1789 return newlist;
1790}
1791
1792PyDoc_STRVAR(sorted_doc,
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001793"sorted(iterable, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001794
Guido van Rossum79f25d91997-04-29 20:08:16 +00001795static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001796builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001797{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001798 PyObject *v = NULL;
1799 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001800
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001801 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001802 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001803 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001804 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001805 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001806 if (!PyErr_Occurred())
1807 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001808 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001809 }
1810 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001811 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001812 }
1813 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001814 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001815 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001816 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001817 "vars() argument must have __dict__ attribute");
1818 return NULL;
1819 }
1820 }
1821 return d;
1822}
1823
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001824PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001825"vars([object]) -> dictionary\n\
1826\n\
1827Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001828With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001829
Alex Martellia70b1912003-04-22 08:12:33 +00001830static PyObject*
1831builtin_sum(PyObject *self, PyObject *args)
1832{
1833 PyObject *seq;
1834 PyObject *result = NULL;
1835 PyObject *temp, *item, *iter;
1836
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001837 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001838 return NULL;
1839
1840 iter = PyObject_GetIter(seq);
1841 if (iter == NULL)
1842 return NULL;
1843
1844 if (result == NULL) {
Christian Heimes217cfd12007-12-02 14:31:20 +00001845 result = PyLong_FromLong(0);
Alex Martellia70b1912003-04-22 08:12:33 +00001846 if (result == NULL) {
1847 Py_DECREF(iter);
1848 return NULL;
1849 }
1850 } else {
1851 /* reject string values for 'start' parameter */
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001852 if (PyUnicode_Check(result)) {
Alex Martellia70b1912003-04-22 08:12:33 +00001853 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001854 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001855 Py_DECREF(iter);
1856 return NULL;
1857 }
Christian Heimes9c4756e2008-05-26 13:22:05 +00001858 if (PyByteArray_Check(result)) {
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001859 PyErr_SetString(PyExc_TypeError,
1860 "sum() can't sum bytes [use b''.join(seq) instead]");
1861 Py_DECREF(iter);
1862 return NULL;
1863 }
1864
Alex Martelli41c9f882003-04-22 09:24:48 +00001865 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001866 }
1867
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001868#ifndef SLOW_SUM
1869 /* Fast addition by keeping temporary sums in C instead of new Python objects.
1870 Assumes all inputs are the same type. If the assumption fails, default
1871 to the more general routine.
1872 */
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001873 if (PyLong_CheckExact(result)) {
1874 int overflow;
1875 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
1876 /* If this already overflowed, don't even enter the loop. */
1877 if (overflow == 0) {
1878 Py_DECREF(result);
1879 result = NULL;
1880 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001881 while(result == NULL) {
1882 item = PyIter_Next(iter);
1883 if (item == NULL) {
1884 Py_DECREF(iter);
1885 if (PyErr_Occurred())
1886 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001887 return PyLong_FromLong(i_result);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001888 }
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001889 if (PyLong_CheckExact(item)) {
1890 long b = PyLong_AsLongAndOverflow(item, &overflow);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001891 long x = i_result + b;
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001892 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001893 i_result = x;
1894 Py_DECREF(item);
1895 continue;
1896 }
1897 }
1898 /* Either overflowed or is not an int. Restore real objects and process normally */
Christian Heimes217cfd12007-12-02 14:31:20 +00001899 result = PyLong_FromLong(i_result);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001900 temp = PyNumber_Add(result, item);
1901 Py_DECREF(result);
1902 Py_DECREF(item);
1903 result = temp;
1904 if (result == NULL) {
1905 Py_DECREF(iter);
1906 return NULL;
1907 }
1908 }
1909 }
1910
1911 if (PyFloat_CheckExact(result)) {
1912 double f_result = PyFloat_AS_DOUBLE(result);
1913 Py_DECREF(result);
1914 result = NULL;
1915 while(result == NULL) {
1916 item = PyIter_Next(iter);
1917 if (item == NULL) {
1918 Py_DECREF(iter);
1919 if (PyErr_Occurred())
1920 return NULL;
1921 return PyFloat_FromDouble(f_result);
1922 }
1923 if (PyFloat_CheckExact(item)) {
Georg Brandlf08a9dd2008-06-10 16:57:31 +00001924 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001925 f_result += PyFloat_AS_DOUBLE(item);
1926 PyFPE_END_PROTECT(f_result)
1927 Py_DECREF(item);
1928 continue;
1929 }
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001930 if (PyLong_CheckExact(item)) {
1931 long value;
1932 int overflow;
1933 value = PyLong_AsLongAndOverflow(item, &overflow);
1934 if (!overflow) {
Georg Brandlf08a9dd2008-06-10 16:57:31 +00001935 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001936 f_result += (double)value;
1937 PyFPE_END_PROTECT(f_result)
1938 Py_DECREF(item);
1939 continue;
1940 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001941 }
1942 result = PyFloat_FromDouble(f_result);
1943 temp = PyNumber_Add(result, item);
1944 Py_DECREF(result);
1945 Py_DECREF(item);
1946 result = temp;
1947 if (result == NULL) {
1948 Py_DECREF(iter);
1949 return NULL;
1950 }
1951 }
1952 }
1953#endif
1954
Alex Martellia70b1912003-04-22 08:12:33 +00001955 for(;;) {
1956 item = PyIter_Next(iter);
1957 if (item == NULL) {
1958 /* error, or end-of-sequence */
1959 if (PyErr_Occurred()) {
1960 Py_DECREF(result);
1961 result = NULL;
1962 }
1963 break;
1964 }
Mark Dickinson9acadc52009-10-26 14:19:42 +00001965 /* It's tempting to use PyNumber_InPlaceAdd instead of
1966 PyNumber_Add here, to avoid quadratic running time
1967 when doing 'sum(list_of_lists, [])'. However, this
1968 would produce a change in behaviour: a snippet like
1969
1970 empty = []
1971 sum([[x] for x in range(10)], empty)
1972
1973 would change the value of empty. */
Alex Martellia253e182003-10-25 23:24:14 +00001974 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001975 Py_DECREF(result);
1976 Py_DECREF(item);
1977 result = temp;
1978 if (result == NULL)
1979 break;
1980 }
1981 Py_DECREF(iter);
1982 return result;
1983}
1984
1985PyDoc_STRVAR(sum_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001986"sum(iterable[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00001987\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +00001988Returns the sum of an iterable of numbers (NOT strings) plus the value\n\
1989of parameter 'start' (which defaults to 0). When the iterable is\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00001990empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00001991
1992
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001993static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001994builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001995{
1996 PyObject *inst;
1997 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001998 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001999
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002000 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002001 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002002
Guido van Rossum823649d2001-03-21 18:40:58 +00002003 retval = PyObject_IsInstance(inst, cls);
2004 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00002005 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002006 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002007}
2008
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002009PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002010"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002011\n\
2012Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002013With a type as second argument, return whether that is the object's type.\n\
2014The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002015isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002016
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002017
2018static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002019builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002020{
2021 PyObject *derived;
2022 PyObject *cls;
2023 int retval;
2024
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002025 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002026 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002027
Guido van Rossum823649d2001-03-21 18:40:58 +00002028 retval = PyObject_IsSubclass(derived, cls);
2029 if (retval < 0)
2030 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002031 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002032}
2033
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002034PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002035"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002036\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002037Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2038When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2039is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002040
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002041
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002042typedef struct {
2043 PyObject_HEAD
2044 Py_ssize_t tuplesize;
2045 PyObject *ittuple; /* tuple of iterators */
2046 PyObject *result;
2047} zipobject;
2048
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002049static PyObject *
2050zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002051{
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002052 zipobject *lz;
2053 Py_ssize_t i;
2054 PyObject *ittuple; /* tuple of iterators */
2055 PyObject *result;
2056 Py_ssize_t tuplesize = PySequence_Length(args);
2057
2058 if (type == &PyZip_Type && !_PyArg_NoKeywords("zip()", kwds))
2059 return NULL;
2060
Guido van Rossumb65fb332006-08-25 23:26:40 +00002061 /* args must be a tuple */
2062 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00002063
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002064 /* obtain iterators */
2065 ittuple = PyTuple_New(tuplesize);
2066 if (ittuple == NULL)
2067 return NULL;
2068 for (i=0; i < tuplesize; ++i) {
2069 PyObject *item = PyTuple_GET_ITEM(args, i);
2070 PyObject *it = PyObject_GetIter(item);
2071 if (it == NULL) {
2072 if (PyErr_ExceptionMatches(PyExc_TypeError))
2073 PyErr_Format(PyExc_TypeError,
2074 "zip argument #%zd must support iteration",
2075 i+1);
2076 Py_DECREF(ittuple);
2077 return NULL;
2078 }
2079 PyTuple_SET_ITEM(ittuple, i, it);
2080 }
2081
2082 /* create a result holder */
2083 result = PyTuple_New(tuplesize);
2084 if (result == NULL) {
2085 Py_DECREF(ittuple);
2086 return NULL;
2087 }
2088 for (i=0 ; i < tuplesize ; i++) {
2089 Py_INCREF(Py_None);
2090 PyTuple_SET_ITEM(result, i, Py_None);
2091 }
2092
2093 /* create zipobject structure */
2094 lz = (zipobject *)type->tp_alloc(type, 0);
2095 if (lz == NULL) {
2096 Py_DECREF(ittuple);
2097 Py_DECREF(result);
2098 return NULL;
2099 }
2100 lz->ittuple = ittuple;
2101 lz->tuplesize = tuplesize;
2102 lz->result = result;
2103
2104 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002105}
2106
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002107static void
2108zip_dealloc(zipobject *lz)
2109{
2110 PyObject_GC_UnTrack(lz);
2111 Py_XDECREF(lz->ittuple);
2112 Py_XDECREF(lz->result);
2113 Py_TYPE(lz)->tp_free(lz);
2114}
2115
2116static int
2117zip_traverse(zipobject *lz, visitproc visit, void *arg)
2118{
2119 Py_VISIT(lz->ittuple);
2120 Py_VISIT(lz->result);
2121 return 0;
2122}
2123
2124static PyObject *
2125zip_next(zipobject *lz)
2126{
2127 Py_ssize_t i;
2128 Py_ssize_t tuplesize = lz->tuplesize;
2129 PyObject *result = lz->result;
2130 PyObject *it;
2131 PyObject *item;
2132 PyObject *olditem;
2133
2134 if (tuplesize == 0)
2135 return NULL;
2136 if (Py_REFCNT(result) == 1) {
2137 Py_INCREF(result);
2138 for (i=0 ; i < tuplesize ; i++) {
2139 it = PyTuple_GET_ITEM(lz->ittuple, i);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002140 item = (*Py_TYPE(it)->tp_iternext)(it);
2141 if (item == NULL) {
2142 Py_DECREF(result);
2143 return NULL;
2144 }
2145 olditem = PyTuple_GET_ITEM(result, i);
2146 PyTuple_SET_ITEM(result, i, item);
2147 Py_DECREF(olditem);
2148 }
2149 } else {
2150 result = PyTuple_New(tuplesize);
2151 if (result == NULL)
2152 return NULL;
2153 for (i=0 ; i < tuplesize ; i++) {
2154 it = PyTuple_GET_ITEM(lz->ittuple, i);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002155 item = (*Py_TYPE(it)->tp_iternext)(it);
2156 if (item == NULL) {
2157 Py_DECREF(result);
2158 return NULL;
2159 }
2160 PyTuple_SET_ITEM(result, i, item);
2161 }
2162 }
2163 return result;
2164}
Barry Warsawbd599b52000-08-03 15:45:29 +00002165
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002166PyDoc_STRVAR(zip_doc,
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002167"zip(iter1 [,iter2 [...]]) --> zip object\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002168\n\
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002169Return a zip object whose .__next__() method returns a tuple where\n\
2170the i-th element comes from the i-th iterable argument. The .__next__()\n\
2171method continues until the shortest iterable in the argument sequence\n\
Georg Brandlced51db2008-12-04 18:28:38 +00002172is exhausted and then it raises StopIteration.");
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002173
2174PyTypeObject PyZip_Type = {
2175 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2176 "zip", /* tp_name */
2177 sizeof(zipobject), /* tp_basicsize */
2178 0, /* tp_itemsize */
2179 /* methods */
2180 (destructor)zip_dealloc, /* tp_dealloc */
2181 0, /* tp_print */
2182 0, /* tp_getattr */
2183 0, /* tp_setattr */
Mark Dickinsone94c6792009-02-02 20:36:42 +00002184 0, /* tp_reserved */
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002185 0, /* tp_repr */
2186 0, /* tp_as_number */
2187 0, /* tp_as_sequence */
2188 0, /* tp_as_mapping */
2189 0, /* tp_hash */
2190 0, /* tp_call */
2191 0, /* tp_str */
2192 PyObject_GenericGetAttr, /* tp_getattro */
2193 0, /* tp_setattro */
2194 0, /* tp_as_buffer */
2195 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2196 Py_TPFLAGS_BASETYPE, /* tp_flags */
2197 zip_doc, /* tp_doc */
2198 (traverseproc)zip_traverse, /* tp_traverse */
2199 0, /* tp_clear */
2200 0, /* tp_richcompare */
2201 0, /* tp_weaklistoffset */
2202 PyObject_SelfIter, /* tp_iter */
2203 (iternextfunc)zip_next, /* tp_iternext */
2204 0, /* tp_methods */
2205 0, /* tp_members */
2206 0, /* tp_getset */
2207 0, /* tp_base */
2208 0, /* tp_dict */
2209 0, /* tp_descr_get */
2210 0, /* tp_descr_set */
2211 0, /* tp_dictoffset */
2212 0, /* tp_init */
2213 PyType_GenericAlloc, /* tp_alloc */
2214 zip_new, /* tp_new */
2215 PyObject_GC_Del, /* tp_free */
2216};
Barry Warsawbd599b52000-08-03 15:45:29 +00002217
2218
Guido van Rossum79f25d91997-04-29 20:08:16 +00002219static PyMethodDef builtin_methods[] = {
Guido van Rossum52cc1d82007-03-18 15:41:51 +00002220 {"__build_class__", (PyCFunction)builtin___build_class__,
2221 METH_VARARGS | METH_KEYWORDS, build_class_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002222 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002223 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002224 {"all", builtin_all, METH_O, all_doc},
2225 {"any", builtin_any, METH_O, any_doc},
Georg Brandl559e5d72008-06-11 18:37:52 +00002226 {"ascii", builtin_ascii, METH_O, ascii_doc},
Guido van Rossumcd16bf62007-06-13 18:07:49 +00002227 {"bin", builtin_bin, METH_O, bin_doc},
Neal Norwitzc2550c72007-08-31 04:17:51 +00002228 {"chr", builtin_chr, METH_VARARGS, chr_doc},
Guido van Rossumd8faa362007-04-27 19:54:29 +00002229 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002230 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2231 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2232 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2233 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00002234 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Eric Smith8c663262007-08-25 02:26:07 +00002235 {"format", builtin_format, METH_VARARGS, format_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002236 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2237 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2238 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2239 {"hash", builtin_hash, METH_O, hash_doc},
2240 {"hex", builtin_hex, METH_O, hex_doc},
2241 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00002242 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002243 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2244 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2245 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2246 {"len", builtin_len, METH_O, len_doc},
2247 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002248 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2249 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandla18af4e2007-04-21 15:47:16 +00002250 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002251 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002252 {"ord", builtin_ord, METH_O, ord_doc},
2253 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00002254 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002255 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002256 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002257 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002258 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002259 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002260 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002261 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002262};
2263
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002264PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002265"Built-in functions, exceptions, and other objects.\n\
2266\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002267Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002268
Martin v. Löwis1a214512008-06-11 05:26:20 +00002269static struct PyModuleDef builtinsmodule = {
2270 PyModuleDef_HEAD_INIT,
2271 "builtins",
2272 builtin_doc,
Christian Heimes6a27efa2008-10-30 21:48:26 +00002273 -1, /* multiple "initialization" just copies the module dict. */
Martin v. Löwis1a214512008-06-11 05:26:20 +00002274 builtin_methods,
2275 NULL,
2276 NULL,
2277 NULL,
2278 NULL
2279};
2280
2281
Guido van Rossum25ce5661997-08-02 03:10:38 +00002282PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002283_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002284{
Fred Drake5550de32000-06-20 04:54:19 +00002285 PyObject *mod, *dict, *debug;
Martin v. Löwis1a214512008-06-11 05:26:20 +00002286 mod = PyModule_Create(&builtinsmodule);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002287 if (mod == NULL)
2288 return NULL;
2289 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002290
Tim Peters7571a0f2003-03-23 17:52:28 +00002291#ifdef Py_TRACE_REFS
Georg Brandl1a3284e2007-12-02 09:40:06 +00002292 /* "builtins" exposes a number of statically allocated objects
Tim Peters7571a0f2003-03-23 17:52:28 +00002293 * that, before this code was added in 2.3, never showed up in
2294 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2295 * result, programs leaking references to None and False (etc)
2296 * couldn't be diagnosed by examining sys.getobjects(0).
2297 */
2298#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2299#else
2300#define ADD_TO_ALL(OBJECT) (void)0
2301#endif
2302
Tim Peters4b7625e2001-09-13 21:37:17 +00002303#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002304 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2305 return NULL; \
2306 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002307
2308 SETBUILTIN("None", Py_None);
2309 SETBUILTIN("Ellipsis", Py_Ellipsis);
2310 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002311 SETBUILTIN("False", Py_False);
2312 SETBUILTIN("True", Py_True);
2313 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbae07c92007-10-08 02:46:15 +00002314 SETBUILTIN("memoryview", &PyMemoryView_Type);
Christian Heimes9c4756e2008-05-26 13:22:05 +00002315 SETBUILTIN("bytearray", &PyByteArray_Type);
Christian Heimes72b710a2008-05-26 13:28:38 +00002316 SETBUILTIN("bytes", &PyBytes_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002317 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002318 SETBUILTIN("complex", &PyComplex_Type);
Tim Petersa427a2b2001-10-29 22:25:45 +00002319 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002320 SETBUILTIN("enumerate", &PyEnum_Type);
Raymond Hettinger17301e92008-03-13 00:19:26 +00002321 SETBUILTIN("filter", &PyFilter_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002322 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002323 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002324 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00002325 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002326 SETBUILTIN("list", &PyList_Type);
Raymond Hettingera6c60372008-03-13 01:26:19 +00002327 SETBUILTIN("map", &PyMap_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002328 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossum805365e2007-05-07 22:24:25 +00002329 SETBUILTIN("range", &PyRange_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002330 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002331 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002332 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002333 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Guido van Rossum572dbf82007-04-27 23:53:51 +00002334 SETBUILTIN("str", &PyUnicode_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002335 SETBUILTIN("super", &PySuper_Type);
2336 SETBUILTIN("tuple", &PyTuple_Type);
2337 SETBUILTIN("type", &PyType_Type);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002338 SETBUILTIN("zip", &PyZip_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002339 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002340 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2341 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002342 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002343 }
2344 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002345
Guido van Rossum25ce5661997-08-02 03:10:38 +00002346 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002347#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002348#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002349}