blob: 284910d9eae777cb20047520bc899fb8b0d4bc7b [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
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000406 if (PyUnicode_Check(cmd)) {
407 cmd = _PyUnicode_AsDefaultEncodedString(cmd, NULL);
408 if (cmd == NULL)
409 return NULL;
410 }
Guido van Rossuma4b8d1d2007-08-27 15:02:28 +0000411 else if (!PyObject_CheckReadBuffer(cmd)) {
412 PyErr_SetString(PyExc_TypeError,
413 "eval()/exec() arg 1 must be a string, bytes or code object");
414 return NULL;
415 }
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000416 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &size) < 0) {
417 return NULL;
418 }
419 if (strlen(str) != size) {
420 PyErr_SetString(PyExc_TypeError,
421 "source code string cannot contain null bytes");
422 return NULL;
423 }
424 return str;
425}
426
Guido van Rossum79f25d91997-04-29 20:08:16 +0000427static PyObject *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000428builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000429{
430 char *str;
431 char *filename;
432 char *startstr;
433 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000434 int dont_inherit = 0;
435 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000436 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000437 PyObject *cmd;
Guido van Rossumd8faa362007-04-27 19:54:29 +0000438 static char *kwlist[] = {"source", "filename", "mode", "flags",
439 "dont_inherit", NULL};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000440
Guido van Rossumd8faa362007-04-27 19:54:29 +0000441 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
442 kwlist, &cmd, &filename, &startstr,
443 &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000444 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000445
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000446 cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000447
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000448 str = source_as_string(cmd);
449 if (str == NULL)
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000450 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000451
Guido van Rossum5b722181993-03-30 17:46:03 +0000452 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000453 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000454 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000455 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000456 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000457 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000458 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000459 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000460 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000461 return NULL;
Guido van Rossum5b722181993-03-30 17:46:03 +0000462 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000463
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000464 if (supplied_flags &
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000465 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000466 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000467 PyErr_SetString(PyExc_ValueError,
468 "compile(): unrecognised flags");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000469 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000470 }
471 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
472
Tim Peters6cd6a822001-08-17 22:11:27 +0000473 if (!dont_inherit) {
474 PyEval_MergeCompilerFlags(&cf);
475 }
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000476 return Py_CompileStringFlags(str, filename, start, &cf);
Guido van Rossum5b722181993-03-30 17:46:03 +0000477}
478
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000479PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000480"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000481\n\
482Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000483into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000484The filename will be used for run-time error messages.\n\
485The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000486single (interactive) statement, or 'eval' to compile an expression.\n\
487The flags argument, if present, controls which future statements influence\n\
488the compilation of the code.\n\
489The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
490the effects of any future statements in effect in the code calling\n\
491compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000492in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000493
Guido van Rossum79f25d91997-04-29 20:08:16 +0000494static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000495builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000496{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000497 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000498
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000499 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000500 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000501 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000502}
503
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000504PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000505"dir([object]) -> list of strings\n"
506"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000507"If called without an argument, return the names in the current scope.\n"
508"Else, return an alphabetized list of names comprising (some of) the attributes\n"
509"of the given object, and of attributes reachable from it.\n"
510"If the object supplies a method named __dir__, it will be used; otherwise\n"
511"the default dir() logic is used and returns:\n"
512" for a module object: the module's attributes.\n"
513" for a class object: its attributes, and recursively the attributes\n"
514" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000515" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000516" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000517
Guido van Rossum79f25d91997-04-29 20:08:16 +0000518static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000519builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000520{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000521 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000522
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000523 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000524 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000525 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000526}
527
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000528PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000529"divmod(x, y) -> (div, mod)\n\
530\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000531Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000532
533
Guido van Rossum79f25d91997-04-29 20:08:16 +0000534static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000535builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000536{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000537 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000538 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000539 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000540 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000541
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000542 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000543 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000544 if (locals != Py_None && !PyMapping_Check(locals)) {
545 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000546 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000547 }
548 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000549 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000550 "globals must be a real dict; try eval(expr, {}, mapping)"
551 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000552 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000553 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000554 if (globals == Py_None) {
555 globals = PyEval_GetGlobals();
556 if (locals == Py_None)
557 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000558 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000559 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000560 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000561
Georg Brandl77c85e62005-09-15 10:46:13 +0000562 if (globals == NULL || locals == NULL) {
563 PyErr_SetString(PyExc_TypeError,
564 "eval must be given globals and locals "
565 "when called without a frame");
566 return NULL;
567 }
568
Guido van Rossum79f25d91997-04-29 20:08:16 +0000569 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
570 if (PyDict_SetItemString(globals, "__builtins__",
571 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000572 return NULL;
573 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000574
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000575 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000576 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000577 PyErr_SetString(PyExc_TypeError,
578 "code object passed to eval() may not contain free variables");
579 return NULL;
580 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000581 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000582 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000583
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000584 str = source_as_string(cmd);
585 if (str == NULL)
Guido van Rossum94390a41992-08-14 15:14:30 +0000586 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000587
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000588 while (*str == ' ' || *str == '\t')
589 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000590
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000591 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Tim Peters9fa96be2001-08-17 23:04:59 +0000592 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000593 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
594 Py_XDECREF(tmp);
595 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000596}
597
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000598PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000599"eval(source[, globals[, locals]]) -> value\n\
600\n\
601Evaluate the source in the context of globals and locals.\n\
602The source may be a string representing a Python expression\n\
603or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000604The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000605defaulting to the current globals and locals.\n\
606If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000607
Georg Brandl7cae87c2006-09-06 06:51:57 +0000608static PyObject *
609builtin_exec(PyObject *self, PyObject *args)
610{
611 PyObject *v;
612 PyObject *prog, *globals = Py_None, *locals = Py_None;
613 int plain = 0;
614
615 if (!PyArg_ParseTuple(args, "O|OO:exec", &prog, &globals, &locals))
616 return NULL;
617
618 if (globals == Py_None) {
619 globals = PyEval_GetGlobals();
620 if (locals == Py_None) {
621 locals = PyEval_GetLocals();
622 plain = 1;
623 }
624 if (!globals || !locals) {
625 PyErr_SetString(PyExc_SystemError,
626 "globals and locals cannot be NULL");
627 return NULL;
628 }
629 }
630 else if (locals == Py_None)
631 locals = globals;
Neal Norwitz6ea45d32007-08-26 04:19:43 +0000632 if (!PyUnicode_Check(prog) &&
Guido van Rossumda5b8f22007-06-12 23:30:11 +0000633 !PyCode_Check(prog)) {
Georg Brandl7cae87c2006-09-06 06:51:57 +0000634 PyErr_Format(PyExc_TypeError,
635 "exec() arg 1 must be a string, file, or code "
636 "object, not %.100s", prog->ob_type->tp_name);
637 return NULL;
638 }
639 if (!PyDict_Check(globals)) {
640 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
641 globals->ob_type->tp_name);
642 return NULL;
643 }
644 if (!PyMapping_Check(locals)) {
645 PyErr_Format(PyExc_TypeError,
646 "arg 3 must be a mapping or None, not %.100s",
647 locals->ob_type->tp_name);
648 return NULL;
649 }
650 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
651 if (PyDict_SetItemString(globals, "__builtins__",
652 PyEval_GetBuiltins()) != 0)
653 return NULL;
654 }
655
656 if (PyCode_Check(prog)) {
657 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
658 PyErr_SetString(PyExc_TypeError,
659 "code object passed to exec() may not "
660 "contain free variables");
661 return NULL;
662 }
663 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
664 }
Georg Brandl7cae87c2006-09-06 06:51:57 +0000665 else {
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000666 char *str = source_as_string(prog);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000667 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000668 if (str == NULL)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000669 return NULL;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000670 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000671 if (PyEval_MergeCompilerFlags(&cf))
672 v = PyRun_StringFlags(str, Py_file_input, globals,
673 locals, &cf);
674 else
675 v = PyRun_String(str, Py_file_input, globals, locals);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000676 }
677 if (v == NULL)
678 return NULL;
679 Py_DECREF(v);
680 Py_RETURN_NONE;
681}
682
683PyDoc_STRVAR(exec_doc,
684"exec(object[, globals[, locals]])\n\
685\n\
686Read and execute code from a object, which can be a string, a code\n\
687object or a file object.\n\
688The globals and locals are dictionaries, defaulting to the current\n\
689globals and locals. If only globals is given, locals defaults to it.");
690
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000691
Guido van Rossum79f25d91997-04-29 20:08:16 +0000692static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000693builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000694{
Neal Norwitz6ea45d32007-08-26 04:19:43 +0000695 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000696 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000697
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000698 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000699 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000700
Martin v. Löwis5b222132007-06-10 09:51:05 +0000701 if (!PyUnicode_Check(name)) {
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000702 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000703 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000704 return NULL;
705 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000706 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000707 if (result == NULL && dflt != NULL &&
708 PyErr_ExceptionMatches(PyExc_AttributeError))
709 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000710 PyErr_Clear();
711 Py_INCREF(dflt);
712 result = dflt;
713 }
714 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000715}
716
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000717PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000718"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000719\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000720Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
721When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000722exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000723
724
Guido van Rossum79f25d91997-04-29 20:08:16 +0000725static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000726builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000727{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000728 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000729
Guido van Rossum79f25d91997-04-29 20:08:16 +0000730 d = PyEval_GetGlobals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000731 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000732 return d;
733}
734
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000735PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000736"globals() -> dictionary\n\
737\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000738Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000739
740
Guido van Rossum79f25d91997-04-29 20:08:16 +0000741static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000742builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000743{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000744 PyObject *v;
745 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000746
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000747 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000748 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000749 if (!PyUnicode_Check(name)) {
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000750 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000751 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000752 return NULL;
753 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000754 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000755 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000756 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000757 Py_INCREF(Py_False);
758 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000759 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000760 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000761 Py_INCREF(Py_True);
762 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000763}
764
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000765PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000766"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000767\n\
768Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000769(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000770
771
Guido van Rossum79f25d91997-04-29 20:08:16 +0000772static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000773builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000774{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000775 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000776}
777
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000778PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000779"id(object) -> integer\n\
780\n\
781Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000782simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000783
784
Guido van Rossum79f25d91997-04-29 20:08:16 +0000785static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000786builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000787{
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000788 PyObject *itertools, *imap, *result;
789 itertools = PyImport_ImportModule("itertools");
790 if (itertools == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000791 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000792 imap = PyObject_GetAttrString(itertools, "imap");
793 Py_DECREF(itertools);
794 if (imap == NULL)
Tim Peters4e9afdc2001-05-03 23:54:49 +0000795 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000796 result = PyObject_Call(imap, args, NULL);
797 Py_DECREF(imap);
Tim Peters4e9afdc2001-05-03 23:54:49 +0000798 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000799}
800
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000801PyDoc_STRVAR(map_doc,
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000802"map(function, iterable[, iterable, ...]) -> iterator\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000803\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000804Return an iterator yielding the results of applying the function to the\n\
805items of the argument iterables(s). If more than one iterable is given,\n\
806the function is called with an argument list consisting of the\n\
807corresponding item of each iterable, until an iterable is exhausted.\n\
808If the function is None, 'lambda *a: a' is assumed.\n\
809(This is identical to itertools.imap().)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000810
811
Guido van Rossum79f25d91997-04-29 20:08:16 +0000812static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +0000813builtin_next(PyObject *self, PyObject *args)
814{
815 PyObject *it, *res;
816 PyObject *def = NULL;
817
818 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
819 return NULL;
820 if (!PyIter_Check(it)) {
821 PyErr_Format(PyExc_TypeError,
822 "%.200s object is not an iterator", it->ob_type->tp_name);
823 return NULL;
824 }
825
826 res = (*it->ob_type->tp_iternext)(it);
827 if (res == NULL) {
828 if (def) {
829 if (PyErr_Occurred() &&
830 !PyErr_ExceptionMatches(PyExc_StopIteration))
831 return NULL;
832 PyErr_Clear();
833 Py_INCREF(def);
834 return def;
835 } else if (PyErr_Occurred()) {
836 return NULL;
837 } else {
838 PyErr_SetNone(PyExc_StopIteration);
839 return NULL;
840 }
841 }
842 return res;
843}
844
845PyDoc_STRVAR(next_doc,
846"next(iterator[, default])\n\
847\n\
848Return the next item from the iterator. If default is given and the iterator\n\
849is exhausted, it is returned instead of raising StopIteration.");
850
851
852static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000853builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000854{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000855 PyObject *v;
856 PyObject *name;
857 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000858
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000859 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000860 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000861 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000862 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000863 Py_INCREF(Py_None);
864 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000865}
866
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000867PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000868"setattr(object, name, value)\n\
869\n\
870Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000871``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000872
873
Guido van Rossum79f25d91997-04-29 20:08:16 +0000874static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000875builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000876{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000877 PyObject *v;
878 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000879
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000880 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +0000881 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000882 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000883 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000884 Py_INCREF(Py_None);
885 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +0000886}
887
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000888PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +0000889"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000890\n\
891Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000892``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000893
894
Guido van Rossum79f25d91997-04-29 20:08:16 +0000895static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000896builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000897{
Guido van Rossum9bfef441993-03-29 10:43:31 +0000898 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000899
Guido van Rossum79f25d91997-04-29 20:08:16 +0000900 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000901 if (x == -1)
902 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000903 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000904}
905
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000906PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000907"hash(object) -> integer\n\
908\n\
909Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000910the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000911
912
Guido van Rossum79f25d91997-04-29 20:08:16 +0000913static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000914builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +0000915{
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000916 return PyNumber_ToBase(v, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +0000917}
918
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000919PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000920"hex(number) -> string\n\
921\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000922Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000923
924
Guido van Rossum79f25d91997-04-29 20:08:16 +0000925static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000926builtin_iter(PyObject *self, PyObject *args)
927{
928 PyObject *v, *w = NULL;
929
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000930 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000931 return NULL;
932 if (w == NULL)
933 return PyObject_GetIter(v);
934 if (!PyCallable_Check(v)) {
935 PyErr_SetString(PyExc_TypeError,
936 "iter(v, w): v must be callable");
937 return NULL;
938 }
939 return PyCallIter_New(v, w);
940}
941
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000942PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000943"iter(collection) -> iterator\n\
944iter(callable, sentinel) -> iterator\n\
945\n\
946Get an iterator from an object. In the first form, the argument must\n\
947supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000948In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000949
950
951static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000952builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000953{
Martin v. Löwis18e16552006-02-15 17:27:45 +0000954 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000955
Jeremy Hylton03657cf2000-07-12 13:05:33 +0000956 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +0000957 if (res < 0 && PyErr_Occurred())
958 return NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000959 return PyInt_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000960}
961
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000962PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000963"len(object) -> integer\n\
964\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000965Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000966
967
Guido van Rossum79f25d91997-04-29 20:08:16 +0000968static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000969builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000970{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000971 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000972
Guido van Rossum79f25d91997-04-29 20:08:16 +0000973 d = PyEval_GetLocals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000974 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000975 return d;
976}
977
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000978PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000979"locals() -> dictionary\n\
980\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +0000981Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000982
983
Guido van Rossum79f25d91997-04-29 20:08:16 +0000984static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000985min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000986{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000987 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +0000988 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000989
Guido van Rossum79f25d91997-04-29 20:08:16 +0000990 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000991 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +0000992 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000993 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +0000994
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000995 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
996 keyfunc = PyDict_GetItemString(kwds, "key");
997 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000998 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000999 "%s() got an unexpected keyword argument", name);
1000 return NULL;
1001 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001002 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001003
Tim Petersc3074532001-05-03 07:00:32 +00001004 it = PyObject_GetIter(v);
1005 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001006 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001007
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001008 maxitem = NULL; /* the result */
1009 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001010 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001011 /* get the value from the key function */
1012 if (keyfunc != NULL) {
1013 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1014 if (val == NULL)
1015 goto Fail_it_item;
1016 }
1017 /* no key function; the value is the item */
1018 else {
1019 val = item;
1020 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001021 }
Tim Petersc3074532001-05-03 07:00:32 +00001022
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001023 /* maximum value and item are unset; set them */
1024 if (maxval == NULL) {
1025 maxitem = item;
1026 maxval = val;
1027 }
1028 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001029 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001030 int cmp = PyObject_RichCompareBool(val, maxval, op);
1031 if (cmp < 0)
1032 goto Fail_it_item_and_val;
1033 else if (cmp > 0) {
1034 Py_DECREF(maxval);
1035 Py_DECREF(maxitem);
1036 maxval = val;
1037 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001038 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001039 else {
1040 Py_DECREF(item);
1041 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001042 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001043 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001044 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001045 if (PyErr_Occurred())
1046 goto Fail_it;
1047 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001048 PyErr_Format(PyExc_ValueError,
1049 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001050 assert(maxitem == NULL);
1051 }
1052 else
1053 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001054 Py_DECREF(it);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001055 return maxitem;
1056
1057Fail_it_item_and_val:
1058 Py_DECREF(val);
1059Fail_it_item:
1060 Py_DECREF(item);
1061Fail_it:
1062 Py_XDECREF(maxval);
1063 Py_XDECREF(maxitem);
1064 Py_DECREF(it);
1065 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001066}
1067
Guido van Rossum79f25d91997-04-29 20:08:16 +00001068static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001069builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001070{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001071 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001072}
1073
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001074PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001075"min(iterable[, key=func]) -> value\n\
1076min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001077\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001078With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001079With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001080
1081
Guido van Rossum79f25d91997-04-29 20:08:16 +00001082static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001083builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001084{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001085 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001086}
1087
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001088PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001089"max(iterable[, key=func]) -> value\n\
1090max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001091\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001092With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001093With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001094
1095
Guido van Rossum79f25d91997-04-29 20:08:16 +00001096static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001097builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001098{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001099 return PyNumber_ToBase(v, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001100}
1101
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001102PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001103"oct(number) -> string\n\
1104\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001105Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001106
1107
Guido van Rossum79f25d91997-04-29 20:08:16 +00001108static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001109builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001110{
Guido van Rossum09095f32000-03-10 23:00:52 +00001111 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001112 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001113
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001114 if (PyString_Check(obj)) {
1115 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001116 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001117 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001118 return PyInt_FromLong(ord);
1119 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001120 }
1121 else if (PyUnicode_Check(obj)) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001122 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001123 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001124 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001125 return PyInt_FromLong(ord);
1126 }
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001127#ifndef Py_UNICODE_WIDE
1128 if (size == 2) {
1129 /* Decode a valid surrogate pair */
1130 int c0 = PyUnicode_AS_UNICODE(obj)[0];
1131 int c1 = PyUnicode_AS_UNICODE(obj)[1];
1132 if (0xD800 <= c0 && c0 <= 0xDBFF &&
1133 0xDC00 <= c1 && c1 <= 0xDFFF) {
1134 ord = ((((c0 & 0x03FF) << 10) | (c1 & 0x03FF)) +
1135 0x00010000);
1136 return PyInt_FromLong(ord);
1137 }
1138 }
1139#endif
Guido van Rossum6f376c42007-05-24 14:31:33 +00001140 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001141 else if (PyBytes_Check(obj)) {
1142 /* XXX Hopefully this is temporary */
1143 size = PyBytes_GET_SIZE(obj);
1144 if (size == 1) {
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001145 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
Guido van Rossum98f97462007-04-13 03:31:13 +00001146 return PyInt_FromLong(ord);
1147 }
1148 }
1149 else {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001150 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001151 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001152 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001153 return NULL;
1154 }
1155
Guido van Rossumad991772001-01-12 16:03:05 +00001156 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001157 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001158 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001159 size);
1160 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001161}
1162
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001163PyDoc_VAR(ord_doc) = PyDoc_STR(
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001164"ord(c) -> integer\n\
1165\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001166Return the integer ordinal of a one-character string."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001167)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001168#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001169PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001170"\nA valid surrogate pair is also accepted."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001171)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001172#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001173;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001174
1175
Guido van Rossum79f25d91997-04-29 20:08:16 +00001176static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001177builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001178{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001179 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001180
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001181 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001182 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001183 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001184}
1185
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001186PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001187"pow(x, y[, z]) -> number\n\
1188\n\
1189With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001190equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001191
1192
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001193
Guido van Rossum34343512006-11-30 22:13:52 +00001194static PyObject *
1195builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1196{
1197 static char *kwlist[] = {"sep", "end", "file", 0};
Georg Brandl257d3d92007-02-26 10:35:10 +00001198 static PyObject *dummy_args;
Guido van Rossum34343512006-11-30 22:13:52 +00001199 PyObject *sep = NULL, *end = NULL, *file = NULL;
1200 int i, err;
1201
Georg Brandl257d3d92007-02-26 10:35:10 +00001202 if (dummy_args == NULL) {
1203 if (!(dummy_args = PyTuple_New(0)))
1204 return NULL;
1205 }
Georg Brandl88fc6642007-02-09 21:28:07 +00001206 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
Guido van Rossum34343512006-11-30 22:13:52 +00001207 kwlist, &sep, &end, &file))
1208 return NULL;
1209 if (file == NULL || file == Py_None)
1210 file = PySys_GetObject("stdout");
1211
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001212 if (sep && sep != Py_None && !PyUnicode_Check(sep)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001213 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001214 "sep must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001215 sep->ob_type->tp_name);
1216 return NULL;
1217 }
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001218 if (end && end != Py_None && !PyUnicode_Check(end)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001219 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001220 "end must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001221 end->ob_type->tp_name);
1222 return NULL;
1223 }
Guido van Rossum34343512006-11-30 22:13:52 +00001224
1225 for (i = 0; i < PyTuple_Size(args); i++) {
1226 if (i > 0) {
1227 if (sep == NULL || sep == Py_None)
1228 err = PyFile_WriteString(" ", file);
1229 else
1230 err = PyFile_WriteObject(sep, file,
1231 Py_PRINT_RAW);
1232 if (err)
1233 return NULL;
1234 }
1235 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1236 Py_PRINT_RAW);
1237 if (err)
1238 return NULL;
1239 }
1240
1241 if (end == NULL || end == Py_None)
1242 err = PyFile_WriteString("\n", file);
1243 else
1244 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1245 if (err)
1246 return NULL;
1247
1248 Py_RETURN_NONE;
1249}
1250
1251PyDoc_STRVAR(print_doc,
Guido van Rossum452bf512007-02-09 05:32:43 +00001252"print(value, ..., file=None, sep=' ', end='\\n')\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001253\n\
1254Prints the values to a stream, or to sys.stdout by default.\n\
1255Optional keyword arguments:\n\
1256file: a file-like object (stream); defaults to the current sys.stdout.\n\
1257sep: string inserted between values, default a space.\n\
1258end: string appended after the last value, default a newline.");
1259
1260
Guido van Rossuma88a0332007-02-26 16:59:55 +00001261static PyObject *
1262builtin_input(PyObject *self, PyObject *args)
1263{
Guido van Rossumeba76962007-05-27 09:13:28 +00001264 PyObject *promptarg = NULL;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001265 PyObject *fin = PySys_GetObject("stdin");
1266 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossumeba76962007-05-27 09:13:28 +00001267 PyObject *ferr = PySys_GetObject("stderr");
1268 PyObject *tmp;
1269 long fd;
1270 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001271
Guido van Rossumeba76962007-05-27 09:13:28 +00001272 /* Parse arguments */
1273 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg))
Guido van Rossuma88a0332007-02-26 16:59:55 +00001274 return NULL;
1275
Guido van Rossumeba76962007-05-27 09:13:28 +00001276 /* Check that stdin/out/err are intact */
Guido van Rossuma88a0332007-02-26 16:59:55 +00001277 if (fin == NULL) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001278 PyErr_SetString(PyExc_RuntimeError,
1279 "input(): lost sys.stdin");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001280 return NULL;
1281 }
1282 if (fout == NULL) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001283 PyErr_SetString(PyExc_RuntimeError,
1284 "input(): lost sys.stdout");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001285 return NULL;
1286 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001287 if (ferr == NULL) {
1288 PyErr_SetString(PyExc_RuntimeError,
1289 "input(): lost sys.stderr");
1290 return NULL;
1291 }
1292
1293 /* First of all, flush stderr */
1294 tmp = PyObject_CallMethod(ferr, "flush", "");
1295 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001296 PyErr_Clear();
1297 else
1298 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001299
1300 /* We should only use (GNU) readline if Python's sys.stdin and
1301 sys.stdout are the same as C's stdin and stdout, because we
1302 need to pass it those. */
1303 tmp = PyObject_CallMethod(fin, "fileno", "");
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001304 if (tmp == NULL) {
1305 PyErr_Clear();
1306 tty = 0;
1307 }
1308 else {
Guido van Rossumeba76962007-05-27 09:13:28 +00001309 fd = PyInt_AsLong(tmp);
1310 Py_DECREF(tmp);
1311 if (fd < 0 && PyErr_Occurred())
1312 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001313 tty = fd == fileno(stdin) && isatty(fd);
1314 }
1315 if (tty) {
1316 tmp = PyObject_CallMethod(fout, "fileno", "");
1317 if (tmp == NULL)
1318 PyErr_Clear();
1319 else {
1320 fd = PyInt_AsLong(tmp);
1321 Py_DECREF(tmp);
1322 if (fd < 0 && PyErr_Occurred())
1323 return NULL;
1324 tty = fd == fileno(stdout) && isatty(fd);
1325 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001326 }
1327
1328 /* If we're interactive, use (GNU) readline */
1329 if (tty) {
Guido van Rossuma88a0332007-02-26 16:59:55 +00001330 PyObject *po;
1331 char *prompt;
1332 char *s;
1333 PyObject *result;
Guido van Rossumeba76962007-05-27 09:13:28 +00001334 tmp = PyObject_CallMethod(fout, "flush", "");
1335 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001336 PyErr_Clear();
1337 else
1338 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001339 if (promptarg != NULL) {
1340 po = PyObject_Str(promptarg);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001341 if (po == NULL)
1342 return NULL;
1343 prompt = PyString_AsString(po);
Guido van Rossumeba76962007-05-27 09:13:28 +00001344 if (prompt == NULL) {
1345 Py_DECREF(po);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001346 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001347 }
Guido van Rossuma88a0332007-02-26 16:59:55 +00001348 }
1349 else {
1350 po = NULL;
1351 prompt = "";
1352 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001353 s = PyOS_Readline(stdin, stdout, prompt);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001354 Py_XDECREF(po);
1355 if (s == NULL) {
1356 if (!PyErr_Occurred())
1357 PyErr_SetNone(PyExc_KeyboardInterrupt);
1358 return NULL;
1359 }
1360 if (*s == '\0') {
1361 PyErr_SetNone(PyExc_EOFError);
1362 result = NULL;
1363 }
1364 else { /* strip trailing '\n' */
1365 size_t len = strlen(s);
1366 if (len > PY_SSIZE_T_MAX) {
1367 PyErr_SetString(PyExc_OverflowError,
1368 "input: input too long");
1369 result = NULL;
1370 }
1371 else {
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001372 result = PyUnicode_FromStringAndSize(s, len-1);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001373 }
1374 }
1375 PyMem_FREE(s);
1376 return result;
1377 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001378
1379 /* Fallback if we're not interactive */
1380 if (promptarg != NULL) {
1381 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0)
Guido van Rossuma88a0332007-02-26 16:59:55 +00001382 return NULL;
1383 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001384 tmp = PyObject_CallMethod(fout, "flush", "");
1385 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001386 PyErr_Clear();
1387 else
1388 Py_DECREF(tmp);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001389 return PyFile_GetLine(fin, -1);
1390}
1391
1392PyDoc_STRVAR(input_doc,
1393"input([prompt]) -> string\n\
1394\n\
1395Read a string from standard input. The trailing newline is stripped.\n\
1396If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1397On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1398is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001399
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001400
Guido van Rossum79f25d91997-04-29 20:08:16 +00001401static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001402builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001403{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001404 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001405}
1406
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001407PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001408"repr(object) -> string\n\
1409\n\
1410Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001411For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001412
1413
Guido van Rossum79f25d91997-04-29 20:08:16 +00001414static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001415builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001416{
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001417#define UNDEF_NDIGITS (-0x7fffffff) /* Unlikely ndigits value */
1418 static PyObject *round_str = NULL;
1419 int ndigits = UNDEF_NDIGITS;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001420 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001421 PyObject *number, *round;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001422
Alex Martelliae211f92007-08-22 23:21:33 +00001423 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|i:round",
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001424 kwlist, &number, &ndigits))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001425 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00001426
Guido van Rossum15d3d042007-08-24 02:02:45 +00001427 if (Py_Type(number)->tp_dict == NULL) {
1428 if (PyType_Ready(Py_Type(number)) < 0)
1429 return NULL;
1430 }
1431
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001432 if (round_str == NULL) {
1433 round_str = PyUnicode_FromString("__round__");
1434 if (round_str == NULL)
Alex Martelliae211f92007-08-22 23:21:33 +00001435 return NULL;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001436 }
1437
1438 round = _PyType_Lookup(Py_Type(number), round_str);
1439 if (round == NULL) {
1440 PyErr_Format(PyExc_TypeError,
1441 "type %.100s doesn't define __round__ method",
1442 Py_Type(number)->tp_name);
Alex Martelliae211f92007-08-22 23:21:33 +00001443 return NULL;
1444 }
1445
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001446 if (ndigits == UNDEF_NDIGITS)
1447 return PyObject_CallFunction(round, "O", number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001448 else
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001449 return PyObject_CallFunction(round, "Oi", number, ndigits);
1450#undef UNDEF_NDIGITS
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001451}
1452
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001453PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001454"round(number[, ndigits]) -> floating point number\n\
1455\n\
1456Round a number to a given precision in decimal digits (default 0 digits).\n\
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001457This returns an int when called with one argument, otherwise a float.\n\
1458Precision may be negative.");
1459
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001460
Raymond Hettinger64958a12003-12-17 20:43:33 +00001461static PyObject *
1462builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1463{
1464 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
1465 PyObject *callable;
Martin v. Löwis15e62742006-02-27 16:46:16 +00001466 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001467 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001468
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001469 /* args 1-4 should match listsort in Objects/listobject.c */
Armin Rigo71d7e702005-09-20 18:13:03 +00001470 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
1471 kwlist, &seq, &compare, &keyfunc, &reverse))
1472 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001473
1474 newlist = PySequence_List(seq);
1475 if (newlist == NULL)
1476 return NULL;
1477
1478 callable = PyObject_GetAttrString(newlist, "sort");
1479 if (callable == NULL) {
1480 Py_DECREF(newlist);
1481 return NULL;
1482 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001483
Raymond Hettinger64958a12003-12-17 20:43:33 +00001484 newargs = PyTuple_GetSlice(args, 1, 4);
1485 if (newargs == NULL) {
1486 Py_DECREF(newlist);
1487 Py_DECREF(callable);
1488 return NULL;
1489 }
1490
1491 v = PyObject_Call(callable, newargs, kwds);
1492 Py_DECREF(newargs);
1493 Py_DECREF(callable);
1494 if (v == NULL) {
1495 Py_DECREF(newlist);
1496 return NULL;
1497 }
1498 Py_DECREF(v);
1499 return newlist;
1500}
1501
1502PyDoc_STRVAR(sorted_doc,
1503"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001504
Guido van Rossum79f25d91997-04-29 20:08:16 +00001505static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001506builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001507{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001508 PyObject *v = NULL;
1509 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001510
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001511 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001512 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001513 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001514 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001515 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001516 if (!PyErr_Occurred())
1517 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001518 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001519 }
1520 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001521 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001522 }
1523 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001524 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001525 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001526 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001527 "vars() argument must have __dict__ attribute");
1528 return NULL;
1529 }
1530 }
1531 return d;
1532}
1533
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001534PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001535"vars([object]) -> dictionary\n\
1536\n\
1537Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001538With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001539
Alex Martelli86d8b342007-08-22 22:39:42 +00001540static PyObject *
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001541builtin_trunc(PyObject *self, PyObject *number)
Alex Martelli86d8b342007-08-22 22:39:42 +00001542{
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001543 static PyObject *trunc_str = NULL;
1544 PyObject *trunc;
1545
Guido van Rossum15d3d042007-08-24 02:02:45 +00001546 if (Py_Type(number)->tp_dict == NULL) {
1547 if (PyType_Ready(Py_Type(number)) < 0)
1548 return NULL;
1549 }
1550
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001551 if (trunc_str == NULL) {
1552 trunc_str = PyUnicode_FromString("__trunc__");
1553 if (trunc_str == NULL)
1554 return NULL;
1555 }
1556
1557 trunc = _PyType_Lookup(Py_Type(number), trunc_str);
1558 if (trunc == NULL) {
1559 PyErr_Format(PyExc_TypeError,
1560 "type %.100s doesn't define __trunc__ method",
1561 Py_Type(number)->tp_name);
Alex Martelli86d8b342007-08-22 22:39:42 +00001562 return NULL;
1563 }
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001564 return PyObject_CallFunction(trunc, "O", number);
Alex Martelli86d8b342007-08-22 22:39:42 +00001565}
1566
1567PyDoc_STRVAR(trunc_doc,
1568"trunc(Real) -> Integral\n\
1569\n\
1570returns the integral closest to x between 0 and x.");
1571
1572
Alex Martellia70b1912003-04-22 08:12:33 +00001573
1574static PyObject*
1575builtin_sum(PyObject *self, PyObject *args)
1576{
1577 PyObject *seq;
1578 PyObject *result = NULL;
1579 PyObject *temp, *item, *iter;
1580
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001581 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001582 return NULL;
1583
1584 iter = PyObject_GetIter(seq);
1585 if (iter == NULL)
1586 return NULL;
1587
1588 if (result == NULL) {
1589 result = PyInt_FromLong(0);
1590 if (result == NULL) {
1591 Py_DECREF(iter);
1592 return NULL;
1593 }
1594 } else {
1595 /* reject string values for 'start' parameter */
1596 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
1597 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001598 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001599 Py_DECREF(iter);
1600 return NULL;
1601 }
Alex Martelli41c9f882003-04-22 09:24:48 +00001602 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001603 }
1604
1605 for(;;) {
1606 item = PyIter_Next(iter);
1607 if (item == NULL) {
1608 /* error, or end-of-sequence */
1609 if (PyErr_Occurred()) {
1610 Py_DECREF(result);
1611 result = NULL;
1612 }
1613 break;
1614 }
Alex Martellia253e182003-10-25 23:24:14 +00001615 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001616 Py_DECREF(result);
1617 Py_DECREF(item);
1618 result = temp;
1619 if (result == NULL)
1620 break;
1621 }
1622 Py_DECREF(iter);
1623 return result;
1624}
1625
1626PyDoc_STRVAR(sum_doc,
Thomas Wouters89f507f2006-12-13 04:49:30 +00001627"sum(sequence[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00001628\n\
1629Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00001630of parameter 'start' (which defaults to 0). When the sequence is\n\
1631empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00001632
1633
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001634static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001635builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001636{
1637 PyObject *inst;
1638 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001639 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001640
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001641 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001642 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001643
Guido van Rossum823649d2001-03-21 18:40:58 +00001644 retval = PyObject_IsInstance(inst, cls);
1645 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001646 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001647 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001648}
1649
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001650PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001651"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001652\n\
1653Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001654With a type as second argument, return whether that is the object's type.\n\
1655The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001656isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001657
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001658
1659static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001660builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001661{
1662 PyObject *derived;
1663 PyObject *cls;
1664 int retval;
1665
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001666 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001667 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001668
Guido van Rossum823649d2001-03-21 18:40:58 +00001669 retval = PyObject_IsSubclass(derived, cls);
1670 if (retval < 0)
1671 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001672 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001673}
1674
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001675PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001676"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001677\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00001678Return whether class C is a subclass (i.e., a derived class) of class B.\n\
1679When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
1680is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001681
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001682
Barry Warsawbd599b52000-08-03 15:45:29 +00001683static PyObject*
1684builtin_zip(PyObject *self, PyObject *args)
1685{
Guido van Rossumb65fb332006-08-25 23:26:40 +00001686 /* args must be a tuple */
1687 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00001688
Guido van Rossumb65fb332006-08-25 23:26:40 +00001689 return _PyZip_CreateIter(args);
Barry Warsawbd599b52000-08-03 15:45:29 +00001690}
1691
1692
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001693PyDoc_STRVAR(zip_doc,
Guido van Rossum801f0d72006-08-24 19:48:10 +00001694"zip(it1 [, it2 [...]]) -> iter([(it1[0], it2[0] ...), ...])\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00001695\n\
Guido van Rossum801f0d72006-08-24 19:48:10 +00001696Return an iterator yielding tuples, where each tuple contains the\n\
1697corresponding element from each of the argument iterables.\n\
1698The returned iterator ends when the shortest argument iterable is exhausted.\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001699(This is identical to itertools.izip().)");
Barry Warsawbd599b52000-08-03 15:45:29 +00001700
1701
Guido van Rossum79f25d91997-04-29 20:08:16 +00001702static PyMethodDef builtin_methods[] = {
Guido van Rossum52cc1d82007-03-18 15:41:51 +00001703 {"__build_class__", (PyCFunction)builtin___build_class__,
1704 METH_VARARGS | METH_KEYWORDS, build_class_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001705 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001706 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00001707 {"all", builtin_all, METH_O, all_doc},
1708 {"any", builtin_any, METH_O, any_doc},
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001709 {"bin", builtin_bin, METH_O, bin_doc},
Walter Dörwalde7efd592007-06-05 20:07:21 +00001710 {"chr", builtin_chr, METH_VARARGS, chr_doc},
1711 {"chr8", builtin_chr8, METH_VARARGS, chr8_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001712 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
Guido van Rossumd8faa362007-04-27 19:54:29 +00001713 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001714 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
1715 {"dir", builtin_dir, METH_VARARGS, dir_doc},
1716 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
1717 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00001718 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001719 {"filter", builtin_filter, METH_VARARGS, filter_doc},
Eric Smith8c663262007-08-25 02:26:07 +00001720 {"format", builtin_format, METH_VARARGS, format_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001721 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
1722 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
1723 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
1724 {"hash", builtin_hash, METH_O, hash_doc},
1725 {"hex", builtin_hex, METH_O, hex_doc},
1726 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00001727 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001728 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
1729 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
1730 {"iter", builtin_iter, METH_VARARGS, iter_doc},
1731 {"len", builtin_len, METH_O, len_doc},
1732 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
1733 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001734 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
1735 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandla18af4e2007-04-21 15:47:16 +00001736 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001737 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001738 {"ord", builtin_ord, METH_O, ord_doc},
1739 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00001740 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001741 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001742 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001743 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00001744 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00001745 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001746 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Alex Martelli86d8b342007-08-22 22:39:42 +00001747 {"trunc", builtin_trunc, METH_O, trunc_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001748 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00001749 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00001750};
1751
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001752PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001753"Built-in functions, exceptions, and other objects.\n\
1754\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001755Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001756
Guido van Rossum25ce5661997-08-02 03:10:38 +00001757PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001758_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001759{
Fred Drake5550de32000-06-20 04:54:19 +00001760 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001761 mod = Py_InitModule4("__builtin__", builtin_methods,
1762 builtin_doc, (PyObject *)NULL,
1763 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001764 if (mod == NULL)
1765 return NULL;
1766 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00001767
Tim Peters7571a0f2003-03-23 17:52:28 +00001768#ifdef Py_TRACE_REFS
1769 /* __builtin__ exposes a number of statically allocated objects
1770 * that, before this code was added in 2.3, never showed up in
1771 * the list of "all objects" maintained by Py_TRACE_REFS. As a
1772 * result, programs leaking references to None and False (etc)
1773 * couldn't be diagnosed by examining sys.getobjects(0).
1774 */
1775#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
1776#else
1777#define ADD_TO_ALL(OBJECT) (void)0
1778#endif
1779
Tim Peters4b7625e2001-09-13 21:37:17 +00001780#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00001781 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
1782 return NULL; \
1783 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00001784
1785 SETBUILTIN("None", Py_None);
1786 SETBUILTIN("Ellipsis", Py_Ellipsis);
1787 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001788 SETBUILTIN("False", Py_False);
1789 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00001790 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001791 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001792 SETBUILTIN("buffer", &PyBuffer_Type);
Travis E. Oliphantb99f7622007-08-18 11:21:56 +00001793 SETBUILTIN("memoryview", &PyMemoryView_Type);
Guido van Rossum4dfe8a12006-04-22 23:28:04 +00001794 SETBUILTIN("bytes", &PyBytes_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001795 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001796#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00001797 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001798#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00001799 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00001800 SETBUILTIN("enumerate", &PyEnum_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001801 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00001802 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001803 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00001804 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001805 SETBUILTIN("list", &PyList_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001806 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossum805365e2007-05-07 22:24:25 +00001807 SETBUILTIN("range", &PyRange_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00001808 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00001809 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001810 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001811 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Guido van Rossum572dbf82007-04-27 23:53:51 +00001812 SETBUILTIN("str", &PyUnicode_Type);
Guido van Rossum84fc66d2007-05-03 17:18:26 +00001813 SETBUILTIN("str8", &PyString_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001814 SETBUILTIN("super", &PySuper_Type);
1815 SETBUILTIN("tuple", &PyTuple_Type);
1816 SETBUILTIN("type", &PyType_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001817 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00001818 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
1819 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001820 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00001821 }
1822 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00001823
Guido van Rossum25ce5661997-08-02 03:10:38 +00001824 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00001825#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00001826#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00001827}