blob: 73a95a606b9dbfb9deb6afdc14bb4938d1c9d7f3 [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";
Christian Heimesc8967002007-11-30 10:18:26 +000020const int Py_HasFileSystemDefaultEncoding = 1;
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000021#elif defined(__APPLE__)
22const char *Py_FileSystemDefaultEncoding = "utf-8";
Christian Heimesc8967002007-11-30 10:18:26 +000023const int Py_HasFileSystemDefaultEncoding = 1;
Mark Hammond26cffde42001-05-14 12:17:34 +000024#else
25const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
Christian Heimesc8967002007-11-30 10:18:26 +000026const int Py_HasFileSystemDefaultEncoding = 0;
Mark Hammond26cffde42001-05-14 12:17:34 +000027#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000028
Guido van Rossum79f25d91997-04-29 20:08:16 +000029static PyObject *
Guido van Rossum52cc1d82007-03-18 15:41:51 +000030builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds)
31{
Guido van Rossumcd16bf62007-06-13 18:07:49 +000032 PyObject *func, *name, *bases, *mkw, *meta, *prep, *ns, *cell;
33 PyObject *cls = NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +000034 Py_ssize_t nargs, nbases;
35
36 assert(args != NULL);
37 if (!PyTuple_Check(args)) {
38 PyErr_SetString(PyExc_TypeError,
39 "__build_class__: args is not a tuple");
40 return NULL;
41 }
42 nargs = PyTuple_GET_SIZE(args);
43 if (nargs < 2) {
44 PyErr_SetString(PyExc_TypeError,
45 "__build_class__: not enough arguments");
46 return NULL;
47 }
48 func = PyTuple_GET_ITEM(args, 0); /* Better be callable */
49 name = PyTuple_GET_ITEM(args, 1);
Neal Norwitz6ea45d32007-08-26 04:19:43 +000050 if (!PyUnicode_Check(name)) {
Guido van Rossum52cc1d82007-03-18 15:41:51 +000051 PyErr_SetString(PyExc_TypeError,
52 "__build_class__: name is not a string");
53 return NULL;
54 }
55 bases = PyTuple_GetSlice(args, 2, nargs);
56 if (bases == NULL)
57 return NULL;
58 nbases = nargs - 2;
59
60 if (kwds == NULL) {
61 meta = NULL;
62 mkw = NULL;
63 }
64 else {
65 mkw = PyDict_Copy(kwds); /* Don't modify kwds passed in! */
66 if (mkw == NULL) {
67 Py_DECREF(bases);
68 return NULL;
69 }
70 meta = PyDict_GetItemString(mkw, "metaclass");
71 if (meta != NULL) {
72 Py_INCREF(meta);
73 if (PyDict_DelItemString(mkw, "metaclass") < 0) {
74 Py_DECREF(meta);
75 Py_DECREF(mkw);
76 Py_DECREF(bases);
77 return NULL;
78 }
79 }
80 }
81 if (meta == NULL) {
82 if (PyTuple_GET_SIZE(bases) == 0)
83 meta = (PyObject *) (&PyType_Type);
84 else {
85 PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
86 meta = (PyObject *) (base0->ob_type);
87 }
88 Py_INCREF(meta);
89 }
90 prep = PyObject_GetAttrString(meta, "__prepare__");
91 if (prep == NULL) {
92 PyErr_Clear();
93 ns = PyDict_New();
94 }
95 else {
96 PyObject *pargs = Py_BuildValue("OO", name, bases);
97 if (pargs == NULL) {
98 Py_DECREF(prep);
99 Py_DECREF(meta);
100 Py_XDECREF(mkw);
101 Py_DECREF(bases);
102 return NULL;
103 }
104 ns = PyEval_CallObjectWithKeywords(prep, pargs, mkw);
105 Py_DECREF(pargs);
106 Py_DECREF(prep);
107 if (ns == NULL) {
108 Py_DECREF(meta);
109 Py_XDECREF(mkw);
110 Py_DECREF(bases);
111 return NULL;
112 }
113 }
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000114 cell = PyObject_CallFunctionObjArgs(func, ns, NULL);
115 if (cell != NULL) {
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000116 PyObject *margs;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000117 margs = Py_BuildValue("OOO", name, bases, ns);
118 if (margs != NULL) {
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000119 cls = PyEval_CallObjectWithKeywords(meta, margs, mkw);
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000120 Py_DECREF(margs);
121 }
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000122 if (cls != NULL && PyCell_Check(cell)) {
123 Py_INCREF(cls);
124 PyCell_SET(cell, cls);
125 }
126 Py_DECREF(cell);
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000127 }
128 Py_DECREF(ns);
129 Py_DECREF(meta);
130 Py_XDECREF(mkw);
131 Py_DECREF(bases);
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000132 return cls;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000133}
134
135PyDoc_STRVAR(build_class_doc,
136"__build_class__(func, name, *bases, metaclass=None, **kwds) -> class\n\
137\n\
138Internal helper function used by the class statement.");
139
140static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000141builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000142{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000143 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
144 "level", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000145 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000146 PyObject *globals = NULL;
147 PyObject *locals = NULL;
148 PyObject *fromlist = NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +0000149 int level = -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000150
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000151 if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|OOOi:__import__",
152 kwlist, &name, &globals, &locals, &fromlist, &level))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000153 return NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +0000154 return PyImport_ImportModuleLevel(name, globals, locals,
155 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000156}
157
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000158PyDoc_STRVAR(import_doc,
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000159"__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000160\n\
161Import a module. The globals are only used to determine the context;\n\
162they are not modified. The locals are currently unused. The fromlist\n\
163should be a list of names to emulate ``from name import ...'', or an\n\
164empty list to emulate ``import name''.\n\
165When importing a module from a package, note that __import__('A.B', ...)\n\
166returns package A when fromlist is empty, but its submodule B when\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000167fromlist is not empty. Level is used to determine whether to perform \n\
168absolute or relative imports. -1 is the original strategy of attempting\n\
169both absolute and relative imports, 0 is absolute, a positive number\n\
170is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000171
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000172
Guido van Rossum79f25d91997-04-29 20:08:16 +0000173static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000174builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000175{
Guido van Rossum09df08a1998-05-22 00:51:39 +0000176 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000177}
178
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000179PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000180"abs(number) -> number\n\
181\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000182Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000183
Raymond Hettinger96229b12005-03-11 06:49:40 +0000184static PyObject *
185builtin_all(PyObject *self, PyObject *v)
186{
187 PyObject *it, *item;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000188 PyObject *(*iternext)(PyObject *);
189 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000190
191 it = PyObject_GetIter(v);
192 if (it == NULL)
193 return NULL;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000194 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000195
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000196 for (;;) {
197 item = iternext(it);
198 if (item == NULL)
199 break;
200 cmp = PyObject_IsTrue(item);
Raymond Hettinger96229b12005-03-11 06:49:40 +0000201 Py_DECREF(item);
202 if (cmp < 0) {
203 Py_DECREF(it);
204 return NULL;
205 }
206 if (cmp == 0) {
207 Py_DECREF(it);
208 Py_RETURN_FALSE;
209 }
210 }
211 Py_DECREF(it);
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000212 if (PyErr_Occurred()) {
213 if (PyErr_ExceptionMatches(PyExc_StopIteration))
214 PyErr_Clear();
215 else
216 return NULL;
217 }
Raymond Hettinger96229b12005-03-11 06:49:40 +0000218 Py_RETURN_TRUE;
219}
220
221PyDoc_STRVAR(all_doc,
222"all(iterable) -> bool\n\
223\n\
224Return True if bool(x) is True for all values x in the iterable.");
225
226static PyObject *
227builtin_any(PyObject *self, PyObject *v)
228{
229 PyObject *it, *item;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000230 PyObject *(*iternext)(PyObject *);
231 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000232
233 it = PyObject_GetIter(v);
234 if (it == NULL)
235 return NULL;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000236 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000237
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000238 for (;;) {
239 item = iternext(it);
240 if (item == NULL)
241 break;
242 cmp = PyObject_IsTrue(item);
Raymond Hettinger96229b12005-03-11 06:49:40 +0000243 Py_DECREF(item);
244 if (cmp < 0) {
245 Py_DECREF(it);
246 return NULL;
247 }
248 if (cmp == 1) {
249 Py_DECREF(it);
250 Py_RETURN_TRUE;
251 }
252 }
253 Py_DECREF(it);
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000254 if (PyErr_Occurred()) {
255 if (PyErr_ExceptionMatches(PyExc_StopIteration))
256 PyErr_Clear();
257 else
258 return NULL;
259 }
Raymond Hettinger96229b12005-03-11 06:49:40 +0000260 Py_RETURN_FALSE;
261}
262
263PyDoc_STRVAR(any_doc,
264"any(iterable) -> bool\n\
265\n\
266Return True if bool(x) is True for any x in the iterable.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000267
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000268
Guido van Rossum79f25d91997-04-29 20:08:16 +0000269static PyObject *
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000270builtin_bin(PyObject *self, PyObject *v)
271{
272 return PyNumber_ToBase(v, 2);
273}
274
275PyDoc_STRVAR(bin_doc,
276"bin(number) -> string\n\
277\n\
278Return the binary representation of an integer or long integer.");
279
280
Raymond Hettinger17301e92008-03-13 00:19:26 +0000281typedef struct {
282 PyObject_HEAD
283 PyObject *func;
284 PyObject *it;
285} filterobject;
286
287PyTypeObject PyFilter_Type;
288
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000289static PyObject *
Raymond Hettinger17301e92008-03-13 00:19:26 +0000290filter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000291{
Raymond Hettinger17301e92008-03-13 00:19:26 +0000292 PyObject *func, *seq;
293 PyObject *it;
294 filterobject *lz;
295
296 if (type == &PyFilter_Type && !_PyArg_NoKeywords("filter()", kwds))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000297 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000298
299 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
Georg Brandle35b6572005-07-19 22:20:20 +0000300 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000301
302 /* Get iterator. */
303 it = PyObject_GetIter(seq);
304 if (it == NULL)
305 return NULL;
306
307 /* create filterobject structure */
308 lz = (filterobject *)type->tp_alloc(type, 0);
309 if (lz == NULL) {
310 Py_DECREF(it);
311 return NULL;
312 }
313 Py_INCREF(func);
314 lz->func = func;
315 lz->it = it;
316
317 return (PyObject *)lz;
318}
319
320static void
321filter_dealloc(filterobject *lz)
322{
323 PyObject_GC_UnTrack(lz);
324 Py_XDECREF(lz->func);
325 Py_XDECREF(lz->it);
326 Py_TYPE(lz)->tp_free(lz);
327}
328
329static int
330filter_traverse(filterobject *lz, visitproc visit, void *arg)
331{
332 Py_VISIT(lz->it);
333 Py_VISIT(lz->func);
334 return 0;
335}
336
337static PyObject *
338filter_next(filterobject *lz)
339{
340 PyObject *item;
341 PyObject *it = lz->it;
342 long ok;
343 PyObject *(*iternext)(PyObject *);
344
345 assert(PyIter_Check(it));
346 iternext = *Py_TYPE(it)->tp_iternext;
347 for (;;) {
348 item = iternext(it);
349 if (item == NULL)
350 return NULL;
351
352 if (lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type) {
353 ok = PyObject_IsTrue(item);
354 } else {
355 PyObject *good;
356 good = PyObject_CallFunctionObjArgs(lz->func,
357 item, NULL);
358 if (good == NULL) {
359 Py_DECREF(item);
360 return NULL;
361 }
362 ok = PyObject_IsTrue(good);
363 Py_DECREF(good);
364 }
365 if (ok)
366 return item;
367 Py_DECREF(item);
368 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000369}
370
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000371PyDoc_STRVAR(filter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +0000372"filter(function or None, iterable) --> filter object\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000373\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +0000374Return an iterator yielding those items of iterable for which function(item)\n\
Raymond Hettinger17301e92008-03-13 00:19:26 +0000375is true. If function is None, return the items that are true.");
376
377PyTypeObject PyFilter_Type = {
378 PyVarObject_HEAD_INIT(&PyType_Type, 0)
379 "filter", /* tp_name */
380 sizeof(filterobject), /* tp_basicsize */
381 0, /* tp_itemsize */
382 /* methods */
383 (destructor)filter_dealloc, /* tp_dealloc */
384 0, /* tp_print */
385 0, /* tp_getattr */
386 0, /* tp_setattr */
387 0, /* tp_compare */
388 0, /* tp_repr */
389 0, /* tp_as_number */
390 0, /* tp_as_sequence */
391 0, /* tp_as_mapping */
392 0, /* tp_hash */
393 0, /* tp_call */
394 0, /* tp_str */
395 PyObject_GenericGetAttr, /* tp_getattro */
396 0, /* tp_setattro */
397 0, /* tp_as_buffer */
398 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
399 Py_TPFLAGS_BASETYPE, /* tp_flags */
400 filter_doc, /* tp_doc */
401 (traverseproc)filter_traverse, /* tp_traverse */
402 0, /* tp_clear */
403 0, /* tp_richcompare */
404 0, /* tp_weaklistoffset */
405 PyObject_SelfIter, /* tp_iter */
406 (iternextfunc)filter_next, /* tp_iternext */
407 0, /* tp_methods */
408 0, /* tp_members */
409 0, /* tp_getset */
410 0, /* tp_base */
411 0, /* tp_dict */
412 0, /* tp_descr_get */
413 0, /* tp_descr_set */
414 0, /* tp_dictoffset */
415 0, /* tp_init */
416 PyType_GenericAlloc, /* tp_alloc */
417 filter_new, /* tp_new */
418 PyObject_GC_Del, /* tp_free */
419};
420
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000421
Eric Smith8c663262007-08-25 02:26:07 +0000422static PyObject *
423builtin_format(PyObject *self, PyObject *args)
424{
Christian Heimes94b7d3d2007-12-11 20:20:39 +0000425 PyObject *value;
Eric Smith8fd3eba2008-02-17 19:48:00 +0000426 PyObject *format_spec = NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000427
Eric Smith8fd3eba2008-02-17 19:48:00 +0000428 if (!PyArg_ParseTuple(args, "O|U:format", &value, &format_spec))
429 return NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000430
Eric Smith8fd3eba2008-02-17 19:48:00 +0000431 return PyObject_Format(value, format_spec);
Eric Smith8c663262007-08-25 02:26:07 +0000432}
433
Eric Smith8c663262007-08-25 02:26:07 +0000434PyDoc_STRVAR(format_doc,
Eric Smith81936692007-08-31 01:14:01 +0000435"format(value[, format_spec]) -> string\n\
Eric Smith8c663262007-08-25 02:26:07 +0000436\n\
Eric Smith81936692007-08-31 01:14:01 +0000437Returns value.__format__(format_spec)\n\
438format_spec defaults to \"\"");
439
Guido van Rossum7fcf2242007-05-04 17:43:11 +0000440static PyObject *
Walter Dörwalde7efd592007-06-05 20:07:21 +0000441builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000442{
443 long x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000444
Walter Dörwalde7efd592007-06-05 20:07:21 +0000445 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum09095f32000-03-10 23:00:52 +0000446 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000447
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000448 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000449}
450
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000451PyDoc_VAR(chr_doc) = PyDoc_STR(
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000452"chr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000453\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000454Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000455)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000456#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000457PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000458"\nIf 0x10000 <= i, a surrogate pair is returned."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000459)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000460#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000461;
Guido van Rossum09095f32000-03-10 23:00:52 +0000462
463
464static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000465builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000466{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000467 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000468 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000469
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000470 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000471 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000472 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000473 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +0000474 return PyLong_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000475}
476
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000477PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000478"cmp(x, y) -> integer\n\
479\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000480Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000481
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000482
483static char *
484source_as_string(PyObject *cmd)
485{
486 char *str;
487 Py_ssize_t size;
488
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000489 if (PyUnicode_Check(cmd)) {
490 cmd = _PyUnicode_AsDefaultEncodedString(cmd, NULL);
491 if (cmd == NULL)
492 return NULL;
493 }
Guido van Rossuma4b8d1d2007-08-27 15:02:28 +0000494 else if (!PyObject_CheckReadBuffer(cmd)) {
495 PyErr_SetString(PyExc_TypeError,
496 "eval()/exec() arg 1 must be a string, bytes or code object");
497 return NULL;
498 }
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000499 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &size) < 0) {
500 return NULL;
501 }
502 if (strlen(str) != size) {
503 PyErr_SetString(PyExc_TypeError,
504 "source code string cannot contain null bytes");
505 return NULL;
506 }
507 return str;
508}
509
Guido van Rossum79f25d91997-04-29 20:08:16 +0000510static PyObject *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000511builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000512{
513 char *str;
514 char *filename;
515 char *startstr;
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000516 int mode = -1;
Tim Peters6cd6a822001-08-17 22:11:27 +0000517 int dont_inherit = 0;
518 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000519 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000520 PyObject *cmd;
Guido van Rossumd8faa362007-04-27 19:54:29 +0000521 static char *kwlist[] = {"source", "filename", "mode", "flags",
522 "dont_inherit", NULL};
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000523 int start[] = {Py_file_input, Py_eval_input, Py_single_input};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000524
Guido van Rossumd8faa362007-04-27 19:54:29 +0000525 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
526 kwlist, &cmd, &filename, &startstr,
527 &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000528 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000529
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000530 cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000531
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000532 if (supplied_flags &
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000533 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000534 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000535 PyErr_SetString(PyExc_ValueError,
536 "compile(): unrecognised flags");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000537 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000538 }
539 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
540
Tim Peters6cd6a822001-08-17 22:11:27 +0000541 if (!dont_inherit) {
542 PyEval_MergeCompilerFlags(&cf);
543 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000544
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000545 if (strcmp(startstr, "exec") == 0)
546 mode = 0;
547 else if (strcmp(startstr, "eval") == 0)
548 mode = 1;
549 else if (strcmp(startstr, "single") == 0)
550 mode = 2;
551 else {
552 PyErr_SetString(PyExc_ValueError,
553 "compile() arg 3 must be 'exec', 'eval' or 'single'");
554 return NULL;
555 }
556
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000557 if (PyAST_Check(cmd)) {
558 PyObject *result;
559 if (supplied_flags & PyCF_ONLY_AST) {
560 Py_INCREF(cmd);
561 result = cmd;
562 }
563 else {
564 PyArena *arena;
565 mod_ty mod;
566
567 arena = PyArena_New();
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000568 mod = PyAST_obj2mod(cmd, arena, mode);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000569 if (mod == NULL) {
570 PyArena_Free(arena);
571 return NULL;
572 }
573 result = (PyObject*)PyAST_Compile(mod, filename,
574 &cf, arena);
575 PyArena_Free(arena);
576 }
577 return result;
578 }
579
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000580 str = source_as_string(cmd);
581 if (str == NULL)
582 return NULL;
583
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000584 return Py_CompileStringFlags(str, filename, start[mode], &cf);
Guido van Rossum5b722181993-03-30 17:46:03 +0000585}
586
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000587PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000588"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000589\n\
590Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000591into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000592The filename will be used for run-time error messages.\n\
593The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000594single (interactive) statement, or 'eval' to compile an expression.\n\
595The flags argument, if present, controls which future statements influence\n\
596the compilation of the code.\n\
597The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
598the effects of any future statements in effect in the code calling\n\
599compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000600in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000601
Guido van Rossum79f25d91997-04-29 20:08:16 +0000602static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000603builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000604{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000605 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000606
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000607 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000608 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000609 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000610}
611
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000612PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000613"dir([object]) -> list of strings\n"
614"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000615"If called without an argument, return the names in the current scope.\n"
616"Else, return an alphabetized list of names comprising (some of) the attributes\n"
617"of the given object, and of attributes reachable from it.\n"
618"If the object supplies a method named __dir__, it will be used; otherwise\n"
619"the default dir() logic is used and returns:\n"
620" for a module object: the module's attributes.\n"
621" for a class object: its attributes, and recursively the attributes\n"
622" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000623" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000624" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000625
Guido van Rossum79f25d91997-04-29 20:08:16 +0000626static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000627builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000628{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000629 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000630
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000631 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000632 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000633 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000634}
635
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000636PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000637"divmod(x, y) -> (div, mod)\n\
638\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000639Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000640
641
Guido van Rossum79f25d91997-04-29 20:08:16 +0000642static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000643builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000644{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000645 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000646 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000647 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000648 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000649
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000650 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000651 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000652 if (locals != Py_None && !PyMapping_Check(locals)) {
653 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000654 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000655 }
656 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000657 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000658 "globals must be a real dict; try eval(expr, {}, mapping)"
659 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000660 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000661 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000662 if (globals == Py_None) {
663 globals = PyEval_GetGlobals();
664 if (locals == Py_None)
665 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000666 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000667 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000668 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000669
Georg Brandl77c85e62005-09-15 10:46:13 +0000670 if (globals == NULL || locals == NULL) {
671 PyErr_SetString(PyExc_TypeError,
672 "eval must be given globals and locals "
673 "when called without a frame");
674 return NULL;
675 }
676
Guido van Rossum79f25d91997-04-29 20:08:16 +0000677 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
678 if (PyDict_SetItemString(globals, "__builtins__",
679 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000680 return NULL;
681 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000682
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000683 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000684 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000685 PyErr_SetString(PyExc_TypeError,
686 "code object passed to eval() may not contain free variables");
687 return NULL;
688 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000689 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000690 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000691
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000692 str = source_as_string(cmd);
693 if (str == NULL)
Guido van Rossum94390a41992-08-14 15:14:30 +0000694 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000695
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000696 while (*str == ' ' || *str == '\t')
697 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000698
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000699 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Tim Peters9fa96be2001-08-17 23:04:59 +0000700 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000701 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
702 Py_XDECREF(tmp);
703 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000704}
705
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000706PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000707"eval(source[, globals[, locals]]) -> value\n\
708\n\
709Evaluate the source in the context of globals and locals.\n\
710The source may be a string representing a Python expression\n\
711or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000712The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000713defaulting to the current globals and locals.\n\
714If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000715
Georg Brandl7cae87c2006-09-06 06:51:57 +0000716static PyObject *
717builtin_exec(PyObject *self, PyObject *args)
718{
719 PyObject *v;
720 PyObject *prog, *globals = Py_None, *locals = Py_None;
721 int plain = 0;
722
723 if (!PyArg_ParseTuple(args, "O|OO:exec", &prog, &globals, &locals))
724 return NULL;
725
726 if (globals == Py_None) {
727 globals = PyEval_GetGlobals();
728 if (locals == Py_None) {
729 locals = PyEval_GetLocals();
730 plain = 1;
731 }
732 if (!globals || !locals) {
733 PyErr_SetString(PyExc_SystemError,
734 "globals and locals cannot be NULL");
735 return NULL;
736 }
737 }
738 else if (locals == Py_None)
739 locals = globals;
Neal Norwitz6ea45d32007-08-26 04:19:43 +0000740 if (!PyUnicode_Check(prog) &&
Guido van Rossumda5b8f22007-06-12 23:30:11 +0000741 !PyCode_Check(prog)) {
Georg Brandl7cae87c2006-09-06 06:51:57 +0000742 PyErr_Format(PyExc_TypeError,
743 "exec() arg 1 must be a string, file, or code "
744 "object, not %.100s", prog->ob_type->tp_name);
745 return NULL;
746 }
747 if (!PyDict_Check(globals)) {
748 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
749 globals->ob_type->tp_name);
750 return NULL;
751 }
752 if (!PyMapping_Check(locals)) {
753 PyErr_Format(PyExc_TypeError,
754 "arg 3 must be a mapping or None, not %.100s",
755 locals->ob_type->tp_name);
756 return NULL;
757 }
758 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
759 if (PyDict_SetItemString(globals, "__builtins__",
760 PyEval_GetBuiltins()) != 0)
761 return NULL;
762 }
763
764 if (PyCode_Check(prog)) {
765 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
766 PyErr_SetString(PyExc_TypeError,
767 "code object passed to exec() may not "
768 "contain free variables");
769 return NULL;
770 }
771 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
772 }
Georg Brandl7cae87c2006-09-06 06:51:57 +0000773 else {
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000774 char *str = source_as_string(prog);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000775 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000776 if (str == NULL)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000777 return NULL;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000778 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000779 if (PyEval_MergeCompilerFlags(&cf))
780 v = PyRun_StringFlags(str, Py_file_input, globals,
781 locals, &cf);
782 else
783 v = PyRun_String(str, Py_file_input, globals, locals);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000784 }
785 if (v == NULL)
786 return NULL;
787 Py_DECREF(v);
788 Py_RETURN_NONE;
789}
790
791PyDoc_STRVAR(exec_doc,
792"exec(object[, globals[, locals]])\n\
793\n\
794Read and execute code from a object, which can be a string, a code\n\
795object or a file object.\n\
796The globals and locals are dictionaries, defaulting to the current\n\
797globals and locals. If only globals is given, locals defaults to it.");
798
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000799
Guido van Rossum79f25d91997-04-29 20:08:16 +0000800static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000801builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000802{
Neal Norwitz6ea45d32007-08-26 04:19:43 +0000803 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000804 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000805
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000806 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000807 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000808
Martin v. Löwis5b222132007-06-10 09:51:05 +0000809 if (!PyUnicode_Check(name)) {
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000810 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000811 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000812 return NULL;
813 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000814 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000815 if (result == NULL && dflt != NULL &&
816 PyErr_ExceptionMatches(PyExc_AttributeError))
817 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000818 PyErr_Clear();
819 Py_INCREF(dflt);
820 result = dflt;
821 }
822 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000823}
824
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000825PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000826"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000827\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000828Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
829When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000830exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000831
832
Guido van Rossum79f25d91997-04-29 20:08:16 +0000833static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000834builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000835{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000836 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000837
Guido van Rossum79f25d91997-04-29 20:08:16 +0000838 d = PyEval_GetGlobals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000839 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000840 return d;
841}
842
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000843PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000844"globals() -> dictionary\n\
845\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000846Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000847
848
Guido van Rossum79f25d91997-04-29 20:08:16 +0000849static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000850builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000851{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000852 PyObject *v;
853 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000854
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000855 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000856 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000857 if (!PyUnicode_Check(name)) {
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000858 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000859 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000860 return NULL;
861 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000862 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000863 if (v == NULL) {
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000864 if (!PyErr_ExceptionMatches(PyExc_Exception))
865 return NULL;
866 else {
867 PyErr_Clear();
868 Py_INCREF(Py_False);
869 return Py_False;
870 }
Guido van Rossum9bfef441993-03-29 10:43:31 +0000871 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000872 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000873 Py_INCREF(Py_True);
874 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000875}
876
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000877PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000878"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000879\n\
880Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000881(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000882
883
Guido van Rossum79f25d91997-04-29 20:08:16 +0000884static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000885builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000886{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000887 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000888}
889
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000890PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000891"id(object) -> integer\n\
892\n\
893Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000894simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000895
896
Raymond Hettingera6c60372008-03-13 01:26:19 +0000897/* map object ************************************************************/
898
899typedef struct {
900 PyObject_HEAD
901 PyObject *iters;
902 PyObject *func;
903} mapobject;
904
905PyTypeObject PyMap_Type;
906
Guido van Rossum79f25d91997-04-29 20:08:16 +0000907static PyObject *
Raymond Hettingera6c60372008-03-13 01:26:19 +0000908map_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000909{
Raymond Hettingera6c60372008-03-13 01:26:19 +0000910 PyObject *it, *iters, *func;
911 mapobject *lz;
912 Py_ssize_t numargs, i;
913
914 if (type == &PyMap_Type && !_PyArg_NoKeywords("map()", kwds))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000915 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000916
917 numargs = PyTuple_Size(args);
918 if (numargs < 2) {
919 PyErr_SetString(PyExc_TypeError,
920 "map() must have at least two arguments.");
Tim Peters4e9afdc2001-05-03 23:54:49 +0000921 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000922 }
923
924 iters = PyTuple_New(numargs-1);
925 if (iters == NULL)
926 return NULL;
927
928 for (i=1 ; i<numargs ; i++) {
929 /* Get iterator. */
930 it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
931 if (it == NULL) {
932 Py_DECREF(iters);
933 return NULL;
934 }
935 PyTuple_SET_ITEM(iters, i-1, it);
936 }
937
938 /* create mapobject structure */
939 lz = (mapobject *)type->tp_alloc(type, 0);
940 if (lz == NULL) {
941 Py_DECREF(iters);
942 return NULL;
943 }
944 lz->iters = iters;
945 func = PyTuple_GET_ITEM(args, 0);
946 Py_INCREF(func);
947 lz->func = func;
948
949 return (PyObject *)lz;
950}
951
952static void
953map_dealloc(mapobject *lz)
954{
955 PyObject_GC_UnTrack(lz);
956 Py_XDECREF(lz->iters);
957 Py_XDECREF(lz->func);
958 Py_TYPE(lz)->tp_free(lz);
959}
960
961static int
962map_traverse(mapobject *lz, visitproc visit, void *arg)
963{
964 Py_VISIT(lz->iters);
965 Py_VISIT(lz->func);
966 return 0;
967}
968
969static PyObject *
970map_next(mapobject *lz)
971{
972 PyObject *val;
973 PyObject *argtuple;
974 PyObject *result;
975 Py_ssize_t numargs, i;
976
977 numargs = PyTuple_Size(lz->iters);
978 argtuple = PyTuple_New(numargs);
979 if (argtuple == NULL)
980 return NULL;
981
982 for (i=0 ; i<numargs ; i++) {
983 val = PyIter_Next(PyTuple_GET_ITEM(lz->iters, i));
984 if (val == NULL) {
985 Py_DECREF(argtuple);
986 return NULL;
987 }
988 PyTuple_SET_ITEM(argtuple, i, val);
989 }
990 result = PyObject_Call(lz->func, argtuple, NULL);
991 Py_DECREF(argtuple);
Tim Peters4e9afdc2001-05-03 23:54:49 +0000992 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000993}
994
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000995PyDoc_STRVAR(map_doc,
Raymond Hettingera6c60372008-03-13 01:26:19 +0000996"map(func, *iterables) --> map object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000997\n\
Raymond Hettingera6c60372008-03-13 01:26:19 +0000998Make an iterator that computes the function using arguments from\n\
999each of the iterables. Stops when the shortest iterable is exhausted.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001000
Raymond Hettingera6c60372008-03-13 01:26:19 +00001001PyTypeObject PyMap_Type = {
1002 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1003 "map", /* tp_name */
1004 sizeof(mapobject), /* tp_basicsize */
1005 0, /* tp_itemsize */
1006 /* methods */
1007 (destructor)map_dealloc, /* tp_dealloc */
1008 0, /* tp_print */
1009 0, /* tp_getattr */
1010 0, /* tp_setattr */
1011 0, /* tp_compare */
1012 0, /* tp_repr */
1013 0, /* tp_as_number */
1014 0, /* tp_as_sequence */
1015 0, /* tp_as_mapping */
1016 0, /* tp_hash */
1017 0, /* tp_call */
1018 0, /* tp_str */
1019 PyObject_GenericGetAttr, /* tp_getattro */
1020 0, /* tp_setattro */
1021 0, /* tp_as_buffer */
1022 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1023 Py_TPFLAGS_BASETYPE, /* tp_flags */
1024 map_doc, /* tp_doc */
1025 (traverseproc)map_traverse, /* tp_traverse */
1026 0, /* tp_clear */
1027 0, /* tp_richcompare */
1028 0, /* tp_weaklistoffset */
1029 PyObject_SelfIter, /* tp_iter */
1030 (iternextfunc)map_next, /* tp_iternext */
1031 0, /* tp_methods */
1032 0, /* tp_members */
1033 0, /* tp_getset */
1034 0, /* tp_base */
1035 0, /* tp_dict */
1036 0, /* tp_descr_get */
1037 0, /* tp_descr_set */
1038 0, /* tp_dictoffset */
1039 0, /* tp_init */
1040 PyType_GenericAlloc, /* tp_alloc */
1041 map_new, /* tp_new */
1042 PyObject_GC_Del, /* tp_free */
1043};
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001044
Guido van Rossum79f25d91997-04-29 20:08:16 +00001045static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +00001046builtin_next(PyObject *self, PyObject *args)
1047{
1048 PyObject *it, *res;
1049 PyObject *def = NULL;
1050
1051 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1052 return NULL;
1053 if (!PyIter_Check(it)) {
1054 PyErr_Format(PyExc_TypeError,
Georg Brandlaaa63922008-04-30 19:47:01 +00001055 "%.200s object is not an iterator",
1056 it->ob_type->tp_name);
Georg Brandla18af4e2007-04-21 15:47:16 +00001057 return NULL;
1058 }
1059
1060 res = (*it->ob_type->tp_iternext)(it);
Georg Brandlaaa63922008-04-30 19:47:01 +00001061 if (res != NULL) {
1062 return res;
1063 } else if (def != NULL) {
1064 if (PyErr_Occurred()) {
1065 if(!PyErr_ExceptionMatches(PyExc_StopIteration))
Georg Brandla18af4e2007-04-21 15:47:16 +00001066 return NULL;
1067 PyErr_Clear();
Georg Brandla18af4e2007-04-21 15:47:16 +00001068 }
Georg Brandlaaa63922008-04-30 19:47:01 +00001069 Py_INCREF(def);
1070 return def;
1071 } else if (PyErr_Occurred()) {
1072 return NULL;
1073 } else {
1074 PyErr_SetNone(PyExc_StopIteration);
1075 return NULL;
Georg Brandla18af4e2007-04-21 15:47:16 +00001076 }
Georg Brandla18af4e2007-04-21 15:47:16 +00001077}
1078
1079PyDoc_STRVAR(next_doc,
1080"next(iterator[, default])\n\
1081\n\
1082Return the next item from the iterator. If default is given and the iterator\n\
1083is exhausted, it is returned instead of raising StopIteration.");
1084
1085
1086static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001087builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001088{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001089 PyObject *v;
1090 PyObject *name;
1091 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001092
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001093 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001094 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001095 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001096 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001097 Py_INCREF(Py_None);
1098 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001099}
1100
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001101PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001102"setattr(object, name, value)\n\
1103\n\
1104Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001105``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001106
1107
Guido van Rossum79f25d91997-04-29 20:08:16 +00001108static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001109builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001110{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001111 PyObject *v;
1112 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001113
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001114 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001115 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001116 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001117 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001118 Py_INCREF(Py_None);
1119 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001120}
1121
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001122PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001123"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001124\n\
1125Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001126``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001127
1128
Guido van Rossum79f25d91997-04-29 20:08:16 +00001129static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001130builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001131{
Guido van Rossum9bfef441993-03-29 10:43:31 +00001132 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001133
Guido van Rossum79f25d91997-04-29 20:08:16 +00001134 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001135 if (x == -1)
1136 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001137 return PyLong_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001138}
1139
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001140PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001141"hash(object) -> integer\n\
1142\n\
1143Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001144the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001145
1146
Guido van Rossum79f25d91997-04-29 20:08:16 +00001147static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001148builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001149{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001150 return PyNumber_ToBase(v, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001151}
1152
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001153PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001154"hex(number) -> string\n\
1155\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001156Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001157
1158
Guido van Rossum79f25d91997-04-29 20:08:16 +00001159static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001160builtin_iter(PyObject *self, PyObject *args)
1161{
1162 PyObject *v, *w = NULL;
1163
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001164 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001165 return NULL;
1166 if (w == NULL)
1167 return PyObject_GetIter(v);
1168 if (!PyCallable_Check(v)) {
1169 PyErr_SetString(PyExc_TypeError,
1170 "iter(v, w): v must be callable");
1171 return NULL;
1172 }
1173 return PyCallIter_New(v, w);
1174}
1175
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001176PyDoc_STRVAR(iter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001177"iter(iterable) -> iterator\n\
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001178iter(callable, sentinel) -> iterator\n\
1179\n\
1180Get an iterator from an object. In the first form, the argument must\n\
1181supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001182In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001183
1184
1185static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001186builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001187{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001188 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001189
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001190 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001191 if (res < 0 && PyErr_Occurred())
1192 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001193 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001194}
1195
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001196PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001197"len(object) -> integer\n\
1198\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001199Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001200
1201
Guido van Rossum79f25d91997-04-29 20:08:16 +00001202static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001203builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001204{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001205 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001206
Guido van Rossum79f25d91997-04-29 20:08:16 +00001207 d = PyEval_GetLocals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00001208 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001209 return d;
1210}
1211
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001212PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001213"locals() -> dictionary\n\
1214\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001215Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001216
1217
Guido van Rossum79f25d91997-04-29 20:08:16 +00001218static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001219min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001220{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001221 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001222 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001223
Guido van Rossum79f25d91997-04-29 20:08:16 +00001224 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001225 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001226 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001227 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001228
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001229 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1230 keyfunc = PyDict_GetItemString(kwds, "key");
1231 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001232 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001233 "%s() got an unexpected keyword argument", name);
1234 return NULL;
1235 }
Christian Heimesbbffeb62008-01-24 09:42:52 +00001236 Py_INCREF(keyfunc);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001237 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001238
Tim Petersc3074532001-05-03 07:00:32 +00001239 it = PyObject_GetIter(v);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001240 if (it == NULL) {
1241 Py_XDECREF(keyfunc);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001242 return NULL;
Christian Heimesbbffeb62008-01-24 09:42:52 +00001243 }
Tim Petersc3074532001-05-03 07:00:32 +00001244
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001245 maxitem = NULL; /* the result */
1246 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001247 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001248 /* get the value from the key function */
1249 if (keyfunc != NULL) {
1250 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1251 if (val == NULL)
1252 goto Fail_it_item;
1253 }
1254 /* no key function; the value is the item */
1255 else {
1256 val = item;
1257 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001258 }
Tim Petersc3074532001-05-03 07:00:32 +00001259
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001260 /* maximum value and item are unset; set them */
1261 if (maxval == NULL) {
1262 maxitem = item;
1263 maxval = val;
1264 }
1265 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001266 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001267 int cmp = PyObject_RichCompareBool(val, maxval, op);
1268 if (cmp < 0)
1269 goto Fail_it_item_and_val;
1270 else if (cmp > 0) {
1271 Py_DECREF(maxval);
1272 Py_DECREF(maxitem);
1273 maxval = val;
1274 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001275 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001276 else {
1277 Py_DECREF(item);
1278 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001279 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001280 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001281 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001282 if (PyErr_Occurred())
1283 goto Fail_it;
1284 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001285 PyErr_Format(PyExc_ValueError,
1286 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001287 assert(maxitem == NULL);
1288 }
1289 else
1290 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001291 Py_DECREF(it);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001292 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001293 return maxitem;
1294
1295Fail_it_item_and_val:
1296 Py_DECREF(val);
1297Fail_it_item:
1298 Py_DECREF(item);
1299Fail_it:
1300 Py_XDECREF(maxval);
1301 Py_XDECREF(maxitem);
1302 Py_DECREF(it);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001303 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001304 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001305}
1306
Guido van Rossum79f25d91997-04-29 20:08:16 +00001307static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001308builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001309{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001310 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001311}
1312
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001313PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001314"min(iterable[, key=func]) -> value\n\
1315min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001316\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001317With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001318With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001319
1320
Guido van Rossum79f25d91997-04-29 20:08:16 +00001321static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001322builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001323{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001324 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001325}
1326
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001327PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001328"max(iterable[, key=func]) -> value\n\
1329max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001330\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001331With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001332With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001333
1334
Guido van Rossum79f25d91997-04-29 20:08:16 +00001335static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001336builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001337{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001338 return PyNumber_ToBase(v, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001339}
1340
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001341PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001342"oct(number) -> string\n\
1343\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001344Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001345
1346
Guido van Rossum79f25d91997-04-29 20:08:16 +00001347static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001348builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001349{
Guido van Rossum09095f32000-03-10 23:00:52 +00001350 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001351 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001352
Christian Heimes72b710a2008-05-26 13:28:38 +00001353 if (PyBytes_Check(obj)) {
1354 size = PyBytes_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001355 if (size == 1) {
Christian Heimes72b710a2008-05-26 13:28:38 +00001356 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
Christian Heimes217cfd12007-12-02 14:31:20 +00001357 return PyLong_FromLong(ord);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001358 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001359 }
1360 else if (PyUnicode_Check(obj)) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001361 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001362 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001363 ord = (long)*PyUnicode_AS_UNICODE(obj);
Christian Heimes217cfd12007-12-02 14:31:20 +00001364 return PyLong_FromLong(ord);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001365 }
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001366#ifndef Py_UNICODE_WIDE
1367 if (size == 2) {
1368 /* Decode a valid surrogate pair */
1369 int c0 = PyUnicode_AS_UNICODE(obj)[0];
1370 int c1 = PyUnicode_AS_UNICODE(obj)[1];
1371 if (0xD800 <= c0 && c0 <= 0xDBFF &&
1372 0xDC00 <= c1 && c1 <= 0xDFFF) {
1373 ord = ((((c0 & 0x03FF) << 10) | (c1 & 0x03FF)) +
1374 0x00010000);
Christian Heimes217cfd12007-12-02 14:31:20 +00001375 return PyLong_FromLong(ord);
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001376 }
1377 }
1378#endif
Guido van Rossum6f376c42007-05-24 14:31:33 +00001379 }
Christian Heimes9c4756e2008-05-26 13:22:05 +00001380 else if (PyByteArray_Check(obj)) {
Guido van Rossum98f97462007-04-13 03:31:13 +00001381 /* XXX Hopefully this is temporary */
Christian Heimes9c4756e2008-05-26 13:22:05 +00001382 size = PyByteArray_GET_SIZE(obj);
Guido van Rossum98f97462007-04-13 03:31:13 +00001383 if (size == 1) {
Christian Heimes9c4756e2008-05-26 13:22:05 +00001384 ord = (long)((unsigned char)*PyByteArray_AS_STRING(obj));
Christian Heimes217cfd12007-12-02 14:31:20 +00001385 return PyLong_FromLong(ord);
Guido van Rossum98f97462007-04-13 03:31:13 +00001386 }
1387 }
1388 else {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001389 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001390 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001391 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001392 return NULL;
1393 }
1394
Guido van Rossumad991772001-01-12 16:03:05 +00001395 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001396 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001397 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001398 size);
1399 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001400}
1401
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001402PyDoc_VAR(ord_doc) = PyDoc_STR(
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001403"ord(c) -> integer\n\
1404\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001405Return the integer ordinal of a one-character string."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001406)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001407#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001408PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001409"\nA valid surrogate pair is also accepted."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001410)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001411#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001412;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001413
1414
Guido van Rossum79f25d91997-04-29 20:08:16 +00001415static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001416builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001417{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001418 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001419
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001420 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001421 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001422 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001423}
1424
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001425PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001426"pow(x, y[, z]) -> number\n\
1427\n\
1428With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001429equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001430
1431
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001432
Guido van Rossum34343512006-11-30 22:13:52 +00001433static PyObject *
1434builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1435{
1436 static char *kwlist[] = {"sep", "end", "file", 0};
Georg Brandl257d3d92007-02-26 10:35:10 +00001437 static PyObject *dummy_args;
Guido van Rossum34343512006-11-30 22:13:52 +00001438 PyObject *sep = NULL, *end = NULL, *file = NULL;
1439 int i, err;
1440
Georg Brandl257d3d92007-02-26 10:35:10 +00001441 if (dummy_args == NULL) {
1442 if (!(dummy_args = PyTuple_New(0)))
1443 return NULL;
1444 }
Georg Brandl88fc6642007-02-09 21:28:07 +00001445 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
Guido van Rossum34343512006-11-30 22:13:52 +00001446 kwlist, &sep, &end, &file))
Christian Heimesfef9bba2007-11-13 15:24:14 +00001447 return NULL;
1448 if (file == NULL || file == Py_None) {
Guido van Rossum34343512006-11-30 22:13:52 +00001449 file = PySys_GetObject("stdout");
Christian Heimesfef9bba2007-11-13 15:24:14 +00001450 /* sys.stdout may be None when FILE* stdout isn't connected */
1451 if (file == Py_None)
1452 Py_RETURN_NONE;
1453 }
Guido van Rossum34343512006-11-30 22:13:52 +00001454
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001455 if (sep && sep != Py_None && !PyUnicode_Check(sep)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001456 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001457 "sep must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001458 sep->ob_type->tp_name);
1459 return NULL;
1460 }
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001461 if (end && end != Py_None && !PyUnicode_Check(end)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001462 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001463 "end must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001464 end->ob_type->tp_name);
1465 return NULL;
1466 }
Guido van Rossum34343512006-11-30 22:13:52 +00001467
1468 for (i = 0; i < PyTuple_Size(args); i++) {
1469 if (i > 0) {
1470 if (sep == NULL || sep == Py_None)
1471 err = PyFile_WriteString(" ", file);
1472 else
1473 err = PyFile_WriteObject(sep, file,
1474 Py_PRINT_RAW);
1475 if (err)
1476 return NULL;
1477 }
1478 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1479 Py_PRINT_RAW);
1480 if (err)
1481 return NULL;
1482 }
1483
1484 if (end == NULL || end == Py_None)
1485 err = PyFile_WriteString("\n", file);
1486 else
1487 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1488 if (err)
1489 return NULL;
1490
1491 Py_RETURN_NONE;
1492}
1493
1494PyDoc_STRVAR(print_doc,
Georg Brandlcd5da7d2008-02-01 15:47:37 +00001495"print(value, ..., sep=' ', end='\\n', file=sys.stdout)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001496\n\
1497Prints the values to a stream, or to sys.stdout by default.\n\
1498Optional keyword arguments:\n\
1499file: a file-like object (stream); defaults to the current sys.stdout.\n\
1500sep: string inserted between values, default a space.\n\
1501end: string appended after the last value, default a newline.");
1502
1503
Guido van Rossuma88a0332007-02-26 16:59:55 +00001504static PyObject *
1505builtin_input(PyObject *self, PyObject *args)
1506{
Guido van Rossumeba76962007-05-27 09:13:28 +00001507 PyObject *promptarg = NULL;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001508 PyObject *fin = PySys_GetObject("stdin");
1509 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossumeba76962007-05-27 09:13:28 +00001510 PyObject *ferr = PySys_GetObject("stderr");
1511 PyObject *tmp;
1512 long fd;
1513 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001514
Guido van Rossumeba76962007-05-27 09:13:28 +00001515 /* Parse arguments */
1516 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg))
Guido van Rossuma88a0332007-02-26 16:59:55 +00001517 return NULL;
1518
Guido van Rossumeba76962007-05-27 09:13:28 +00001519 /* Check that stdin/out/err are intact */
Christian Heimes2be03732007-11-15 02:26:46 +00001520 if (fin == NULL || fin == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001521 PyErr_SetString(PyExc_RuntimeError,
1522 "input(): lost sys.stdin");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001523 return NULL;
1524 }
Christian Heimes2be03732007-11-15 02:26:46 +00001525 if (fout == NULL || fout == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001526 PyErr_SetString(PyExc_RuntimeError,
1527 "input(): lost sys.stdout");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001528 return NULL;
1529 }
Christian Heimes2be03732007-11-15 02:26:46 +00001530 if (ferr == NULL || ferr == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001531 PyErr_SetString(PyExc_RuntimeError,
1532 "input(): lost sys.stderr");
1533 return NULL;
1534 }
1535
1536 /* First of all, flush stderr */
1537 tmp = PyObject_CallMethod(ferr, "flush", "");
1538 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001539 PyErr_Clear();
1540 else
1541 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001542
1543 /* We should only use (GNU) readline if Python's sys.stdin and
1544 sys.stdout are the same as C's stdin and stdout, because we
1545 need to pass it those. */
1546 tmp = PyObject_CallMethod(fin, "fileno", "");
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001547 if (tmp == NULL) {
1548 PyErr_Clear();
1549 tty = 0;
1550 }
1551 else {
Christian Heimes217cfd12007-12-02 14:31:20 +00001552 fd = PyLong_AsLong(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001553 Py_DECREF(tmp);
1554 if (fd < 0 && PyErr_Occurred())
1555 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001556 tty = fd == fileno(stdin) && isatty(fd);
1557 }
1558 if (tty) {
1559 tmp = PyObject_CallMethod(fout, "fileno", "");
1560 if (tmp == NULL)
1561 PyErr_Clear();
1562 else {
Christian Heimes217cfd12007-12-02 14:31:20 +00001563 fd = PyLong_AsLong(tmp);
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001564 Py_DECREF(tmp);
1565 if (fd < 0 && PyErr_Occurred())
1566 return NULL;
1567 tty = fd == fileno(stdout) && isatty(fd);
1568 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001569 }
1570
1571 /* If we're interactive, use (GNU) readline */
1572 if (tty) {
Guido van Rossuma88a0332007-02-26 16:59:55 +00001573 PyObject *po;
1574 char *prompt;
1575 char *s;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001576 PyObject *stdin_encoding;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001577 PyObject *result;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001578
1579 stdin_encoding = PyObject_GetAttrString(fin, "encoding");
1580 if (!stdin_encoding)
1581 /* stdin is a text stream, so it must have an
1582 encoding. */
1583 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001584 tmp = PyObject_CallMethod(fout, "flush", "");
1585 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001586 PyErr_Clear();
1587 else
1588 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001589 if (promptarg != NULL) {
1590 po = PyObject_Str(promptarg);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001591 if (po == NULL) {
1592 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001593 return NULL;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001594 }
Christian Heimes91c77302007-11-25 09:18:01 +00001595 prompt = PyUnicode_AsString(po);
Guido van Rossumeba76962007-05-27 09:13:28 +00001596 if (prompt == NULL) {
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001597 Py_DECREF(stdin_encoding);
Guido van Rossumeba76962007-05-27 09:13:28 +00001598 Py_DECREF(po);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001599 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001600 }
Guido van Rossuma88a0332007-02-26 16:59:55 +00001601 }
1602 else {
1603 po = NULL;
1604 prompt = "";
1605 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001606 s = PyOS_Readline(stdin, stdout, prompt);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001607 Py_XDECREF(po);
1608 if (s == NULL) {
1609 if (!PyErr_Occurred())
1610 PyErr_SetNone(PyExc_KeyboardInterrupt);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001611 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001612 return NULL;
1613 }
1614 if (*s == '\0') {
1615 PyErr_SetNone(PyExc_EOFError);
1616 result = NULL;
1617 }
1618 else { /* strip trailing '\n' */
1619 size_t len = strlen(s);
1620 if (len > PY_SSIZE_T_MAX) {
1621 PyErr_SetString(PyExc_OverflowError,
1622 "input: input too long");
1623 result = NULL;
1624 }
1625 else {
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001626 result = PyUnicode_Decode
1627 (s, len-1,
1628 PyUnicode_AsString(stdin_encoding),
1629 NULL);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001630 }
1631 }
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001632 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001633 PyMem_FREE(s);
1634 return result;
1635 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001636
1637 /* Fallback if we're not interactive */
1638 if (promptarg != NULL) {
1639 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0)
Guido van Rossuma88a0332007-02-26 16:59:55 +00001640 return NULL;
1641 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001642 tmp = PyObject_CallMethod(fout, "flush", "");
1643 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001644 PyErr_Clear();
1645 else
1646 Py_DECREF(tmp);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001647 return PyFile_GetLine(fin, -1);
1648}
1649
1650PyDoc_STRVAR(input_doc,
1651"input([prompt]) -> string\n\
1652\n\
1653Read a string from standard input. The trailing newline is stripped.\n\
1654If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1655On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1656is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001657
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001658
Guido van Rossum79f25d91997-04-29 20:08:16 +00001659static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001660builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001661{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001662 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001663}
1664
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001665PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001666"repr(object) -> string\n\
1667\n\
1668Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001669For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001670
1671
Guido van Rossum79f25d91997-04-29 20:08:16 +00001672static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001673builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001674{
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001675#define UNDEF_NDIGITS (-0x7fffffff) /* Unlikely ndigits value */
1676 static PyObject *round_str = NULL;
1677 int ndigits = UNDEF_NDIGITS;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001678 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001679 PyObject *number, *round;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001680
Alex Martelliae211f92007-08-22 23:21:33 +00001681 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|i:round",
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001682 kwlist, &number, &ndigits))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001683 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00001684
Christian Heimes90aa7642007-12-19 02:45:37 +00001685 if (Py_TYPE(number)->tp_dict == NULL) {
1686 if (PyType_Ready(Py_TYPE(number)) < 0)
Guido van Rossum15d3d042007-08-24 02:02:45 +00001687 return NULL;
1688 }
1689
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001690 if (round_str == NULL) {
Christian Heimesfe82e772008-01-28 02:38:20 +00001691 round_str = PyUnicode_InternFromString("__round__");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001692 if (round_str == NULL)
Alex Martelliae211f92007-08-22 23:21:33 +00001693 return NULL;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001694 }
1695
Christian Heimes90aa7642007-12-19 02:45:37 +00001696 round = _PyType_Lookup(Py_TYPE(number), round_str);
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001697 if (round == NULL) {
1698 PyErr_Format(PyExc_TypeError,
1699 "type %.100s doesn't define __round__ method",
Christian Heimes90aa7642007-12-19 02:45:37 +00001700 Py_TYPE(number)->tp_name);
Alex Martelliae211f92007-08-22 23:21:33 +00001701 return NULL;
1702 }
1703
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001704 if (ndigits == UNDEF_NDIGITS)
1705 return PyObject_CallFunction(round, "O", number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001706 else
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001707 return PyObject_CallFunction(round, "Oi", number, ndigits);
1708#undef UNDEF_NDIGITS
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001709}
1710
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001711PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001712"round(number[, ndigits]) -> floating point number\n\
1713\n\
1714Round a number to a given precision in decimal digits (default 0 digits).\n\
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001715This returns an int when called with one argument, otherwise a float.\n\
1716Precision may be negative.");
1717
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001718
Raymond Hettinger64958a12003-12-17 20:43:33 +00001719static PyObject *
1720builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1721{
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001722 PyObject *newlist, *v, *seq, *keyfunc=NULL, *newargs;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001723 PyObject *callable;
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001724 static char *kwlist[] = {"iterable", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001725 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001726
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001727 /* args 1-3 should match listsort in Objects/listobject.c */
1728 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted",
1729 kwlist, &seq, &keyfunc, &reverse))
Armin Rigo71d7e702005-09-20 18:13:03 +00001730 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001731
1732 newlist = PySequence_List(seq);
1733 if (newlist == NULL)
1734 return NULL;
1735
1736 callable = PyObject_GetAttrString(newlist, "sort");
1737 if (callable == NULL) {
1738 Py_DECREF(newlist);
1739 return NULL;
1740 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001741
Raymond Hettinger64958a12003-12-17 20:43:33 +00001742 newargs = PyTuple_GetSlice(args, 1, 4);
1743 if (newargs == NULL) {
1744 Py_DECREF(newlist);
1745 Py_DECREF(callable);
1746 return NULL;
1747 }
1748
1749 v = PyObject_Call(callable, newargs, kwds);
1750 Py_DECREF(newargs);
1751 Py_DECREF(callable);
1752 if (v == NULL) {
1753 Py_DECREF(newlist);
1754 return NULL;
1755 }
1756 Py_DECREF(v);
1757 return newlist;
1758}
1759
1760PyDoc_STRVAR(sorted_doc,
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001761"sorted(iterable, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001762
Guido van Rossum79f25d91997-04-29 20:08:16 +00001763static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001764builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001765{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001766 PyObject *v = NULL;
1767 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001768
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001769 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001770 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001771 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001772 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001773 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001774 if (!PyErr_Occurred())
1775 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001776 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001777 }
1778 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001779 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001780 }
1781 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001782 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001783 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001784 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001785 "vars() argument must have __dict__ attribute");
1786 return NULL;
1787 }
1788 }
1789 return d;
1790}
1791
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001792PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001793"vars([object]) -> dictionary\n\
1794\n\
1795Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001796With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001797
Alex Martellia70b1912003-04-22 08:12:33 +00001798static PyObject*
1799builtin_sum(PyObject *self, PyObject *args)
1800{
1801 PyObject *seq;
1802 PyObject *result = NULL;
1803 PyObject *temp, *item, *iter;
1804
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001805 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001806 return NULL;
1807
1808 iter = PyObject_GetIter(seq);
1809 if (iter == NULL)
1810 return NULL;
1811
1812 if (result == NULL) {
Christian Heimes217cfd12007-12-02 14:31:20 +00001813 result = PyLong_FromLong(0);
Alex Martellia70b1912003-04-22 08:12:33 +00001814 if (result == NULL) {
1815 Py_DECREF(iter);
1816 return NULL;
1817 }
1818 } else {
1819 /* reject string values for 'start' parameter */
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001820 if (PyUnicode_Check(result)) {
Alex Martellia70b1912003-04-22 08:12:33 +00001821 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001822 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001823 Py_DECREF(iter);
1824 return NULL;
1825 }
Christian Heimes9c4756e2008-05-26 13:22:05 +00001826 if (PyByteArray_Check(result)) {
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001827 PyErr_SetString(PyExc_TypeError,
1828 "sum() can't sum bytes [use b''.join(seq) instead]");
1829 Py_DECREF(iter);
1830 return NULL;
1831 }
1832
Alex Martelli41c9f882003-04-22 09:24:48 +00001833 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001834 }
1835
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001836#ifndef SLOW_SUM
1837 /* Fast addition by keeping temporary sums in C instead of new Python objects.
1838 Assumes all inputs are the same type. If the assumption fails, default
1839 to the more general routine.
1840 */
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001841 if (PyLong_CheckExact(result)) {
1842 int overflow;
1843 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
1844 /* If this already overflowed, don't even enter the loop. */
1845 if (overflow == 0) {
1846 Py_DECREF(result);
1847 result = NULL;
1848 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001849 while(result == NULL) {
1850 item = PyIter_Next(iter);
1851 if (item == NULL) {
1852 Py_DECREF(iter);
1853 if (PyErr_Occurred())
1854 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001855 return PyLong_FromLong(i_result);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001856 }
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001857 if (PyLong_CheckExact(item)) {
1858 long b = PyLong_AsLongAndOverflow(item, &overflow);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001859 long x = i_result + b;
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001860 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001861 i_result = x;
1862 Py_DECREF(item);
1863 continue;
1864 }
1865 }
1866 /* Either overflowed or is not an int. Restore real objects and process normally */
Christian Heimes217cfd12007-12-02 14:31:20 +00001867 result = PyLong_FromLong(i_result);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001868 temp = PyNumber_Add(result, item);
1869 Py_DECREF(result);
1870 Py_DECREF(item);
1871 result = temp;
1872 if (result == NULL) {
1873 Py_DECREF(iter);
1874 return NULL;
1875 }
1876 }
1877 }
1878
1879 if (PyFloat_CheckExact(result)) {
1880 double f_result = PyFloat_AS_DOUBLE(result);
1881 Py_DECREF(result);
1882 result = NULL;
1883 while(result == NULL) {
1884 item = PyIter_Next(iter);
1885 if (item == NULL) {
1886 Py_DECREF(iter);
1887 if (PyErr_Occurred())
1888 return NULL;
1889 return PyFloat_FromDouble(f_result);
1890 }
1891 if (PyFloat_CheckExact(item)) {
Georg Brandlf08a9dd2008-06-10 16:57:31 +00001892 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001893 f_result += PyFloat_AS_DOUBLE(item);
1894 PyFPE_END_PROTECT(f_result)
1895 Py_DECREF(item);
1896 continue;
1897 }
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001898 if (PyLong_CheckExact(item)) {
1899 long value;
1900 int overflow;
1901 value = PyLong_AsLongAndOverflow(item, &overflow);
1902 if (!overflow) {
Georg Brandlf08a9dd2008-06-10 16:57:31 +00001903 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001904 f_result += (double)value;
1905 PyFPE_END_PROTECT(f_result)
1906 Py_DECREF(item);
1907 continue;
1908 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001909 }
1910 result = PyFloat_FromDouble(f_result);
1911 temp = PyNumber_Add(result, item);
1912 Py_DECREF(result);
1913 Py_DECREF(item);
1914 result = temp;
1915 if (result == NULL) {
1916 Py_DECREF(iter);
1917 return NULL;
1918 }
1919 }
1920 }
1921#endif
1922
Alex Martellia70b1912003-04-22 08:12:33 +00001923 for(;;) {
1924 item = PyIter_Next(iter);
1925 if (item == NULL) {
1926 /* error, or end-of-sequence */
1927 if (PyErr_Occurred()) {
1928 Py_DECREF(result);
1929 result = NULL;
1930 }
1931 break;
1932 }
Alex Martellia253e182003-10-25 23:24:14 +00001933 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001934 Py_DECREF(result);
1935 Py_DECREF(item);
1936 result = temp;
1937 if (result == NULL)
1938 break;
1939 }
1940 Py_DECREF(iter);
1941 return result;
1942}
1943
1944PyDoc_STRVAR(sum_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001945"sum(iterable[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00001946\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +00001947Returns the sum of an iterable of numbers (NOT strings) plus the value\n\
1948of parameter 'start' (which defaults to 0). When the iterable is\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00001949empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00001950
1951
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001952static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001953builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001954{
1955 PyObject *inst;
1956 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001957 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001958
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001959 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001960 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001961
Guido van Rossum823649d2001-03-21 18:40:58 +00001962 retval = PyObject_IsInstance(inst, cls);
1963 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001964 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001965 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001966}
1967
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001968PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001969"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001970\n\
1971Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001972With a type as second argument, return whether that is the object's type.\n\
1973The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001974isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001975
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001976
1977static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001978builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001979{
1980 PyObject *derived;
1981 PyObject *cls;
1982 int retval;
1983
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001984 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001985 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001986
Guido van Rossum823649d2001-03-21 18:40:58 +00001987 retval = PyObject_IsSubclass(derived, cls);
1988 if (retval < 0)
1989 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001990 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001991}
1992
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001993PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001994"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001995\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00001996Return whether class C is a subclass (i.e., a derived class) of class B.\n\
1997When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
1998is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001999
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002000
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002001typedef struct {
2002 PyObject_HEAD
2003 Py_ssize_t tuplesize;
2004 PyObject *ittuple; /* tuple of iterators */
2005 PyObject *result;
2006} zipobject;
2007
2008PyTypeObject PyZip_Type;
2009
2010static PyObject *
2011zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002012{
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002013 zipobject *lz;
2014 Py_ssize_t i;
2015 PyObject *ittuple; /* tuple of iterators */
2016 PyObject *result;
2017 Py_ssize_t tuplesize = PySequence_Length(args);
2018
2019 if (type == &PyZip_Type && !_PyArg_NoKeywords("zip()", kwds))
2020 return NULL;
2021
Guido van Rossumb65fb332006-08-25 23:26:40 +00002022 /* args must be a tuple */
2023 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00002024
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002025 /* obtain iterators */
2026 ittuple = PyTuple_New(tuplesize);
2027 if (ittuple == NULL)
2028 return NULL;
2029 for (i=0; i < tuplesize; ++i) {
2030 PyObject *item = PyTuple_GET_ITEM(args, i);
2031 PyObject *it = PyObject_GetIter(item);
2032 if (it == NULL) {
2033 if (PyErr_ExceptionMatches(PyExc_TypeError))
2034 PyErr_Format(PyExc_TypeError,
2035 "zip argument #%zd must support iteration",
2036 i+1);
2037 Py_DECREF(ittuple);
2038 return NULL;
2039 }
2040 PyTuple_SET_ITEM(ittuple, i, it);
2041 }
2042
2043 /* create a result holder */
2044 result = PyTuple_New(tuplesize);
2045 if (result == NULL) {
2046 Py_DECREF(ittuple);
2047 return NULL;
2048 }
2049 for (i=0 ; i < tuplesize ; i++) {
2050 Py_INCREF(Py_None);
2051 PyTuple_SET_ITEM(result, i, Py_None);
2052 }
2053
2054 /* create zipobject structure */
2055 lz = (zipobject *)type->tp_alloc(type, 0);
2056 if (lz == NULL) {
2057 Py_DECREF(ittuple);
2058 Py_DECREF(result);
2059 return NULL;
2060 }
2061 lz->ittuple = ittuple;
2062 lz->tuplesize = tuplesize;
2063 lz->result = result;
2064
2065 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002066}
2067
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002068static void
2069zip_dealloc(zipobject *lz)
2070{
2071 PyObject_GC_UnTrack(lz);
2072 Py_XDECREF(lz->ittuple);
2073 Py_XDECREF(lz->result);
2074 Py_TYPE(lz)->tp_free(lz);
2075}
2076
2077static int
2078zip_traverse(zipobject *lz, visitproc visit, void *arg)
2079{
2080 Py_VISIT(lz->ittuple);
2081 Py_VISIT(lz->result);
2082 return 0;
2083}
2084
2085static PyObject *
2086zip_next(zipobject *lz)
2087{
2088 Py_ssize_t i;
2089 Py_ssize_t tuplesize = lz->tuplesize;
2090 PyObject *result = lz->result;
2091 PyObject *it;
2092 PyObject *item;
2093 PyObject *olditem;
2094
2095 if (tuplesize == 0)
2096 return NULL;
2097 if (Py_REFCNT(result) == 1) {
2098 Py_INCREF(result);
2099 for (i=0 ; i < tuplesize ; i++) {
2100 it = PyTuple_GET_ITEM(lz->ittuple, i);
2101 assert(PyIter_Check(it));
2102 item = (*Py_TYPE(it)->tp_iternext)(it);
2103 if (item == NULL) {
2104 Py_DECREF(result);
2105 return NULL;
2106 }
2107 olditem = PyTuple_GET_ITEM(result, i);
2108 PyTuple_SET_ITEM(result, i, item);
2109 Py_DECREF(olditem);
2110 }
2111 } else {
2112 result = PyTuple_New(tuplesize);
2113 if (result == NULL)
2114 return NULL;
2115 for (i=0 ; i < tuplesize ; i++) {
2116 it = PyTuple_GET_ITEM(lz->ittuple, i);
2117 assert(PyIter_Check(it));
2118 item = (*Py_TYPE(it)->tp_iternext)(it);
2119 if (item == NULL) {
2120 Py_DECREF(result);
2121 return NULL;
2122 }
2123 PyTuple_SET_ITEM(result, i, item);
2124 }
2125 }
2126 return result;
2127}
Barry Warsawbd599b52000-08-03 15:45:29 +00002128
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002129PyDoc_STRVAR(zip_doc,
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002130"zip(iter1 [,iter2 [...]]) --> zip object\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002131\n\
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002132Return a zip object whose .__next__() method returns a tuple where\n\
2133the i-th element comes from the i-th iterable argument. The .__next__()\n\
2134method continues until the shortest iterable in the argument sequence\n\
2135is exhausted and then it raises StopIteration. Works like the zip()\n\
2136function but consumes less memory by returning an iterator instead of\n\
2137a list.");
2138
2139PyTypeObject PyZip_Type = {
2140 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2141 "zip", /* tp_name */
2142 sizeof(zipobject), /* tp_basicsize */
2143 0, /* tp_itemsize */
2144 /* methods */
2145 (destructor)zip_dealloc, /* tp_dealloc */
2146 0, /* tp_print */
2147 0, /* tp_getattr */
2148 0, /* tp_setattr */
2149 0, /* tp_compare */
2150 0, /* tp_repr */
2151 0, /* tp_as_number */
2152 0, /* tp_as_sequence */
2153 0, /* tp_as_mapping */
2154 0, /* tp_hash */
2155 0, /* tp_call */
2156 0, /* tp_str */
2157 PyObject_GenericGetAttr, /* tp_getattro */
2158 0, /* tp_setattro */
2159 0, /* tp_as_buffer */
2160 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2161 Py_TPFLAGS_BASETYPE, /* tp_flags */
2162 zip_doc, /* tp_doc */
2163 (traverseproc)zip_traverse, /* tp_traverse */
2164 0, /* tp_clear */
2165 0, /* tp_richcompare */
2166 0, /* tp_weaklistoffset */
2167 PyObject_SelfIter, /* tp_iter */
2168 (iternextfunc)zip_next, /* tp_iternext */
2169 0, /* tp_methods */
2170 0, /* tp_members */
2171 0, /* tp_getset */
2172 0, /* tp_base */
2173 0, /* tp_dict */
2174 0, /* tp_descr_get */
2175 0, /* tp_descr_set */
2176 0, /* tp_dictoffset */
2177 0, /* tp_init */
2178 PyType_GenericAlloc, /* tp_alloc */
2179 zip_new, /* tp_new */
2180 PyObject_GC_Del, /* tp_free */
2181};
Barry Warsawbd599b52000-08-03 15:45:29 +00002182
2183
Guido van Rossum79f25d91997-04-29 20:08:16 +00002184static PyMethodDef builtin_methods[] = {
Guido van Rossum52cc1d82007-03-18 15:41:51 +00002185 {"__build_class__", (PyCFunction)builtin___build_class__,
2186 METH_VARARGS | METH_KEYWORDS, build_class_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002187 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002188 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002189 {"all", builtin_all, METH_O, all_doc},
2190 {"any", builtin_any, METH_O, any_doc},
Guido van Rossumcd16bf62007-06-13 18:07:49 +00002191 {"bin", builtin_bin, METH_O, bin_doc},
Neal Norwitzc2550c72007-08-31 04:17:51 +00002192 {"chr", builtin_chr, METH_VARARGS, chr_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002193 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
Guido van Rossumd8faa362007-04-27 19:54:29 +00002194 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002195 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2196 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2197 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2198 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00002199 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Eric Smith8c663262007-08-25 02:26:07 +00002200 {"format", builtin_format, METH_VARARGS, format_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002201 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2202 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2203 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2204 {"hash", builtin_hash, METH_O, hash_doc},
2205 {"hex", builtin_hex, METH_O, hex_doc},
2206 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00002207 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002208 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2209 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2210 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2211 {"len", builtin_len, METH_O, len_doc},
2212 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002213 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2214 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandla18af4e2007-04-21 15:47:16 +00002215 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002216 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002217 {"ord", builtin_ord, METH_O, ord_doc},
2218 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00002219 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002220 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002221 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002222 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002223 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002224 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002225 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002226 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002227};
2228
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002229PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002230"Built-in functions, exceptions, and other objects.\n\
2231\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002232Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002233
Martin v. Löwis1a214512008-06-11 05:26:20 +00002234static struct PyModuleDef builtinsmodule = {
2235 PyModuleDef_HEAD_INIT,
2236 "builtins",
2237 builtin_doc,
2238 0,
2239 builtin_methods,
2240 NULL,
2241 NULL,
2242 NULL,
2243 NULL
2244};
2245
2246
Guido van Rossum25ce5661997-08-02 03:10:38 +00002247PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002248_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002249{
Fred Drake5550de32000-06-20 04:54:19 +00002250 PyObject *mod, *dict, *debug;
Martin v. Löwis1a214512008-06-11 05:26:20 +00002251 mod = PyModule_Create(&builtinsmodule);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002252 if (mod == NULL)
2253 return NULL;
2254 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002255
Tim Peters7571a0f2003-03-23 17:52:28 +00002256#ifdef Py_TRACE_REFS
Georg Brandl1a3284e2007-12-02 09:40:06 +00002257 /* "builtins" exposes a number of statically allocated objects
Tim Peters7571a0f2003-03-23 17:52:28 +00002258 * that, before this code was added in 2.3, never showed up in
2259 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2260 * result, programs leaking references to None and False (etc)
2261 * couldn't be diagnosed by examining sys.getobjects(0).
2262 */
2263#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2264#else
2265#define ADD_TO_ALL(OBJECT) (void)0
2266#endif
2267
Tim Peters4b7625e2001-09-13 21:37:17 +00002268#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002269 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2270 return NULL; \
2271 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002272
2273 SETBUILTIN("None", Py_None);
2274 SETBUILTIN("Ellipsis", Py_Ellipsis);
2275 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002276 SETBUILTIN("False", Py_False);
2277 SETBUILTIN("True", Py_True);
2278 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbae07c92007-10-08 02:46:15 +00002279 SETBUILTIN("memoryview", &PyMemoryView_Type);
Christian Heimes9c4756e2008-05-26 13:22:05 +00002280 SETBUILTIN("bytearray", &PyByteArray_Type);
Christian Heimes72b710a2008-05-26 13:28:38 +00002281 SETBUILTIN("bytes", &PyBytes_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002282 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002283#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002284 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002285#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002286 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002287 SETBUILTIN("enumerate", &PyEnum_Type);
Raymond Hettinger17301e92008-03-13 00:19:26 +00002288 SETBUILTIN("filter", &PyFilter_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002289 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002290 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002291 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00002292 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002293 SETBUILTIN("list", &PyList_Type);
Raymond Hettingera6c60372008-03-13 01:26:19 +00002294 SETBUILTIN("map", &PyMap_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002295 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossum805365e2007-05-07 22:24:25 +00002296 SETBUILTIN("range", &PyRange_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002297 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002298 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002299 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002300 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Guido van Rossum572dbf82007-04-27 23:53:51 +00002301 SETBUILTIN("str", &PyUnicode_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002302 SETBUILTIN("super", &PySuper_Type);
2303 SETBUILTIN("tuple", &PyTuple_Type);
2304 SETBUILTIN("type", &PyType_Type);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002305 SETBUILTIN("zip", &PyZip_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002306 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002307 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2308 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002309 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002310 }
2311 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002312
Guido van Rossum25ce5661997-08-02 03:10:38 +00002313 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002314#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002315#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002316}