blob: 5c7138ec60bb1d9d4c0b791dbe1a8e06449243de [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) {
Benjamin Peterson23e018a2010-02-27 17:40:01 +0000111 if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
112 PyErr_Clear();
113 ns = PyDict_New();
114 }
115 else {
116 Py_DECREF(meta);
117 Py_XDECREF(mkw);
118 Py_DECREF(bases);
119 return NULL;
120 }
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000121 }
122 else {
Raymond Hettinger5d1ff002009-01-06 09:37:13 +0000123 PyObject *pargs = PyTuple_Pack(2, name, bases);
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000124 if (pargs == NULL) {
125 Py_DECREF(prep);
126 Py_DECREF(meta);
127 Py_XDECREF(mkw);
128 Py_DECREF(bases);
129 return NULL;
130 }
131 ns = PyEval_CallObjectWithKeywords(prep, pargs, mkw);
132 Py_DECREF(pargs);
133 Py_DECREF(prep);
134 if (ns == NULL) {
135 Py_DECREF(meta);
136 Py_XDECREF(mkw);
137 Py_DECREF(bases);
138 return NULL;
139 }
140 }
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000141 cell = PyObject_CallFunctionObjArgs(func, ns, NULL);
142 if (cell != NULL) {
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000143 PyObject *margs;
Raymond Hettinger5d1ff002009-01-06 09:37:13 +0000144 margs = PyTuple_Pack(3, name, bases, ns);
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000145 if (margs != NULL) {
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000146 cls = PyEval_CallObjectWithKeywords(meta, margs, mkw);
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000147 Py_DECREF(margs);
148 }
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000149 if (cls != NULL && PyCell_Check(cell)) {
150 Py_INCREF(cls);
151 PyCell_SET(cell, cls);
152 }
153 Py_DECREF(cell);
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000154 }
155 Py_DECREF(ns);
156 Py_DECREF(meta);
157 Py_XDECREF(mkw);
158 Py_DECREF(bases);
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000159 return cls;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000160}
161
162PyDoc_STRVAR(build_class_doc,
163"__build_class__(func, name, *bases, metaclass=None, **kwds) -> class\n\
164\n\
165Internal helper function used by the class statement.");
166
167static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000168builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000169{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000170 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
171 "level", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000172 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000173 PyObject *globals = NULL;
174 PyObject *locals = NULL;
175 PyObject *fromlist = NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +0000176 int level = -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000177
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000178 if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|OOOi:__import__",
179 kwlist, &name, &globals, &locals, &fromlist, &level))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000180 return NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +0000181 return PyImport_ImportModuleLevel(name, globals, locals,
182 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000183}
184
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000185PyDoc_STRVAR(import_doc,
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000186"__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000187\n\
188Import a module. The globals are only used to determine the context;\n\
189they are not modified. The locals are currently unused. The fromlist\n\
190should be a list of names to emulate ``from name import ...'', or an\n\
191empty list to emulate ``import name''.\n\
192When importing a module from a package, note that __import__('A.B', ...)\n\
193returns package A when fromlist is empty, but its submodule B when\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000194fromlist is not empty. Level is used to determine whether to perform \n\
195absolute or relative imports. -1 is the original strategy of attempting\n\
196both absolute and relative imports, 0 is absolute, a positive number\n\
197is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000198
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000199
Guido van Rossum79f25d91997-04-29 20:08:16 +0000200static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000201builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000202{
Guido van Rossum09df08a1998-05-22 00:51:39 +0000203 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000204}
205
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000206PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000207"abs(number) -> number\n\
208\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000209Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000210
Raymond Hettinger96229b12005-03-11 06:49:40 +0000211static PyObject *
212builtin_all(PyObject *self, PyObject *v)
213{
214 PyObject *it, *item;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000215 PyObject *(*iternext)(PyObject *);
216 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000217
218 it = PyObject_GetIter(v);
219 if (it == NULL)
220 return NULL;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000221 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000222
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000223 for (;;) {
224 item = iternext(it);
225 if (item == NULL)
226 break;
227 cmp = PyObject_IsTrue(item);
Raymond Hettinger96229b12005-03-11 06:49:40 +0000228 Py_DECREF(item);
229 if (cmp < 0) {
230 Py_DECREF(it);
231 return NULL;
232 }
233 if (cmp == 0) {
234 Py_DECREF(it);
235 Py_RETURN_FALSE;
236 }
237 }
238 Py_DECREF(it);
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000239 if (PyErr_Occurred()) {
240 if (PyErr_ExceptionMatches(PyExc_StopIteration))
241 PyErr_Clear();
242 else
243 return NULL;
244 }
Raymond Hettinger96229b12005-03-11 06:49:40 +0000245 Py_RETURN_TRUE;
246}
247
248PyDoc_STRVAR(all_doc,
249"all(iterable) -> bool\n\
250\n\
251Return True if bool(x) is True for all values x in the iterable.");
252
253static PyObject *
254builtin_any(PyObject *self, PyObject *v)
255{
256 PyObject *it, *item;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000257 PyObject *(*iternext)(PyObject *);
258 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000259
260 it = PyObject_GetIter(v);
261 if (it == NULL)
262 return NULL;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000263 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000264
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000265 for (;;) {
266 item = iternext(it);
267 if (item == NULL)
268 break;
269 cmp = PyObject_IsTrue(item);
Raymond Hettinger96229b12005-03-11 06:49:40 +0000270 Py_DECREF(item);
271 if (cmp < 0) {
272 Py_DECREF(it);
273 return NULL;
274 }
275 if (cmp == 1) {
276 Py_DECREF(it);
277 Py_RETURN_TRUE;
278 }
279 }
280 Py_DECREF(it);
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000281 if (PyErr_Occurred()) {
282 if (PyErr_ExceptionMatches(PyExc_StopIteration))
283 PyErr_Clear();
284 else
285 return NULL;
286 }
Raymond Hettinger96229b12005-03-11 06:49:40 +0000287 Py_RETURN_FALSE;
288}
289
290PyDoc_STRVAR(any_doc,
291"any(iterable) -> bool\n\
292\n\
293Return True if bool(x) is True for any x in the iterable.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000294
Georg Brandl559e5d72008-06-11 18:37:52 +0000295static PyObject *
296builtin_ascii(PyObject *self, PyObject *v)
297{
298 return PyObject_ASCII(v);
299}
300
301PyDoc_STRVAR(ascii_doc,
302"ascii(object) -> string\n\
303\n\
304As repr(), return a string containing a printable representation of an\n\
305object, but escape the non-ASCII characters in the string returned by\n\
306repr() using \\x, \\u or \\U escapes. This generates a string similar\n\
307to that returned by repr() in Python 2.");
308
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000309
Guido van Rossum79f25d91997-04-29 20:08:16 +0000310static PyObject *
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000311builtin_bin(PyObject *self, PyObject *v)
312{
313 return PyNumber_ToBase(v, 2);
314}
315
316PyDoc_STRVAR(bin_doc,
317"bin(number) -> string\n\
318\n\
319Return the binary representation of an integer or long integer.");
320
321
Raymond Hettinger17301e92008-03-13 00:19:26 +0000322typedef struct {
323 PyObject_HEAD
324 PyObject *func;
325 PyObject *it;
326} filterobject;
327
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000328static PyObject *
Raymond Hettinger17301e92008-03-13 00:19:26 +0000329filter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000330{
Raymond Hettinger17301e92008-03-13 00:19:26 +0000331 PyObject *func, *seq;
332 PyObject *it;
333 filterobject *lz;
334
335 if (type == &PyFilter_Type && !_PyArg_NoKeywords("filter()", kwds))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000336 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000337
338 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
Georg Brandle35b6572005-07-19 22:20:20 +0000339 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000340
341 /* Get iterator. */
342 it = PyObject_GetIter(seq);
343 if (it == NULL)
344 return NULL;
345
346 /* create filterobject structure */
347 lz = (filterobject *)type->tp_alloc(type, 0);
348 if (lz == NULL) {
349 Py_DECREF(it);
350 return NULL;
351 }
352 Py_INCREF(func);
353 lz->func = func;
354 lz->it = it;
355
356 return (PyObject *)lz;
357}
358
359static void
360filter_dealloc(filterobject *lz)
361{
362 PyObject_GC_UnTrack(lz);
363 Py_XDECREF(lz->func);
364 Py_XDECREF(lz->it);
365 Py_TYPE(lz)->tp_free(lz);
366}
367
368static int
369filter_traverse(filterobject *lz, visitproc visit, void *arg)
370{
371 Py_VISIT(lz->it);
372 Py_VISIT(lz->func);
373 return 0;
374}
375
376static PyObject *
377filter_next(filterobject *lz)
378{
379 PyObject *item;
380 PyObject *it = lz->it;
381 long ok;
382 PyObject *(*iternext)(PyObject *);
383
Raymond Hettinger17301e92008-03-13 00:19:26 +0000384 iternext = *Py_TYPE(it)->tp_iternext;
385 for (;;) {
386 item = iternext(it);
387 if (item == NULL)
388 return NULL;
389
390 if (lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type) {
391 ok = PyObject_IsTrue(item);
392 } else {
393 PyObject *good;
394 good = PyObject_CallFunctionObjArgs(lz->func,
395 item, NULL);
396 if (good == NULL) {
397 Py_DECREF(item);
398 return NULL;
399 }
400 ok = PyObject_IsTrue(good);
401 Py_DECREF(good);
402 }
403 if (ok)
404 return item;
405 Py_DECREF(item);
406 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000407}
408
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000409PyDoc_STRVAR(filter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +0000410"filter(function or None, iterable) --> filter object\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000411\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +0000412Return an iterator yielding those items of iterable for which function(item)\n\
Raymond Hettinger17301e92008-03-13 00:19:26 +0000413is true. If function is None, return the items that are true.");
414
415PyTypeObject PyFilter_Type = {
416 PyVarObject_HEAD_INIT(&PyType_Type, 0)
417 "filter", /* tp_name */
418 sizeof(filterobject), /* tp_basicsize */
419 0, /* tp_itemsize */
420 /* methods */
421 (destructor)filter_dealloc, /* tp_dealloc */
422 0, /* tp_print */
423 0, /* tp_getattr */
424 0, /* tp_setattr */
Mark Dickinsone94c6792009-02-02 20:36:42 +0000425 0, /* tp_reserved */
Raymond Hettinger17301e92008-03-13 00:19:26 +0000426 0, /* tp_repr */
427 0, /* tp_as_number */
428 0, /* tp_as_sequence */
429 0, /* tp_as_mapping */
430 0, /* tp_hash */
431 0, /* tp_call */
432 0, /* tp_str */
433 PyObject_GenericGetAttr, /* tp_getattro */
434 0, /* tp_setattro */
435 0, /* tp_as_buffer */
436 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
437 Py_TPFLAGS_BASETYPE, /* tp_flags */
438 filter_doc, /* tp_doc */
439 (traverseproc)filter_traverse, /* tp_traverse */
440 0, /* tp_clear */
441 0, /* tp_richcompare */
442 0, /* tp_weaklistoffset */
443 PyObject_SelfIter, /* tp_iter */
444 (iternextfunc)filter_next, /* tp_iternext */
445 0, /* tp_methods */
446 0, /* tp_members */
447 0, /* tp_getset */
448 0, /* tp_base */
449 0, /* tp_dict */
450 0, /* tp_descr_get */
451 0, /* tp_descr_set */
452 0, /* tp_dictoffset */
453 0, /* tp_init */
454 PyType_GenericAlloc, /* tp_alloc */
455 filter_new, /* tp_new */
456 PyObject_GC_Del, /* tp_free */
457};
458
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000459
Eric Smith8c663262007-08-25 02:26:07 +0000460static PyObject *
461builtin_format(PyObject *self, PyObject *args)
462{
Christian Heimes94b7d3d2007-12-11 20:20:39 +0000463 PyObject *value;
Eric Smith8fd3eba2008-02-17 19:48:00 +0000464 PyObject *format_spec = NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000465
Eric Smith8fd3eba2008-02-17 19:48:00 +0000466 if (!PyArg_ParseTuple(args, "O|U:format", &value, &format_spec))
467 return NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000468
Eric Smith8fd3eba2008-02-17 19:48:00 +0000469 return PyObject_Format(value, format_spec);
Eric Smith8c663262007-08-25 02:26:07 +0000470}
471
Eric Smith8c663262007-08-25 02:26:07 +0000472PyDoc_STRVAR(format_doc,
Eric Smith81936692007-08-31 01:14:01 +0000473"format(value[, format_spec]) -> string\n\
Eric Smith8c663262007-08-25 02:26:07 +0000474\n\
Eric Smith81936692007-08-31 01:14:01 +0000475Returns value.__format__(format_spec)\n\
476format_spec defaults to \"\"");
477
Guido van Rossum7fcf2242007-05-04 17:43:11 +0000478static PyObject *
Walter Dörwalde7efd592007-06-05 20:07:21 +0000479builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000480{
Amaury Forgeot d'Arc7888d082008-08-01 01:06:32 +0000481 int x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000482
Amaury Forgeot d'Arc7888d082008-08-01 01:06:32 +0000483 if (!PyArg_ParseTuple(args, "i:chr", &x))
Guido van Rossum09095f32000-03-10 23:00:52 +0000484 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000485
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000486 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000487}
488
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000489PyDoc_VAR(chr_doc) = PyDoc_STR(
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000490"chr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000491\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000492Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000493)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000494#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000495PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000496"\nIf 0x10000 <= i, a surrogate pair is returned."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000497)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000498#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000499;
Guido van Rossum09095f32000-03-10 23:00:52 +0000500
501
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000502static char *
Benjamin Petersonf5b52242009-03-02 23:31:26 +0000503source_as_string(PyObject *cmd, char *funcname, char *what, PyCompilerFlags *cf)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000504{
505 char *str;
506 Py_ssize_t size;
507
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000508 if (PyUnicode_Check(cmd)) {
Benjamin Petersonf5b52242009-03-02 23:31:26 +0000509 cf->cf_flags |= PyCF_IGNORE_COOKIE;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000510 cmd = _PyUnicode_AsDefaultEncodedString(cmd, NULL);
511 if (cmd == NULL)
512 return NULL;
513 }
Guido van Rossuma4b8d1d2007-08-27 15:02:28 +0000514 else if (!PyObject_CheckReadBuffer(cmd)) {
Georg Brandl2cabc562008-08-28 07:57:16 +0000515 PyErr_Format(PyExc_TypeError,
516 "%s() arg 1 must be a %s object",
517 funcname, what);
Guido van Rossuma4b8d1d2007-08-27 15:02:28 +0000518 return NULL;
519 }
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000520 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &size) < 0) {
521 return NULL;
522 }
523 if (strlen(str) != size) {
524 PyErr_SetString(PyExc_TypeError,
525 "source code string cannot contain null bytes");
526 return NULL;
527 }
528 return str;
529}
530
Guido van Rossum79f25d91997-04-29 20:08:16 +0000531static PyObject *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000532builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000533{
534 char *str;
535 char *filename;
536 char *startstr;
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000537 int mode = -1;
Tim Peters6cd6a822001-08-17 22:11:27 +0000538 int dont_inherit = 0;
539 int supplied_flags = 0;
Benjamin Peterson97dd9872009-12-13 01:23:39 +0000540 int is_ast;
Tim Peters5ba58662001-07-16 02:29:45 +0000541 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000542 PyObject *cmd;
Guido van Rossumd8faa362007-04-27 19:54:29 +0000543 static char *kwlist[] = {"source", "filename", "mode", "flags",
544 "dont_inherit", NULL};
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000545 int start[] = {Py_file_input, Py_eval_input, Py_single_input};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000546
Guido van Rossumd8faa362007-04-27 19:54:29 +0000547 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
548 kwlist, &cmd, &filename, &startstr,
549 &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000550 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000551
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000552 cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000553
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000554 if (supplied_flags &
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000555 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000556 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000557 PyErr_SetString(PyExc_ValueError,
558 "compile(): unrecognised flags");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000559 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000560 }
561 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
562
Tim Peters6cd6a822001-08-17 22:11:27 +0000563 if (!dont_inherit) {
564 PyEval_MergeCompilerFlags(&cf);
565 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000566
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000567 if (strcmp(startstr, "exec") == 0)
568 mode = 0;
569 else if (strcmp(startstr, "eval") == 0)
570 mode = 1;
571 else if (strcmp(startstr, "single") == 0)
572 mode = 2;
573 else {
574 PyErr_SetString(PyExc_ValueError,
575 "compile() arg 3 must be 'exec', 'eval' or 'single'");
576 return NULL;
577 }
578
Benjamin Peterson97dd9872009-12-13 01:23:39 +0000579 is_ast = PyAST_Check(cmd);
580 if (is_ast == -1)
581 return NULL;
582 if (is_ast) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000583 PyObject *result;
584 if (supplied_flags & PyCF_ONLY_AST) {
585 Py_INCREF(cmd);
586 result = cmd;
587 }
588 else {
589 PyArena *arena;
590 mod_ty mod;
591
592 arena = PyArena_New();
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000593 mod = PyAST_obj2mod(cmd, arena, mode);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000594 if (mod == NULL) {
595 PyArena_Free(arena);
596 return NULL;
597 }
598 result = (PyObject*)PyAST_Compile(mod, filename,
599 &cf, arena);
600 PyArena_Free(arena);
601 }
602 return result;
603 }
604
Benjamin Petersonf5b52242009-03-02 23:31:26 +0000605 str = source_as_string(cmd, "compile", "string, bytes, AST or code", &cf);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000606 if (str == NULL)
607 return NULL;
608
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000609 return Py_CompileStringFlags(str, filename, start[mode], &cf);
Guido van Rossum5b722181993-03-30 17:46:03 +0000610}
611
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000612PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000613"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000614\n\
615Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000616into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000617The filename will be used for run-time error messages.\n\
618The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000619single (interactive) statement, or 'eval' to compile an expression.\n\
620The flags argument, if present, controls which future statements influence\n\
621the compilation of the code.\n\
622The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
623the effects of any future statements in effect in the code calling\n\
624compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000625in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000626
Guido van Rossum79f25d91997-04-29 20:08:16 +0000627static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000628builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000629{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000630 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000631
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000632 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000633 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000634 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000635}
636
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000637PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000638"dir([object]) -> list of strings\n"
639"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000640"If called without an argument, return the names in the current scope.\n"
641"Else, return an alphabetized list of names comprising (some of) the attributes\n"
642"of the given object, and of attributes reachable from it.\n"
643"If the object supplies a method named __dir__, it will be used; otherwise\n"
644"the default dir() logic is used and returns:\n"
645" for a module object: the module's attributes.\n"
646" for a class object: its attributes, and recursively the attributes\n"
647" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000648" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000649" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000650
Guido van Rossum79f25d91997-04-29 20:08:16 +0000651static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000652builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000653{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000654 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000655
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000656 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000657 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000658 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000659}
660
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000661PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000662"divmod(x, y) -> (div, mod)\n\
663\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000664Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000665
666
Guido van Rossum79f25d91997-04-29 20:08:16 +0000667static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000668builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000669{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000670 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000671 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000672 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000673 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000674
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000675 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000676 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000677 if (locals != Py_None && !PyMapping_Check(locals)) {
678 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000679 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000680 }
681 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000682 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000683 "globals must be a real dict; try eval(expr, {}, mapping)"
684 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000685 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000686 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000687 if (globals == Py_None) {
688 globals = PyEval_GetGlobals();
689 if (locals == Py_None)
690 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000691 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000692 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000693 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000694
Georg Brandl77c85e62005-09-15 10:46:13 +0000695 if (globals == NULL || locals == NULL) {
696 PyErr_SetString(PyExc_TypeError,
697 "eval must be given globals and locals "
698 "when called without a frame");
699 return NULL;
700 }
701
Guido van Rossum79f25d91997-04-29 20:08:16 +0000702 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
703 if (PyDict_SetItemString(globals, "__builtins__",
704 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000705 return NULL;
706 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000707
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000708 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000709 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000710 PyErr_SetString(PyExc_TypeError,
711 "code object passed to eval() may not contain free variables");
712 return NULL;
713 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000714 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000715 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000716
Benjamin Petersonf5b52242009-03-02 23:31:26 +0000717 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
718 str = source_as_string(cmd, "eval", "string, bytes or code", &cf);
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000719 if (str == NULL)
Guido van Rossum94390a41992-08-14 15:14:30 +0000720 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000721
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000722 while (*str == ' ' || *str == '\t')
723 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000724
Tim Peters9fa96be2001-08-17 23:04:59 +0000725 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000726 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
727 Py_XDECREF(tmp);
728 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000729}
730
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000731PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000732"eval(source[, globals[, locals]]) -> value\n\
733\n\
734Evaluate the source in the context of globals and locals.\n\
735The source may be a string representing a Python expression\n\
736or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000737The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000738defaulting to the current globals and locals.\n\
739If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000740
Georg Brandl7cae87c2006-09-06 06:51:57 +0000741static PyObject *
742builtin_exec(PyObject *self, PyObject *args)
743{
744 PyObject *v;
745 PyObject *prog, *globals = Py_None, *locals = Py_None;
746 int plain = 0;
747
Raymond Hettinger5d1ff002009-01-06 09:37:13 +0000748 if (!PyArg_UnpackTuple(args, "exec", 1, 3, &prog, &globals, &locals))
Georg Brandl7cae87c2006-09-06 06:51:57 +0000749 return NULL;
750
751 if (globals == Py_None) {
752 globals = PyEval_GetGlobals();
753 if (locals == Py_None) {
754 locals = PyEval_GetLocals();
755 plain = 1;
756 }
757 if (!globals || !locals) {
758 PyErr_SetString(PyExc_SystemError,
759 "globals and locals cannot be NULL");
760 return NULL;
761 }
762 }
763 else if (locals == Py_None)
764 locals = globals;
Georg Brandl2cabc562008-08-28 07:57:16 +0000765
Georg Brandl7cae87c2006-09-06 06:51:57 +0000766 if (!PyDict_Check(globals)) {
767 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
768 globals->ob_type->tp_name);
769 return NULL;
770 }
771 if (!PyMapping_Check(locals)) {
772 PyErr_Format(PyExc_TypeError,
773 "arg 3 must be a mapping or None, not %.100s",
774 locals->ob_type->tp_name);
775 return NULL;
776 }
777 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
778 if (PyDict_SetItemString(globals, "__builtins__",
779 PyEval_GetBuiltins()) != 0)
780 return NULL;
781 }
782
783 if (PyCode_Check(prog)) {
784 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
785 PyErr_SetString(PyExc_TypeError,
786 "code object passed to exec() may not "
787 "contain free variables");
788 return NULL;
789 }
790 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
791 }
Georg Brandl7cae87c2006-09-06 06:51:57 +0000792 else {
Benjamin Petersonf5b52242009-03-02 23:31:26 +0000793 char *str;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000794 PyCompilerFlags cf;
Benjamin Petersonf5b52242009-03-02 23:31:26 +0000795 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
796 str = source_as_string(prog, "exec",
797 "string, bytes or code", &cf);
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000798 if (str == NULL)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000799 return NULL;
800 if (PyEval_MergeCompilerFlags(&cf))
801 v = PyRun_StringFlags(str, Py_file_input, globals,
802 locals, &cf);
803 else
804 v = PyRun_String(str, Py_file_input, globals, locals);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000805 }
806 if (v == NULL)
807 return NULL;
808 Py_DECREF(v);
809 Py_RETURN_NONE;
810}
811
812PyDoc_STRVAR(exec_doc,
813"exec(object[, globals[, locals]])\n\
814\n\
Mark Dickinson480e8e32009-12-19 21:19:35 +0000815Read and execute code from an object, which can be a string or a code\n\
Benjamin Peterson38090262009-01-04 15:30:39 +0000816object.\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000817The globals and locals are dictionaries, defaulting to the current\n\
818globals and locals. If only globals is given, locals defaults to it.");
819
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000820
Guido van Rossum79f25d91997-04-29 20:08:16 +0000821static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000822builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000823{
Neal Norwitz6ea45d32007-08-26 04:19:43 +0000824 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000825 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000826
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000827 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000828 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000829
Martin v. Löwis5b222132007-06-10 09:51:05 +0000830 if (!PyUnicode_Check(name)) {
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000831 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000832 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000833 return NULL;
834 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000835 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000836 if (result == NULL && dflt != NULL &&
837 PyErr_ExceptionMatches(PyExc_AttributeError))
838 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000839 PyErr_Clear();
840 Py_INCREF(dflt);
841 result = dflt;
842 }
843 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000844}
845
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000846PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000847"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000848\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000849Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
850When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000851exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000852
853
Guido van Rossum79f25d91997-04-29 20:08:16 +0000854static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000855builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000856{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000857 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000858
Guido van Rossum79f25d91997-04-29 20:08:16 +0000859 d = PyEval_GetGlobals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000860 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000861 return d;
862}
863
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000864PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000865"globals() -> dictionary\n\
866\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000867Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000868
869
Guido van Rossum79f25d91997-04-29 20:08:16 +0000870static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000871builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000872{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000873 PyObject *v;
874 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000875
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000876 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000877 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000878 if (!PyUnicode_Check(name)) {
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000879 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000880 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000881 return NULL;
882 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000883 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000884 if (v == NULL) {
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000885 if (!PyErr_ExceptionMatches(PyExc_Exception))
886 return NULL;
887 else {
888 PyErr_Clear();
889 Py_INCREF(Py_False);
890 return Py_False;
891 }
Guido van Rossum9bfef441993-03-29 10:43:31 +0000892 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000893 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000894 Py_INCREF(Py_True);
895 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000896}
897
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000898PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000899"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000900\n\
901Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000902(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000903
904
Guido van Rossum79f25d91997-04-29 20:08:16 +0000905static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000906builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000907{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000908 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000909}
910
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000911PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000912"id(object) -> integer\n\
913\n\
914Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000915simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000916
917
Raymond Hettingera6c60372008-03-13 01:26:19 +0000918/* map object ************************************************************/
919
920typedef struct {
921 PyObject_HEAD
922 PyObject *iters;
923 PyObject *func;
924} mapobject;
925
Guido van Rossum79f25d91997-04-29 20:08:16 +0000926static PyObject *
Raymond Hettingera6c60372008-03-13 01:26:19 +0000927map_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000928{
Raymond Hettingera6c60372008-03-13 01:26:19 +0000929 PyObject *it, *iters, *func;
930 mapobject *lz;
931 Py_ssize_t numargs, i;
932
933 if (type == &PyMap_Type && !_PyArg_NoKeywords("map()", kwds))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000934 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000935
936 numargs = PyTuple_Size(args);
937 if (numargs < 2) {
938 PyErr_SetString(PyExc_TypeError,
939 "map() must have at least two arguments.");
Tim Peters4e9afdc2001-05-03 23:54:49 +0000940 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000941 }
942
943 iters = PyTuple_New(numargs-1);
944 if (iters == NULL)
945 return NULL;
946
947 for (i=1 ; i<numargs ; i++) {
948 /* Get iterator. */
949 it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
950 if (it == NULL) {
951 Py_DECREF(iters);
952 return NULL;
953 }
954 PyTuple_SET_ITEM(iters, i-1, it);
955 }
956
957 /* create mapobject structure */
958 lz = (mapobject *)type->tp_alloc(type, 0);
959 if (lz == NULL) {
960 Py_DECREF(iters);
961 return NULL;
962 }
963 lz->iters = iters;
964 func = PyTuple_GET_ITEM(args, 0);
965 Py_INCREF(func);
966 lz->func = func;
967
968 return (PyObject *)lz;
969}
970
971static void
972map_dealloc(mapobject *lz)
973{
974 PyObject_GC_UnTrack(lz);
975 Py_XDECREF(lz->iters);
976 Py_XDECREF(lz->func);
977 Py_TYPE(lz)->tp_free(lz);
978}
979
980static int
981map_traverse(mapobject *lz, visitproc visit, void *arg)
982{
983 Py_VISIT(lz->iters);
984 Py_VISIT(lz->func);
985 return 0;
986}
987
988static PyObject *
989map_next(mapobject *lz)
990{
991 PyObject *val;
992 PyObject *argtuple;
993 PyObject *result;
994 Py_ssize_t numargs, i;
995
996 numargs = PyTuple_Size(lz->iters);
997 argtuple = PyTuple_New(numargs);
998 if (argtuple == NULL)
999 return NULL;
1000
1001 for (i=0 ; i<numargs ; i++) {
1002 val = PyIter_Next(PyTuple_GET_ITEM(lz->iters, i));
1003 if (val == NULL) {
1004 Py_DECREF(argtuple);
1005 return NULL;
1006 }
1007 PyTuple_SET_ITEM(argtuple, i, val);
1008 }
1009 result = PyObject_Call(lz->func, argtuple, NULL);
1010 Py_DECREF(argtuple);
Tim Peters4e9afdc2001-05-03 23:54:49 +00001011 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001012}
1013
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001014PyDoc_STRVAR(map_doc,
Raymond Hettingera6c60372008-03-13 01:26:19 +00001015"map(func, *iterables) --> map object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001016\n\
Raymond Hettingera6c60372008-03-13 01:26:19 +00001017Make an iterator that computes the function using arguments from\n\
1018each of the iterables. Stops when the shortest iterable is exhausted.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001019
Raymond Hettingera6c60372008-03-13 01:26:19 +00001020PyTypeObject PyMap_Type = {
1021 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1022 "map", /* tp_name */
1023 sizeof(mapobject), /* tp_basicsize */
1024 0, /* tp_itemsize */
1025 /* methods */
1026 (destructor)map_dealloc, /* tp_dealloc */
1027 0, /* tp_print */
1028 0, /* tp_getattr */
1029 0, /* tp_setattr */
Mark Dickinsone94c6792009-02-02 20:36:42 +00001030 0, /* tp_reserved */
Raymond Hettingera6c60372008-03-13 01:26:19 +00001031 0, /* tp_repr */
1032 0, /* tp_as_number */
1033 0, /* tp_as_sequence */
1034 0, /* tp_as_mapping */
1035 0, /* tp_hash */
1036 0, /* tp_call */
1037 0, /* tp_str */
1038 PyObject_GenericGetAttr, /* tp_getattro */
1039 0, /* tp_setattro */
1040 0, /* tp_as_buffer */
1041 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1042 Py_TPFLAGS_BASETYPE, /* tp_flags */
1043 map_doc, /* tp_doc */
1044 (traverseproc)map_traverse, /* tp_traverse */
1045 0, /* tp_clear */
1046 0, /* tp_richcompare */
1047 0, /* tp_weaklistoffset */
1048 PyObject_SelfIter, /* tp_iter */
1049 (iternextfunc)map_next, /* tp_iternext */
1050 0, /* tp_methods */
1051 0, /* tp_members */
1052 0, /* tp_getset */
1053 0, /* tp_base */
1054 0, /* tp_dict */
1055 0, /* tp_descr_get */
1056 0, /* tp_descr_set */
1057 0, /* tp_dictoffset */
1058 0, /* tp_init */
1059 PyType_GenericAlloc, /* tp_alloc */
1060 map_new, /* tp_new */
1061 PyObject_GC_Del, /* tp_free */
1062};
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001063
Guido van Rossum79f25d91997-04-29 20:08:16 +00001064static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +00001065builtin_next(PyObject *self, PyObject *args)
1066{
1067 PyObject *it, *res;
1068 PyObject *def = NULL;
1069
1070 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1071 return NULL;
1072 if (!PyIter_Check(it)) {
1073 PyErr_Format(PyExc_TypeError,
Georg Brandlaaa63922008-04-30 19:47:01 +00001074 "%.200s object is not an iterator",
1075 it->ob_type->tp_name);
Georg Brandla18af4e2007-04-21 15:47:16 +00001076 return NULL;
1077 }
1078
1079 res = (*it->ob_type->tp_iternext)(it);
Georg Brandlaaa63922008-04-30 19:47:01 +00001080 if (res != NULL) {
1081 return res;
1082 } else if (def != NULL) {
1083 if (PyErr_Occurred()) {
1084 if(!PyErr_ExceptionMatches(PyExc_StopIteration))
Georg Brandla18af4e2007-04-21 15:47:16 +00001085 return NULL;
1086 PyErr_Clear();
Georg Brandla18af4e2007-04-21 15:47:16 +00001087 }
Georg Brandlaaa63922008-04-30 19:47:01 +00001088 Py_INCREF(def);
1089 return def;
1090 } else if (PyErr_Occurred()) {
1091 return NULL;
1092 } else {
1093 PyErr_SetNone(PyExc_StopIteration);
1094 return NULL;
Georg Brandla18af4e2007-04-21 15:47:16 +00001095 }
Georg Brandla18af4e2007-04-21 15:47:16 +00001096}
1097
1098PyDoc_STRVAR(next_doc,
1099"next(iterator[, default])\n\
1100\n\
1101Return the next item from the iterator. If default is given and the iterator\n\
1102is exhausted, it is returned instead of raising StopIteration.");
1103
1104
1105static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001106builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001107{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001108 PyObject *v;
1109 PyObject *name;
1110 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001111
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001112 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001113 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001114 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001115 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001116 Py_INCREF(Py_None);
1117 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001118}
1119
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001120PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001121"setattr(object, name, value)\n\
1122\n\
1123Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001124``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001125
1126
Guido van Rossum79f25d91997-04-29 20:08:16 +00001127static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001128builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001129{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001130 PyObject *v;
1131 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001132
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001133 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001134 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001135 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001136 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001137 Py_INCREF(Py_None);
1138 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001139}
1140
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001141PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001142"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001143\n\
1144Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001145``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001146
1147
Guido van Rossum79f25d91997-04-29 20:08:16 +00001148static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001149builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001150{
Guido van Rossum9bfef441993-03-29 10:43:31 +00001151 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001152
Guido van Rossum79f25d91997-04-29 20:08:16 +00001153 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001154 if (x == -1)
1155 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001156 return PyLong_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001157}
1158
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001159PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001160"hash(object) -> integer\n\
1161\n\
1162Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001163the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001164
1165
Guido van Rossum79f25d91997-04-29 20:08:16 +00001166static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001167builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001168{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001169 return PyNumber_ToBase(v, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001170}
1171
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001172PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001173"hex(number) -> string\n\
1174\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001175Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001176
1177
Guido van Rossum79f25d91997-04-29 20:08:16 +00001178static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001179builtin_iter(PyObject *self, PyObject *args)
1180{
1181 PyObject *v, *w = NULL;
1182
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001183 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001184 return NULL;
1185 if (w == NULL)
1186 return PyObject_GetIter(v);
1187 if (!PyCallable_Check(v)) {
1188 PyErr_SetString(PyExc_TypeError,
1189 "iter(v, w): v must be callable");
1190 return NULL;
1191 }
1192 return PyCallIter_New(v, w);
1193}
1194
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001195PyDoc_STRVAR(iter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001196"iter(iterable) -> iterator\n\
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001197iter(callable, sentinel) -> iterator\n\
1198\n\
1199Get an iterator from an object. In the first form, the argument must\n\
1200supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001201In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001202
1203
1204static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001205builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001206{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001207 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001208
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001209 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001210 if (res < 0 && PyErr_Occurred())
1211 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001212 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001213}
1214
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001215PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001216"len(object) -> integer\n\
1217\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001218Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001219
1220
Guido van Rossum79f25d91997-04-29 20:08:16 +00001221static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001222builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001223{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001224 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001225
Guido van Rossum79f25d91997-04-29 20:08:16 +00001226 d = PyEval_GetLocals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00001227 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001228 return d;
1229}
1230
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001231PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001232"locals() -> dictionary\n\
1233\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001234Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001235
1236
Guido van Rossum79f25d91997-04-29 20:08:16 +00001237static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001238min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001239{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001240 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001241 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001242
Guido van Rossum79f25d91997-04-29 20:08:16 +00001243 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001244 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001245 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001246 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001247
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001248 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1249 keyfunc = PyDict_GetItemString(kwds, "key");
1250 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001251 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001252 "%s() got an unexpected keyword argument", name);
1253 return NULL;
1254 }
Christian Heimesbbffeb62008-01-24 09:42:52 +00001255 Py_INCREF(keyfunc);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001256 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001257
Tim Petersc3074532001-05-03 07:00:32 +00001258 it = PyObject_GetIter(v);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001259 if (it == NULL) {
1260 Py_XDECREF(keyfunc);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001261 return NULL;
Christian Heimesbbffeb62008-01-24 09:42:52 +00001262 }
Tim Petersc3074532001-05-03 07:00:32 +00001263
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001264 maxitem = NULL; /* the result */
1265 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001266 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001267 /* get the value from the key function */
1268 if (keyfunc != NULL) {
1269 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1270 if (val == NULL)
1271 goto Fail_it_item;
1272 }
1273 /* no key function; the value is the item */
1274 else {
1275 val = item;
1276 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001277 }
Tim Petersc3074532001-05-03 07:00:32 +00001278
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001279 /* maximum value and item are unset; set them */
1280 if (maxval == NULL) {
1281 maxitem = item;
1282 maxval = val;
1283 }
1284 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001285 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001286 int cmp = PyObject_RichCompareBool(val, maxval, op);
1287 if (cmp < 0)
1288 goto Fail_it_item_and_val;
1289 else if (cmp > 0) {
1290 Py_DECREF(maxval);
1291 Py_DECREF(maxitem);
1292 maxval = val;
1293 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001294 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001295 else {
1296 Py_DECREF(item);
1297 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001298 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001299 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001300 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001301 if (PyErr_Occurred())
1302 goto Fail_it;
1303 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001304 PyErr_Format(PyExc_ValueError,
1305 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001306 assert(maxitem == NULL);
1307 }
1308 else
1309 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001310 Py_DECREF(it);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001311 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001312 return maxitem;
1313
1314Fail_it_item_and_val:
1315 Py_DECREF(val);
1316Fail_it_item:
1317 Py_DECREF(item);
1318Fail_it:
1319 Py_XDECREF(maxval);
1320 Py_XDECREF(maxitem);
1321 Py_DECREF(it);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001322 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001323 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001324}
1325
Guido van Rossum79f25d91997-04-29 20:08:16 +00001326static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001327builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001328{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001329 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001330}
1331
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001332PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001333"min(iterable[, key=func]) -> value\n\
1334min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001335\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001336With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001337With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001338
1339
Guido van Rossum79f25d91997-04-29 20:08:16 +00001340static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001341builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001342{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001343 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001344}
1345
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001346PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001347"max(iterable[, key=func]) -> value\n\
1348max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001349\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001350With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001351With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001352
1353
Guido van Rossum79f25d91997-04-29 20:08:16 +00001354static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001355builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001356{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001357 return PyNumber_ToBase(v, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001358}
1359
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001360PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001361"oct(number) -> string\n\
1362\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001363Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001364
1365
Guido van Rossum79f25d91997-04-29 20:08:16 +00001366static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001367builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001368{
Guido van Rossum09095f32000-03-10 23:00:52 +00001369 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001370 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001371
Christian Heimes72b710a2008-05-26 13:28:38 +00001372 if (PyBytes_Check(obj)) {
1373 size = PyBytes_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001374 if (size == 1) {
Christian Heimes72b710a2008-05-26 13:28:38 +00001375 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
Christian Heimes217cfd12007-12-02 14:31:20 +00001376 return PyLong_FromLong(ord);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001377 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001378 }
1379 else if (PyUnicode_Check(obj)) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001380 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001381 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001382 ord = (long)*PyUnicode_AS_UNICODE(obj);
Christian Heimes217cfd12007-12-02 14:31:20 +00001383 return PyLong_FromLong(ord);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001384 }
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001385#ifndef Py_UNICODE_WIDE
1386 if (size == 2) {
1387 /* Decode a valid surrogate pair */
1388 int c0 = PyUnicode_AS_UNICODE(obj)[0];
1389 int c1 = PyUnicode_AS_UNICODE(obj)[1];
1390 if (0xD800 <= c0 && c0 <= 0xDBFF &&
1391 0xDC00 <= c1 && c1 <= 0xDFFF) {
1392 ord = ((((c0 & 0x03FF) << 10) | (c1 & 0x03FF)) +
1393 0x00010000);
Christian Heimes217cfd12007-12-02 14:31:20 +00001394 return PyLong_FromLong(ord);
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001395 }
1396 }
1397#endif
Guido van Rossum6f376c42007-05-24 14:31:33 +00001398 }
Christian Heimes9c4756e2008-05-26 13:22:05 +00001399 else if (PyByteArray_Check(obj)) {
Guido van Rossum98f97462007-04-13 03:31:13 +00001400 /* XXX Hopefully this is temporary */
Christian Heimes9c4756e2008-05-26 13:22:05 +00001401 size = PyByteArray_GET_SIZE(obj);
Guido van Rossum98f97462007-04-13 03:31:13 +00001402 if (size == 1) {
Christian Heimes9c4756e2008-05-26 13:22:05 +00001403 ord = (long)((unsigned char)*PyByteArray_AS_STRING(obj));
Christian Heimes217cfd12007-12-02 14:31:20 +00001404 return PyLong_FromLong(ord);
Guido van Rossum98f97462007-04-13 03:31:13 +00001405 }
1406 }
1407 else {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001408 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001409 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001410 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001411 return NULL;
1412 }
1413
Guido van Rossumad991772001-01-12 16:03:05 +00001414 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001415 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001416 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001417 size);
1418 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001419}
1420
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001421PyDoc_VAR(ord_doc) = PyDoc_STR(
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001422"ord(c) -> integer\n\
1423\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001424Return the integer ordinal of a one-character string."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001425)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001426#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001427PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001428"\nA valid surrogate pair is also accepted."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001429)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001430#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001431;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001432
1433
Guido van Rossum79f25d91997-04-29 20:08:16 +00001434static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001435builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001436{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001437 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001438
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001439 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001440 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001441 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001442}
1443
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001444PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001445"pow(x, y[, z]) -> number\n\
1446\n\
1447With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001448equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001449
1450
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001451
Guido van Rossum34343512006-11-30 22:13:52 +00001452static PyObject *
1453builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1454{
1455 static char *kwlist[] = {"sep", "end", "file", 0};
Georg Brandl257d3d92007-02-26 10:35:10 +00001456 static PyObject *dummy_args;
Guido van Rossum34343512006-11-30 22:13:52 +00001457 PyObject *sep = NULL, *end = NULL, *file = NULL;
1458 int i, err;
1459
Georg Brandl257d3d92007-02-26 10:35:10 +00001460 if (dummy_args == NULL) {
1461 if (!(dummy_args = PyTuple_New(0)))
1462 return NULL;
1463 }
Georg Brandl88fc6642007-02-09 21:28:07 +00001464 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
Guido van Rossum34343512006-11-30 22:13:52 +00001465 kwlist, &sep, &end, &file))
Christian Heimesfef9bba2007-11-13 15:24:14 +00001466 return NULL;
1467 if (file == NULL || file == Py_None) {
Guido van Rossum34343512006-11-30 22:13:52 +00001468 file = PySys_GetObject("stdout");
Christian Heimesfef9bba2007-11-13 15:24:14 +00001469 /* sys.stdout may be None when FILE* stdout isn't connected */
1470 if (file == Py_None)
1471 Py_RETURN_NONE;
1472 }
Guido van Rossum34343512006-11-30 22:13:52 +00001473
Benjamin Petersonc9637312009-07-02 18:25:26 +00001474 if (sep == Py_None) {
1475 sep = NULL;
1476 }
1477 else if (sep && !PyUnicode_Check(sep)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001478 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001479 "sep must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001480 sep->ob_type->tp_name);
1481 return NULL;
1482 }
Benjamin Petersonc9637312009-07-02 18:25:26 +00001483 if (end == Py_None) {
1484 end = NULL;
1485 }
1486 else if (end && !PyUnicode_Check(end)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001487 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001488 "end must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001489 end->ob_type->tp_name);
1490 return NULL;
1491 }
Guido van Rossum34343512006-11-30 22:13:52 +00001492
1493 for (i = 0; i < PyTuple_Size(args); i++) {
1494 if (i > 0) {
Benjamin Petersonc9637312009-07-02 18:25:26 +00001495 if (sep == NULL)
Guido van Rossum34343512006-11-30 22:13:52 +00001496 err = PyFile_WriteString(" ", file);
1497 else
1498 err = PyFile_WriteObject(sep, file,
1499 Py_PRINT_RAW);
1500 if (err)
1501 return NULL;
1502 }
1503 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1504 Py_PRINT_RAW);
1505 if (err)
1506 return NULL;
1507 }
1508
Benjamin Petersonc9637312009-07-02 18:25:26 +00001509 if (end == NULL)
Guido van Rossum34343512006-11-30 22:13:52 +00001510 err = PyFile_WriteString("\n", file);
1511 else
1512 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1513 if (err)
1514 return NULL;
1515
1516 Py_RETURN_NONE;
1517}
1518
1519PyDoc_STRVAR(print_doc,
Georg Brandlcd5da7d2008-02-01 15:47:37 +00001520"print(value, ..., sep=' ', end='\\n', file=sys.stdout)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001521\n\
1522Prints the values to a stream, or to sys.stdout by default.\n\
1523Optional keyword arguments:\n\
1524file: a file-like object (stream); defaults to the current sys.stdout.\n\
1525sep: string inserted between values, default a space.\n\
1526end: string appended after the last value, default a newline.");
1527
1528
Guido van Rossuma88a0332007-02-26 16:59:55 +00001529static PyObject *
1530builtin_input(PyObject *self, PyObject *args)
1531{
Guido van Rossumeba76962007-05-27 09:13:28 +00001532 PyObject *promptarg = NULL;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001533 PyObject *fin = PySys_GetObject("stdin");
1534 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossumeba76962007-05-27 09:13:28 +00001535 PyObject *ferr = PySys_GetObject("stderr");
1536 PyObject *tmp;
1537 long fd;
1538 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001539
Guido van Rossumeba76962007-05-27 09:13:28 +00001540 /* Parse arguments */
1541 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg))
Guido van Rossuma88a0332007-02-26 16:59:55 +00001542 return NULL;
1543
Guido van Rossumeba76962007-05-27 09:13:28 +00001544 /* Check that stdin/out/err are intact */
Christian Heimes2be03732007-11-15 02:26:46 +00001545 if (fin == NULL || fin == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001546 PyErr_SetString(PyExc_RuntimeError,
1547 "input(): lost sys.stdin");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001548 return NULL;
1549 }
Christian Heimes2be03732007-11-15 02:26:46 +00001550 if (fout == NULL || fout == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001551 PyErr_SetString(PyExc_RuntimeError,
1552 "input(): lost sys.stdout");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001553 return NULL;
1554 }
Christian Heimes2be03732007-11-15 02:26:46 +00001555 if (ferr == NULL || ferr == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001556 PyErr_SetString(PyExc_RuntimeError,
1557 "input(): lost sys.stderr");
1558 return NULL;
1559 }
1560
1561 /* First of all, flush stderr */
1562 tmp = PyObject_CallMethod(ferr, "flush", "");
1563 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001564 PyErr_Clear();
1565 else
1566 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001567
1568 /* We should only use (GNU) readline if Python's sys.stdin and
1569 sys.stdout are the same as C's stdin and stdout, because we
1570 need to pass it those. */
1571 tmp = PyObject_CallMethod(fin, "fileno", "");
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001572 if (tmp == NULL) {
1573 PyErr_Clear();
1574 tty = 0;
1575 }
1576 else {
Christian Heimes217cfd12007-12-02 14:31:20 +00001577 fd = PyLong_AsLong(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001578 Py_DECREF(tmp);
1579 if (fd < 0 && PyErr_Occurred())
1580 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001581 tty = fd == fileno(stdin) && isatty(fd);
1582 }
1583 if (tty) {
1584 tmp = PyObject_CallMethod(fout, "fileno", "");
1585 if (tmp == NULL)
1586 PyErr_Clear();
1587 else {
Christian Heimes217cfd12007-12-02 14:31:20 +00001588 fd = PyLong_AsLong(tmp);
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001589 Py_DECREF(tmp);
1590 if (fd < 0 && PyErr_Occurred())
1591 return NULL;
1592 tty = fd == fileno(stdout) && isatty(fd);
1593 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001594 }
1595
1596 /* If we're interactive, use (GNU) readline */
1597 if (tty) {
Guido van Rossuma88a0332007-02-26 16:59:55 +00001598 PyObject *po;
1599 char *prompt;
1600 char *s;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001601 PyObject *stdin_encoding;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001602 PyObject *result;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001603
1604 stdin_encoding = PyObject_GetAttrString(fin, "encoding");
1605 if (!stdin_encoding)
1606 /* stdin is a text stream, so it must have an
1607 encoding. */
1608 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001609 tmp = PyObject_CallMethod(fout, "flush", "");
1610 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001611 PyErr_Clear();
1612 else
1613 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001614 if (promptarg != NULL) {
Amaury Forgeot d'Arcd0db98f2008-09-21 21:49:01 +00001615 PyObject *stringpo;
1616 PyObject *stdout_encoding;
1617 stdout_encoding = PyObject_GetAttrString(fout,
1618 "encoding");
1619 if (stdout_encoding == NULL) {
1620 Py_DECREF(stdin_encoding);
1621 return NULL;
1622 }
1623 stringpo = PyObject_Str(promptarg);
1624 if (stringpo == NULL) {
1625 Py_DECREF(stdin_encoding);
1626 Py_DECREF(stdout_encoding);
1627 return NULL;
1628 }
1629 po = PyUnicode_AsEncodedString(stringpo,
1630 _PyUnicode_AsString(stdout_encoding), NULL);
1631 Py_DECREF(stdout_encoding);
1632 Py_DECREF(stringpo);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001633 if (po == NULL) {
1634 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001635 return NULL;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001636 }
Amaury Forgeot d'Arcd0db98f2008-09-21 21:49:01 +00001637 prompt = PyBytes_AsString(po);
Guido van Rossumeba76962007-05-27 09:13:28 +00001638 if (prompt == NULL) {
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001639 Py_DECREF(stdin_encoding);
Guido van Rossumeba76962007-05-27 09:13:28 +00001640 Py_DECREF(po);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001641 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001642 }
Guido van Rossuma88a0332007-02-26 16:59:55 +00001643 }
1644 else {
1645 po = NULL;
1646 prompt = "";
1647 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001648 s = PyOS_Readline(stdin, stdout, prompt);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001649 Py_XDECREF(po);
1650 if (s == NULL) {
1651 if (!PyErr_Occurred())
1652 PyErr_SetNone(PyExc_KeyboardInterrupt);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001653 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001654 return NULL;
1655 }
1656 if (*s == '\0') {
1657 PyErr_SetNone(PyExc_EOFError);
1658 result = NULL;
1659 }
1660 else { /* strip trailing '\n' */
1661 size_t len = strlen(s);
1662 if (len > PY_SSIZE_T_MAX) {
1663 PyErr_SetString(PyExc_OverflowError,
1664 "input: input too long");
1665 result = NULL;
1666 }
1667 else {
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001668 result = PyUnicode_Decode
1669 (s, len-1,
Marc-André Lemburg4cc0f242008-08-07 18:54:33 +00001670 _PyUnicode_AsString(stdin_encoding),
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001671 NULL);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001672 }
1673 }
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001674 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001675 PyMem_FREE(s);
1676 return result;
1677 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001678
1679 /* Fallback if we're not interactive */
1680 if (promptarg != NULL) {
1681 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0)
Guido van Rossuma88a0332007-02-26 16:59:55 +00001682 return NULL;
1683 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001684 tmp = PyObject_CallMethod(fout, "flush", "");
1685 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001686 PyErr_Clear();
1687 else
1688 Py_DECREF(tmp);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001689 return PyFile_GetLine(fin, -1);
1690}
1691
1692PyDoc_STRVAR(input_doc,
1693"input([prompt]) -> string\n\
1694\n\
1695Read a string from standard input. The trailing newline is stripped.\n\
1696If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1697On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1698is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001699
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001700
Guido van Rossum79f25d91997-04-29 20:08:16 +00001701static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001702builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001703{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001704 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001705}
1706
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001707PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001708"repr(object) -> string\n\
1709\n\
1710Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001711For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001712
1713
Guido van Rossum79f25d91997-04-29 20:08:16 +00001714static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001715builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001716{
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001717 static PyObject *round_str = NULL;
Mark Dickinson1124e712009-01-28 21:25:58 +00001718 PyObject *ndigits = NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001719 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001720 PyObject *number, *round;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001721
Mark Dickinson1124e712009-01-28 21:25:58 +00001722 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:round",
1723 kwlist, &number, &ndigits))
1724 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00001725
Christian Heimes90aa7642007-12-19 02:45:37 +00001726 if (Py_TYPE(number)->tp_dict == NULL) {
1727 if (PyType_Ready(Py_TYPE(number)) < 0)
Guido van Rossum15d3d042007-08-24 02:02:45 +00001728 return NULL;
1729 }
1730
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001731 if (round_str == NULL) {
Christian Heimesfe82e772008-01-28 02:38:20 +00001732 round_str = PyUnicode_InternFromString("__round__");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001733 if (round_str == NULL)
Alex Martelliae211f92007-08-22 23:21:33 +00001734 return NULL;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001735 }
1736
Christian Heimes90aa7642007-12-19 02:45:37 +00001737 round = _PyType_Lookup(Py_TYPE(number), round_str);
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001738 if (round == NULL) {
1739 PyErr_Format(PyExc_TypeError,
1740 "type %.100s doesn't define __round__ method",
Christian Heimes90aa7642007-12-19 02:45:37 +00001741 Py_TYPE(number)->tp_name);
Alex Martelliae211f92007-08-22 23:21:33 +00001742 return NULL;
1743 }
1744
Mark Dickinson1124e712009-01-28 21:25:58 +00001745 if (ndigits == NULL)
1746 return PyObject_CallFunction(round, "O", number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001747 else
Mark Dickinson1124e712009-01-28 21:25:58 +00001748 return PyObject_CallFunction(round, "OO", number, ndigits);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001749}
1750
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001751PyDoc_STRVAR(round_doc,
Mark Dickinson1124e712009-01-28 21:25:58 +00001752"round(number[, ndigits]) -> number\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001753\n\
1754Round a number to a given precision in decimal digits (default 0 digits).\n\
Mark Dickinson0d748c22008-07-05 11:29:03 +00001755This returns an int when called with one argument, otherwise the\n\
Georg Brandl809ddaa2008-07-01 20:39:59 +00001756same type as the number. ndigits may be negative.");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001757
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001758
Raymond Hettinger64958a12003-12-17 20:43:33 +00001759static PyObject *
1760builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1761{
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001762 PyObject *newlist, *v, *seq, *keyfunc=NULL, *newargs;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001763 PyObject *callable;
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001764 static char *kwlist[] = {"iterable", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001765 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001766
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001767 /* args 1-3 should match listsort in Objects/listobject.c */
1768 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted",
1769 kwlist, &seq, &keyfunc, &reverse))
Armin Rigo71d7e702005-09-20 18:13:03 +00001770 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001771
1772 newlist = PySequence_List(seq);
1773 if (newlist == NULL)
1774 return NULL;
1775
1776 callable = PyObject_GetAttrString(newlist, "sort");
1777 if (callable == NULL) {
1778 Py_DECREF(newlist);
1779 return NULL;
1780 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001781
Raymond Hettinger64958a12003-12-17 20:43:33 +00001782 newargs = PyTuple_GetSlice(args, 1, 4);
1783 if (newargs == NULL) {
1784 Py_DECREF(newlist);
1785 Py_DECREF(callable);
1786 return NULL;
1787 }
1788
1789 v = PyObject_Call(callable, newargs, kwds);
1790 Py_DECREF(newargs);
1791 Py_DECREF(callable);
1792 if (v == NULL) {
1793 Py_DECREF(newlist);
1794 return NULL;
1795 }
1796 Py_DECREF(v);
1797 return newlist;
1798}
1799
1800PyDoc_STRVAR(sorted_doc,
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001801"sorted(iterable, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001802
Guido van Rossum79f25d91997-04-29 20:08:16 +00001803static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001804builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001805{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001806 PyObject *v = NULL;
1807 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001808
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001809 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001810 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001811 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001812 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001813 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001814 if (!PyErr_Occurred())
1815 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001816 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001817 }
1818 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001819 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001820 }
1821 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001822 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001823 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001824 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001825 "vars() argument must have __dict__ attribute");
1826 return NULL;
1827 }
1828 }
1829 return d;
1830}
1831
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001832PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001833"vars([object]) -> dictionary\n\
1834\n\
1835Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001836With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001837
Alex Martellia70b1912003-04-22 08:12:33 +00001838static PyObject*
1839builtin_sum(PyObject *self, PyObject *args)
1840{
1841 PyObject *seq;
1842 PyObject *result = NULL;
1843 PyObject *temp, *item, *iter;
1844
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001845 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001846 return NULL;
1847
1848 iter = PyObject_GetIter(seq);
1849 if (iter == NULL)
1850 return NULL;
1851
1852 if (result == NULL) {
Christian Heimes217cfd12007-12-02 14:31:20 +00001853 result = PyLong_FromLong(0);
Alex Martellia70b1912003-04-22 08:12:33 +00001854 if (result == NULL) {
1855 Py_DECREF(iter);
1856 return NULL;
1857 }
1858 } else {
1859 /* reject string values for 'start' parameter */
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001860 if (PyUnicode_Check(result)) {
Alex Martellia70b1912003-04-22 08:12:33 +00001861 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001862 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001863 Py_DECREF(iter);
1864 return NULL;
1865 }
Christian Heimes9c4756e2008-05-26 13:22:05 +00001866 if (PyByteArray_Check(result)) {
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001867 PyErr_SetString(PyExc_TypeError,
1868 "sum() can't sum bytes [use b''.join(seq) instead]");
1869 Py_DECREF(iter);
1870 return NULL;
1871 }
1872
Alex Martelli41c9f882003-04-22 09:24:48 +00001873 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001874 }
1875
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001876#ifndef SLOW_SUM
1877 /* Fast addition by keeping temporary sums in C instead of new Python objects.
1878 Assumes all inputs are the same type. If the assumption fails, default
1879 to the more general routine.
1880 */
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001881 if (PyLong_CheckExact(result)) {
1882 int overflow;
1883 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
1884 /* If this already overflowed, don't even enter the loop. */
1885 if (overflow == 0) {
1886 Py_DECREF(result);
1887 result = NULL;
1888 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001889 while(result == NULL) {
1890 item = PyIter_Next(iter);
1891 if (item == NULL) {
1892 Py_DECREF(iter);
1893 if (PyErr_Occurred())
1894 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001895 return PyLong_FromLong(i_result);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001896 }
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001897 if (PyLong_CheckExact(item)) {
1898 long b = PyLong_AsLongAndOverflow(item, &overflow);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001899 long x = i_result + b;
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001900 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001901 i_result = x;
1902 Py_DECREF(item);
1903 continue;
1904 }
1905 }
1906 /* Either overflowed or is not an int. Restore real objects and process normally */
Christian Heimes217cfd12007-12-02 14:31:20 +00001907 result = PyLong_FromLong(i_result);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001908 temp = PyNumber_Add(result, item);
1909 Py_DECREF(result);
1910 Py_DECREF(item);
1911 result = temp;
1912 if (result == NULL) {
1913 Py_DECREF(iter);
1914 return NULL;
1915 }
1916 }
1917 }
1918
1919 if (PyFloat_CheckExact(result)) {
1920 double f_result = PyFloat_AS_DOUBLE(result);
1921 Py_DECREF(result);
1922 result = NULL;
1923 while(result == NULL) {
1924 item = PyIter_Next(iter);
1925 if (item == NULL) {
1926 Py_DECREF(iter);
1927 if (PyErr_Occurred())
1928 return NULL;
1929 return PyFloat_FromDouble(f_result);
1930 }
1931 if (PyFloat_CheckExact(item)) {
Georg Brandlf08a9dd2008-06-10 16:57:31 +00001932 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001933 f_result += PyFloat_AS_DOUBLE(item);
1934 PyFPE_END_PROTECT(f_result)
1935 Py_DECREF(item);
1936 continue;
1937 }
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001938 if (PyLong_CheckExact(item)) {
1939 long value;
1940 int overflow;
1941 value = PyLong_AsLongAndOverflow(item, &overflow);
1942 if (!overflow) {
Georg Brandlf08a9dd2008-06-10 16:57:31 +00001943 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001944 f_result += (double)value;
1945 PyFPE_END_PROTECT(f_result)
1946 Py_DECREF(item);
1947 continue;
1948 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001949 }
1950 result = PyFloat_FromDouble(f_result);
1951 temp = PyNumber_Add(result, item);
1952 Py_DECREF(result);
1953 Py_DECREF(item);
1954 result = temp;
1955 if (result == NULL) {
1956 Py_DECREF(iter);
1957 return NULL;
1958 }
1959 }
1960 }
1961#endif
1962
Alex Martellia70b1912003-04-22 08:12:33 +00001963 for(;;) {
1964 item = PyIter_Next(iter);
1965 if (item == NULL) {
1966 /* error, or end-of-sequence */
1967 if (PyErr_Occurred()) {
1968 Py_DECREF(result);
1969 result = NULL;
1970 }
1971 break;
1972 }
Mark Dickinson9acadc52009-10-26 14:19:42 +00001973 /* It's tempting to use PyNumber_InPlaceAdd instead of
1974 PyNumber_Add here, to avoid quadratic running time
1975 when doing 'sum(list_of_lists, [])'. However, this
1976 would produce a change in behaviour: a snippet like
1977
1978 empty = []
1979 sum([[x] for x in range(10)], empty)
1980
1981 would change the value of empty. */
Alex Martellia253e182003-10-25 23:24:14 +00001982 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001983 Py_DECREF(result);
1984 Py_DECREF(item);
1985 result = temp;
1986 if (result == NULL)
1987 break;
1988 }
1989 Py_DECREF(iter);
1990 return result;
1991}
1992
1993PyDoc_STRVAR(sum_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001994"sum(iterable[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00001995\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +00001996Returns the sum of an iterable of numbers (NOT strings) plus the value\n\
1997of parameter 'start' (which defaults to 0). When the iterable is\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00001998empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00001999
2000
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002001static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002002builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002003{
2004 PyObject *inst;
2005 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00002006 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002007
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002008 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002009 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002010
Guido van Rossum823649d2001-03-21 18:40:58 +00002011 retval = PyObject_IsInstance(inst, cls);
2012 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00002013 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002014 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002015}
2016
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002017PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002018"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002019\n\
2020Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002021With a type as second argument, return whether that is the object's type.\n\
2022The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002023isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002024
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002025
2026static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002027builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002028{
2029 PyObject *derived;
2030 PyObject *cls;
2031 int retval;
2032
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002033 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002034 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002035
Guido van Rossum823649d2001-03-21 18:40:58 +00002036 retval = PyObject_IsSubclass(derived, cls);
2037 if (retval < 0)
2038 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002039 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002040}
2041
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002042PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002043"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002044\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002045Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2046When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2047is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002048
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002049
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002050typedef struct {
2051 PyObject_HEAD
2052 Py_ssize_t tuplesize;
2053 PyObject *ittuple; /* tuple of iterators */
2054 PyObject *result;
2055} zipobject;
2056
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002057static PyObject *
2058zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002059{
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002060 zipobject *lz;
2061 Py_ssize_t i;
2062 PyObject *ittuple; /* tuple of iterators */
2063 PyObject *result;
2064 Py_ssize_t tuplesize = PySequence_Length(args);
2065
2066 if (type == &PyZip_Type && !_PyArg_NoKeywords("zip()", kwds))
2067 return NULL;
2068
Guido van Rossumb65fb332006-08-25 23:26:40 +00002069 /* args must be a tuple */
2070 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00002071
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002072 /* obtain iterators */
2073 ittuple = PyTuple_New(tuplesize);
2074 if (ittuple == NULL)
2075 return NULL;
2076 for (i=0; i < tuplesize; ++i) {
2077 PyObject *item = PyTuple_GET_ITEM(args, i);
2078 PyObject *it = PyObject_GetIter(item);
2079 if (it == NULL) {
2080 if (PyErr_ExceptionMatches(PyExc_TypeError))
2081 PyErr_Format(PyExc_TypeError,
2082 "zip argument #%zd must support iteration",
2083 i+1);
2084 Py_DECREF(ittuple);
2085 return NULL;
2086 }
2087 PyTuple_SET_ITEM(ittuple, i, it);
2088 }
2089
2090 /* create a result holder */
2091 result = PyTuple_New(tuplesize);
2092 if (result == NULL) {
2093 Py_DECREF(ittuple);
2094 return NULL;
2095 }
2096 for (i=0 ; i < tuplesize ; i++) {
2097 Py_INCREF(Py_None);
2098 PyTuple_SET_ITEM(result, i, Py_None);
2099 }
2100
2101 /* create zipobject structure */
2102 lz = (zipobject *)type->tp_alloc(type, 0);
2103 if (lz == NULL) {
2104 Py_DECREF(ittuple);
2105 Py_DECREF(result);
2106 return NULL;
2107 }
2108 lz->ittuple = ittuple;
2109 lz->tuplesize = tuplesize;
2110 lz->result = result;
2111
2112 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002113}
2114
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002115static void
2116zip_dealloc(zipobject *lz)
2117{
2118 PyObject_GC_UnTrack(lz);
2119 Py_XDECREF(lz->ittuple);
2120 Py_XDECREF(lz->result);
2121 Py_TYPE(lz)->tp_free(lz);
2122}
2123
2124static int
2125zip_traverse(zipobject *lz, visitproc visit, void *arg)
2126{
2127 Py_VISIT(lz->ittuple);
2128 Py_VISIT(lz->result);
2129 return 0;
2130}
2131
2132static PyObject *
2133zip_next(zipobject *lz)
2134{
2135 Py_ssize_t i;
2136 Py_ssize_t tuplesize = lz->tuplesize;
2137 PyObject *result = lz->result;
2138 PyObject *it;
2139 PyObject *item;
2140 PyObject *olditem;
2141
2142 if (tuplesize == 0)
2143 return NULL;
2144 if (Py_REFCNT(result) == 1) {
2145 Py_INCREF(result);
2146 for (i=0 ; i < tuplesize ; i++) {
2147 it = PyTuple_GET_ITEM(lz->ittuple, i);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002148 item = (*Py_TYPE(it)->tp_iternext)(it);
2149 if (item == NULL) {
2150 Py_DECREF(result);
2151 return NULL;
2152 }
2153 olditem = PyTuple_GET_ITEM(result, i);
2154 PyTuple_SET_ITEM(result, i, item);
2155 Py_DECREF(olditem);
2156 }
2157 } else {
2158 result = PyTuple_New(tuplesize);
2159 if (result == NULL)
2160 return NULL;
2161 for (i=0 ; i < tuplesize ; i++) {
2162 it = PyTuple_GET_ITEM(lz->ittuple, i);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002163 item = (*Py_TYPE(it)->tp_iternext)(it);
2164 if (item == NULL) {
2165 Py_DECREF(result);
2166 return NULL;
2167 }
2168 PyTuple_SET_ITEM(result, i, item);
2169 }
2170 }
2171 return result;
2172}
Barry Warsawbd599b52000-08-03 15:45:29 +00002173
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002174PyDoc_STRVAR(zip_doc,
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002175"zip(iter1 [,iter2 [...]]) --> zip object\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002176\n\
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002177Return a zip object whose .__next__() method returns a tuple where\n\
2178the i-th element comes from the i-th iterable argument. The .__next__()\n\
2179method continues until the shortest iterable in the argument sequence\n\
Georg Brandlced51db2008-12-04 18:28:38 +00002180is exhausted and then it raises StopIteration.");
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002181
2182PyTypeObject PyZip_Type = {
2183 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2184 "zip", /* tp_name */
2185 sizeof(zipobject), /* tp_basicsize */
2186 0, /* tp_itemsize */
2187 /* methods */
2188 (destructor)zip_dealloc, /* tp_dealloc */
2189 0, /* tp_print */
2190 0, /* tp_getattr */
2191 0, /* tp_setattr */
Mark Dickinsone94c6792009-02-02 20:36:42 +00002192 0, /* tp_reserved */
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002193 0, /* tp_repr */
2194 0, /* tp_as_number */
2195 0, /* tp_as_sequence */
2196 0, /* tp_as_mapping */
2197 0, /* tp_hash */
2198 0, /* tp_call */
2199 0, /* tp_str */
2200 PyObject_GenericGetAttr, /* tp_getattro */
2201 0, /* tp_setattro */
2202 0, /* tp_as_buffer */
2203 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2204 Py_TPFLAGS_BASETYPE, /* tp_flags */
2205 zip_doc, /* tp_doc */
2206 (traverseproc)zip_traverse, /* tp_traverse */
2207 0, /* tp_clear */
2208 0, /* tp_richcompare */
2209 0, /* tp_weaklistoffset */
2210 PyObject_SelfIter, /* tp_iter */
2211 (iternextfunc)zip_next, /* tp_iternext */
2212 0, /* tp_methods */
2213 0, /* tp_members */
2214 0, /* tp_getset */
2215 0, /* tp_base */
2216 0, /* tp_dict */
2217 0, /* tp_descr_get */
2218 0, /* tp_descr_set */
2219 0, /* tp_dictoffset */
2220 0, /* tp_init */
2221 PyType_GenericAlloc, /* tp_alloc */
2222 zip_new, /* tp_new */
2223 PyObject_GC_Del, /* tp_free */
2224};
Barry Warsawbd599b52000-08-03 15:45:29 +00002225
2226
Guido van Rossum79f25d91997-04-29 20:08:16 +00002227static PyMethodDef builtin_methods[] = {
Guido van Rossum52cc1d82007-03-18 15:41:51 +00002228 {"__build_class__", (PyCFunction)builtin___build_class__,
2229 METH_VARARGS | METH_KEYWORDS, build_class_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002230 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002231 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002232 {"all", builtin_all, METH_O, all_doc},
2233 {"any", builtin_any, METH_O, any_doc},
Georg Brandl559e5d72008-06-11 18:37:52 +00002234 {"ascii", builtin_ascii, METH_O, ascii_doc},
Guido van Rossumcd16bf62007-06-13 18:07:49 +00002235 {"bin", builtin_bin, METH_O, bin_doc},
Neal Norwitzc2550c72007-08-31 04:17:51 +00002236 {"chr", builtin_chr, METH_VARARGS, chr_doc},
Guido van Rossumd8faa362007-04-27 19:54:29 +00002237 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002238 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2239 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2240 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2241 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00002242 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Eric Smith8c663262007-08-25 02:26:07 +00002243 {"format", builtin_format, METH_VARARGS, format_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002244 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2245 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2246 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2247 {"hash", builtin_hash, METH_O, hash_doc},
2248 {"hex", builtin_hex, METH_O, hex_doc},
2249 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00002250 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002251 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2252 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2253 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2254 {"len", builtin_len, METH_O, len_doc},
2255 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002256 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2257 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandla18af4e2007-04-21 15:47:16 +00002258 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002259 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002260 {"ord", builtin_ord, METH_O, ord_doc},
2261 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00002262 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002263 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002264 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002265 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002266 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002267 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002268 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002269 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002270};
2271
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002272PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002273"Built-in functions, exceptions, and other objects.\n\
2274\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002275Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002276
Martin v. Löwis1a214512008-06-11 05:26:20 +00002277static struct PyModuleDef builtinsmodule = {
2278 PyModuleDef_HEAD_INIT,
2279 "builtins",
2280 builtin_doc,
Christian Heimes6a27efa2008-10-30 21:48:26 +00002281 -1, /* multiple "initialization" just copies the module dict. */
Martin v. Löwis1a214512008-06-11 05:26:20 +00002282 builtin_methods,
2283 NULL,
2284 NULL,
2285 NULL,
2286 NULL
2287};
2288
2289
Guido van Rossum25ce5661997-08-02 03:10:38 +00002290PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002291_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002292{
Fred Drake5550de32000-06-20 04:54:19 +00002293 PyObject *mod, *dict, *debug;
Martin v. Löwis1a214512008-06-11 05:26:20 +00002294 mod = PyModule_Create(&builtinsmodule);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002295 if (mod == NULL)
2296 return NULL;
2297 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002298
Tim Peters7571a0f2003-03-23 17:52:28 +00002299#ifdef Py_TRACE_REFS
Georg Brandl1a3284e2007-12-02 09:40:06 +00002300 /* "builtins" exposes a number of statically allocated objects
Tim Peters7571a0f2003-03-23 17:52:28 +00002301 * that, before this code was added in 2.3, never showed up in
2302 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2303 * result, programs leaking references to None and False (etc)
2304 * couldn't be diagnosed by examining sys.getobjects(0).
2305 */
2306#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2307#else
2308#define ADD_TO_ALL(OBJECT) (void)0
2309#endif
2310
Tim Peters4b7625e2001-09-13 21:37:17 +00002311#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002312 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2313 return NULL; \
2314 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002315
2316 SETBUILTIN("None", Py_None);
2317 SETBUILTIN("Ellipsis", Py_Ellipsis);
2318 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002319 SETBUILTIN("False", Py_False);
2320 SETBUILTIN("True", Py_True);
2321 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbae07c92007-10-08 02:46:15 +00002322 SETBUILTIN("memoryview", &PyMemoryView_Type);
Christian Heimes9c4756e2008-05-26 13:22:05 +00002323 SETBUILTIN("bytearray", &PyByteArray_Type);
Christian Heimes72b710a2008-05-26 13:28:38 +00002324 SETBUILTIN("bytes", &PyBytes_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002325 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002326 SETBUILTIN("complex", &PyComplex_Type);
Tim Petersa427a2b2001-10-29 22:25:45 +00002327 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002328 SETBUILTIN("enumerate", &PyEnum_Type);
Raymond Hettinger17301e92008-03-13 00:19:26 +00002329 SETBUILTIN("filter", &PyFilter_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002330 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002331 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002332 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00002333 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002334 SETBUILTIN("list", &PyList_Type);
Raymond Hettingera6c60372008-03-13 01:26:19 +00002335 SETBUILTIN("map", &PyMap_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002336 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossum805365e2007-05-07 22:24:25 +00002337 SETBUILTIN("range", &PyRange_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002338 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002339 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002340 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002341 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Guido van Rossum572dbf82007-04-27 23:53:51 +00002342 SETBUILTIN("str", &PyUnicode_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002343 SETBUILTIN("super", &PySuper_Type);
2344 SETBUILTIN("tuple", &PyTuple_Type);
2345 SETBUILTIN("type", &PyType_Type);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002346 SETBUILTIN("zip", &PyZip_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002347 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002348 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2349 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002350 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002351 }
2352 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002353
Guido van Rossum25ce5661997-08-02 03:10:38 +00002354 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002355#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002356#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002357}