blob: 04f5231891dd47ef1840ad0b89a2ead669836281 [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 Rossum3f5da241990-12-20 15:06:42 +00008
Benjamin Petersonea281a52011-08-12 23:10:50 -05009#include "asdl.h"
10#include "ast.h"
11
Guido van Rossum6bf62da1997-04-11 20:37:35 +000012#include <ctype.h>
13
Victor Stinnerb744ba12010-05-15 12:27:16 +000014#ifdef HAVE_LANGINFO_H
15#include <langinfo.h> /* CODESET */
16#endif
17
Mark Hammond26cffde42001-05-14 12:17:34 +000018/* The default encoding used by the platform file system APIs
19 Can remain NULL for all platforms that don't have such a concept
Guido van Rossum00bc0e02007-10-15 02:52:41 +000020
21 Don't forget to modify PyUnicode_DecodeFSDefault() if you touch any of the
22 values for Py_FileSystemDefaultEncoding!
Mark Hammond26cffde42001-05-14 12:17:34 +000023*/
Victor Stinner99b95382011-07-04 14:23:54 +020024#ifdef HAVE_MBCS
Mark Hammond26cffde42001-05-14 12:17:34 +000025const char *Py_FileSystemDefaultEncoding = "mbcs";
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000026int Py_HasFileSystemDefaultEncoding = 1;
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000027#elif defined(__APPLE__)
28const char *Py_FileSystemDefaultEncoding = "utf-8";
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000029int Py_HasFileSystemDefaultEncoding = 1;
Victor Stinnerd64e8a72011-07-04 13:48:30 +020030#else
Victor Stinnerb744ba12010-05-15 12:27:16 +000031const char *Py_FileSystemDefaultEncoding = NULL; /* set by initfsencoding() */
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000032int Py_HasFileSystemDefaultEncoding = 0;
Mark Hammond26cffde42001-05-14 12:17:34 +000033#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000034
Guido van Rossum79f25d91997-04-29 20:08:16 +000035static PyObject *
Guido van Rossum52cc1d82007-03-18 15:41:51 +000036builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds)
37{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000038 PyObject *func, *name, *bases, *mkw, *meta, *prep, *ns, *cell;
39 PyObject *cls = NULL;
Brett Cannonb94767f2011-02-22 20:15:44 +000040 Py_ssize_t nargs;
Guido van Rossum52cc1d82007-03-18 15:41:51 +000041
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000042 assert(args != NULL);
43 if (!PyTuple_Check(args)) {
44 PyErr_SetString(PyExc_TypeError,
45 "__build_class__: args is not a tuple");
46 return NULL;
47 }
48 nargs = PyTuple_GET_SIZE(args);
49 if (nargs < 2) {
50 PyErr_SetString(PyExc_TypeError,
51 "__build_class__: not enough arguments");
52 return NULL;
53 }
54 func = PyTuple_GET_ITEM(args, 0); /* Better be callable */
55 name = PyTuple_GET_ITEM(args, 1);
56 if (!PyUnicode_Check(name)) {
57 PyErr_SetString(PyExc_TypeError,
58 "__build_class__: name is not a string");
59 return NULL;
60 }
61 bases = PyTuple_GetSlice(args, 2, nargs);
62 if (bases == NULL)
63 return NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +000064
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000065 if (kwds == NULL) {
66 meta = NULL;
67 mkw = NULL;
68 }
69 else {
70 mkw = PyDict_Copy(kwds); /* Don't modify kwds passed in! */
71 if (mkw == NULL) {
72 Py_DECREF(bases);
73 return NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +000074 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000075 meta = PyDict_GetItemString(mkw, "metaclass");
76 if (meta != NULL) {
77 Py_INCREF(meta);
78 if (PyDict_DelItemString(mkw, "metaclass") < 0) {
79 Py_DECREF(meta);
80 Py_DECREF(mkw);
81 Py_DECREF(bases);
82 return NULL;
83 }
84 }
85 }
86 if (meta == NULL) {
87 if (PyTuple_GET_SIZE(bases) == 0)
88 meta = (PyObject *) (&PyType_Type);
89 else {
90 PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
91 meta = (PyObject *) (base0->ob_type);
92 }
93 Py_INCREF(meta);
94 }
95 prep = PyObject_GetAttrString(meta, "__prepare__");
96 if (prep == NULL) {
97 if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
98 PyErr_Clear();
99 ns = PyDict_New();
100 }
101 else {
102 Py_DECREF(meta);
103 Py_XDECREF(mkw);
104 Py_DECREF(bases);
105 return NULL;
106 }
107 }
108 else {
109 PyObject *pargs = PyTuple_Pack(2, name, bases);
110 if (pargs == NULL) {
111 Py_DECREF(prep);
112 Py_DECREF(meta);
113 Py_XDECREF(mkw);
114 Py_DECREF(bases);
115 return NULL;
116 }
117 ns = PyEval_CallObjectWithKeywords(prep, pargs, mkw);
118 Py_DECREF(pargs);
119 Py_DECREF(prep);
120 }
121 if (ns == NULL) {
122 Py_DECREF(meta);
123 Py_XDECREF(mkw);
124 Py_DECREF(bases);
125 return NULL;
126 }
127 cell = PyObject_CallFunctionObjArgs(func, ns, NULL);
128 if (cell != NULL) {
129 PyObject *margs;
130 margs = PyTuple_Pack(3, name, bases, ns);
131 if (margs != NULL) {
132 cls = PyEval_CallObjectWithKeywords(meta, margs, mkw);
133 Py_DECREF(margs);
134 }
135 if (cls != NULL && PyCell_Check(cell)) {
136 Py_INCREF(cls);
137 PyCell_SET(cell, cls);
138 }
139 Py_DECREF(cell);
140 }
141 Py_DECREF(ns);
142 Py_DECREF(meta);
143 Py_XDECREF(mkw);
144 Py_DECREF(bases);
145 return cls;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000146}
147
148PyDoc_STRVAR(build_class_doc,
149"__build_class__(func, name, *bases, metaclass=None, **kwds) -> class\n\
150\n\
151Internal helper function used by the class statement.");
152
153static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000154builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000155{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000156 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
157 "level", 0};
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400158 PyObject *name, *globals = NULL, *locals = NULL, *fromlist = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000159 int level = -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000160
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400161 if (!PyArg_ParseTupleAndKeywords(args, kwds, "U|OOOi:__import__",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000162 kwlist, &name, &globals, &locals, &fromlist, &level))
163 return NULL;
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400164 return PyImport_ImportModuleLevelObject(name, globals, locals,
165 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000166}
167
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000168PyDoc_STRVAR(import_doc,
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000169"__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000170\n\
Brett Cannon5305a992010-09-27 21:08:38 +0000171Import a module. Because this function is meant for use by the Python\n\
172interpreter and not for general use it is better to use\n\
173importlib.import_module() to programmatically import a module.\n\
174\n\
175The globals argument is only used to determine the context;\n\
176they are not modified. The locals argument is unused. The fromlist\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000177should be a list of names to emulate ``from name import ...'', or an\n\
178empty list to emulate ``import name''.\n\
179When importing a module from a package, note that __import__('A.B', ...)\n\
180returns package A when fromlist is empty, but its submodule B when\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000181fromlist is not empty. Level is used to determine whether to perform \n\
182absolute or relative imports. -1 is the original strategy of attempting\n\
183both absolute and relative imports, 0 is absolute, a positive number\n\
184is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000185
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000186
Guido van Rossum79f25d91997-04-29 20:08:16 +0000187static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000188builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000189{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000190 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000191}
192
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000193PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000194"abs(number) -> number\n\
195\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000196Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000197
Raymond Hettinger96229b12005-03-11 06:49:40 +0000198static PyObject *
199builtin_all(PyObject *self, PyObject *v)
200{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000201 PyObject *it, *item;
202 PyObject *(*iternext)(PyObject *);
203 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000204
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000205 it = PyObject_GetIter(v);
206 if (it == NULL)
207 return NULL;
208 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000209
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000210 for (;;) {
211 item = iternext(it);
212 if (item == NULL)
213 break;
214 cmp = PyObject_IsTrue(item);
215 Py_DECREF(item);
216 if (cmp < 0) {
217 Py_DECREF(it);
218 return NULL;
219 }
220 if (cmp == 0) {
221 Py_DECREF(it);
222 Py_RETURN_FALSE;
223 }
224 }
225 Py_DECREF(it);
226 if (PyErr_Occurred()) {
227 if (PyErr_ExceptionMatches(PyExc_StopIteration))
228 PyErr_Clear();
229 else
230 return NULL;
231 }
232 Py_RETURN_TRUE;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000233}
234
235PyDoc_STRVAR(all_doc,
236"all(iterable) -> bool\n\
237\n\
238Return True if bool(x) is True for all values x in the iterable.");
239
240static PyObject *
241builtin_any(PyObject *self, PyObject *v)
242{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000243 PyObject *it, *item;
244 PyObject *(*iternext)(PyObject *);
245 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000246
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000247 it = PyObject_GetIter(v);
248 if (it == NULL)
249 return NULL;
250 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000251
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000252 for (;;) {
253 item = iternext(it);
254 if (item == NULL)
255 break;
256 cmp = PyObject_IsTrue(item);
257 Py_DECREF(item);
258 if (cmp < 0) {
259 Py_DECREF(it);
260 return NULL;
261 }
262 if (cmp == 1) {
263 Py_DECREF(it);
264 Py_RETURN_TRUE;
265 }
266 }
267 Py_DECREF(it);
268 if (PyErr_Occurred()) {
269 if (PyErr_ExceptionMatches(PyExc_StopIteration))
270 PyErr_Clear();
271 else
272 return NULL;
273 }
274 Py_RETURN_FALSE;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000275}
276
277PyDoc_STRVAR(any_doc,
278"any(iterable) -> bool\n\
279\n\
280Return True if bool(x) is True for any x in the iterable.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000281
Georg Brandl559e5d72008-06-11 18:37:52 +0000282static PyObject *
283builtin_ascii(PyObject *self, PyObject *v)
284{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000285 return PyObject_ASCII(v);
Georg Brandl559e5d72008-06-11 18:37:52 +0000286}
287
288PyDoc_STRVAR(ascii_doc,
289"ascii(object) -> string\n\
290\n\
291As repr(), return a string containing a printable representation of an\n\
292object, but escape the non-ASCII characters in the string returned by\n\
293repr() using \\x, \\u or \\U escapes. This generates a string similar\n\
294to that returned by repr() in Python 2.");
295
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000296
Guido van Rossum79f25d91997-04-29 20:08:16 +0000297static PyObject *
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000298builtin_bin(PyObject *self, PyObject *v)
299{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000300 return PyNumber_ToBase(v, 2);
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000301}
302
303PyDoc_STRVAR(bin_doc,
304"bin(number) -> string\n\
305\n\
Alexander Belopolsky12338ab2011-04-07 00:15:33 -0400306Return the binary representation of an integer.");
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000307
308
Antoine Pitroue71362d2010-11-27 22:00:11 +0000309static PyObject *
310builtin_callable(PyObject *self, PyObject *v)
311{
312 return PyBool_FromLong((long)PyCallable_Check(v));
313}
314
315PyDoc_STRVAR(callable_doc,
316"callable(object) -> bool\n\
317\n\
318Return whether the object is callable (i.e., some kind of function).\n\
319Note that classes are callable, as are instances of classes with a\n\
320__call__() method.");
321
322
Raymond Hettinger17301e92008-03-13 00:19:26 +0000323typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000324 PyObject_HEAD
325 PyObject *func;
326 PyObject *it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000327} filterobject;
328
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000329static PyObject *
Raymond Hettinger17301e92008-03-13 00:19:26 +0000330filter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000331{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000332 PyObject *func, *seq;
333 PyObject *it;
334 filterobject *lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000335
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000336 if (type == &PyFilter_Type && !_PyArg_NoKeywords("filter()", kwds))
337 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000338
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000339 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
340 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000341
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000342 /* Get iterator. */
343 it = PyObject_GetIter(seq);
344 if (it == NULL)
345 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000346
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000347 /* create filterobject structure */
348 lz = (filterobject *)type->tp_alloc(type, 0);
349 if (lz == NULL) {
350 Py_DECREF(it);
351 return NULL;
352 }
353 Py_INCREF(func);
354 lz->func = func;
355 lz->it = it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000356
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000357 return (PyObject *)lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000358}
359
360static void
361filter_dealloc(filterobject *lz)
362{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000363 PyObject_GC_UnTrack(lz);
364 Py_XDECREF(lz->func);
365 Py_XDECREF(lz->it);
366 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger17301e92008-03-13 00:19:26 +0000367}
368
369static int
370filter_traverse(filterobject *lz, visitproc visit, void *arg)
371{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000372 Py_VISIT(lz->it);
373 Py_VISIT(lz->func);
374 return 0;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000375}
376
377static PyObject *
378filter_next(filterobject *lz)
379{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000380 PyObject *item;
381 PyObject *it = lz->it;
382 long ok;
383 PyObject *(*iternext)(PyObject *);
Raymond Hettinger17301e92008-03-13 00:19:26 +0000384
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000385 iternext = *Py_TYPE(it)->tp_iternext;
386 for (;;) {
387 item = iternext(it);
388 if (item == NULL)
389 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000390
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000391 if (lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type) {
392 ok = PyObject_IsTrue(item);
393 } else {
394 PyObject *good;
395 good = PyObject_CallFunctionObjArgs(lz->func,
396 item, NULL);
397 if (good == NULL) {
398 Py_DECREF(item);
399 return NULL;
400 }
401 ok = PyObject_IsTrue(good);
402 Py_DECREF(good);
403 }
404 if (ok)
405 return item;
406 Py_DECREF(item);
407 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000408}
409
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000410PyDoc_STRVAR(filter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +0000411"filter(function or None, iterable) --> filter object\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000412\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +0000413Return an iterator yielding those items of iterable for which function(item)\n\
Raymond Hettinger17301e92008-03-13 00:19:26 +0000414is true. If function is None, return the items that are true.");
415
416PyTypeObject PyFilter_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000417 PyVarObject_HEAD_INIT(&PyType_Type, 0)
418 "filter", /* tp_name */
419 sizeof(filterobject), /* tp_basicsize */
420 0, /* tp_itemsize */
421 /* methods */
422 (destructor)filter_dealloc, /* tp_dealloc */
423 0, /* tp_print */
424 0, /* tp_getattr */
425 0, /* tp_setattr */
426 0, /* tp_reserved */
427 0, /* tp_repr */
428 0, /* tp_as_number */
429 0, /* tp_as_sequence */
430 0, /* tp_as_mapping */
431 0, /* tp_hash */
432 0, /* tp_call */
433 0, /* tp_str */
434 PyObject_GenericGetAttr, /* tp_getattro */
435 0, /* tp_setattro */
436 0, /* tp_as_buffer */
437 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
438 Py_TPFLAGS_BASETYPE, /* tp_flags */
439 filter_doc, /* tp_doc */
440 (traverseproc)filter_traverse, /* tp_traverse */
441 0, /* tp_clear */
442 0, /* tp_richcompare */
443 0, /* tp_weaklistoffset */
444 PyObject_SelfIter, /* tp_iter */
445 (iternextfunc)filter_next, /* tp_iternext */
446 0, /* tp_methods */
447 0, /* tp_members */
448 0, /* tp_getset */
449 0, /* tp_base */
450 0, /* tp_dict */
451 0, /* tp_descr_get */
452 0, /* tp_descr_set */
453 0, /* tp_dictoffset */
454 0, /* tp_init */
455 PyType_GenericAlloc, /* tp_alloc */
456 filter_new, /* tp_new */
457 PyObject_GC_Del, /* tp_free */
Raymond Hettinger17301e92008-03-13 00:19:26 +0000458};
459
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000460
Eric Smith8c663262007-08-25 02:26:07 +0000461static PyObject *
462builtin_format(PyObject *self, PyObject *args)
463{
Christian Heimes94b7d3d2007-12-11 20:20:39 +0000464 PyObject *value;
Eric Smith8fd3eba2008-02-17 19:48:00 +0000465 PyObject *format_spec = NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000466
Eric Smith8fd3eba2008-02-17 19:48:00 +0000467 if (!PyArg_ParseTuple(args, "O|U:format", &value, &format_spec))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000468 return NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000469
Eric Smith8fd3eba2008-02-17 19:48:00 +0000470 return PyObject_Format(value, format_spec);
Eric Smith8c663262007-08-25 02:26:07 +0000471}
472
Eric Smith8c663262007-08-25 02:26:07 +0000473PyDoc_STRVAR(format_doc,
Eric Smith81936692007-08-31 01:14:01 +0000474"format(value[, format_spec]) -> string\n\
Eric Smith8c663262007-08-25 02:26:07 +0000475\n\
Eric Smith81936692007-08-31 01:14:01 +0000476Returns value.__format__(format_spec)\n\
477format_spec defaults to \"\"");
478
Guido van Rossum7fcf2242007-05-04 17:43:11 +0000479static PyObject *
Walter Dörwalde7efd592007-06-05 20:07:21 +0000480builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000481{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000482 int x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000483
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000484 if (!PyArg_ParseTuple(args, "i:chr", &x))
485 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000486
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000487 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000488}
489
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000490PyDoc_VAR(chr_doc) = PyDoc_STR(
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000491"chr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000492\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000493Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000494)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000495#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000496PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000497"\nIf 0x10000 <= i, a surrogate pair is returned."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000498)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000499#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000500;
Guido van Rossum09095f32000-03-10 23:00:52 +0000501
502
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000503static char *
Benjamin Petersonf5b52242009-03-02 23:31:26 +0000504source_as_string(PyObject *cmd, char *funcname, char *what, PyCompilerFlags *cf)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000505{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000506 char *str;
507 Py_ssize_t size;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000508
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000509 if (PyUnicode_Check(cmd)) {
510 cf->cf_flags |= PyCF_IGNORE_COOKIE;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200511 str = PyUnicode_AsUTF8AndSize(cmd, &size);
512 if (str == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000513 return NULL;
514 }
515 else if (!PyObject_CheckReadBuffer(cmd)) {
516 PyErr_Format(PyExc_TypeError,
517 "%s() arg 1 must be a %s object",
518 funcname, what);
519 return NULL;
520 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200521 else if (PyObject_AsReadBuffer(cmd, (const void **)&str, &size) < 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000522 return NULL;
523 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200524
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000525 if (strlen(str) != size) {
526 PyErr_SetString(PyExc_TypeError,
527 "source code string cannot contain null bytes");
528 return NULL;
529 }
530 return str;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000531}
532
Guido van Rossum79f25d91997-04-29 20:08:16 +0000533static PyObject *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000534builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000535{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000536 char *str;
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000537 PyObject *filename_obj;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000538 char *filename;
539 char *startstr;
540 int mode = -1;
541 int dont_inherit = 0;
542 int supplied_flags = 0;
Georg Brandl8334fd92010-12-04 10:26:46 +0000543 int optimize = -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000544 int is_ast;
545 PyCompilerFlags cf;
546 PyObject *cmd;
547 static char *kwlist[] = {"source", "filename", "mode", "flags",
Georg Brandl8334fd92010-12-04 10:26:46 +0000548 "dont_inherit", "optimize", NULL};
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000549 int start[] = {Py_file_input, Py_eval_input, Py_single_input};
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000550 PyObject *result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000551
Georg Brandl8334fd92010-12-04 10:26:46 +0000552 if (!PyArg_ParseTupleAndKeywords(args, kwds, "OO&s|iii:compile", kwlist,
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000553 &cmd,
554 PyUnicode_FSConverter, &filename_obj,
555 &startstr, &supplied_flags,
Georg Brandl8334fd92010-12-04 10:26:46 +0000556 &dont_inherit, &optimize))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000557 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000558
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000559 filename = PyBytes_AS_STRING(filename_obj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000560 cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000561
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000562 if (supplied_flags &
563 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
564 {
565 PyErr_SetString(PyExc_ValueError,
566 "compile(): unrecognised flags");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000567 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000568 }
569 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
Tim Peters6cd6a822001-08-17 22:11:27 +0000570
Georg Brandl8334fd92010-12-04 10:26:46 +0000571 if (optimize < -1 || optimize > 2) {
572 PyErr_SetString(PyExc_ValueError,
573 "compile(): invalid optimize value");
574 goto error;
575 }
576
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000577 if (!dont_inherit) {
578 PyEval_MergeCompilerFlags(&cf);
579 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000580
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000581 if (strcmp(startstr, "exec") == 0)
582 mode = 0;
583 else if (strcmp(startstr, "eval") == 0)
584 mode = 1;
585 else if (strcmp(startstr, "single") == 0)
586 mode = 2;
587 else {
588 PyErr_SetString(PyExc_ValueError,
589 "compile() arg 3 must be 'exec', 'eval' or 'single'");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000590 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000591 }
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000592
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000593 is_ast = PyAST_Check(cmd);
594 if (is_ast == -1)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000595 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000596 if (is_ast) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000597 if (supplied_flags & PyCF_ONLY_AST) {
598 Py_INCREF(cmd);
599 result = cmd;
600 }
601 else {
602 PyArena *arena;
603 mod_ty mod;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000604
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000605 arena = PyArena_New();
606 mod = PyAST_obj2mod(cmd, arena, mode);
607 if (mod == NULL) {
608 PyArena_Free(arena);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000609 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000610 }
Benjamin Peterson832bfe22011-08-09 16:15:04 -0500611 if (!PyAST_Validate(mod)) {
612 PyArena_Free(arena);
613 goto error;
614 }
Georg Brandl8334fd92010-12-04 10:26:46 +0000615 result = (PyObject*)PyAST_CompileEx(mod, filename,
616 &cf, optimize, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000617 PyArena_Free(arena);
618 }
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000619 goto finally;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000620 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000621
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000622 str = source_as_string(cmd, "compile", "string, bytes, AST or code", &cf);
623 if (str == NULL)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000624 goto error;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000625
Georg Brandl8334fd92010-12-04 10:26:46 +0000626 result = Py_CompileStringExFlags(str, filename, start[mode], &cf, optimize);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000627 goto finally;
628
629error:
630 result = NULL;
631finally:
632 Py_DECREF(filename_obj);
633 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000634}
635
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000636PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000637"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000638\n\
639Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000640into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000641The filename will be used for run-time error messages.\n\
642The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000643single (interactive) statement, or 'eval' to compile an expression.\n\
644The flags argument, if present, controls which future statements influence\n\
645the compilation of the code.\n\
646The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
647the effects of any future statements in effect in the code calling\n\
648compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000649in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000650
Guido van Rossum79f25d91997-04-29 20:08:16 +0000651static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000652builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000653{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000654 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000655
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000656 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
657 return NULL;
658 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000659}
660
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000661PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000662"dir([object]) -> list of strings\n"
663"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000664"If called without an argument, return the names in the current scope.\n"
665"Else, return an alphabetized list of names comprising (some of) the attributes\n"
666"of the given object, and of attributes reachable from it.\n"
667"If the object supplies a method named __dir__, it will be used; otherwise\n"
668"the default dir() logic is used and returns:\n"
669" for a module object: the module's attributes.\n"
670" for a class object: its attributes, and recursively the attributes\n"
671" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000672" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000673" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000674
Guido van Rossum79f25d91997-04-29 20:08:16 +0000675static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000676builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000677{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000678 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000679
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000680 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
681 return NULL;
682 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000683}
684
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000685PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000686"divmod(x, y) -> (div, mod)\n\
687\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000688Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000689
690
Guido van Rossum79f25d91997-04-29 20:08:16 +0000691static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000692builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000693{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000694 PyObject *cmd, *result, *tmp = NULL;
695 PyObject *globals = Py_None, *locals = Py_None;
696 char *str;
697 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000698
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000699 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
700 return NULL;
701 if (locals != Py_None && !PyMapping_Check(locals)) {
702 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
703 return NULL;
704 }
705 if (globals != Py_None && !PyDict_Check(globals)) {
706 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
707 "globals must be a real dict; try eval(expr, {}, mapping)"
708 : "globals must be a dict");
709 return NULL;
710 }
711 if (globals == Py_None) {
712 globals = PyEval_GetGlobals();
713 if (locals == Py_None)
714 locals = PyEval_GetLocals();
715 }
716 else if (locals == Py_None)
717 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000718
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000719 if (globals == NULL || locals == NULL) {
720 PyErr_SetString(PyExc_TypeError,
721 "eval must be given globals and locals "
722 "when called without a frame");
723 return NULL;
724 }
Georg Brandl77c85e62005-09-15 10:46:13 +0000725
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000726 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
727 if (PyDict_SetItemString(globals, "__builtins__",
728 PyEval_GetBuiltins()) != 0)
729 return NULL;
730 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000731
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000732 if (PyCode_Check(cmd)) {
733 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
734 PyErr_SetString(PyExc_TypeError,
735 "code object passed to eval() may not contain free variables");
736 return NULL;
737 }
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000738 return PyEval_EvalCode(cmd, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000739 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000740
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000741 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
742 str = source_as_string(cmd, "eval", "string, bytes or code", &cf);
743 if (str == NULL)
744 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000745
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000746 while (*str == ' ' || *str == '\t')
747 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000748
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000749 (void)PyEval_MergeCompilerFlags(&cf);
750 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
751 Py_XDECREF(tmp);
752 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000753}
754
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000755PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000756"eval(source[, globals[, locals]]) -> value\n\
757\n\
758Evaluate the source in the context of globals and locals.\n\
759The source may be a string representing a Python expression\n\
760or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000761The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000762defaulting to the current globals and locals.\n\
763If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000764
Georg Brandl7cae87c2006-09-06 06:51:57 +0000765static PyObject *
766builtin_exec(PyObject *self, PyObject *args)
767{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000768 PyObject *v;
769 PyObject *prog, *globals = Py_None, *locals = Py_None;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000770
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000771 if (!PyArg_UnpackTuple(args, "exec", 1, 3, &prog, &globals, &locals))
772 return NULL;
Georg Brandl2cabc562008-08-28 07:57:16 +0000773
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000774 if (globals == Py_None) {
775 globals = PyEval_GetGlobals();
776 if (locals == Py_None) {
777 locals = PyEval_GetLocals();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000778 }
779 if (!globals || !locals) {
780 PyErr_SetString(PyExc_SystemError,
781 "globals and locals cannot be NULL");
782 return NULL;
783 }
784 }
785 else if (locals == Py_None)
786 locals = globals;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000787
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000788 if (!PyDict_Check(globals)) {
789 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
790 globals->ob_type->tp_name);
791 return NULL;
792 }
793 if (!PyMapping_Check(locals)) {
794 PyErr_Format(PyExc_TypeError,
795 "arg 3 must be a mapping or None, not %.100s",
796 locals->ob_type->tp_name);
797 return NULL;
798 }
799 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
800 if (PyDict_SetItemString(globals, "__builtins__",
801 PyEval_GetBuiltins()) != 0)
802 return NULL;
803 }
804
805 if (PyCode_Check(prog)) {
806 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
807 PyErr_SetString(PyExc_TypeError,
808 "code object passed to exec() may not "
809 "contain free variables");
810 return NULL;
811 }
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000812 v = PyEval_EvalCode(prog, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000813 }
814 else {
815 char *str;
816 PyCompilerFlags cf;
817 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
818 str = source_as_string(prog, "exec",
819 "string, bytes or code", &cf);
820 if (str == NULL)
821 return NULL;
822 if (PyEval_MergeCompilerFlags(&cf))
823 v = PyRun_StringFlags(str, Py_file_input, globals,
824 locals, &cf);
825 else
826 v = PyRun_String(str, Py_file_input, globals, locals);
827 }
828 if (v == NULL)
829 return NULL;
830 Py_DECREF(v);
831 Py_RETURN_NONE;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000832}
833
834PyDoc_STRVAR(exec_doc,
835"exec(object[, globals[, locals]])\n\
836\n\
Mark Dickinson480e8e32009-12-19 21:19:35 +0000837Read and execute code from an object, which can be a string or a code\n\
Benjamin Peterson38090262009-01-04 15:30:39 +0000838object.\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000839The globals and locals are dictionaries, defaulting to the current\n\
840globals and locals. If only globals is given, locals defaults to it.");
841
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000842
Guido van Rossum79f25d91997-04-29 20:08:16 +0000843static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000844builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000845{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000846 PyObject *v, *result, *dflt = NULL;
847 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000848
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000849 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
850 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000851
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000852 if (!PyUnicode_Check(name)) {
853 PyErr_SetString(PyExc_TypeError,
854 "getattr(): attribute name must be string");
855 return NULL;
856 }
857 result = PyObject_GetAttr(v, name);
858 if (result == NULL && dflt != NULL &&
859 PyErr_ExceptionMatches(PyExc_AttributeError))
860 {
861 PyErr_Clear();
862 Py_INCREF(dflt);
863 result = dflt;
864 }
865 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000866}
867
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000868PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000869"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000870\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000871Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
872When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000873exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000874
875
Guido van Rossum79f25d91997-04-29 20:08:16 +0000876static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000877builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000878{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000879 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000880
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000881 d = PyEval_GetGlobals();
882 Py_XINCREF(d);
883 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000884}
885
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000886PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000887"globals() -> dictionary\n\
888\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000889Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000890
891
Guido van Rossum79f25d91997-04-29 20:08:16 +0000892static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000893builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000894{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000895 PyObject *v;
896 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000897
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000898 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
899 return NULL;
900 if (!PyUnicode_Check(name)) {
901 PyErr_SetString(PyExc_TypeError,
902 "hasattr(): attribute name must be string");
903 return NULL;
904 }
905 v = PyObject_GetAttr(v, name);
906 if (v == NULL) {
Benjamin Peterson17689992010-08-24 03:26:23 +0000907 if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000908 PyErr_Clear();
Benjamin Peterson17689992010-08-24 03:26:23 +0000909 Py_RETURN_FALSE;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000910 }
Benjamin Peterson17689992010-08-24 03:26:23 +0000911 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000912 }
913 Py_DECREF(v);
Benjamin Peterson17689992010-08-24 03:26:23 +0000914 Py_RETURN_TRUE;
Guido van Rossum33894be1992-01-27 16:53:09 +0000915}
916
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000917PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000918"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000919\n\
920Return whether the object has an attribute with the given name.\n\
Benjamin Peterson17689992010-08-24 03:26:23 +0000921(This is done by calling getattr(object, name) and catching AttributeError.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000922
923
Guido van Rossum79f25d91997-04-29 20:08:16 +0000924static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000925builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000926{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000927 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000928}
929
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000930PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000931"id(object) -> integer\n\
932\n\
933Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000934simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000935
936
Raymond Hettingera6c60372008-03-13 01:26:19 +0000937/* map object ************************************************************/
938
939typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000940 PyObject_HEAD
941 PyObject *iters;
942 PyObject *func;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000943} mapobject;
944
Guido van Rossum79f25d91997-04-29 20:08:16 +0000945static PyObject *
Raymond Hettingera6c60372008-03-13 01:26:19 +0000946map_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000947{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000948 PyObject *it, *iters, *func;
949 mapobject *lz;
950 Py_ssize_t numargs, i;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000951
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000952 if (type == &PyMap_Type && !_PyArg_NoKeywords("map()", kwds))
953 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000954
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000955 numargs = PyTuple_Size(args);
956 if (numargs < 2) {
957 PyErr_SetString(PyExc_TypeError,
958 "map() must have at least two arguments.");
959 return NULL;
960 }
Raymond Hettingera6c60372008-03-13 01:26:19 +0000961
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000962 iters = PyTuple_New(numargs-1);
963 if (iters == NULL)
964 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000965
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000966 for (i=1 ; i<numargs ; i++) {
967 /* Get iterator. */
968 it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
969 if (it == NULL) {
970 Py_DECREF(iters);
971 return NULL;
972 }
973 PyTuple_SET_ITEM(iters, i-1, it);
974 }
Raymond Hettingera6c60372008-03-13 01:26:19 +0000975
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000976 /* create mapobject structure */
977 lz = (mapobject *)type->tp_alloc(type, 0);
978 if (lz == NULL) {
979 Py_DECREF(iters);
980 return NULL;
981 }
982 lz->iters = iters;
983 func = PyTuple_GET_ITEM(args, 0);
984 Py_INCREF(func);
985 lz->func = func;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000986
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000987 return (PyObject *)lz;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000988}
989
990static void
991map_dealloc(mapobject *lz)
992{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000993 PyObject_GC_UnTrack(lz);
994 Py_XDECREF(lz->iters);
995 Py_XDECREF(lz->func);
996 Py_TYPE(lz)->tp_free(lz);
Raymond Hettingera6c60372008-03-13 01:26:19 +0000997}
998
999static int
1000map_traverse(mapobject *lz, visitproc visit, void *arg)
1001{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001002 Py_VISIT(lz->iters);
1003 Py_VISIT(lz->func);
1004 return 0;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001005}
1006
1007static PyObject *
1008map_next(mapobject *lz)
1009{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001010 PyObject *val;
1011 PyObject *argtuple;
1012 PyObject *result;
1013 Py_ssize_t numargs, i;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001014
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001015 numargs = PyTuple_Size(lz->iters);
1016 argtuple = PyTuple_New(numargs);
1017 if (argtuple == NULL)
1018 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001019
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001020 for (i=0 ; i<numargs ; i++) {
1021 val = PyIter_Next(PyTuple_GET_ITEM(lz->iters, i));
1022 if (val == NULL) {
1023 Py_DECREF(argtuple);
1024 return NULL;
1025 }
1026 PyTuple_SET_ITEM(argtuple, i, val);
1027 }
1028 result = PyObject_Call(lz->func, argtuple, NULL);
1029 Py_DECREF(argtuple);
1030 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001031}
1032
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001033PyDoc_STRVAR(map_doc,
Raymond Hettingera6c60372008-03-13 01:26:19 +00001034"map(func, *iterables) --> map object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001035\n\
Raymond Hettingera6c60372008-03-13 01:26:19 +00001036Make an iterator that computes the function using arguments from\n\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001037each of the iterables. Stops when the shortest iterable is exhausted.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001038
Raymond Hettingera6c60372008-03-13 01:26:19 +00001039PyTypeObject PyMap_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001040 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1041 "map", /* tp_name */
1042 sizeof(mapobject), /* tp_basicsize */
1043 0, /* tp_itemsize */
1044 /* methods */
1045 (destructor)map_dealloc, /* tp_dealloc */
1046 0, /* tp_print */
1047 0, /* tp_getattr */
1048 0, /* tp_setattr */
1049 0, /* tp_reserved */
1050 0, /* tp_repr */
1051 0, /* tp_as_number */
1052 0, /* tp_as_sequence */
1053 0, /* tp_as_mapping */
1054 0, /* tp_hash */
1055 0, /* tp_call */
1056 0, /* tp_str */
1057 PyObject_GenericGetAttr, /* tp_getattro */
1058 0, /* tp_setattro */
1059 0, /* tp_as_buffer */
1060 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1061 Py_TPFLAGS_BASETYPE, /* tp_flags */
1062 map_doc, /* tp_doc */
1063 (traverseproc)map_traverse, /* tp_traverse */
1064 0, /* tp_clear */
1065 0, /* tp_richcompare */
1066 0, /* tp_weaklistoffset */
1067 PyObject_SelfIter, /* tp_iter */
1068 (iternextfunc)map_next, /* tp_iternext */
1069 0, /* tp_methods */
1070 0, /* tp_members */
1071 0, /* tp_getset */
1072 0, /* tp_base */
1073 0, /* tp_dict */
1074 0, /* tp_descr_get */
1075 0, /* tp_descr_set */
1076 0, /* tp_dictoffset */
1077 0, /* tp_init */
1078 PyType_GenericAlloc, /* tp_alloc */
1079 map_new, /* tp_new */
1080 PyObject_GC_Del, /* tp_free */
Raymond Hettingera6c60372008-03-13 01:26:19 +00001081};
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001082
Guido van Rossum79f25d91997-04-29 20:08:16 +00001083static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +00001084builtin_next(PyObject *self, PyObject *args)
1085{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001086 PyObject *it, *res;
1087 PyObject *def = NULL;
Georg Brandla18af4e2007-04-21 15:47:16 +00001088
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001089 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1090 return NULL;
1091 if (!PyIter_Check(it)) {
1092 PyErr_Format(PyExc_TypeError,
1093 "%.200s object is not an iterator",
1094 it->ob_type->tp_name);
1095 return NULL;
1096 }
1097
1098 res = (*it->ob_type->tp_iternext)(it);
1099 if (res != NULL) {
1100 return res;
1101 } else if (def != NULL) {
1102 if (PyErr_Occurred()) {
1103 if(!PyErr_ExceptionMatches(PyExc_StopIteration))
1104 return NULL;
1105 PyErr_Clear();
1106 }
1107 Py_INCREF(def);
1108 return def;
1109 } else if (PyErr_Occurred()) {
1110 return NULL;
1111 } else {
1112 PyErr_SetNone(PyExc_StopIteration);
1113 return NULL;
1114 }
Georg Brandla18af4e2007-04-21 15:47:16 +00001115}
1116
1117PyDoc_STRVAR(next_doc,
1118"next(iterator[, default])\n\
1119\n\
1120Return the next item from the iterator. If default is given and the iterator\n\
1121is exhausted, it is returned instead of raising StopIteration.");
1122
1123
1124static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001125builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001126{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001127 PyObject *v;
1128 PyObject *name;
1129 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001130
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001131 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
1132 return NULL;
1133 if (PyObject_SetAttr(v, name, value) != 0)
1134 return NULL;
1135 Py_INCREF(Py_None);
1136 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001137}
1138
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001139PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001140"setattr(object, name, value)\n\
1141\n\
1142Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001143``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001144
1145
Guido van Rossum79f25d91997-04-29 20:08:16 +00001146static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001147builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001148{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001149 PyObject *v;
1150 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001151
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001152 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
1153 return NULL;
1154 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
1155 return NULL;
1156 Py_INCREF(Py_None);
1157 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001158}
1159
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001160PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001161"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001162\n\
1163Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001164``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001165
1166
Guido van Rossum79f25d91997-04-29 20:08:16 +00001167static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001168builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001169{
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001170 Py_hash_t x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001171
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001172 x = PyObject_Hash(v);
1173 if (x == -1)
1174 return NULL;
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001175 return PyLong_FromSsize_t(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001176}
1177
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001178PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001179"hash(object) -> integer\n\
1180\n\
1181Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001182the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001183
1184
Guido van Rossum79f25d91997-04-29 20:08:16 +00001185static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001186builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001187{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001188 return PyNumber_ToBase(v, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001189}
1190
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001191PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001192"hex(number) -> string\n\
1193\n\
Alexander Belopolsky12338ab2011-04-07 00:15:33 -04001194Return the hexadecimal representation of an integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001195
1196
Guido van Rossum79f25d91997-04-29 20:08:16 +00001197static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001198builtin_iter(PyObject *self, PyObject *args)
1199{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001200 PyObject *v, *w = NULL;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001201
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001202 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
1203 return NULL;
1204 if (w == NULL)
1205 return PyObject_GetIter(v);
1206 if (!PyCallable_Check(v)) {
1207 PyErr_SetString(PyExc_TypeError,
1208 "iter(v, w): v must be callable");
1209 return NULL;
1210 }
1211 return PyCallIter_New(v, w);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001212}
1213
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001214PyDoc_STRVAR(iter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001215"iter(iterable) -> iterator\n\
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001216iter(callable, sentinel) -> iterator\n\
1217\n\
1218Get an iterator from an object. In the first form, the argument must\n\
1219supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001220In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001221
1222
1223static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001224builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001225{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001226 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001227
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001228 res = PyObject_Size(v);
1229 if (res < 0 && PyErr_Occurred())
1230 return NULL;
1231 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001232}
1233
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001234PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001235"len(object) -> integer\n\
1236\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001237Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001238
1239
Guido van Rossum79f25d91997-04-29 20:08:16 +00001240static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001241builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001242{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001243 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001244
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001245 d = PyEval_GetLocals();
1246 Py_XINCREF(d);
1247 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001248}
1249
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001250PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001251"locals() -> dictionary\n\
1252\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001253Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001254
1255
Guido van Rossum79f25d91997-04-29 20:08:16 +00001256static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001257min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001258{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001259 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
1260 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001261
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001262 if (PyTuple_Size(args) > 1)
1263 v = args;
1264 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
1265 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001266
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001267 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1268 keyfunc = PyDict_GetItemString(kwds, "key");
1269 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
1270 PyErr_Format(PyExc_TypeError,
1271 "%s() got an unexpected keyword argument", name);
1272 return NULL;
1273 }
1274 Py_INCREF(keyfunc);
1275 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001276
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001277 it = PyObject_GetIter(v);
1278 if (it == NULL) {
1279 Py_XDECREF(keyfunc);
1280 return NULL;
1281 }
Tim Petersc3074532001-05-03 07:00:32 +00001282
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001283 maxitem = NULL; /* the result */
1284 maxval = NULL; /* the value associated with the result */
1285 while (( item = PyIter_Next(it) )) {
1286 /* get the value from the key function */
1287 if (keyfunc != NULL) {
1288 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1289 if (val == NULL)
1290 goto Fail_it_item;
1291 }
1292 /* no key function; the value is the item */
1293 else {
1294 val = item;
1295 Py_INCREF(val);
1296 }
Tim Petersc3074532001-05-03 07:00:32 +00001297
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001298 /* maximum value and item are unset; set them */
1299 if (maxval == NULL) {
1300 maxitem = item;
1301 maxval = val;
1302 }
1303 /* maximum value and item are set; update them as necessary */
1304 else {
1305 int cmp = PyObject_RichCompareBool(val, maxval, op);
1306 if (cmp < 0)
1307 goto Fail_it_item_and_val;
1308 else if (cmp > 0) {
1309 Py_DECREF(maxval);
1310 Py_DECREF(maxitem);
1311 maxval = val;
1312 maxitem = item;
1313 }
1314 else {
1315 Py_DECREF(item);
1316 Py_DECREF(val);
1317 }
1318 }
1319 }
1320 if (PyErr_Occurred())
1321 goto Fail_it;
1322 if (maxval == NULL) {
1323 PyErr_Format(PyExc_ValueError,
1324 "%s() arg is an empty sequence", name);
1325 assert(maxitem == NULL);
1326 }
1327 else
1328 Py_DECREF(maxval);
1329 Py_DECREF(it);
1330 Py_XDECREF(keyfunc);
1331 return maxitem;
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001332
1333Fail_it_item_and_val:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001334 Py_DECREF(val);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001335Fail_it_item:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001336 Py_DECREF(item);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001337Fail_it:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001338 Py_XDECREF(maxval);
1339 Py_XDECREF(maxitem);
1340 Py_DECREF(it);
1341 Py_XDECREF(keyfunc);
1342 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001343}
1344
Guido van Rossum79f25d91997-04-29 20:08:16 +00001345static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001346builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001347{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001348 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001349}
1350
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001351PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001352"min(iterable[, key=func]) -> value\n\
1353min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001354\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001355With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001356With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001357
1358
Guido van Rossum79f25d91997-04-29 20:08:16 +00001359static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001360builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001361{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001362 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001363}
1364
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001365PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001366"max(iterable[, key=func]) -> value\n\
1367max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001368\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001369With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001370With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001371
1372
Guido van Rossum79f25d91997-04-29 20:08:16 +00001373static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001374builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001375{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001376 return PyNumber_ToBase(v, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001377}
1378
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001379PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001380"oct(number) -> string\n\
1381\n\
Alexander Belopolsky12338ab2011-04-07 00:15:33 -04001382Return the octal representation of an integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001383
1384
Guido van Rossum79f25d91997-04-29 20:08:16 +00001385static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001386builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001387{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001388 long ord;
1389 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001390
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001391 if (PyBytes_Check(obj)) {
1392 size = PyBytes_GET_SIZE(obj);
1393 if (size == 1) {
1394 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
1395 return PyLong_FromLong(ord);
1396 }
1397 }
1398 else if (PyUnicode_Check(obj)) {
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001399 if (PyUnicode_READY(obj) == -1)
1400 return NULL;
1401 size = PyUnicode_GET_LENGTH(obj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001402 if (size == 1) {
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001403 ord = (long)PyUnicode_READ_CHAR(obj, 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001404 return PyLong_FromLong(ord);
1405 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001406 }
1407 else if (PyByteArray_Check(obj)) {
1408 /* XXX Hopefully this is temporary */
1409 size = PyByteArray_GET_SIZE(obj);
1410 if (size == 1) {
1411 ord = (long)((unsigned char)*PyByteArray_AS_STRING(obj));
1412 return PyLong_FromLong(ord);
1413 }
1414 }
1415 else {
1416 PyErr_Format(PyExc_TypeError,
1417 "ord() expected string of length 1, but " \
1418 "%.200s found", obj->ob_type->tp_name);
1419 return NULL;
1420 }
Guido van Rossum09095f32000-03-10 23:00:52 +00001421
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001422 PyErr_Format(PyExc_TypeError,
1423 "ord() expected a character, "
1424 "but string of length %zd found",
1425 size);
1426 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001427}
1428
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001429PyDoc_VAR(ord_doc) = PyDoc_STR(
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001430"ord(c) -> integer\n\
1431\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001432Return the integer ordinal of a one-character string."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001433)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001434#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001435PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001436"\nA valid surrogate pair is also accepted."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001437)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001438#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001439;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001440
1441
Guido van Rossum79f25d91997-04-29 20:08:16 +00001442static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001443builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001444{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001445 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001446
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001447 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
1448 return NULL;
1449 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001450}
1451
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001452PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001453"pow(x, y[, z]) -> number\n\
1454\n\
1455With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001456equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001457
1458
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001459
Guido van Rossum34343512006-11-30 22:13:52 +00001460static PyObject *
1461builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1462{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001463 static char *kwlist[] = {"sep", "end", "file", 0};
1464 static PyObject *dummy_args;
1465 PyObject *sep = NULL, *end = NULL, *file = NULL;
1466 int i, err;
Guido van Rossum34343512006-11-30 22:13:52 +00001467
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001468 if (dummy_args == NULL) {
1469 if (!(dummy_args = PyTuple_New(0)))
1470 return NULL;
1471 }
1472 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
1473 kwlist, &sep, &end, &file))
1474 return NULL;
1475 if (file == NULL || file == Py_None) {
1476 file = PySys_GetObject("stdout");
1477 /* sys.stdout may be None when FILE* stdout isn't connected */
1478 if (file == Py_None)
1479 Py_RETURN_NONE;
1480 }
Guido van Rossum34343512006-11-30 22:13:52 +00001481
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001482 if (sep == Py_None) {
1483 sep = NULL;
1484 }
1485 else if (sep && !PyUnicode_Check(sep)) {
1486 PyErr_Format(PyExc_TypeError,
1487 "sep must be None or a string, not %.200s",
1488 sep->ob_type->tp_name);
1489 return NULL;
1490 }
1491 if (end == Py_None) {
1492 end = NULL;
1493 }
1494 else if (end && !PyUnicode_Check(end)) {
1495 PyErr_Format(PyExc_TypeError,
1496 "end must be None or a string, not %.200s",
1497 end->ob_type->tp_name);
1498 return NULL;
1499 }
Guido van Rossum34343512006-11-30 22:13:52 +00001500
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001501 for (i = 0; i < PyTuple_Size(args); i++) {
1502 if (i > 0) {
1503 if (sep == NULL)
1504 err = PyFile_WriteString(" ", file);
1505 else
1506 err = PyFile_WriteObject(sep, file,
1507 Py_PRINT_RAW);
1508 if (err)
1509 return NULL;
1510 }
1511 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1512 Py_PRINT_RAW);
1513 if (err)
1514 return NULL;
1515 }
Guido van Rossum34343512006-11-30 22:13:52 +00001516
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001517 if (end == NULL)
1518 err = PyFile_WriteString("\n", file);
1519 else
1520 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1521 if (err)
1522 return NULL;
Guido van Rossum34343512006-11-30 22:13:52 +00001523
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001524 Py_RETURN_NONE;
Guido van Rossum34343512006-11-30 22:13:52 +00001525}
1526
1527PyDoc_STRVAR(print_doc,
Georg Brandlcd5da7d2008-02-01 15:47:37 +00001528"print(value, ..., sep=' ', end='\\n', file=sys.stdout)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001529\n\
1530Prints the values to a stream, or to sys.stdout by default.\n\
1531Optional keyword arguments:\n\
1532file: a file-like object (stream); defaults to the current sys.stdout.\n\
1533sep: string inserted between values, default a space.\n\
1534end: string appended after the last value, default a newline.");
1535
1536
Guido van Rossuma88a0332007-02-26 16:59:55 +00001537static PyObject *
1538builtin_input(PyObject *self, PyObject *args)
1539{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001540 PyObject *promptarg = NULL;
1541 PyObject *fin = PySys_GetObject("stdin");
1542 PyObject *fout = PySys_GetObject("stdout");
1543 PyObject *ferr = PySys_GetObject("stderr");
1544 PyObject *tmp;
1545 long fd;
1546 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001547
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001548 /* Parse arguments */
1549 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg))
1550 return NULL;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001551
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001552 /* Check that stdin/out/err are intact */
1553 if (fin == NULL || fin == Py_None) {
1554 PyErr_SetString(PyExc_RuntimeError,
1555 "input(): lost sys.stdin");
1556 return NULL;
1557 }
1558 if (fout == NULL || fout == Py_None) {
1559 PyErr_SetString(PyExc_RuntimeError,
1560 "input(): lost sys.stdout");
1561 return NULL;
1562 }
1563 if (ferr == NULL || ferr == Py_None) {
1564 PyErr_SetString(PyExc_RuntimeError,
1565 "input(): lost sys.stderr");
1566 return NULL;
1567 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001568
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001569 /* First of all, flush stderr */
1570 tmp = PyObject_CallMethod(ferr, "flush", "");
1571 if (tmp == NULL)
1572 PyErr_Clear();
1573 else
1574 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001575
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001576 /* We should only use (GNU) readline if Python's sys.stdin and
1577 sys.stdout are the same as C's stdin and stdout, because we
1578 need to pass it those. */
1579 tmp = PyObject_CallMethod(fin, "fileno", "");
1580 if (tmp == NULL) {
1581 PyErr_Clear();
1582 tty = 0;
1583 }
1584 else {
1585 fd = PyLong_AsLong(tmp);
1586 Py_DECREF(tmp);
1587 if (fd < 0 && PyErr_Occurred())
1588 return NULL;
1589 tty = fd == fileno(stdin) && isatty(fd);
1590 }
1591 if (tty) {
1592 tmp = PyObject_CallMethod(fout, "fileno", "");
1593 if (tmp == NULL)
1594 PyErr_Clear();
1595 else {
1596 fd = PyLong_AsLong(tmp);
1597 Py_DECREF(tmp);
1598 if (fd < 0 && PyErr_Occurred())
1599 return NULL;
1600 tty = fd == fileno(stdout) && isatty(fd);
1601 }
1602 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001603
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001604 /* If we're interactive, use (GNU) readline */
1605 if (tty) {
1606 PyObject *po;
1607 char *prompt;
1608 char *s;
1609 PyObject *stdin_encoding;
Victor Stinner306f0102010-05-19 01:06:22 +00001610 char *stdin_encoding_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001611 PyObject *result;
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001612 size_t len;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001613
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001614 stdin_encoding = PyObject_GetAttrString(fin, "encoding");
1615 if (!stdin_encoding)
1616 /* stdin is a text stream, so it must have an
1617 encoding. */
1618 return NULL;
Victor Stinner306f0102010-05-19 01:06:22 +00001619 stdin_encoding_str = _PyUnicode_AsString(stdin_encoding);
1620 if (stdin_encoding_str == NULL) {
1621 Py_DECREF(stdin_encoding);
1622 return NULL;
1623 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001624 tmp = PyObject_CallMethod(fout, "flush", "");
1625 if (tmp == NULL)
1626 PyErr_Clear();
1627 else
1628 Py_DECREF(tmp);
1629 if (promptarg != NULL) {
1630 PyObject *stringpo;
1631 PyObject *stdout_encoding;
Victor Stinner306f0102010-05-19 01:06:22 +00001632 char *stdout_encoding_str;
1633 stdout_encoding = PyObject_GetAttrString(fout, "encoding");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001634 if (stdout_encoding == NULL) {
1635 Py_DECREF(stdin_encoding);
1636 return NULL;
1637 }
Victor Stinner306f0102010-05-19 01:06:22 +00001638 stdout_encoding_str = _PyUnicode_AsString(stdout_encoding);
1639 if (stdout_encoding_str == NULL) {
1640 Py_DECREF(stdin_encoding);
1641 Py_DECREF(stdout_encoding);
1642 return NULL;
1643 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001644 stringpo = PyObject_Str(promptarg);
1645 if (stringpo == NULL) {
1646 Py_DECREF(stdin_encoding);
1647 Py_DECREF(stdout_encoding);
1648 return NULL;
1649 }
1650 po = PyUnicode_AsEncodedString(stringpo,
Victor Stinner306f0102010-05-19 01:06:22 +00001651 stdout_encoding_str, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001652 Py_DECREF(stdout_encoding);
1653 Py_DECREF(stringpo);
1654 if (po == NULL) {
1655 Py_DECREF(stdin_encoding);
1656 return NULL;
1657 }
1658 prompt = PyBytes_AsString(po);
1659 if (prompt == NULL) {
1660 Py_DECREF(stdin_encoding);
1661 Py_DECREF(po);
1662 return NULL;
1663 }
1664 }
1665 else {
1666 po = NULL;
1667 prompt = "";
1668 }
1669 s = PyOS_Readline(stdin, stdout, prompt);
1670 Py_XDECREF(po);
1671 if (s == NULL) {
1672 if (!PyErr_Occurred())
1673 PyErr_SetNone(PyExc_KeyboardInterrupt);
1674 Py_DECREF(stdin_encoding);
1675 return NULL;
1676 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001677
1678 len = strlen(s);
1679 if (len == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001680 PyErr_SetNone(PyExc_EOFError);
1681 result = NULL;
1682 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001683 else {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001684 if (len > PY_SSIZE_T_MAX) {
1685 PyErr_SetString(PyExc_OverflowError,
1686 "input: input too long");
1687 result = NULL;
1688 }
1689 else {
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001690 len--; /* strip trailing '\n' */
1691 if (len != 0 && s[len-1] == '\r')
1692 len--; /* strip trailing '\r' */
1693 result = PyUnicode_Decode(s, len, stdin_encoding_str, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001694 }
1695 }
1696 Py_DECREF(stdin_encoding);
1697 PyMem_FREE(s);
1698 return result;
1699 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001700
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001701 /* Fallback if we're not interactive */
1702 if (promptarg != NULL) {
1703 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0)
1704 return NULL;
1705 }
1706 tmp = PyObject_CallMethod(fout, "flush", "");
1707 if (tmp == NULL)
1708 PyErr_Clear();
1709 else
1710 Py_DECREF(tmp);
1711 return PyFile_GetLine(fin, -1);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001712}
1713
1714PyDoc_STRVAR(input_doc,
1715"input([prompt]) -> string\n\
1716\n\
1717Read a string from standard input. The trailing newline is stripped.\n\
1718If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1719On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1720is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001721
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001722
Guido van Rossum79f25d91997-04-29 20:08:16 +00001723static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001724builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001725{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001726 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001727}
1728
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001729PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001730"repr(object) -> string\n\
1731\n\
1732Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001733For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001734
1735
Guido van Rossum79f25d91997-04-29 20:08:16 +00001736static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001737builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001738{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001739 static PyObject *round_str = NULL;
1740 PyObject *ndigits = NULL;
1741 static char *kwlist[] = {"number", "ndigits", 0};
1742 PyObject *number, *round;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001743
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001744 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:round",
1745 kwlist, &number, &ndigits))
1746 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00001747
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001748 if (Py_TYPE(number)->tp_dict == NULL) {
1749 if (PyType_Ready(Py_TYPE(number)) < 0)
1750 return NULL;
1751 }
Guido van Rossum15d3d042007-08-24 02:02:45 +00001752
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001753 if (round_str == NULL) {
1754 round_str = PyUnicode_InternFromString("__round__");
1755 if (round_str == NULL)
1756 return NULL;
1757 }
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001758
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001759 round = _PyType_Lookup(Py_TYPE(number), round_str);
1760 if (round == NULL) {
1761 PyErr_Format(PyExc_TypeError,
1762 "type %.100s doesn't define __round__ method",
1763 Py_TYPE(number)->tp_name);
1764 return NULL;
1765 }
Alex Martelliae211f92007-08-22 23:21:33 +00001766
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001767 if (ndigits == NULL)
1768 return PyObject_CallFunction(round, "O", number);
1769 else
1770 return PyObject_CallFunction(round, "OO", number, ndigits);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001771}
1772
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001773PyDoc_STRVAR(round_doc,
Mark Dickinson1124e712009-01-28 21:25:58 +00001774"round(number[, ndigits]) -> number\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001775\n\
1776Round a number to a given precision in decimal digits (default 0 digits).\n\
Mark Dickinson0d748c22008-07-05 11:29:03 +00001777This returns an int when called with one argument, otherwise the\n\
Georg Brandl809ddaa2008-07-01 20:39:59 +00001778same type as the number. ndigits may be negative.");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001779
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001780
Raymond Hettinger64958a12003-12-17 20:43:33 +00001781static PyObject *
1782builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1783{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001784 PyObject *newlist, *v, *seq, *keyfunc=NULL, *newargs;
1785 PyObject *callable;
1786 static char *kwlist[] = {"iterable", "key", "reverse", 0};
1787 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001788
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001789 /* args 1-3 should match listsort in Objects/listobject.c */
1790 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted",
1791 kwlist, &seq, &keyfunc, &reverse))
1792 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001793
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001794 newlist = PySequence_List(seq);
1795 if (newlist == NULL)
1796 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001797
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001798 callable = PyObject_GetAttrString(newlist, "sort");
1799 if (callable == NULL) {
1800 Py_DECREF(newlist);
1801 return NULL;
1802 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001803
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001804 newargs = PyTuple_GetSlice(args, 1, 4);
1805 if (newargs == NULL) {
1806 Py_DECREF(newlist);
1807 Py_DECREF(callable);
1808 return NULL;
1809 }
Raymond Hettinger64958a12003-12-17 20:43:33 +00001810
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001811 v = PyObject_Call(callable, newargs, kwds);
1812 Py_DECREF(newargs);
1813 Py_DECREF(callable);
1814 if (v == NULL) {
1815 Py_DECREF(newlist);
1816 return NULL;
1817 }
1818 Py_DECREF(v);
1819 return newlist;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001820}
1821
1822PyDoc_STRVAR(sorted_doc,
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001823"sorted(iterable, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001824
Guido van Rossum79f25d91997-04-29 20:08:16 +00001825static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001826builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001827{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001828 PyObject *v = NULL;
1829 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001830
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001831 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
1832 return NULL;
1833 if (v == NULL) {
1834 d = PyEval_GetLocals();
1835 if (d == NULL) {
1836 if (!PyErr_Occurred())
1837 PyErr_SetString(PyExc_SystemError,
1838 "vars(): no locals!?");
1839 }
1840 else
1841 Py_INCREF(d);
1842 }
1843 else {
1844 d = PyObject_GetAttrString(v, "__dict__");
1845 if (d == NULL) {
1846 PyErr_SetString(PyExc_TypeError,
1847 "vars() argument must have __dict__ attribute");
1848 return NULL;
1849 }
1850 }
1851 return d;
Guido van Rossum2d951851994-08-29 12:52:16 +00001852}
1853
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001854PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001855"vars([object]) -> dictionary\n\
1856\n\
1857Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001858With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001859
Alex Martellia70b1912003-04-22 08:12:33 +00001860static PyObject*
1861builtin_sum(PyObject *self, PyObject *args)
1862{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001863 PyObject *seq;
1864 PyObject *result = NULL;
1865 PyObject *temp, *item, *iter;
Alex Martellia70b1912003-04-22 08:12:33 +00001866
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001867 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
1868 return NULL;
Alex Martellia70b1912003-04-22 08:12:33 +00001869
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001870 iter = PyObject_GetIter(seq);
1871 if (iter == NULL)
1872 return NULL;
Alex Martellia70b1912003-04-22 08:12:33 +00001873
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001874 if (result == NULL) {
1875 result = PyLong_FromLong(0);
1876 if (result == NULL) {
1877 Py_DECREF(iter);
1878 return NULL;
1879 }
1880 } else {
1881 /* reject string values for 'start' parameter */
1882 if (PyUnicode_Check(result)) {
1883 PyErr_SetString(PyExc_TypeError,
1884 "sum() can't sum strings [use ''.join(seq) instead]");
1885 Py_DECREF(iter);
1886 return NULL;
1887 }
Benjamin Petersonce071ca2011-07-29 14:23:47 -05001888 if (PyBytes_Check(result)) {
1889 PyErr_SetString(PyExc_TypeError,
1890 "sum() can't sum bytes [use b''.join(seq) instead]");
Benjamin Peterson405f32c2011-07-29 22:43:45 -05001891 Py_DECREF(iter);
Benjamin Petersonce071ca2011-07-29 14:23:47 -05001892 return NULL;
1893 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001894 if (PyByteArray_Check(result)) {
1895 PyErr_SetString(PyExc_TypeError,
Benjamin Peterson4f921c22011-07-29 14:24:29 -05001896 "sum() can't sum bytearray [use b''.join(seq) instead]");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001897 Py_DECREF(iter);
1898 return NULL;
1899 }
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001900
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001901 Py_INCREF(result);
1902 }
Alex Martellia70b1912003-04-22 08:12:33 +00001903
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001904#ifndef SLOW_SUM
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001905 /* Fast addition by keeping temporary sums in C instead of new Python objects.
1906 Assumes all inputs are the same type. If the assumption fails, default
1907 to the more general routine.
1908 */
1909 if (PyLong_CheckExact(result)) {
1910 int overflow;
1911 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
1912 /* If this already overflowed, don't even enter the loop. */
1913 if (overflow == 0) {
1914 Py_DECREF(result);
1915 result = NULL;
1916 }
1917 while(result == NULL) {
1918 item = PyIter_Next(iter);
1919 if (item == NULL) {
1920 Py_DECREF(iter);
1921 if (PyErr_Occurred())
1922 return NULL;
1923 return PyLong_FromLong(i_result);
1924 }
1925 if (PyLong_CheckExact(item)) {
1926 long b = PyLong_AsLongAndOverflow(item, &overflow);
1927 long x = i_result + b;
1928 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
1929 i_result = x;
1930 Py_DECREF(item);
1931 continue;
1932 }
1933 }
1934 /* Either overflowed or is not an int. Restore real objects and process normally */
1935 result = PyLong_FromLong(i_result);
1936 temp = PyNumber_Add(result, item);
1937 Py_DECREF(result);
1938 Py_DECREF(item);
1939 result = temp;
1940 if (result == NULL) {
1941 Py_DECREF(iter);
1942 return NULL;
1943 }
1944 }
1945 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001946
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001947 if (PyFloat_CheckExact(result)) {
1948 double f_result = PyFloat_AS_DOUBLE(result);
1949 Py_DECREF(result);
1950 result = NULL;
1951 while(result == NULL) {
1952 item = PyIter_Next(iter);
1953 if (item == NULL) {
1954 Py_DECREF(iter);
1955 if (PyErr_Occurred())
1956 return NULL;
1957 return PyFloat_FromDouble(f_result);
1958 }
1959 if (PyFloat_CheckExact(item)) {
1960 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
1961 f_result += PyFloat_AS_DOUBLE(item);
1962 PyFPE_END_PROTECT(f_result)
1963 Py_DECREF(item);
1964 continue;
1965 }
1966 if (PyLong_CheckExact(item)) {
1967 long value;
1968 int overflow;
1969 value = PyLong_AsLongAndOverflow(item, &overflow);
1970 if (!overflow) {
1971 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
1972 f_result += (double)value;
1973 PyFPE_END_PROTECT(f_result)
1974 Py_DECREF(item);
1975 continue;
1976 }
1977 }
1978 result = PyFloat_FromDouble(f_result);
1979 temp = PyNumber_Add(result, item);
1980 Py_DECREF(result);
1981 Py_DECREF(item);
1982 result = temp;
1983 if (result == NULL) {
1984 Py_DECREF(iter);
1985 return NULL;
1986 }
1987 }
1988 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001989#endif
1990
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001991 for(;;) {
1992 item = PyIter_Next(iter);
1993 if (item == NULL) {
1994 /* error, or end-of-sequence */
1995 if (PyErr_Occurred()) {
1996 Py_DECREF(result);
1997 result = NULL;
1998 }
1999 break;
2000 }
2001 /* It's tempting to use PyNumber_InPlaceAdd instead of
2002 PyNumber_Add here, to avoid quadratic running time
2003 when doing 'sum(list_of_lists, [])'. However, this
2004 would produce a change in behaviour: a snippet like
Mark Dickinson9acadc52009-10-26 14:19:42 +00002005
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002006 empty = []
2007 sum([[x] for x in range(10)], empty)
Mark Dickinson9acadc52009-10-26 14:19:42 +00002008
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002009 would change the value of empty. */
2010 temp = PyNumber_Add(result, item);
2011 Py_DECREF(result);
2012 Py_DECREF(item);
2013 result = temp;
2014 if (result == NULL)
2015 break;
2016 }
2017 Py_DECREF(iter);
2018 return result;
Alex Martellia70b1912003-04-22 08:12:33 +00002019}
2020
2021PyDoc_STRVAR(sum_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00002022"sum(iterable[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00002023\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +00002024Returns the sum of an iterable of numbers (NOT strings) plus the value\n\
2025of parameter 'start' (which defaults to 0). When the iterable is\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00002026empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00002027
2028
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002029static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002030builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002031{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002032 PyObject *inst;
2033 PyObject *cls;
2034 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002035
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002036 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
2037 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002038
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002039 retval = PyObject_IsInstance(inst, cls);
2040 if (retval < 0)
2041 return NULL;
2042 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002043}
2044
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002045PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002046"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002047\n\
2048Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002049With a type as second argument, return whether that is the object's type.\n\
2050The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002051isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002052
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002053
2054static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002055builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002056{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002057 PyObject *derived;
2058 PyObject *cls;
2059 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002060
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002061 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
2062 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002063
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002064 retval = PyObject_IsSubclass(derived, cls);
2065 if (retval < 0)
2066 return NULL;
2067 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002068}
2069
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002070PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002071"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002072\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002073Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2074When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2075is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002076
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002077
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002078typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002079 PyObject_HEAD
2080 Py_ssize_t tuplesize;
2081 PyObject *ittuple; /* tuple of iterators */
2082 PyObject *result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002083} zipobject;
2084
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002085static PyObject *
2086zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002087{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002088 zipobject *lz;
2089 Py_ssize_t i;
2090 PyObject *ittuple; /* tuple of iterators */
2091 PyObject *result;
2092 Py_ssize_t tuplesize = PySequence_Length(args);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002093
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002094 if (type == &PyZip_Type && !_PyArg_NoKeywords("zip()", kwds))
2095 return NULL;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002096
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002097 /* args must be a tuple */
2098 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00002099
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002100 /* obtain iterators */
2101 ittuple = PyTuple_New(tuplesize);
2102 if (ittuple == NULL)
2103 return NULL;
2104 for (i=0; i < tuplesize; ++i) {
2105 PyObject *item = PyTuple_GET_ITEM(args, i);
2106 PyObject *it = PyObject_GetIter(item);
2107 if (it == NULL) {
2108 if (PyErr_ExceptionMatches(PyExc_TypeError))
2109 PyErr_Format(PyExc_TypeError,
2110 "zip argument #%zd must support iteration",
2111 i+1);
2112 Py_DECREF(ittuple);
2113 return NULL;
2114 }
2115 PyTuple_SET_ITEM(ittuple, i, it);
2116 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002117
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002118 /* create a result holder */
2119 result = PyTuple_New(tuplesize);
2120 if (result == NULL) {
2121 Py_DECREF(ittuple);
2122 return NULL;
2123 }
2124 for (i=0 ; i < tuplesize ; i++) {
2125 Py_INCREF(Py_None);
2126 PyTuple_SET_ITEM(result, i, Py_None);
2127 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002128
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002129 /* create zipobject structure */
2130 lz = (zipobject *)type->tp_alloc(type, 0);
2131 if (lz == NULL) {
2132 Py_DECREF(ittuple);
2133 Py_DECREF(result);
2134 return NULL;
2135 }
2136 lz->ittuple = ittuple;
2137 lz->tuplesize = tuplesize;
2138 lz->result = result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002139
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002140 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002141}
2142
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002143static void
2144zip_dealloc(zipobject *lz)
2145{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002146 PyObject_GC_UnTrack(lz);
2147 Py_XDECREF(lz->ittuple);
2148 Py_XDECREF(lz->result);
2149 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002150}
2151
2152static int
2153zip_traverse(zipobject *lz, visitproc visit, void *arg)
2154{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002155 Py_VISIT(lz->ittuple);
2156 Py_VISIT(lz->result);
2157 return 0;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002158}
2159
2160static PyObject *
2161zip_next(zipobject *lz)
2162{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002163 Py_ssize_t i;
2164 Py_ssize_t tuplesize = lz->tuplesize;
2165 PyObject *result = lz->result;
2166 PyObject *it;
2167 PyObject *item;
2168 PyObject *olditem;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002169
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002170 if (tuplesize == 0)
2171 return NULL;
2172 if (Py_REFCNT(result) == 1) {
2173 Py_INCREF(result);
2174 for (i=0 ; i < tuplesize ; i++) {
2175 it = PyTuple_GET_ITEM(lz->ittuple, i);
2176 item = (*Py_TYPE(it)->tp_iternext)(it);
2177 if (item == NULL) {
2178 Py_DECREF(result);
2179 return NULL;
2180 }
2181 olditem = PyTuple_GET_ITEM(result, i);
2182 PyTuple_SET_ITEM(result, i, item);
2183 Py_DECREF(olditem);
2184 }
2185 } else {
2186 result = PyTuple_New(tuplesize);
2187 if (result == NULL)
2188 return NULL;
2189 for (i=0 ; i < tuplesize ; i++) {
2190 it = PyTuple_GET_ITEM(lz->ittuple, i);
2191 item = (*Py_TYPE(it)->tp_iternext)(it);
2192 if (item == NULL) {
2193 Py_DECREF(result);
2194 return NULL;
2195 }
2196 PyTuple_SET_ITEM(result, i, item);
2197 }
2198 }
2199 return result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002200}
Barry Warsawbd599b52000-08-03 15:45:29 +00002201
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002202PyDoc_STRVAR(zip_doc,
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002203"zip(iter1 [,iter2 [...]]) --> zip object\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002204\n\
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002205Return a zip object whose .__next__() method returns a tuple where\n\
2206the i-th element comes from the i-th iterable argument. The .__next__()\n\
2207method continues until the shortest iterable in the argument sequence\n\
Georg Brandlced51db2008-12-04 18:28:38 +00002208is exhausted and then it raises StopIteration.");
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002209
2210PyTypeObject PyZip_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002211 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2212 "zip", /* tp_name */
2213 sizeof(zipobject), /* tp_basicsize */
2214 0, /* tp_itemsize */
2215 /* methods */
2216 (destructor)zip_dealloc, /* tp_dealloc */
2217 0, /* tp_print */
2218 0, /* tp_getattr */
2219 0, /* tp_setattr */
2220 0, /* tp_reserved */
2221 0, /* tp_repr */
2222 0, /* tp_as_number */
2223 0, /* tp_as_sequence */
2224 0, /* tp_as_mapping */
2225 0, /* tp_hash */
2226 0, /* tp_call */
2227 0, /* tp_str */
2228 PyObject_GenericGetAttr, /* tp_getattro */
2229 0, /* tp_setattro */
2230 0, /* tp_as_buffer */
2231 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2232 Py_TPFLAGS_BASETYPE, /* tp_flags */
2233 zip_doc, /* tp_doc */
2234 (traverseproc)zip_traverse, /* tp_traverse */
2235 0, /* tp_clear */
2236 0, /* tp_richcompare */
2237 0, /* tp_weaklistoffset */
2238 PyObject_SelfIter, /* tp_iter */
2239 (iternextfunc)zip_next, /* tp_iternext */
2240 0, /* tp_methods */
2241 0, /* tp_members */
2242 0, /* tp_getset */
2243 0, /* tp_base */
2244 0, /* tp_dict */
2245 0, /* tp_descr_get */
2246 0, /* tp_descr_set */
2247 0, /* tp_dictoffset */
2248 0, /* tp_init */
2249 PyType_GenericAlloc, /* tp_alloc */
2250 zip_new, /* tp_new */
2251 PyObject_GC_Del, /* tp_free */
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002252};
Barry Warsawbd599b52000-08-03 15:45:29 +00002253
2254
Guido van Rossum79f25d91997-04-29 20:08:16 +00002255static PyMethodDef builtin_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002256 {"__build_class__", (PyCFunction)builtin___build_class__,
2257 METH_VARARGS | METH_KEYWORDS, build_class_doc},
2258 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
2259 {"abs", builtin_abs, METH_O, abs_doc},
2260 {"all", builtin_all, METH_O, all_doc},
2261 {"any", builtin_any, METH_O, any_doc},
2262 {"ascii", builtin_ascii, METH_O, ascii_doc},
2263 {"bin", builtin_bin, METH_O, bin_doc},
Antoine Pitroue71362d2010-11-27 22:00:11 +00002264 {"callable", builtin_callable, METH_O, callable_doc},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002265 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2266 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
2267 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2268 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2269 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2270 {"eval", builtin_eval, METH_VARARGS, eval_doc},
2271 {"exec", builtin_exec, METH_VARARGS, exec_doc},
2272 {"format", builtin_format, METH_VARARGS, format_doc},
2273 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2274 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2275 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2276 {"hash", builtin_hash, METH_O, hash_doc},
2277 {"hex", builtin_hex, METH_O, hex_doc},
2278 {"id", builtin_id, METH_O, id_doc},
2279 {"input", builtin_input, METH_VARARGS, input_doc},
2280 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2281 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2282 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2283 {"len", builtin_len, METH_O, len_doc},
2284 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2285 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2286 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
2287 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
2288 {"oct", builtin_oct, METH_O, oct_doc},
2289 {"ord", builtin_ord, METH_O, ord_doc},
2290 {"pow", builtin_pow, METH_VARARGS, pow_doc},
2291 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
2292 {"repr", builtin_repr, METH_O, repr_doc},
2293 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
2294 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
2295 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
2296 {"sum", builtin_sum, METH_VARARGS, sum_doc},
2297 {"vars", builtin_vars, METH_VARARGS, vars_doc},
2298 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002299};
2300
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002301PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002302"Built-in functions, exceptions, and other objects.\n\
2303\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002304Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002305
Martin v. Löwis1a214512008-06-11 05:26:20 +00002306static struct PyModuleDef builtinsmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002307 PyModuleDef_HEAD_INIT,
2308 "builtins",
2309 builtin_doc,
2310 -1, /* multiple "initialization" just copies the module dict. */
2311 builtin_methods,
2312 NULL,
2313 NULL,
2314 NULL,
2315 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00002316};
2317
2318
Guido van Rossum25ce5661997-08-02 03:10:38 +00002319PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002320_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002321{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002322 PyObject *mod, *dict, *debug;
2323 mod = PyModule_Create(&builtinsmodule);
2324 if (mod == NULL)
2325 return NULL;
2326 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002327
Tim Peters7571a0f2003-03-23 17:52:28 +00002328#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002329 /* "builtins" exposes a number of statically allocated objects
2330 * that, before this code was added in 2.3, never showed up in
2331 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2332 * result, programs leaking references to None and False (etc)
2333 * couldn't be diagnosed by examining sys.getobjects(0).
2334 */
Tim Peters7571a0f2003-03-23 17:52:28 +00002335#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2336#else
2337#define ADD_TO_ALL(OBJECT) (void)0
2338#endif
2339
Tim Peters4b7625e2001-09-13 21:37:17 +00002340#define SETBUILTIN(NAME, OBJECT) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002341 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2342 return NULL; \
2343 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002344
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002345 SETBUILTIN("None", Py_None);
2346 SETBUILTIN("Ellipsis", Py_Ellipsis);
2347 SETBUILTIN("NotImplemented", Py_NotImplemented);
2348 SETBUILTIN("False", Py_False);
2349 SETBUILTIN("True", Py_True);
2350 SETBUILTIN("bool", &PyBool_Type);
2351 SETBUILTIN("memoryview", &PyMemoryView_Type);
2352 SETBUILTIN("bytearray", &PyByteArray_Type);
2353 SETBUILTIN("bytes", &PyBytes_Type);
2354 SETBUILTIN("classmethod", &PyClassMethod_Type);
2355 SETBUILTIN("complex", &PyComplex_Type);
2356 SETBUILTIN("dict", &PyDict_Type);
2357 SETBUILTIN("enumerate", &PyEnum_Type);
2358 SETBUILTIN("filter", &PyFilter_Type);
2359 SETBUILTIN("float", &PyFloat_Type);
2360 SETBUILTIN("frozenset", &PyFrozenSet_Type);
2361 SETBUILTIN("property", &PyProperty_Type);
2362 SETBUILTIN("int", &PyLong_Type);
2363 SETBUILTIN("list", &PyList_Type);
2364 SETBUILTIN("map", &PyMap_Type);
2365 SETBUILTIN("object", &PyBaseObject_Type);
2366 SETBUILTIN("range", &PyRange_Type);
2367 SETBUILTIN("reversed", &PyReversed_Type);
2368 SETBUILTIN("set", &PySet_Type);
2369 SETBUILTIN("slice", &PySlice_Type);
2370 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2371 SETBUILTIN("str", &PyUnicode_Type);
2372 SETBUILTIN("super", &PySuper_Type);
2373 SETBUILTIN("tuple", &PyTuple_Type);
2374 SETBUILTIN("type", &PyType_Type);
2375 SETBUILTIN("zip", &PyZip_Type);
2376 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
2377 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2378 Py_XDECREF(debug);
2379 return NULL;
2380 }
2381 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002382
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002383 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002384#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002385#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002386}