blob: 17f5b596fcfd91d183d320c702334ecb2c39e4a4 [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);
Martin v. Löwis5b222132007-06-10 09:51:05 +000043 if ((!PyString_Check(name) && !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;
634 if (!PyString_Check(prog) &&
635 !PyUnicode_Check(prog) &&
Guido van Rossumda5b8f22007-06-12 23:30:11 +0000636 !PyCode_Check(prog)) {
Georg Brandl7cae87c2006-09-06 06:51:57 +0000637 PyErr_Format(PyExc_TypeError,
638 "exec() arg 1 must be a string, file, or code "
639 "object, not %.100s", prog->ob_type->tp_name);
640 return NULL;
641 }
642 if (!PyDict_Check(globals)) {
643 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
644 globals->ob_type->tp_name);
645 return NULL;
646 }
647 if (!PyMapping_Check(locals)) {
648 PyErr_Format(PyExc_TypeError,
649 "arg 3 must be a mapping or None, not %.100s",
650 locals->ob_type->tp_name);
651 return NULL;
652 }
653 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
654 if (PyDict_SetItemString(globals, "__builtins__",
655 PyEval_GetBuiltins()) != 0)
656 return NULL;
657 }
658
659 if (PyCode_Check(prog)) {
660 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
661 PyErr_SetString(PyExc_TypeError,
662 "code object passed to exec() may not "
663 "contain free variables");
664 return NULL;
665 }
666 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
667 }
Georg Brandl7cae87c2006-09-06 06:51:57 +0000668 else {
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000669 char *str = source_as_string(prog);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000670 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000671 if (str == NULL)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000672 return NULL;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000673 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000674 if (PyEval_MergeCompilerFlags(&cf))
675 v = PyRun_StringFlags(str, Py_file_input, globals,
676 locals, &cf);
677 else
678 v = PyRun_String(str, Py_file_input, globals, locals);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000679 }
680 if (v == NULL)
681 return NULL;
682 Py_DECREF(v);
683 Py_RETURN_NONE;
684}
685
686PyDoc_STRVAR(exec_doc,
687"exec(object[, globals[, locals]])\n\
688\n\
689Read and execute code from a object, which can be a string, a code\n\
690object or a file object.\n\
691The globals and locals are dictionaries, defaulting to the current\n\
692globals and locals. If only globals is given, locals defaults to it.");
693
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000694
Guido van Rossum79f25d91997-04-29 20:08:16 +0000695static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000696builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000697{
Martin v. Löwis5b222132007-06-10 09:51:05 +0000698 PyObject *v, *result, *dflt = NULL, *release = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000699 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000700
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000701 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000702 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000703
704 if (PyString_Check(name)) {
705 release = PyString_AsDecodedObject(name, NULL, NULL);
706 if (!release)
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000707 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000708 name = release;
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000709 }
710
Martin v. Löwis5b222132007-06-10 09:51:05 +0000711 if (!PyUnicode_Check(name)) {
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000712 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000713 "getattr(): attribute name must be string");
Martin v. Löwis5b222132007-06-10 09:51:05 +0000714 Py_XDECREF(release);
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000715 return NULL;
716 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000717 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000718 if (result == NULL && dflt != NULL &&
719 PyErr_ExceptionMatches(PyExc_AttributeError))
720 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000721 PyErr_Clear();
722 Py_INCREF(dflt);
723 result = dflt;
724 }
Martin v. Löwis5b222132007-06-10 09:51:05 +0000725 Py_XDECREF(release);
Guido van Rossum950ff291998-06-29 13:38:57 +0000726 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000727}
728
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000729PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000730"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000731\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000732Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
733When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000734exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000735
736
Guido van Rossum79f25d91997-04-29 20:08:16 +0000737static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000738builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000739{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000740 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000741
Guido van Rossum79f25d91997-04-29 20:08:16 +0000742 d = PyEval_GetGlobals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000743 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000744 return d;
745}
746
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000747PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000748"globals() -> dictionary\n\
749\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000750Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000751
752
Guido van Rossum79f25d91997-04-29 20:08:16 +0000753static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000754builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000755{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000756 PyObject *v;
757 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000758
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000759 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000760 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000761 if (!PyUnicode_Check(name)) {
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000762 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000763 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000764 return NULL;
765 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000766 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000767 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000768 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000769 Py_INCREF(Py_False);
770 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000771 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000772 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000773 Py_INCREF(Py_True);
774 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000775}
776
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000777PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000778"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000779\n\
780Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000781(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000782
783
Guido van Rossum79f25d91997-04-29 20:08:16 +0000784static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000785builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000786{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000787 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000788}
789
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000790PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000791"id(object) -> integer\n\
792\n\
793Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000794simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000795
796
Guido van Rossum79f25d91997-04-29 20:08:16 +0000797static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000798builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000799{
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000800 PyObject *itertools, *imap, *result;
801 itertools = PyImport_ImportModule("itertools");
802 if (itertools == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000803 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000804 imap = PyObject_GetAttrString(itertools, "imap");
805 Py_DECREF(itertools);
806 if (imap == NULL)
Tim Peters4e9afdc2001-05-03 23:54:49 +0000807 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000808 result = PyObject_Call(imap, args, NULL);
809 Py_DECREF(imap);
Tim Peters4e9afdc2001-05-03 23:54:49 +0000810 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000811}
812
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000813PyDoc_STRVAR(map_doc,
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000814"map(function, iterable[, iterable, ...]) -> iterator\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000815\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000816Return an iterator yielding the results of applying the function to the\n\
817items of the argument iterables(s). If more than one iterable is given,\n\
818the function is called with an argument list consisting of the\n\
819corresponding item of each iterable, until an iterable is exhausted.\n\
820If the function is None, 'lambda *a: a' is assumed.\n\
821(This is identical to itertools.imap().)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000822
823
Guido van Rossum79f25d91997-04-29 20:08:16 +0000824static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +0000825builtin_next(PyObject *self, PyObject *args)
826{
827 PyObject *it, *res;
828 PyObject *def = NULL;
829
830 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
831 return NULL;
832 if (!PyIter_Check(it)) {
833 PyErr_Format(PyExc_TypeError,
834 "%.200s object is not an iterator", it->ob_type->tp_name);
835 return NULL;
836 }
837
838 res = (*it->ob_type->tp_iternext)(it);
839 if (res == NULL) {
840 if (def) {
841 if (PyErr_Occurred() &&
842 !PyErr_ExceptionMatches(PyExc_StopIteration))
843 return NULL;
844 PyErr_Clear();
845 Py_INCREF(def);
846 return def;
847 } else if (PyErr_Occurred()) {
848 return NULL;
849 } else {
850 PyErr_SetNone(PyExc_StopIteration);
851 return NULL;
852 }
853 }
854 return res;
855}
856
857PyDoc_STRVAR(next_doc,
858"next(iterator[, default])\n\
859\n\
860Return the next item from the iterator. If default is given and the iterator\n\
861is exhausted, it is returned instead of raising StopIteration.");
862
863
864static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000865builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000866{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000867 PyObject *v;
868 PyObject *name;
869 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000870
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000871 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000872 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000873 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000874 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000875 Py_INCREF(Py_None);
876 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000877}
878
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000879PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000880"setattr(object, name, value)\n\
881\n\
882Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000883``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000884
885
Guido van Rossum79f25d91997-04-29 20:08:16 +0000886static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000887builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000888{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000889 PyObject *v;
890 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000891
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000892 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +0000893 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000894 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000895 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000896 Py_INCREF(Py_None);
897 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +0000898}
899
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000900PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +0000901"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000902\n\
903Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000904``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000905
906
Guido van Rossum79f25d91997-04-29 20:08:16 +0000907static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000908builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000909{
Guido van Rossum9bfef441993-03-29 10:43:31 +0000910 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000911
Guido van Rossum79f25d91997-04-29 20:08:16 +0000912 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000913 if (x == -1)
914 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000915 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000916}
917
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000918PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000919"hash(object) -> integer\n\
920\n\
921Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000922the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000923
924
Guido van Rossum79f25d91997-04-29 20:08:16 +0000925static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000926builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +0000927{
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000928 return PyNumber_ToBase(v, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +0000929}
930
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000931PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000932"hex(number) -> string\n\
933\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000934Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000935
936
Guido van Rossum79f25d91997-04-29 20:08:16 +0000937static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000938builtin_iter(PyObject *self, PyObject *args)
939{
940 PyObject *v, *w = NULL;
941
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000942 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000943 return NULL;
944 if (w == NULL)
945 return PyObject_GetIter(v);
946 if (!PyCallable_Check(v)) {
947 PyErr_SetString(PyExc_TypeError,
948 "iter(v, w): v must be callable");
949 return NULL;
950 }
951 return PyCallIter_New(v, w);
952}
953
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000954PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000955"iter(collection) -> iterator\n\
956iter(callable, sentinel) -> iterator\n\
957\n\
958Get an iterator from an object. In the first form, the argument must\n\
959supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000960In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000961
962
963static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000964builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000965{
Martin v. Löwis18e16552006-02-15 17:27:45 +0000966 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000967
Jeremy Hylton03657cf2000-07-12 13:05:33 +0000968 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +0000969 if (res < 0 && PyErr_Occurred())
970 return NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000971 return PyInt_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000972}
973
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000974PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000975"len(object) -> integer\n\
976\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000977Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000978
979
Guido van Rossum79f25d91997-04-29 20:08:16 +0000980static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000981builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000982{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000983 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000984
Guido van Rossum79f25d91997-04-29 20:08:16 +0000985 d = PyEval_GetLocals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000986 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000987 return d;
988}
989
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000990PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000991"locals() -> dictionary\n\
992\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +0000993Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000994
995
Guido van Rossum79f25d91997-04-29 20:08:16 +0000996static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000997min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000998{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000999 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001000 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001001
Guido van Rossum79f25d91997-04-29 20:08:16 +00001002 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001003 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001004 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001005 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001006
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001007 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1008 keyfunc = PyDict_GetItemString(kwds, "key");
1009 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001010 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001011 "%s() got an unexpected keyword argument", name);
1012 return NULL;
1013 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001014 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001015
Tim Petersc3074532001-05-03 07:00:32 +00001016 it = PyObject_GetIter(v);
1017 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001018 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001019
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001020 maxitem = NULL; /* the result */
1021 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001022 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001023 /* get the value from the key function */
1024 if (keyfunc != NULL) {
1025 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1026 if (val == NULL)
1027 goto Fail_it_item;
1028 }
1029 /* no key function; the value is the item */
1030 else {
1031 val = item;
1032 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001033 }
Tim Petersc3074532001-05-03 07:00:32 +00001034
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001035 /* maximum value and item are unset; set them */
1036 if (maxval == NULL) {
1037 maxitem = item;
1038 maxval = val;
1039 }
1040 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001041 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001042 int cmp = PyObject_RichCompareBool(val, maxval, op);
1043 if (cmp < 0)
1044 goto Fail_it_item_and_val;
1045 else if (cmp > 0) {
1046 Py_DECREF(maxval);
1047 Py_DECREF(maxitem);
1048 maxval = val;
1049 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001050 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001051 else {
1052 Py_DECREF(item);
1053 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001054 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001055 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001056 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001057 if (PyErr_Occurred())
1058 goto Fail_it;
1059 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001060 PyErr_Format(PyExc_ValueError,
1061 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001062 assert(maxitem == NULL);
1063 }
1064 else
1065 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001066 Py_DECREF(it);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001067 return maxitem;
1068
1069Fail_it_item_and_val:
1070 Py_DECREF(val);
1071Fail_it_item:
1072 Py_DECREF(item);
1073Fail_it:
1074 Py_XDECREF(maxval);
1075 Py_XDECREF(maxitem);
1076 Py_DECREF(it);
1077 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001078}
1079
Guido van Rossum79f25d91997-04-29 20:08:16 +00001080static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001081builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001082{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001083 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001084}
1085
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001086PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001087"min(iterable[, key=func]) -> value\n\
1088min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001089\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001090With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001091With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001092
1093
Guido van Rossum79f25d91997-04-29 20:08:16 +00001094static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001095builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001096{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001097 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001098}
1099
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001100PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001101"max(iterable[, key=func]) -> value\n\
1102max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001103\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001104With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001105With two or more arguments, return the largest argument.");
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_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001110{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001111 return PyNumber_ToBase(v, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001112}
1113
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001114PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001115"oct(number) -> string\n\
1116\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001117Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001118
1119
Guido van Rossum79f25d91997-04-29 20:08:16 +00001120static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001121builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001122{
Guido van Rossum09095f32000-03-10 23:00:52 +00001123 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001124 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001125
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001126 if (PyString_Check(obj)) {
1127 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001128 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001129 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001130 return PyInt_FromLong(ord);
1131 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001132 }
1133 else if (PyUnicode_Check(obj)) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001134 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001135 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001136 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001137 return PyInt_FromLong(ord);
1138 }
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001139#ifndef Py_UNICODE_WIDE
1140 if (size == 2) {
1141 /* Decode a valid surrogate pair */
1142 int c0 = PyUnicode_AS_UNICODE(obj)[0];
1143 int c1 = PyUnicode_AS_UNICODE(obj)[1];
1144 if (0xD800 <= c0 && c0 <= 0xDBFF &&
1145 0xDC00 <= c1 && c1 <= 0xDFFF) {
1146 ord = ((((c0 & 0x03FF) << 10) | (c1 & 0x03FF)) +
1147 0x00010000);
1148 return PyInt_FromLong(ord);
1149 }
1150 }
1151#endif
Guido van Rossum6f376c42007-05-24 14:31:33 +00001152 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001153 else if (PyBytes_Check(obj)) {
1154 /* XXX Hopefully this is temporary */
1155 size = PyBytes_GET_SIZE(obj);
1156 if (size == 1) {
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001157 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
Guido van Rossum98f97462007-04-13 03:31:13 +00001158 return PyInt_FromLong(ord);
1159 }
1160 }
1161 else {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001162 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001163 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001164 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001165 return NULL;
1166 }
1167
Guido van Rossumad991772001-01-12 16:03:05 +00001168 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001169 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001170 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001171 size);
1172 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001173}
1174
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001175PyDoc_VAR(ord_doc) = PyDoc_STR(
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001176"ord(c) -> integer\n\
1177\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001178Return the integer ordinal of a one-character string."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001179)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001180#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001181PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001182"\nA valid surrogate pair is also accepted."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001183)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001184#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001185;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001186
1187
Guido van Rossum79f25d91997-04-29 20:08:16 +00001188static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001189builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001190{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001191 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001192
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001193 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001194 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001195 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001196}
1197
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001198PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001199"pow(x, y[, z]) -> number\n\
1200\n\
1201With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001202equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001203
1204
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001205
Guido van Rossum34343512006-11-30 22:13:52 +00001206static PyObject *
1207builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1208{
1209 static char *kwlist[] = {"sep", "end", "file", 0};
Georg Brandl257d3d92007-02-26 10:35:10 +00001210 static PyObject *dummy_args;
Guido van Rossum34343512006-11-30 22:13:52 +00001211 PyObject *sep = NULL, *end = NULL, *file = NULL;
1212 int i, err;
1213
Georg Brandl257d3d92007-02-26 10:35:10 +00001214 if (dummy_args == NULL) {
1215 if (!(dummy_args = PyTuple_New(0)))
1216 return NULL;
1217 }
Georg Brandl88fc6642007-02-09 21:28:07 +00001218 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
Guido van Rossum34343512006-11-30 22:13:52 +00001219 kwlist, &sep, &end, &file))
1220 return NULL;
1221 if (file == NULL || file == Py_None)
1222 file = PySys_GetObject("stdout");
1223
Georg Brandl16f3e032006-11-30 22:46:03 +00001224 if (sep && sep != Py_None && !PyString_Check(sep) &&
1225 !PyUnicode_Check(sep)) {
1226 PyErr_Format(PyExc_TypeError,
1227 "sep must be None, str or unicode, not %.200s",
1228 sep->ob_type->tp_name);
1229 return NULL;
1230 }
1231 if (end && end != Py_None && !PyString_Check(end) &&
1232 !PyUnicode_Check(end)) {
1233 PyErr_Format(PyExc_TypeError,
1234 "end must be None, str or unicode, not %.200s",
1235 end->ob_type->tp_name);
1236 return NULL;
1237 }
Guido van Rossum34343512006-11-30 22:13:52 +00001238
1239 for (i = 0; i < PyTuple_Size(args); i++) {
1240 if (i > 0) {
1241 if (sep == NULL || sep == Py_None)
1242 err = PyFile_WriteString(" ", file);
1243 else
1244 err = PyFile_WriteObject(sep, file,
1245 Py_PRINT_RAW);
1246 if (err)
1247 return NULL;
1248 }
1249 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1250 Py_PRINT_RAW);
1251 if (err)
1252 return NULL;
1253 }
1254
1255 if (end == NULL || end == Py_None)
1256 err = PyFile_WriteString("\n", file);
1257 else
1258 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1259 if (err)
1260 return NULL;
1261
1262 Py_RETURN_NONE;
1263}
1264
1265PyDoc_STRVAR(print_doc,
Guido van Rossum452bf512007-02-09 05:32:43 +00001266"print(value, ..., file=None, sep=' ', end='\\n')\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001267\n\
1268Prints the values to a stream, or to sys.stdout by default.\n\
1269Optional keyword arguments:\n\
1270file: a file-like object (stream); defaults to the current sys.stdout.\n\
1271sep: string inserted between values, default a space.\n\
1272end: string appended after the last value, default a newline.");
1273
1274
Guido van Rossuma88a0332007-02-26 16:59:55 +00001275static PyObject *
1276builtin_input(PyObject *self, PyObject *args)
1277{
Guido van Rossumeba76962007-05-27 09:13:28 +00001278 PyObject *promptarg = NULL;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001279 PyObject *fin = PySys_GetObject("stdin");
1280 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossumeba76962007-05-27 09:13:28 +00001281 PyObject *ferr = PySys_GetObject("stderr");
1282 PyObject *tmp;
1283 long fd;
1284 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001285
Guido van Rossumeba76962007-05-27 09:13:28 +00001286 /* Parse arguments */
1287 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg))
Guido van Rossuma88a0332007-02-26 16:59:55 +00001288 return NULL;
1289
Guido van Rossumeba76962007-05-27 09:13:28 +00001290 /* Check that stdin/out/err are intact */
Guido van Rossuma88a0332007-02-26 16:59:55 +00001291 if (fin == NULL) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001292 PyErr_SetString(PyExc_RuntimeError,
1293 "input(): lost sys.stdin");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001294 return NULL;
1295 }
1296 if (fout == NULL) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001297 PyErr_SetString(PyExc_RuntimeError,
1298 "input(): lost sys.stdout");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001299 return NULL;
1300 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001301 if (ferr == NULL) {
1302 PyErr_SetString(PyExc_RuntimeError,
1303 "input(): lost sys.stderr");
1304 return NULL;
1305 }
1306
1307 /* First of all, flush stderr */
1308 tmp = PyObject_CallMethod(ferr, "flush", "");
1309 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001310 PyErr_Clear();
1311 else
1312 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001313
1314 /* We should only use (GNU) readline if Python's sys.stdin and
1315 sys.stdout are the same as C's stdin and stdout, because we
1316 need to pass it those. */
1317 tmp = PyObject_CallMethod(fin, "fileno", "");
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001318 if (tmp == NULL) {
1319 PyErr_Clear();
1320 tty = 0;
1321 }
1322 else {
Guido van Rossumeba76962007-05-27 09:13:28 +00001323 fd = PyInt_AsLong(tmp);
1324 Py_DECREF(tmp);
1325 if (fd < 0 && PyErr_Occurred())
1326 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001327 tty = fd == fileno(stdin) && isatty(fd);
1328 }
1329 if (tty) {
1330 tmp = PyObject_CallMethod(fout, "fileno", "");
1331 if (tmp == NULL)
1332 PyErr_Clear();
1333 else {
1334 fd = PyInt_AsLong(tmp);
1335 Py_DECREF(tmp);
1336 if (fd < 0 && PyErr_Occurred())
1337 return NULL;
1338 tty = fd == fileno(stdout) && isatty(fd);
1339 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001340 }
1341
1342 /* If we're interactive, use (GNU) readline */
1343 if (tty) {
Guido van Rossuma88a0332007-02-26 16:59:55 +00001344 PyObject *po;
1345 char *prompt;
1346 char *s;
1347 PyObject *result;
Guido van Rossumeba76962007-05-27 09:13:28 +00001348 tmp = PyObject_CallMethod(fout, "flush", "");
1349 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001350 PyErr_Clear();
1351 else
1352 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001353 if (promptarg != NULL) {
1354 po = PyObject_Str(promptarg);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001355 if (po == NULL)
1356 return NULL;
1357 prompt = PyString_AsString(po);
Guido van Rossumeba76962007-05-27 09:13:28 +00001358 if (prompt == NULL) {
1359 Py_DECREF(po);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001360 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001361 }
Guido van Rossuma88a0332007-02-26 16:59:55 +00001362 }
1363 else {
1364 po = NULL;
1365 prompt = "";
1366 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001367 s = PyOS_Readline(stdin, stdout, prompt);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001368 Py_XDECREF(po);
1369 if (s == NULL) {
1370 if (!PyErr_Occurred())
1371 PyErr_SetNone(PyExc_KeyboardInterrupt);
1372 return NULL;
1373 }
1374 if (*s == '\0') {
1375 PyErr_SetNone(PyExc_EOFError);
1376 result = NULL;
1377 }
1378 else { /* strip trailing '\n' */
1379 size_t len = strlen(s);
1380 if (len > PY_SSIZE_T_MAX) {
1381 PyErr_SetString(PyExc_OverflowError,
1382 "input: input too long");
1383 result = NULL;
1384 }
1385 else {
1386 result = PyString_FromStringAndSize(s, len-1);
1387 }
1388 }
1389 PyMem_FREE(s);
1390 return result;
1391 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001392
1393 /* Fallback if we're not interactive */
1394 if (promptarg != NULL) {
1395 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0)
Guido van Rossuma88a0332007-02-26 16:59:55 +00001396 return NULL;
1397 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001398 tmp = PyObject_CallMethod(fout, "flush", "");
1399 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001400 PyErr_Clear();
1401 else
1402 Py_DECREF(tmp);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001403 return PyFile_GetLine(fin, -1);
1404}
1405
1406PyDoc_STRVAR(input_doc,
1407"input([prompt]) -> string\n\
1408\n\
1409Read a string from standard input. The trailing newline is stripped.\n\
1410If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1411On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1412is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001413
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001414
Guido van Rossum79f25d91997-04-29 20:08:16 +00001415static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001416builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001417{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001418 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001419}
1420
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001421PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001422"repr(object) -> string\n\
1423\n\
1424Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001425For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001426
1427
Guido van Rossum79f25d91997-04-29 20:08:16 +00001428static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001429builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001430{
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001431#define UNDEF_NDIGITS (-0x7fffffff) /* Unlikely ndigits value */
1432 static PyObject *round_str = NULL;
1433 int ndigits = UNDEF_NDIGITS;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001434 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001435 PyObject *number, *round;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001436
Alex Martelliae211f92007-08-22 23:21:33 +00001437 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|i:round",
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001438 kwlist, &number, &ndigits))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001439 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00001440
Guido van Rossum15d3d042007-08-24 02:02:45 +00001441 if (Py_Type(number)->tp_dict == NULL) {
1442 if (PyType_Ready(Py_Type(number)) < 0)
1443 return NULL;
1444 }
1445
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001446 if (round_str == NULL) {
1447 round_str = PyUnicode_FromString("__round__");
1448 if (round_str == NULL)
Alex Martelliae211f92007-08-22 23:21:33 +00001449 return NULL;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001450 }
1451
1452 round = _PyType_Lookup(Py_Type(number), round_str);
1453 if (round == NULL) {
1454 PyErr_Format(PyExc_TypeError,
1455 "type %.100s doesn't define __round__ method",
1456 Py_Type(number)->tp_name);
Alex Martelliae211f92007-08-22 23:21:33 +00001457 return NULL;
1458 }
1459
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001460 if (ndigits == UNDEF_NDIGITS)
1461 return PyObject_CallFunction(round, "O", number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001462 else
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001463 return PyObject_CallFunction(round, "Oi", number, ndigits);
1464#undef UNDEF_NDIGITS
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001465}
1466
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001467PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001468"round(number[, ndigits]) -> floating point number\n\
1469\n\
1470Round a number to a given precision in decimal digits (default 0 digits).\n\
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001471This returns an int when called with one argument, otherwise a float.\n\
1472Precision may be negative.");
1473
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001474
Raymond Hettinger64958a12003-12-17 20:43:33 +00001475static PyObject *
1476builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1477{
1478 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
1479 PyObject *callable;
Martin v. Löwis15e62742006-02-27 16:46:16 +00001480 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001481 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001482
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001483 /* args 1-4 should match listsort in Objects/listobject.c */
Armin Rigo71d7e702005-09-20 18:13:03 +00001484 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
1485 kwlist, &seq, &compare, &keyfunc, &reverse))
1486 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001487
1488 newlist = PySequence_List(seq);
1489 if (newlist == NULL)
1490 return NULL;
1491
1492 callable = PyObject_GetAttrString(newlist, "sort");
1493 if (callable == NULL) {
1494 Py_DECREF(newlist);
1495 return NULL;
1496 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001497
Raymond Hettinger64958a12003-12-17 20:43:33 +00001498 newargs = PyTuple_GetSlice(args, 1, 4);
1499 if (newargs == NULL) {
1500 Py_DECREF(newlist);
1501 Py_DECREF(callable);
1502 return NULL;
1503 }
1504
1505 v = PyObject_Call(callable, newargs, kwds);
1506 Py_DECREF(newargs);
1507 Py_DECREF(callable);
1508 if (v == NULL) {
1509 Py_DECREF(newlist);
1510 return NULL;
1511 }
1512 Py_DECREF(v);
1513 return newlist;
1514}
1515
1516PyDoc_STRVAR(sorted_doc,
1517"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001518
Guido van Rossum79f25d91997-04-29 20:08:16 +00001519static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001520builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001521{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001522 PyObject *v = NULL;
1523 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001524
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001525 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001526 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001527 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001528 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001529 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001530 if (!PyErr_Occurred())
1531 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001532 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001533 }
1534 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001535 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001536 }
1537 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001538 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001539 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001540 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001541 "vars() argument must have __dict__ attribute");
1542 return NULL;
1543 }
1544 }
1545 return d;
1546}
1547
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001548PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001549"vars([object]) -> dictionary\n\
1550\n\
1551Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001552With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001553
Alex Martelli86d8b342007-08-22 22:39:42 +00001554static PyObject *
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001555builtin_trunc(PyObject *self, PyObject *number)
Alex Martelli86d8b342007-08-22 22:39:42 +00001556{
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001557 static PyObject *trunc_str = NULL;
1558 PyObject *trunc;
1559
Guido van Rossum15d3d042007-08-24 02:02:45 +00001560 if (Py_Type(number)->tp_dict == NULL) {
1561 if (PyType_Ready(Py_Type(number)) < 0)
1562 return NULL;
1563 }
1564
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001565 if (trunc_str == NULL) {
1566 trunc_str = PyUnicode_FromString("__trunc__");
1567 if (trunc_str == NULL)
1568 return NULL;
1569 }
1570
1571 trunc = _PyType_Lookup(Py_Type(number), trunc_str);
1572 if (trunc == NULL) {
1573 PyErr_Format(PyExc_TypeError,
1574 "type %.100s doesn't define __trunc__ method",
1575 Py_Type(number)->tp_name);
Alex Martelli86d8b342007-08-22 22:39:42 +00001576 return NULL;
1577 }
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001578 return PyObject_CallFunction(trunc, "O", number);
Alex Martelli86d8b342007-08-22 22:39:42 +00001579}
1580
1581PyDoc_STRVAR(trunc_doc,
1582"trunc(Real) -> Integral\n\
1583\n\
1584returns the integral closest to x between 0 and x.");
1585
1586
Alex Martellia70b1912003-04-22 08:12:33 +00001587
1588static PyObject*
1589builtin_sum(PyObject *self, PyObject *args)
1590{
1591 PyObject *seq;
1592 PyObject *result = NULL;
1593 PyObject *temp, *item, *iter;
1594
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001595 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001596 return NULL;
1597
1598 iter = PyObject_GetIter(seq);
1599 if (iter == NULL)
1600 return NULL;
1601
1602 if (result == NULL) {
1603 result = PyInt_FromLong(0);
1604 if (result == NULL) {
1605 Py_DECREF(iter);
1606 return NULL;
1607 }
1608 } else {
1609 /* reject string values for 'start' parameter */
1610 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
1611 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001612 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001613 Py_DECREF(iter);
1614 return NULL;
1615 }
Alex Martelli41c9f882003-04-22 09:24:48 +00001616 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001617 }
1618
1619 for(;;) {
1620 item = PyIter_Next(iter);
1621 if (item == NULL) {
1622 /* error, or end-of-sequence */
1623 if (PyErr_Occurred()) {
1624 Py_DECREF(result);
1625 result = NULL;
1626 }
1627 break;
1628 }
Alex Martellia253e182003-10-25 23:24:14 +00001629 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001630 Py_DECREF(result);
1631 Py_DECREF(item);
1632 result = temp;
1633 if (result == NULL)
1634 break;
1635 }
1636 Py_DECREF(iter);
1637 return result;
1638}
1639
1640PyDoc_STRVAR(sum_doc,
Thomas Wouters89f507f2006-12-13 04:49:30 +00001641"sum(sequence[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00001642\n\
1643Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00001644of parameter 'start' (which defaults to 0). When the sequence is\n\
1645empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00001646
1647
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001648static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001649builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001650{
1651 PyObject *inst;
1652 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001653 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001654
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001655 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001656 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001657
Guido van Rossum823649d2001-03-21 18:40:58 +00001658 retval = PyObject_IsInstance(inst, cls);
1659 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001660 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001661 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001662}
1663
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001664PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001665"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001666\n\
1667Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001668With a type as second argument, return whether that is the object's type.\n\
1669The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001670isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001671
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001672
1673static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001674builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001675{
1676 PyObject *derived;
1677 PyObject *cls;
1678 int retval;
1679
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001680 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001681 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001682
Guido van Rossum823649d2001-03-21 18:40:58 +00001683 retval = PyObject_IsSubclass(derived, cls);
1684 if (retval < 0)
1685 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001686 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001687}
1688
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001689PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001690"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001691\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00001692Return whether class C is a subclass (i.e., a derived class) of class B.\n\
1693When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
1694is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001695
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001696
Barry Warsawbd599b52000-08-03 15:45:29 +00001697static PyObject*
1698builtin_zip(PyObject *self, PyObject *args)
1699{
Guido van Rossumb65fb332006-08-25 23:26:40 +00001700 /* args must be a tuple */
1701 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00001702
Guido van Rossumb65fb332006-08-25 23:26:40 +00001703 return _PyZip_CreateIter(args);
Barry Warsawbd599b52000-08-03 15:45:29 +00001704}
1705
1706
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001707PyDoc_STRVAR(zip_doc,
Guido van Rossum801f0d72006-08-24 19:48:10 +00001708"zip(it1 [, it2 [...]]) -> iter([(it1[0], it2[0] ...), ...])\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00001709\n\
Guido van Rossum801f0d72006-08-24 19:48:10 +00001710Return an iterator yielding tuples, where each tuple contains the\n\
1711corresponding element from each of the argument iterables.\n\
1712The returned iterator ends when the shortest argument iterable is exhausted.\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001713(This is identical to itertools.izip().)");
Barry Warsawbd599b52000-08-03 15:45:29 +00001714
1715
Guido van Rossum79f25d91997-04-29 20:08:16 +00001716static PyMethodDef builtin_methods[] = {
Guido van Rossum52cc1d82007-03-18 15:41:51 +00001717 {"__build_class__", (PyCFunction)builtin___build_class__,
1718 METH_VARARGS | METH_KEYWORDS, build_class_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001719 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001720 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00001721 {"all", builtin_all, METH_O, all_doc},
1722 {"any", builtin_any, METH_O, any_doc},
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001723 {"bin", builtin_bin, METH_O, bin_doc},
Walter Dörwalde7efd592007-06-05 20:07:21 +00001724 {"chr", builtin_chr, METH_VARARGS, chr_doc},
1725 {"chr8", builtin_chr8, METH_VARARGS, chr8_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001726 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
Guido van Rossumd8faa362007-04-27 19:54:29 +00001727 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001728 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
1729 {"dir", builtin_dir, METH_VARARGS, dir_doc},
1730 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
1731 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00001732 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001733 {"filter", builtin_filter, METH_VARARGS, filter_doc},
Eric Smith8c663262007-08-25 02:26:07 +00001734 {"format", builtin_format, METH_VARARGS, format_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001735 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
1736 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
1737 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
1738 {"hash", builtin_hash, METH_O, hash_doc},
1739 {"hex", builtin_hex, METH_O, hex_doc},
1740 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00001741 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001742 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
1743 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
1744 {"iter", builtin_iter, METH_VARARGS, iter_doc},
1745 {"len", builtin_len, METH_O, len_doc},
1746 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
1747 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001748 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
1749 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandla18af4e2007-04-21 15:47:16 +00001750 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001751 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001752 {"ord", builtin_ord, METH_O, ord_doc},
1753 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00001754 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001755 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001756 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001757 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00001758 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00001759 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001760 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Alex Martelli86d8b342007-08-22 22:39:42 +00001761 {"trunc", builtin_trunc, METH_O, trunc_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001762 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00001763 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00001764};
1765
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001766PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001767"Built-in functions, exceptions, and other objects.\n\
1768\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001769Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001770
Guido van Rossum25ce5661997-08-02 03:10:38 +00001771PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001772_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001773{
Fred Drake5550de32000-06-20 04:54:19 +00001774 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001775 mod = Py_InitModule4("__builtin__", builtin_methods,
1776 builtin_doc, (PyObject *)NULL,
1777 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001778 if (mod == NULL)
1779 return NULL;
1780 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00001781
Tim Peters7571a0f2003-03-23 17:52:28 +00001782#ifdef Py_TRACE_REFS
1783 /* __builtin__ exposes a number of statically allocated objects
1784 * that, before this code was added in 2.3, never showed up in
1785 * the list of "all objects" maintained by Py_TRACE_REFS. As a
1786 * result, programs leaking references to None and False (etc)
1787 * couldn't be diagnosed by examining sys.getobjects(0).
1788 */
1789#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
1790#else
1791#define ADD_TO_ALL(OBJECT) (void)0
1792#endif
1793
Tim Peters4b7625e2001-09-13 21:37:17 +00001794#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00001795 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
1796 return NULL; \
1797 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00001798
1799 SETBUILTIN("None", Py_None);
1800 SETBUILTIN("Ellipsis", Py_Ellipsis);
1801 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001802 SETBUILTIN("False", Py_False);
1803 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00001804 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001805 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001806 SETBUILTIN("buffer", &PyBuffer_Type);
Travis E. Oliphantb99f7622007-08-18 11:21:56 +00001807 SETBUILTIN("memoryview", &PyMemoryView_Type);
Guido van Rossum4dfe8a12006-04-22 23:28:04 +00001808 SETBUILTIN("bytes", &PyBytes_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001809 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001810#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00001811 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001812#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00001813 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00001814 SETBUILTIN("enumerate", &PyEnum_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001815 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00001816 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001817 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00001818 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001819 SETBUILTIN("list", &PyList_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001820 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossum805365e2007-05-07 22:24:25 +00001821 SETBUILTIN("range", &PyRange_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00001822 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00001823 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001824 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001825 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Guido van Rossum572dbf82007-04-27 23:53:51 +00001826 SETBUILTIN("str", &PyUnicode_Type);
Guido van Rossum84fc66d2007-05-03 17:18:26 +00001827 SETBUILTIN("str8", &PyString_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001828 SETBUILTIN("super", &PySuper_Type);
1829 SETBUILTIN("tuple", &PyTuple_Type);
1830 SETBUILTIN("type", &PyType_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001831 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00001832 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
1833 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001834 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00001835 }
1836 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00001837
Guido van Rossum25ce5661997-08-02 03:10:38 +00001838 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00001839#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00001840#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00001841}