blob: 22a57ea846e91ea7cc5f8e05d6490da9f58270d8 [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"
Guido van Rossum3f5da241990-12-20 15:06:42 +00004
5#include "node.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00006#include "code.h"
Guido van Rossum5b722181993-03-30 17:46:03 +00007#include "eval.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00008
Guido van Rossum6bf62da1997-04-11 20:37:35 +00009#include <ctype.h>
10
Mark Hammond26cffde42001-05-14 12:17:34 +000011/* The default encoding used by the platform file system APIs
12 Can remain NULL for all platforms that don't have such a concept
13*/
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000014#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
Mark Hammond26cffde42001-05-14 12:17:34 +000015const char *Py_FileSystemDefaultEncoding = "mbcs";
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000016#elif defined(__APPLE__)
17const char *Py_FileSystemDefaultEncoding = "utf-8";
Mark Hammond26cffde42001-05-14 12:17:34 +000018#else
19const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
20#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000021
Guido van Rossum79f25d91997-04-29 20:08:16 +000022static PyObject *
Guido van Rossum52cc1d82007-03-18 15:41:51 +000023builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds)
24{
Guido van Rossumcd16bf62007-06-13 18:07:49 +000025 PyObject *func, *name, *bases, *mkw, *meta, *prep, *ns, *cell;
26 PyObject *cls = NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +000027 Py_ssize_t nargs, nbases;
28
29 assert(args != NULL);
30 if (!PyTuple_Check(args)) {
31 PyErr_SetString(PyExc_TypeError,
32 "__build_class__: args is not a tuple");
33 return NULL;
34 }
35 nargs = PyTuple_GET_SIZE(args);
36 if (nargs < 2) {
37 PyErr_SetString(PyExc_TypeError,
38 "__build_class__: not enough arguments");
39 return NULL;
40 }
41 func = PyTuple_GET_ITEM(args, 0); /* Better be callable */
42 name = PyTuple_GET_ITEM(args, 1);
Neal Norwitz6ea45d32007-08-26 04:19:43 +000043 if (!PyUnicode_Check(name)) {
Guido van Rossum52cc1d82007-03-18 15:41:51 +000044 PyErr_SetString(PyExc_TypeError,
45 "__build_class__: name is not a string");
46 return NULL;
47 }
48 bases = PyTuple_GetSlice(args, 2, nargs);
49 if (bases == NULL)
50 return NULL;
51 nbases = nargs - 2;
52
53 if (kwds == NULL) {
54 meta = NULL;
55 mkw = NULL;
56 }
57 else {
58 mkw = PyDict_Copy(kwds); /* Don't modify kwds passed in! */
59 if (mkw == NULL) {
60 Py_DECREF(bases);
61 return NULL;
62 }
63 meta = PyDict_GetItemString(mkw, "metaclass");
64 if (meta != NULL) {
65 Py_INCREF(meta);
66 if (PyDict_DelItemString(mkw, "metaclass") < 0) {
67 Py_DECREF(meta);
68 Py_DECREF(mkw);
69 Py_DECREF(bases);
70 return NULL;
71 }
72 }
73 }
74 if (meta == NULL) {
75 if (PyTuple_GET_SIZE(bases) == 0)
76 meta = (PyObject *) (&PyType_Type);
77 else {
78 PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
79 meta = (PyObject *) (base0->ob_type);
80 }
81 Py_INCREF(meta);
82 }
83 prep = PyObject_GetAttrString(meta, "__prepare__");
84 if (prep == NULL) {
85 PyErr_Clear();
86 ns = PyDict_New();
87 }
88 else {
89 PyObject *pargs = Py_BuildValue("OO", name, bases);
90 if (pargs == NULL) {
91 Py_DECREF(prep);
92 Py_DECREF(meta);
93 Py_XDECREF(mkw);
94 Py_DECREF(bases);
95 return NULL;
96 }
97 ns = PyEval_CallObjectWithKeywords(prep, pargs, mkw);
98 Py_DECREF(pargs);
99 Py_DECREF(prep);
100 if (ns == NULL) {
101 Py_DECREF(meta);
102 Py_XDECREF(mkw);
103 Py_DECREF(bases);
104 return NULL;
105 }
106 }
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000107 cell = PyObject_CallFunctionObjArgs(func, ns, NULL);
108 if (cell != NULL) {
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000109 PyObject *margs;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000110 margs = Py_BuildValue("OOO", name, bases, ns);
111 if (margs != NULL) {
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000112 cls = PyEval_CallObjectWithKeywords(meta, margs, mkw);
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000113 Py_DECREF(margs);
114 }
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000115 if (cls != NULL && PyCell_Check(cell)) {
116 Py_INCREF(cls);
117 PyCell_SET(cell, cls);
118 }
119 Py_DECREF(cell);
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000120 }
121 Py_DECREF(ns);
122 Py_DECREF(meta);
123 Py_XDECREF(mkw);
124 Py_DECREF(bases);
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000125 return cls;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000126}
127
128PyDoc_STRVAR(build_class_doc,
129"__build_class__(func, name, *bases, metaclass=None, **kwds) -> class\n\
130\n\
131Internal helper function used by the class statement.");
132
133static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000134builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000135{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000136 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
137 "level", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000138 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000139 PyObject *globals = NULL;
140 PyObject *locals = NULL;
141 PyObject *fromlist = NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +0000142 int level = -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000143
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000144 if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|OOOi:__import__",
145 kwlist, &name, &globals, &locals, &fromlist, &level))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000146 return NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +0000147 return PyImport_ImportModuleLevel(name, globals, locals,
148 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000149}
150
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000151PyDoc_STRVAR(import_doc,
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000152"__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000153\n\
154Import a module. The globals are only used to determine the context;\n\
155they are not modified. The locals are currently unused. The fromlist\n\
156should be a list of names to emulate ``from name import ...'', or an\n\
157empty list to emulate ``import name''.\n\
158When importing a module from a package, note that __import__('A.B', ...)\n\
159returns package A when fromlist is empty, but its submodule B when\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000160fromlist is not empty. Level is used to determine whether to perform \n\
161absolute or relative imports. -1 is the original strategy of attempting\n\
162both absolute and relative imports, 0 is absolute, a positive number\n\
163is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000164
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000165
Guido van Rossum79f25d91997-04-29 20:08:16 +0000166static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000167builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000168{
Guido van Rossum09df08a1998-05-22 00:51:39 +0000169 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000170}
171
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000172PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000173"abs(number) -> number\n\
174\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000175Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000176
Raymond Hettinger96229b12005-03-11 06:49:40 +0000177static PyObject *
178builtin_all(PyObject *self, PyObject *v)
179{
180 PyObject *it, *item;
181
182 it = PyObject_GetIter(v);
183 if (it == NULL)
184 return NULL;
185
186 while ((item = PyIter_Next(it)) != NULL) {
187 int cmp = PyObject_IsTrue(item);
188 Py_DECREF(item);
189 if (cmp < 0) {
190 Py_DECREF(it);
191 return NULL;
192 }
193 if (cmp == 0) {
194 Py_DECREF(it);
195 Py_RETURN_FALSE;
196 }
197 }
198 Py_DECREF(it);
199 if (PyErr_Occurred())
200 return NULL;
201 Py_RETURN_TRUE;
202}
203
204PyDoc_STRVAR(all_doc,
205"all(iterable) -> bool\n\
206\n\
207Return True if bool(x) is True for all values x in the iterable.");
208
209static PyObject *
210builtin_any(PyObject *self, PyObject *v)
211{
212 PyObject *it, *item;
213
214 it = PyObject_GetIter(v);
215 if (it == NULL)
216 return NULL;
217
218 while ((item = PyIter_Next(it)) != NULL) {
219 int cmp = PyObject_IsTrue(item);
220 Py_DECREF(item);
221 if (cmp < 0) {
222 Py_DECREF(it);
223 return NULL;
224 }
225 if (cmp == 1) {
226 Py_DECREF(it);
227 Py_RETURN_TRUE;
228 }
229 }
230 Py_DECREF(it);
231 if (PyErr_Occurred())
232 return NULL;
233 Py_RETURN_FALSE;
234}
235
236PyDoc_STRVAR(any_doc,
237"any(iterable) -> bool\n\
238\n\
239Return True if bool(x) is True for any x in the iterable.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000240
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000241
Guido van Rossum79f25d91997-04-29 20:08:16 +0000242static PyObject *
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000243builtin_bin(PyObject *self, PyObject *v)
244{
245 return PyNumber_ToBase(v, 2);
246}
247
248PyDoc_STRVAR(bin_doc,
249"bin(number) -> string\n\
250\n\
251Return the binary representation of an integer or long integer.");
252
253
254static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000255builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000256{
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000257 PyObject *itertools, *ifilter, *result;
258 itertools = PyImport_ImportModule("itertools");
259 if (itertools == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000260 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000261 ifilter = PyObject_GetAttrString(itertools, "ifilter");
262 Py_DECREF(itertools);
263 if (ifilter == NULL)
Georg Brandle35b6572005-07-19 22:20:20 +0000264 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000265 result = PyObject_Call(ifilter, args, NULL);
266 Py_DECREF(ifilter);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000267 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000268}
269
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000270PyDoc_STRVAR(filter_doc,
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000271"filter(predicate, iterable) -> iterator\n\
272\n\
273Return an iterator yielding only those elements of the input iterable\n\
274for which the predicate (a Boolean function) returns true.\n\
275If the predicate is None, 'lambda x: bool(x)' is assumed.\n\
276(This is identical to itertools.ifilter().)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000277
Eric Smith8c663262007-08-25 02:26:07 +0000278static PyObject *
279builtin_format(PyObject *self, PyObject *args)
280{
281 static PyObject * format_str = NULL;
282 PyObject *value;
283 PyObject *spec;
284 PyObject *meth;
285 PyObject *result;
286
287 /* Initialize cached value */
288 if (format_str == NULL) {
289 /* Initialize static variable needed by _PyType_Lookup */
290 format_str = PyUnicode_FromString("__format__");
291 if (format_str == NULL)
292 return NULL;
293 }
294
295 if (!PyArg_ParseTuple(args, "OO:format", &value, &spec))
296 return NULL;
297
298 /* Make sure the type is initialized. float gets initialized late */
299 if (Py_Type(value)->tp_dict == NULL)
300 if (PyType_Ready(Py_Type(value)) < 0)
301 return NULL;
302
303 /* Find the (unbound!) __format__ method (a borrowed reference) */
304 meth = _PyType_Lookup(Py_Type(value), format_str);
305 if (meth == NULL) {
306 PyErr_Format(PyExc_TypeError,
307 "Type %.100s doesn't define __format__",
308 Py_Type(value)->tp_name);
309 return NULL;
310 }
311
312 /* And call it, binding it to the value */
313 result = PyObject_CallFunctionObjArgs(meth, value, spec, NULL);
314
315#if 0
316 /* XXX this is segfaulting, not sure why. find out later! */
317 if (!PyUnicode_Check(result)) {
318 PyErr_SetString(PyExc_TypeError,
319 "__format__ method did not return string");
320 Py_DECREF(result);
321 return NULL;
322 }
323#endif
324
325 return result;
326}
327
328
329PyDoc_STRVAR(format_doc,
330"format(value, format_spec) -> string\n\
331\n\
332Returns value.__format__(format_spec).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000333
Guido van Rossum79f25d91997-04-29 20:08:16 +0000334static PyObject *
Walter Dörwalde7efd592007-06-05 20:07:21 +0000335builtin_chr8(PyObject *self, PyObject *args)
Guido van Rossum7fcf2242007-05-04 17:43:11 +0000336{
337 long x;
338 char s[1];
339
340 if (!PyArg_ParseTuple(args, "l:chr8", &x))
341 return NULL;
342 if (x < 0 || x >= 256) {
343 PyErr_SetString(PyExc_ValueError,
344 "chr8() arg not in range(256)");
345 return NULL;
346 }
347 s[0] = (char)x;
348 return PyString_FromStringAndSize(s, 1);
349}
350
Walter Dörwalde7efd592007-06-05 20:07:21 +0000351PyDoc_STRVAR(chr8_doc,
Guido van Rossum7fcf2242007-05-04 17:43:11 +0000352"chr8(i) -> 8-bit character\n\
353\n\
354Return a string of one character with ordinal i; 0 <= i < 256.");
355
356
357static PyObject *
Walter Dörwalde7efd592007-06-05 20:07:21 +0000358builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000359{
360 long x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000361
Walter Dörwalde7efd592007-06-05 20:07:21 +0000362 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum09095f32000-03-10 23:00:52 +0000363 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000364
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000365 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000366}
367
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000368PyDoc_VAR(chr_doc) = PyDoc_STR(
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000369"chr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000370\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000371Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000372)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000373#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000374PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000375"\nIf 0x10000 <= i, a surrogate pair is returned."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000376)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000377#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000378;
Guido van Rossum09095f32000-03-10 23:00:52 +0000379
380
381static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000382builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000383{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000384 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000385 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000386
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000387 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000388 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000389 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000390 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000391 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000392}
393
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000394PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000395"cmp(x, y) -> integer\n\
396\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000397Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000398
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000399
400static char *
401source_as_string(PyObject *cmd)
402{
403 char *str;
404 Py_ssize_t size;
405
406 if (!PyObject_CheckReadBuffer(cmd) &&
407 !PyUnicode_Check(cmd)) {
408 PyErr_SetString(PyExc_TypeError,
409 "eval()/exec() arg 1 must be a string, bytes or code object");
410 return NULL;
411 }
412
413 if (PyUnicode_Check(cmd)) {
414 cmd = _PyUnicode_AsDefaultEncodedString(cmd, NULL);
415 if (cmd == NULL)
416 return NULL;
417 }
418 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &size) < 0) {
419 return NULL;
420 }
421 if (strlen(str) != size) {
422 PyErr_SetString(PyExc_TypeError,
423 "source code string cannot contain null bytes");
424 return NULL;
425 }
426 return str;
427}
428
Guido van Rossum79f25d91997-04-29 20:08:16 +0000429static PyObject *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000430builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000431{
432 char *str;
433 char *filename;
434 char *startstr;
435 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000436 int dont_inherit = 0;
437 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000438 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000439 PyObject *cmd;
Guido van Rossumd8faa362007-04-27 19:54:29 +0000440 static char *kwlist[] = {"source", "filename", "mode", "flags",
441 "dont_inherit", NULL};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000442
Guido van Rossumd8faa362007-04-27 19:54:29 +0000443 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
444 kwlist, &cmd, &filename, &startstr,
445 &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000446 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000447
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000448 cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000449
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000450 str = source_as_string(cmd);
451 if (str == NULL)
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000452 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000453
Guido van Rossum5b722181993-03-30 17:46:03 +0000454 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000455 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000456 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000457 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000458 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000459 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000460 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000461 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000462 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000463 return NULL;
Guido van Rossum5b722181993-03-30 17:46:03 +0000464 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000465
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000466 if (supplied_flags &
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000467 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000468 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000469 PyErr_SetString(PyExc_ValueError,
470 "compile(): unrecognised flags");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000471 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000472 }
473 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
474
Tim Peters6cd6a822001-08-17 22:11:27 +0000475 if (!dont_inherit) {
476 PyEval_MergeCompilerFlags(&cf);
477 }
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000478 return Py_CompileStringFlags(str, filename, start, &cf);
Guido van Rossum5b722181993-03-30 17:46:03 +0000479}
480
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000481PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000482"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000483\n\
484Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000485into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000486The filename will be used for run-time error messages.\n\
487The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000488single (interactive) statement, or 'eval' to compile an expression.\n\
489The flags argument, if present, controls which future statements influence\n\
490the compilation of the code.\n\
491The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
492the effects of any future statements in effect in the code calling\n\
493compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000494in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000495
Guido van Rossum79f25d91997-04-29 20:08:16 +0000496static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000497builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000498{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000499 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000500
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000501 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000502 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000503 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000504}
505
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000506PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000507"dir([object]) -> list of strings\n"
508"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000509"If called without an argument, return the names in the current scope.\n"
510"Else, return an alphabetized list of names comprising (some of) the attributes\n"
511"of the given object, and of attributes reachable from it.\n"
512"If the object supplies a method named __dir__, it will be used; otherwise\n"
513"the default dir() logic is used and returns:\n"
514" for a module object: the module's attributes.\n"
515" for a class object: its attributes, and recursively the attributes\n"
516" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000517" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000518" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000519
Guido van Rossum79f25d91997-04-29 20:08:16 +0000520static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000521builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000522{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000523 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000524
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000525 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000526 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000527 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000528}
529
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000530PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000531"divmod(x, y) -> (div, mod)\n\
532\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000533Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000534
535
Guido van Rossum79f25d91997-04-29 20:08:16 +0000536static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000537builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000538{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000539 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000540 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000541 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000542 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000543
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000544 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000545 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000546 if (locals != Py_None && !PyMapping_Check(locals)) {
547 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000548 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000549 }
550 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000551 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000552 "globals must be a real dict; try eval(expr, {}, mapping)"
553 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000554 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000555 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000556 if (globals == Py_None) {
557 globals = PyEval_GetGlobals();
558 if (locals == Py_None)
559 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000560 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000561 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000562 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000563
Georg Brandl77c85e62005-09-15 10:46:13 +0000564 if (globals == NULL || locals == NULL) {
565 PyErr_SetString(PyExc_TypeError,
566 "eval must be given globals and locals "
567 "when called without a frame");
568 return NULL;
569 }
570
Guido van Rossum79f25d91997-04-29 20:08:16 +0000571 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
572 if (PyDict_SetItemString(globals, "__builtins__",
573 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000574 return NULL;
575 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000576
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000577 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000578 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000579 PyErr_SetString(PyExc_TypeError,
580 "code object passed to eval() may not contain free variables");
581 return NULL;
582 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000583 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000584 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000585
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000586 str = source_as_string(cmd);
587 if (str == NULL)
Guido van Rossum94390a41992-08-14 15:14:30 +0000588 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000589
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000590 while (*str == ' ' || *str == '\t')
591 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000592
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000593 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Tim Peters9fa96be2001-08-17 23:04:59 +0000594 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000595 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
596 Py_XDECREF(tmp);
597 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000598}
599
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000600PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000601"eval(source[, globals[, locals]]) -> value\n\
602\n\
603Evaluate the source in the context of globals and locals.\n\
604The source may be a string representing a Python expression\n\
605or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000606The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000607defaulting to the current globals and locals.\n\
608If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000609
Georg Brandl7cae87c2006-09-06 06:51:57 +0000610static PyObject *
611builtin_exec(PyObject *self, PyObject *args)
612{
613 PyObject *v;
614 PyObject *prog, *globals = Py_None, *locals = Py_None;
615 int plain = 0;
616
617 if (!PyArg_ParseTuple(args, "O|OO:exec", &prog, &globals, &locals))
618 return NULL;
619
620 if (globals == Py_None) {
621 globals = PyEval_GetGlobals();
622 if (locals == Py_None) {
623 locals = PyEval_GetLocals();
624 plain = 1;
625 }
626 if (!globals || !locals) {
627 PyErr_SetString(PyExc_SystemError,
628 "globals and locals cannot be NULL");
629 return NULL;
630 }
631 }
632 else if (locals == Py_None)
633 locals = globals;
Neal Norwitz6ea45d32007-08-26 04:19:43 +0000634 if (!PyUnicode_Check(prog) &&
Guido van Rossumda5b8f22007-06-12 23:30:11 +0000635 !PyCode_Check(prog)) {
Georg Brandl7cae87c2006-09-06 06:51:57 +0000636 PyErr_Format(PyExc_TypeError,
637 "exec() arg 1 must be a string, file, or code "
638 "object, not %.100s", prog->ob_type->tp_name);
639 return NULL;
640 }
641 if (!PyDict_Check(globals)) {
642 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
643 globals->ob_type->tp_name);
644 return NULL;
645 }
646 if (!PyMapping_Check(locals)) {
647 PyErr_Format(PyExc_TypeError,
648 "arg 3 must be a mapping or None, not %.100s",
649 locals->ob_type->tp_name);
650 return NULL;
651 }
652 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
653 if (PyDict_SetItemString(globals, "__builtins__",
654 PyEval_GetBuiltins()) != 0)
655 return NULL;
656 }
657
658 if (PyCode_Check(prog)) {
659 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
660 PyErr_SetString(PyExc_TypeError,
661 "code object passed to exec() may not "
662 "contain free variables");
663 return NULL;
664 }
665 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
666 }
Georg Brandl7cae87c2006-09-06 06:51:57 +0000667 else {
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000668 char *str = source_as_string(prog);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000669 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000670 if (str == NULL)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000671 return NULL;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000672 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000673 if (PyEval_MergeCompilerFlags(&cf))
674 v = PyRun_StringFlags(str, Py_file_input, globals,
675 locals, &cf);
676 else
677 v = PyRun_String(str, Py_file_input, globals, locals);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000678 }
679 if (v == NULL)
680 return NULL;
681 Py_DECREF(v);
682 Py_RETURN_NONE;
683}
684
685PyDoc_STRVAR(exec_doc,
686"exec(object[, globals[, locals]])\n\
687\n\
688Read and execute code from a object, which can be a string, a code\n\
689object or a file object.\n\
690The globals and locals are dictionaries, defaulting to the current\n\
691globals and locals. If only globals is given, locals defaults to it.");
692
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000693
Guido van Rossum79f25d91997-04-29 20:08:16 +0000694static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000695builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000696{
Neal Norwitz6ea45d32007-08-26 04:19:43 +0000697 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000698 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000699
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000700 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000701 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000702
Martin v. Löwis5b222132007-06-10 09:51:05 +0000703 if (!PyUnicode_Check(name)) {
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000704 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000705 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000706 return NULL;
707 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000708 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000709 if (result == NULL && dflt != NULL &&
710 PyErr_ExceptionMatches(PyExc_AttributeError))
711 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000712 PyErr_Clear();
713 Py_INCREF(dflt);
714 result = dflt;
715 }
716 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000717}
718
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000719PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000720"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000721\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000722Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
723When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000724exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000725
726
Guido van Rossum79f25d91997-04-29 20:08:16 +0000727static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000728builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000729{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000730 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000731
Guido van Rossum79f25d91997-04-29 20:08:16 +0000732 d = PyEval_GetGlobals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000733 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000734 return d;
735}
736
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000737PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000738"globals() -> dictionary\n\
739\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000740Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000741
742
Guido van Rossum79f25d91997-04-29 20:08:16 +0000743static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000744builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000745{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000746 PyObject *v;
747 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000748
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000749 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000750 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000751 if (!PyUnicode_Check(name)) {
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000752 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000753 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000754 return NULL;
755 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000756 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000757 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000758 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000759 Py_INCREF(Py_False);
760 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000761 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000762 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000763 Py_INCREF(Py_True);
764 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000765}
766
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000767PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000768"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000769\n\
770Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000771(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000772
773
Guido van Rossum79f25d91997-04-29 20:08:16 +0000774static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000775builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000776{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000777 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000778}
779
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000780PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000781"id(object) -> integer\n\
782\n\
783Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000784simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000785
786
Guido van Rossum79f25d91997-04-29 20:08:16 +0000787static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000788builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000789{
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000790 PyObject *itertools, *imap, *result;
791 itertools = PyImport_ImportModule("itertools");
792 if (itertools == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000793 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000794 imap = PyObject_GetAttrString(itertools, "imap");
795 Py_DECREF(itertools);
796 if (imap == NULL)
Tim Peters4e9afdc2001-05-03 23:54:49 +0000797 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000798 result = PyObject_Call(imap, args, NULL);
799 Py_DECREF(imap);
Tim Peters4e9afdc2001-05-03 23:54:49 +0000800 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000801}
802
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000803PyDoc_STRVAR(map_doc,
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000804"map(function, iterable[, iterable, ...]) -> iterator\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000805\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000806Return an iterator yielding the results of applying the function to the\n\
807items of the argument iterables(s). If more than one iterable is given,\n\
808the function is called with an argument list consisting of the\n\
809corresponding item of each iterable, until an iterable is exhausted.\n\
810If the function is None, 'lambda *a: a' is assumed.\n\
811(This is identical to itertools.imap().)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000812
813
Guido van Rossum79f25d91997-04-29 20:08:16 +0000814static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +0000815builtin_next(PyObject *self, PyObject *args)
816{
817 PyObject *it, *res;
818 PyObject *def = NULL;
819
820 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
821 return NULL;
822 if (!PyIter_Check(it)) {
823 PyErr_Format(PyExc_TypeError,
824 "%.200s object is not an iterator", it->ob_type->tp_name);
825 return NULL;
826 }
827
828 res = (*it->ob_type->tp_iternext)(it);
829 if (res == NULL) {
830 if (def) {
831 if (PyErr_Occurred() &&
832 !PyErr_ExceptionMatches(PyExc_StopIteration))
833 return NULL;
834 PyErr_Clear();
835 Py_INCREF(def);
836 return def;
837 } else if (PyErr_Occurred()) {
838 return NULL;
839 } else {
840 PyErr_SetNone(PyExc_StopIteration);
841 return NULL;
842 }
843 }
844 return res;
845}
846
847PyDoc_STRVAR(next_doc,
848"next(iterator[, default])\n\
849\n\
850Return the next item from the iterator. If default is given and the iterator\n\
851is exhausted, it is returned instead of raising StopIteration.");
852
853
854static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000855builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000856{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000857 PyObject *v;
858 PyObject *name;
859 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000860
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000861 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000862 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000863 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000864 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000865 Py_INCREF(Py_None);
866 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000867}
868
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000869PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000870"setattr(object, name, value)\n\
871\n\
872Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000873``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000874
875
Guido van Rossum79f25d91997-04-29 20:08:16 +0000876static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000877builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000878{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000879 PyObject *v;
880 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000881
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000882 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +0000883 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000884 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000885 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000886 Py_INCREF(Py_None);
887 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +0000888}
889
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000890PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +0000891"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000892\n\
893Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000894``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000895
896
Guido van Rossum79f25d91997-04-29 20:08:16 +0000897static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000898builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000899{
Guido van Rossum9bfef441993-03-29 10:43:31 +0000900 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000901
Guido van Rossum79f25d91997-04-29 20:08:16 +0000902 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000903 if (x == -1)
904 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000905 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000906}
907
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000908PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000909"hash(object) -> integer\n\
910\n\
911Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000912the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000913
914
Guido van Rossum79f25d91997-04-29 20:08:16 +0000915static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000916builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +0000917{
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000918 return PyNumber_ToBase(v, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +0000919}
920
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000921PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000922"hex(number) -> string\n\
923\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000924Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000925
926
Guido van Rossum79f25d91997-04-29 20:08:16 +0000927static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000928builtin_iter(PyObject *self, PyObject *args)
929{
930 PyObject *v, *w = NULL;
931
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000932 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000933 return NULL;
934 if (w == NULL)
935 return PyObject_GetIter(v);
936 if (!PyCallable_Check(v)) {
937 PyErr_SetString(PyExc_TypeError,
938 "iter(v, w): v must be callable");
939 return NULL;
940 }
941 return PyCallIter_New(v, w);
942}
943
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000944PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000945"iter(collection) -> iterator\n\
946iter(callable, sentinel) -> iterator\n\
947\n\
948Get an iterator from an object. In the first form, the argument must\n\
949supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000950In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000951
952
953static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000954builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000955{
Martin v. Löwis18e16552006-02-15 17:27:45 +0000956 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000957
Jeremy Hylton03657cf2000-07-12 13:05:33 +0000958 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +0000959 if (res < 0 && PyErr_Occurred())
960 return NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000961 return PyInt_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000962}
963
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000964PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000965"len(object) -> integer\n\
966\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000967Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000968
969
Guido van Rossum79f25d91997-04-29 20:08:16 +0000970static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000971builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000972{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000973 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000974
Guido van Rossum79f25d91997-04-29 20:08:16 +0000975 d = PyEval_GetLocals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000976 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000977 return d;
978}
979
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000980PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000981"locals() -> dictionary\n\
982\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +0000983Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000984
985
Guido van Rossum79f25d91997-04-29 20:08:16 +0000986static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000987min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000988{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000989 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +0000990 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000991
Guido van Rossum79f25d91997-04-29 20:08:16 +0000992 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000993 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +0000994 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000995 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +0000996
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000997 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
998 keyfunc = PyDict_GetItemString(kwds, "key");
999 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001000 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001001 "%s() got an unexpected keyword argument", name);
1002 return NULL;
1003 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001004 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001005
Tim Petersc3074532001-05-03 07:00:32 +00001006 it = PyObject_GetIter(v);
1007 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001008 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001009
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001010 maxitem = NULL; /* the result */
1011 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001012 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001013 /* get the value from the key function */
1014 if (keyfunc != NULL) {
1015 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1016 if (val == NULL)
1017 goto Fail_it_item;
1018 }
1019 /* no key function; the value is the item */
1020 else {
1021 val = item;
1022 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001023 }
Tim Petersc3074532001-05-03 07:00:32 +00001024
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001025 /* maximum value and item are unset; set them */
1026 if (maxval == NULL) {
1027 maxitem = item;
1028 maxval = val;
1029 }
1030 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001031 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001032 int cmp = PyObject_RichCompareBool(val, maxval, op);
1033 if (cmp < 0)
1034 goto Fail_it_item_and_val;
1035 else if (cmp > 0) {
1036 Py_DECREF(maxval);
1037 Py_DECREF(maxitem);
1038 maxval = val;
1039 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001040 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001041 else {
1042 Py_DECREF(item);
1043 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001044 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001045 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001046 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001047 if (PyErr_Occurred())
1048 goto Fail_it;
1049 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001050 PyErr_Format(PyExc_ValueError,
1051 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001052 assert(maxitem == NULL);
1053 }
1054 else
1055 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001056 Py_DECREF(it);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001057 return maxitem;
1058
1059Fail_it_item_and_val:
1060 Py_DECREF(val);
1061Fail_it_item:
1062 Py_DECREF(item);
1063Fail_it:
1064 Py_XDECREF(maxval);
1065 Py_XDECREF(maxitem);
1066 Py_DECREF(it);
1067 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001068}
1069
Guido van Rossum79f25d91997-04-29 20:08:16 +00001070static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001071builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001072{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001073 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001074}
1075
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001076PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001077"min(iterable[, key=func]) -> value\n\
1078min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001079\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001080With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001081With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001082
1083
Guido van Rossum79f25d91997-04-29 20:08:16 +00001084static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001085builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001086{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001087 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001088}
1089
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001090PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001091"max(iterable[, key=func]) -> value\n\
1092max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001093\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001094With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001095With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001096
1097
Guido van Rossum79f25d91997-04-29 20:08:16 +00001098static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001099builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001100{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001101 return PyNumber_ToBase(v, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001102}
1103
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001104PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001105"oct(number) -> string\n\
1106\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001107Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001108
1109
Guido van Rossum79f25d91997-04-29 20:08:16 +00001110static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001111builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001112{
Guido van Rossum09095f32000-03-10 23:00:52 +00001113 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001114 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001115
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001116 if (PyString_Check(obj)) {
1117 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001118 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001119 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001120 return PyInt_FromLong(ord);
1121 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001122 }
1123 else if (PyUnicode_Check(obj)) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001124 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001125 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001126 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001127 return PyInt_FromLong(ord);
1128 }
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001129#ifndef Py_UNICODE_WIDE
1130 if (size == 2) {
1131 /* Decode a valid surrogate pair */
1132 int c0 = PyUnicode_AS_UNICODE(obj)[0];
1133 int c1 = PyUnicode_AS_UNICODE(obj)[1];
1134 if (0xD800 <= c0 && c0 <= 0xDBFF &&
1135 0xDC00 <= c1 && c1 <= 0xDFFF) {
1136 ord = ((((c0 & 0x03FF) << 10) | (c1 & 0x03FF)) +
1137 0x00010000);
1138 return PyInt_FromLong(ord);
1139 }
1140 }
1141#endif
Guido van Rossum6f376c42007-05-24 14:31:33 +00001142 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001143 else if (PyBytes_Check(obj)) {
1144 /* XXX Hopefully this is temporary */
1145 size = PyBytes_GET_SIZE(obj);
1146 if (size == 1) {
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001147 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
Guido van Rossum98f97462007-04-13 03:31:13 +00001148 return PyInt_FromLong(ord);
1149 }
1150 }
1151 else {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001152 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001153 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001154 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001155 return NULL;
1156 }
1157
Guido van Rossumad991772001-01-12 16:03:05 +00001158 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001159 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001160 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001161 size);
1162 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001163}
1164
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001165PyDoc_VAR(ord_doc) = PyDoc_STR(
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001166"ord(c) -> integer\n\
1167\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001168Return the integer ordinal of a one-character string."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001169)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001170#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001171PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001172"\nA valid surrogate pair is also accepted."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001173)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001174#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001175;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001176
1177
Guido van Rossum79f25d91997-04-29 20:08:16 +00001178static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001179builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001180{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001181 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001182
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001183 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001184 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001185 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001186}
1187
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001188PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001189"pow(x, y[, z]) -> number\n\
1190\n\
1191With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001192equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001193
1194
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001195
Guido van Rossum34343512006-11-30 22:13:52 +00001196static PyObject *
1197builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1198{
1199 static char *kwlist[] = {"sep", "end", "file", 0};
Georg Brandl257d3d92007-02-26 10:35:10 +00001200 static PyObject *dummy_args;
Guido van Rossum34343512006-11-30 22:13:52 +00001201 PyObject *sep = NULL, *end = NULL, *file = NULL;
1202 int i, err;
1203
Georg Brandl257d3d92007-02-26 10:35:10 +00001204 if (dummy_args == NULL) {
1205 if (!(dummy_args = PyTuple_New(0)))
1206 return NULL;
1207 }
Georg Brandl88fc6642007-02-09 21:28:07 +00001208 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
Guido van Rossum34343512006-11-30 22:13:52 +00001209 kwlist, &sep, &end, &file))
1210 return NULL;
1211 if (file == NULL || file == Py_None)
1212 file = PySys_GetObject("stdout");
1213
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001214 if (sep && sep != Py_None && !PyUnicode_Check(sep)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001215 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001216 "sep must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001217 sep->ob_type->tp_name);
1218 return NULL;
1219 }
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001220 if (end && end != Py_None && !PyUnicode_Check(end)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001221 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001222 "end must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001223 end->ob_type->tp_name);
1224 return NULL;
1225 }
Guido van Rossum34343512006-11-30 22:13:52 +00001226
1227 for (i = 0; i < PyTuple_Size(args); i++) {
1228 if (i > 0) {
1229 if (sep == NULL || sep == Py_None)
1230 err = PyFile_WriteString(" ", file);
1231 else
1232 err = PyFile_WriteObject(sep, file,
1233 Py_PRINT_RAW);
1234 if (err)
1235 return NULL;
1236 }
1237 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1238 Py_PRINT_RAW);
1239 if (err)
1240 return NULL;
1241 }
1242
1243 if (end == NULL || end == Py_None)
1244 err = PyFile_WriteString("\n", file);
1245 else
1246 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1247 if (err)
1248 return NULL;
1249
1250 Py_RETURN_NONE;
1251}
1252
1253PyDoc_STRVAR(print_doc,
Guido van Rossum452bf512007-02-09 05:32:43 +00001254"print(value, ..., file=None, sep=' ', end='\\n')\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001255\n\
1256Prints the values to a stream, or to sys.stdout by default.\n\
1257Optional keyword arguments:\n\
1258file: a file-like object (stream); defaults to the current sys.stdout.\n\
1259sep: string inserted between values, default a space.\n\
1260end: string appended after the last value, default a newline.");
1261
1262
Guido van Rossuma88a0332007-02-26 16:59:55 +00001263static PyObject *
1264builtin_input(PyObject *self, PyObject *args)
1265{
Guido van Rossumeba76962007-05-27 09:13:28 +00001266 PyObject *promptarg = NULL;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001267 PyObject *fin = PySys_GetObject("stdin");
1268 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossumeba76962007-05-27 09:13:28 +00001269 PyObject *ferr = PySys_GetObject("stderr");
1270 PyObject *tmp;
1271 long fd;
1272 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001273
Guido van Rossumeba76962007-05-27 09:13:28 +00001274 /* Parse arguments */
1275 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg))
Guido van Rossuma88a0332007-02-26 16:59:55 +00001276 return NULL;
1277
Guido van Rossumeba76962007-05-27 09:13:28 +00001278 /* Check that stdin/out/err are intact */
Guido van Rossuma88a0332007-02-26 16:59:55 +00001279 if (fin == NULL) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001280 PyErr_SetString(PyExc_RuntimeError,
1281 "input(): lost sys.stdin");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001282 return NULL;
1283 }
1284 if (fout == NULL) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001285 PyErr_SetString(PyExc_RuntimeError,
1286 "input(): lost sys.stdout");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001287 return NULL;
1288 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001289 if (ferr == NULL) {
1290 PyErr_SetString(PyExc_RuntimeError,
1291 "input(): lost sys.stderr");
1292 return NULL;
1293 }
1294
1295 /* First of all, flush stderr */
1296 tmp = PyObject_CallMethod(ferr, "flush", "");
1297 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001298 PyErr_Clear();
1299 else
1300 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001301
1302 /* We should only use (GNU) readline if Python's sys.stdin and
1303 sys.stdout are the same as C's stdin and stdout, because we
1304 need to pass it those. */
1305 tmp = PyObject_CallMethod(fin, "fileno", "");
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001306 if (tmp == NULL) {
1307 PyErr_Clear();
1308 tty = 0;
1309 }
1310 else {
Guido van Rossumeba76962007-05-27 09:13:28 +00001311 fd = PyInt_AsLong(tmp);
1312 Py_DECREF(tmp);
1313 if (fd < 0 && PyErr_Occurred())
1314 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001315 tty = fd == fileno(stdin) && isatty(fd);
1316 }
1317 if (tty) {
1318 tmp = PyObject_CallMethod(fout, "fileno", "");
1319 if (tmp == NULL)
1320 PyErr_Clear();
1321 else {
1322 fd = PyInt_AsLong(tmp);
1323 Py_DECREF(tmp);
1324 if (fd < 0 && PyErr_Occurred())
1325 return NULL;
1326 tty = fd == fileno(stdout) && isatty(fd);
1327 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001328 }
1329
1330 /* If we're interactive, use (GNU) readline */
1331 if (tty) {
Guido van Rossuma88a0332007-02-26 16:59:55 +00001332 PyObject *po;
1333 char *prompt;
1334 char *s;
1335 PyObject *result;
Guido van Rossumeba76962007-05-27 09:13:28 +00001336 tmp = PyObject_CallMethod(fout, "flush", "");
1337 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001338 PyErr_Clear();
1339 else
1340 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001341 if (promptarg != NULL) {
1342 po = PyObject_Str(promptarg);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001343 if (po == NULL)
1344 return NULL;
1345 prompt = PyString_AsString(po);
Guido van Rossumeba76962007-05-27 09:13:28 +00001346 if (prompt == NULL) {
1347 Py_DECREF(po);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001348 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001349 }
Guido van Rossuma88a0332007-02-26 16:59:55 +00001350 }
1351 else {
1352 po = NULL;
1353 prompt = "";
1354 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001355 s = PyOS_Readline(stdin, stdout, prompt);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001356 Py_XDECREF(po);
1357 if (s == NULL) {
1358 if (!PyErr_Occurred())
1359 PyErr_SetNone(PyExc_KeyboardInterrupt);
1360 return NULL;
1361 }
1362 if (*s == '\0') {
1363 PyErr_SetNone(PyExc_EOFError);
1364 result = NULL;
1365 }
1366 else { /* strip trailing '\n' */
1367 size_t len = strlen(s);
1368 if (len > PY_SSIZE_T_MAX) {
1369 PyErr_SetString(PyExc_OverflowError,
1370 "input: input too long");
1371 result = NULL;
1372 }
1373 else {
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001374 result = PyUnicode_FromStringAndSize(s, len-1);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001375 }
1376 }
1377 PyMem_FREE(s);
1378 return result;
1379 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001380
1381 /* Fallback if we're not interactive */
1382 if (promptarg != NULL) {
1383 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0)
Guido van Rossuma88a0332007-02-26 16:59:55 +00001384 return NULL;
1385 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001386 tmp = PyObject_CallMethod(fout, "flush", "");
1387 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001388 PyErr_Clear();
1389 else
1390 Py_DECREF(tmp);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001391 return PyFile_GetLine(fin, -1);
1392}
1393
1394PyDoc_STRVAR(input_doc,
1395"input([prompt]) -> string\n\
1396\n\
1397Read a string from standard input. The trailing newline is stripped.\n\
1398If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1399On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1400is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001401
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001402
Guido van Rossum79f25d91997-04-29 20:08:16 +00001403static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001404builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001405{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001406 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001407}
1408
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001409PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001410"repr(object) -> string\n\
1411\n\
1412Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001413For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001414
1415
Guido van Rossum79f25d91997-04-29 20:08:16 +00001416static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001417builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001418{
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001419#define UNDEF_NDIGITS (-0x7fffffff) /* Unlikely ndigits value */
1420 static PyObject *round_str = NULL;
1421 int ndigits = UNDEF_NDIGITS;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001422 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001423 PyObject *number, *round;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001424
Alex Martelliae211f92007-08-22 23:21:33 +00001425 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|i:round",
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001426 kwlist, &number, &ndigits))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001427 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00001428
Guido van Rossum15d3d042007-08-24 02:02:45 +00001429 if (Py_Type(number)->tp_dict == NULL) {
1430 if (PyType_Ready(Py_Type(number)) < 0)
1431 return NULL;
1432 }
1433
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001434 if (round_str == NULL) {
1435 round_str = PyUnicode_FromString("__round__");
1436 if (round_str == NULL)
Alex Martelliae211f92007-08-22 23:21:33 +00001437 return NULL;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001438 }
1439
1440 round = _PyType_Lookup(Py_Type(number), round_str);
1441 if (round == NULL) {
1442 PyErr_Format(PyExc_TypeError,
1443 "type %.100s doesn't define __round__ method",
1444 Py_Type(number)->tp_name);
Alex Martelliae211f92007-08-22 23:21:33 +00001445 return NULL;
1446 }
1447
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001448 if (ndigits == UNDEF_NDIGITS)
1449 return PyObject_CallFunction(round, "O", number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001450 else
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001451 return PyObject_CallFunction(round, "Oi", number, ndigits);
1452#undef UNDEF_NDIGITS
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001453}
1454
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001455PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001456"round(number[, ndigits]) -> floating point number\n\
1457\n\
1458Round a number to a given precision in decimal digits (default 0 digits).\n\
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001459This returns an int when called with one argument, otherwise a float.\n\
1460Precision may be negative.");
1461
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001462
Raymond Hettinger64958a12003-12-17 20:43:33 +00001463static PyObject *
1464builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1465{
1466 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
1467 PyObject *callable;
Martin v. Löwis15e62742006-02-27 16:46:16 +00001468 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001469 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001470
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001471 /* args 1-4 should match listsort in Objects/listobject.c */
Armin Rigo71d7e702005-09-20 18:13:03 +00001472 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
1473 kwlist, &seq, &compare, &keyfunc, &reverse))
1474 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001475
1476 newlist = PySequence_List(seq);
1477 if (newlist == NULL)
1478 return NULL;
1479
1480 callable = PyObject_GetAttrString(newlist, "sort");
1481 if (callable == NULL) {
1482 Py_DECREF(newlist);
1483 return NULL;
1484 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001485
Raymond Hettinger64958a12003-12-17 20:43:33 +00001486 newargs = PyTuple_GetSlice(args, 1, 4);
1487 if (newargs == NULL) {
1488 Py_DECREF(newlist);
1489 Py_DECREF(callable);
1490 return NULL;
1491 }
1492
1493 v = PyObject_Call(callable, newargs, kwds);
1494 Py_DECREF(newargs);
1495 Py_DECREF(callable);
1496 if (v == NULL) {
1497 Py_DECREF(newlist);
1498 return NULL;
1499 }
1500 Py_DECREF(v);
1501 return newlist;
1502}
1503
1504PyDoc_STRVAR(sorted_doc,
1505"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001506
Guido van Rossum79f25d91997-04-29 20:08:16 +00001507static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001508builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001509{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001510 PyObject *v = NULL;
1511 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001512
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001513 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001514 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001515 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001516 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001517 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001518 if (!PyErr_Occurred())
1519 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001520 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001521 }
1522 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001523 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001524 }
1525 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001526 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001527 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001528 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001529 "vars() argument must have __dict__ attribute");
1530 return NULL;
1531 }
1532 }
1533 return d;
1534}
1535
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001536PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001537"vars([object]) -> dictionary\n\
1538\n\
1539Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001540With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001541
Alex Martelli86d8b342007-08-22 22:39:42 +00001542static PyObject *
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001543builtin_trunc(PyObject *self, PyObject *number)
Alex Martelli86d8b342007-08-22 22:39:42 +00001544{
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001545 static PyObject *trunc_str = NULL;
1546 PyObject *trunc;
1547
Guido van Rossum15d3d042007-08-24 02:02:45 +00001548 if (Py_Type(number)->tp_dict == NULL) {
1549 if (PyType_Ready(Py_Type(number)) < 0)
1550 return NULL;
1551 }
1552
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001553 if (trunc_str == NULL) {
1554 trunc_str = PyUnicode_FromString("__trunc__");
1555 if (trunc_str == NULL)
1556 return NULL;
1557 }
1558
1559 trunc = _PyType_Lookup(Py_Type(number), trunc_str);
1560 if (trunc == NULL) {
1561 PyErr_Format(PyExc_TypeError,
1562 "type %.100s doesn't define __trunc__ method",
1563 Py_Type(number)->tp_name);
Alex Martelli86d8b342007-08-22 22:39:42 +00001564 return NULL;
1565 }
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001566 return PyObject_CallFunction(trunc, "O", number);
Alex Martelli86d8b342007-08-22 22:39:42 +00001567}
1568
1569PyDoc_STRVAR(trunc_doc,
1570"trunc(Real) -> Integral\n\
1571\n\
1572returns the integral closest to x between 0 and x.");
1573
1574
Alex Martellia70b1912003-04-22 08:12:33 +00001575
1576static PyObject*
1577builtin_sum(PyObject *self, PyObject *args)
1578{
1579 PyObject *seq;
1580 PyObject *result = NULL;
1581 PyObject *temp, *item, *iter;
1582
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001583 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001584 return NULL;
1585
1586 iter = PyObject_GetIter(seq);
1587 if (iter == NULL)
1588 return NULL;
1589
1590 if (result == NULL) {
1591 result = PyInt_FromLong(0);
1592 if (result == NULL) {
1593 Py_DECREF(iter);
1594 return NULL;
1595 }
1596 } else {
1597 /* reject string values for 'start' parameter */
1598 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
1599 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001600 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001601 Py_DECREF(iter);
1602 return NULL;
1603 }
Alex Martelli41c9f882003-04-22 09:24:48 +00001604 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001605 }
1606
1607 for(;;) {
1608 item = PyIter_Next(iter);
1609 if (item == NULL) {
1610 /* error, or end-of-sequence */
1611 if (PyErr_Occurred()) {
1612 Py_DECREF(result);
1613 result = NULL;
1614 }
1615 break;
1616 }
Alex Martellia253e182003-10-25 23:24:14 +00001617 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001618 Py_DECREF(result);
1619 Py_DECREF(item);
1620 result = temp;
1621 if (result == NULL)
1622 break;
1623 }
1624 Py_DECREF(iter);
1625 return result;
1626}
1627
1628PyDoc_STRVAR(sum_doc,
Thomas Wouters89f507f2006-12-13 04:49:30 +00001629"sum(sequence[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00001630\n\
1631Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00001632of parameter 'start' (which defaults to 0). When the sequence is\n\
1633empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00001634
1635
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001636static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001637builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001638{
1639 PyObject *inst;
1640 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001641 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001642
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001643 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001644 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001645
Guido van Rossum823649d2001-03-21 18:40:58 +00001646 retval = PyObject_IsInstance(inst, cls);
1647 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001648 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001649 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001650}
1651
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001652PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001653"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001654\n\
1655Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001656With a type as second argument, return whether that is the object's type.\n\
1657The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001658isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001659
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001660
1661static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001662builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001663{
1664 PyObject *derived;
1665 PyObject *cls;
1666 int retval;
1667
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001668 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001669 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001670
Guido van Rossum823649d2001-03-21 18:40:58 +00001671 retval = PyObject_IsSubclass(derived, cls);
1672 if (retval < 0)
1673 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001674 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001675}
1676
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001677PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001678"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001679\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00001680Return whether class C is a subclass (i.e., a derived class) of class B.\n\
1681When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
1682is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001683
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001684
Barry Warsawbd599b52000-08-03 15:45:29 +00001685static PyObject*
1686builtin_zip(PyObject *self, PyObject *args)
1687{
Guido van Rossumb65fb332006-08-25 23:26:40 +00001688 /* args must be a tuple */
1689 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00001690
Guido van Rossumb65fb332006-08-25 23:26:40 +00001691 return _PyZip_CreateIter(args);
Barry Warsawbd599b52000-08-03 15:45:29 +00001692}
1693
1694
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001695PyDoc_STRVAR(zip_doc,
Guido van Rossum801f0d72006-08-24 19:48:10 +00001696"zip(it1 [, it2 [...]]) -> iter([(it1[0], it2[0] ...), ...])\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00001697\n\
Guido van Rossum801f0d72006-08-24 19:48:10 +00001698Return an iterator yielding tuples, where each tuple contains the\n\
1699corresponding element from each of the argument iterables.\n\
1700The returned iterator ends when the shortest argument iterable is exhausted.\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001701(This is identical to itertools.izip().)");
Barry Warsawbd599b52000-08-03 15:45:29 +00001702
1703
Guido van Rossum79f25d91997-04-29 20:08:16 +00001704static PyMethodDef builtin_methods[] = {
Guido van Rossum52cc1d82007-03-18 15:41:51 +00001705 {"__build_class__", (PyCFunction)builtin___build_class__,
1706 METH_VARARGS | METH_KEYWORDS, build_class_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001707 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001708 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00001709 {"all", builtin_all, METH_O, all_doc},
1710 {"any", builtin_any, METH_O, any_doc},
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001711 {"bin", builtin_bin, METH_O, bin_doc},
Walter Dörwalde7efd592007-06-05 20:07:21 +00001712 {"chr", builtin_chr, METH_VARARGS, chr_doc},
1713 {"chr8", builtin_chr8, METH_VARARGS, chr8_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001714 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
Guido van Rossumd8faa362007-04-27 19:54:29 +00001715 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001716 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
1717 {"dir", builtin_dir, METH_VARARGS, dir_doc},
1718 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
1719 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00001720 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001721 {"filter", builtin_filter, METH_VARARGS, filter_doc},
Eric Smith8c663262007-08-25 02:26:07 +00001722 {"format", builtin_format, METH_VARARGS, format_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001723 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
1724 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
1725 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
1726 {"hash", builtin_hash, METH_O, hash_doc},
1727 {"hex", builtin_hex, METH_O, hex_doc},
1728 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00001729 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001730 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
1731 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
1732 {"iter", builtin_iter, METH_VARARGS, iter_doc},
1733 {"len", builtin_len, METH_O, len_doc},
1734 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
1735 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001736 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
1737 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandla18af4e2007-04-21 15:47:16 +00001738 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001739 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001740 {"ord", builtin_ord, METH_O, ord_doc},
1741 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00001742 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001743 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001744 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001745 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00001746 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00001747 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001748 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Alex Martelli86d8b342007-08-22 22:39:42 +00001749 {"trunc", builtin_trunc, METH_O, trunc_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001750 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00001751 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00001752};
1753
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001754PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001755"Built-in functions, exceptions, and other objects.\n\
1756\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001757Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001758
Guido van Rossum25ce5661997-08-02 03:10:38 +00001759PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001760_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001761{
Fred Drake5550de32000-06-20 04:54:19 +00001762 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001763 mod = Py_InitModule4("__builtin__", builtin_methods,
1764 builtin_doc, (PyObject *)NULL,
1765 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001766 if (mod == NULL)
1767 return NULL;
1768 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00001769
Tim Peters7571a0f2003-03-23 17:52:28 +00001770#ifdef Py_TRACE_REFS
1771 /* __builtin__ exposes a number of statically allocated objects
1772 * that, before this code was added in 2.3, never showed up in
1773 * the list of "all objects" maintained by Py_TRACE_REFS. As a
1774 * result, programs leaking references to None and False (etc)
1775 * couldn't be diagnosed by examining sys.getobjects(0).
1776 */
1777#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
1778#else
1779#define ADD_TO_ALL(OBJECT) (void)0
1780#endif
1781
Tim Peters4b7625e2001-09-13 21:37:17 +00001782#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00001783 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
1784 return NULL; \
1785 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00001786
1787 SETBUILTIN("None", Py_None);
1788 SETBUILTIN("Ellipsis", Py_Ellipsis);
1789 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001790 SETBUILTIN("False", Py_False);
1791 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00001792 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001793 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001794 SETBUILTIN("buffer", &PyBuffer_Type);
Travis E. Oliphantb99f7622007-08-18 11:21:56 +00001795 SETBUILTIN("memoryview", &PyMemoryView_Type);
Guido van Rossum4dfe8a12006-04-22 23:28:04 +00001796 SETBUILTIN("bytes", &PyBytes_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001797 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001798#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00001799 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001800#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00001801 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00001802 SETBUILTIN("enumerate", &PyEnum_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001803 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00001804 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001805 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00001806 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001807 SETBUILTIN("list", &PyList_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001808 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossum805365e2007-05-07 22:24:25 +00001809 SETBUILTIN("range", &PyRange_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00001810 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00001811 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001812 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001813 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Guido van Rossum572dbf82007-04-27 23:53:51 +00001814 SETBUILTIN("str", &PyUnicode_Type);
Guido van Rossum84fc66d2007-05-03 17:18:26 +00001815 SETBUILTIN("str8", &PyString_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001816 SETBUILTIN("super", &PySuper_Type);
1817 SETBUILTIN("tuple", &PyTuple_Type);
1818 SETBUILTIN("type", &PyType_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001819 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00001820 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
1821 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001822 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00001823 }
1824 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00001825
Guido van Rossum25ce5661997-08-02 03:10:38 +00001826 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00001827#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00001828#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00001829}