blob: b0b85ba0d9467e9894d1daeb432d8634eeb00014 [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
Eric Smith56e4a842007-08-27 15:31:40 +0000315 if (result && !PyUnicode_Check(result)) {
Eric Smith8c663262007-08-25 02:26:07 +0000316 PyErr_SetString(PyExc_TypeError,
317 "__format__ method did not return string");
318 Py_DECREF(result);
319 return NULL;
320 }
Eric Smith8c663262007-08-25 02:26:07 +0000321
322 return result;
323}
324
325
326PyDoc_STRVAR(format_doc,
327"format(value, format_spec) -> string\n\
328\n\
329Returns value.__format__(format_spec).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000330
Guido van Rossum79f25d91997-04-29 20:08:16 +0000331static PyObject *
Walter Dörwalde7efd592007-06-05 20:07:21 +0000332builtin_chr8(PyObject *self, PyObject *args)
Guido van Rossum7fcf2242007-05-04 17:43:11 +0000333{
334 long x;
335 char s[1];
336
337 if (!PyArg_ParseTuple(args, "l:chr8", &x))
338 return NULL;
339 if (x < 0 || x >= 256) {
340 PyErr_SetString(PyExc_ValueError,
341 "chr8() arg not in range(256)");
342 return NULL;
343 }
344 s[0] = (char)x;
345 return PyString_FromStringAndSize(s, 1);
346}
347
Walter Dörwalde7efd592007-06-05 20:07:21 +0000348PyDoc_STRVAR(chr8_doc,
Guido van Rossum7fcf2242007-05-04 17:43:11 +0000349"chr8(i) -> 8-bit character\n\
350\n\
351Return a string of one character with ordinal i; 0 <= i < 256.");
352
353
354static PyObject *
Walter Dörwalde7efd592007-06-05 20:07:21 +0000355builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000356{
357 long x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000358
Walter Dörwalde7efd592007-06-05 20:07:21 +0000359 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum09095f32000-03-10 23:00:52 +0000360 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000361
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000362 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000363}
364
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000365PyDoc_VAR(chr_doc) = PyDoc_STR(
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000366"chr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000367\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000368Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000369)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000370#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000371PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000372"\nIf 0x10000 <= i, a surrogate pair is returned."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000373)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000374#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000375;
Guido van Rossum09095f32000-03-10 23:00:52 +0000376
377
378static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000379builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000380{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000381 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000382 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000383
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000384 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000385 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000386 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000387 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000388 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000389}
390
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000391PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000392"cmp(x, y) -> integer\n\
393\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000394Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000395
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000396
397static char *
398source_as_string(PyObject *cmd)
399{
400 char *str;
401 Py_ssize_t size;
402
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000403 if (PyUnicode_Check(cmd)) {
404 cmd = _PyUnicode_AsDefaultEncodedString(cmd, NULL);
405 if (cmd == NULL)
406 return NULL;
407 }
Guido van Rossuma4b8d1d2007-08-27 15:02:28 +0000408 else if (!PyObject_CheckReadBuffer(cmd)) {
409 PyErr_SetString(PyExc_TypeError,
410 "eval()/exec() arg 1 must be a string, bytes or code object");
411 return NULL;
412 }
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000413 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &size) < 0) {
414 return NULL;
415 }
416 if (strlen(str) != size) {
417 PyErr_SetString(PyExc_TypeError,
418 "source code string cannot contain null bytes");
419 return NULL;
420 }
421 return str;
422}
423
Guido van Rossum79f25d91997-04-29 20:08:16 +0000424static PyObject *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000425builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000426{
427 char *str;
428 char *filename;
429 char *startstr;
430 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000431 int dont_inherit = 0;
432 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000433 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000434 PyObject *cmd;
Guido van Rossumd8faa362007-04-27 19:54:29 +0000435 static char *kwlist[] = {"source", "filename", "mode", "flags",
436 "dont_inherit", NULL};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000437
Guido van Rossumd8faa362007-04-27 19:54:29 +0000438 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
439 kwlist, &cmd, &filename, &startstr,
440 &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000441 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000442
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000443 cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000444
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000445 str = source_as_string(cmd);
446 if (str == NULL)
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000447 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000448
Guido van Rossum5b722181993-03-30 17:46:03 +0000449 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000450 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000451 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000452 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000453 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000454 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000455 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000456 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000457 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000458 return NULL;
Guido van Rossum5b722181993-03-30 17:46:03 +0000459 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000460
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000461 if (supplied_flags &
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000462 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000463 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000464 PyErr_SetString(PyExc_ValueError,
465 "compile(): unrecognised flags");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000466 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000467 }
468 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
469
Tim Peters6cd6a822001-08-17 22:11:27 +0000470 if (!dont_inherit) {
471 PyEval_MergeCompilerFlags(&cf);
472 }
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000473 return Py_CompileStringFlags(str, filename, start, &cf);
Guido van Rossum5b722181993-03-30 17:46:03 +0000474}
475
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000476PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000477"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000478\n\
479Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000480into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000481The filename will be used for run-time error messages.\n\
482The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000483single (interactive) statement, or 'eval' to compile an expression.\n\
484The flags argument, if present, controls which future statements influence\n\
485the compilation of the code.\n\
486The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
487the effects of any future statements in effect in the code calling\n\
488compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000489in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000490
Guido van Rossum79f25d91997-04-29 20:08:16 +0000491static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000492builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000493{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000494 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000495
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000496 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000497 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000498 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000499}
500
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000501PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000502"dir([object]) -> list of strings\n"
503"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000504"If called without an argument, return the names in the current scope.\n"
505"Else, return an alphabetized list of names comprising (some of) the attributes\n"
506"of the given object, and of attributes reachable from it.\n"
507"If the object supplies a method named __dir__, it will be used; otherwise\n"
508"the default dir() logic is used and returns:\n"
509" for a module object: the module's attributes.\n"
510" for a class object: its attributes, and recursively the attributes\n"
511" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000512" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000513" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000514
Guido van Rossum79f25d91997-04-29 20:08:16 +0000515static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000516builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000517{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000518 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000519
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000520 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000521 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000522 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000523}
524
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000525PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000526"divmod(x, y) -> (div, mod)\n\
527\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000528Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000529
530
Guido van Rossum79f25d91997-04-29 20:08:16 +0000531static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000532builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000533{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000534 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000535 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000536 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000537 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000538
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000539 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000540 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000541 if (locals != Py_None && !PyMapping_Check(locals)) {
542 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000543 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000544 }
545 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000546 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000547 "globals must be a real dict; try eval(expr, {}, mapping)"
548 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000549 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000550 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000551 if (globals == Py_None) {
552 globals = PyEval_GetGlobals();
553 if (locals == Py_None)
554 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000555 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000556 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000557 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000558
Georg Brandl77c85e62005-09-15 10:46:13 +0000559 if (globals == NULL || locals == NULL) {
560 PyErr_SetString(PyExc_TypeError,
561 "eval must be given globals and locals "
562 "when called without a frame");
563 return NULL;
564 }
565
Guido van Rossum79f25d91997-04-29 20:08:16 +0000566 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
567 if (PyDict_SetItemString(globals, "__builtins__",
568 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000569 return NULL;
570 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000571
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000572 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000573 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000574 PyErr_SetString(PyExc_TypeError,
575 "code object passed to eval() may not contain free variables");
576 return NULL;
577 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000578 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000579 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000580
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000581 str = source_as_string(cmd);
582 if (str == NULL)
Guido van Rossum94390a41992-08-14 15:14:30 +0000583 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000584
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000585 while (*str == ' ' || *str == '\t')
586 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000587
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000588 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Tim Peters9fa96be2001-08-17 23:04:59 +0000589 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000590 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
591 Py_XDECREF(tmp);
592 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000593}
594
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000595PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000596"eval(source[, globals[, locals]]) -> value\n\
597\n\
598Evaluate the source in the context of globals and locals.\n\
599The source may be a string representing a Python expression\n\
600or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000601The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000602defaulting to the current globals and locals.\n\
603If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000604
Georg Brandl7cae87c2006-09-06 06:51:57 +0000605static PyObject *
606builtin_exec(PyObject *self, PyObject *args)
607{
608 PyObject *v;
609 PyObject *prog, *globals = Py_None, *locals = Py_None;
610 int plain = 0;
611
612 if (!PyArg_ParseTuple(args, "O|OO:exec", &prog, &globals, &locals))
613 return NULL;
614
615 if (globals == Py_None) {
616 globals = PyEval_GetGlobals();
617 if (locals == Py_None) {
618 locals = PyEval_GetLocals();
619 plain = 1;
620 }
621 if (!globals || !locals) {
622 PyErr_SetString(PyExc_SystemError,
623 "globals and locals cannot be NULL");
624 return NULL;
625 }
626 }
627 else if (locals == Py_None)
628 locals = globals;
Neal Norwitz6ea45d32007-08-26 04:19:43 +0000629 if (!PyUnicode_Check(prog) &&
Guido van Rossumda5b8f22007-06-12 23:30:11 +0000630 !PyCode_Check(prog)) {
Georg Brandl7cae87c2006-09-06 06:51:57 +0000631 PyErr_Format(PyExc_TypeError,
632 "exec() arg 1 must be a string, file, or code "
633 "object, not %.100s", prog->ob_type->tp_name);
634 return NULL;
635 }
636 if (!PyDict_Check(globals)) {
637 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
638 globals->ob_type->tp_name);
639 return NULL;
640 }
641 if (!PyMapping_Check(locals)) {
642 PyErr_Format(PyExc_TypeError,
643 "arg 3 must be a mapping or None, not %.100s",
644 locals->ob_type->tp_name);
645 return NULL;
646 }
647 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
648 if (PyDict_SetItemString(globals, "__builtins__",
649 PyEval_GetBuiltins()) != 0)
650 return NULL;
651 }
652
653 if (PyCode_Check(prog)) {
654 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
655 PyErr_SetString(PyExc_TypeError,
656 "code object passed to exec() may not "
657 "contain free variables");
658 return NULL;
659 }
660 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
661 }
Georg Brandl7cae87c2006-09-06 06:51:57 +0000662 else {
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000663 char *str = source_as_string(prog);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000664 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000665 if (str == NULL)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000666 return NULL;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000667 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000668 if (PyEval_MergeCompilerFlags(&cf))
669 v = PyRun_StringFlags(str, Py_file_input, globals,
670 locals, &cf);
671 else
672 v = PyRun_String(str, Py_file_input, globals, locals);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000673 }
674 if (v == NULL)
675 return NULL;
676 Py_DECREF(v);
677 Py_RETURN_NONE;
678}
679
680PyDoc_STRVAR(exec_doc,
681"exec(object[, globals[, locals]])\n\
682\n\
683Read and execute code from a object, which can be a string, a code\n\
684object or a file object.\n\
685The globals and locals are dictionaries, defaulting to the current\n\
686globals and locals. If only globals is given, locals defaults to it.");
687
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000688
Guido van Rossum79f25d91997-04-29 20:08:16 +0000689static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000690builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000691{
Neal Norwitz6ea45d32007-08-26 04:19:43 +0000692 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000693 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000694
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000695 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000696 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000697
Martin v. Löwis5b222132007-06-10 09:51:05 +0000698 if (!PyUnicode_Check(name)) {
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000699 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000700 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000701 return NULL;
702 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000703 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000704 if (result == NULL && dflt != NULL &&
705 PyErr_ExceptionMatches(PyExc_AttributeError))
706 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000707 PyErr_Clear();
708 Py_INCREF(dflt);
709 result = dflt;
710 }
711 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000712}
713
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000714PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000715"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000716\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000717Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
718When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000719exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000720
721
Guido van Rossum79f25d91997-04-29 20:08:16 +0000722static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000723builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000724{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000725 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000726
Guido van Rossum79f25d91997-04-29 20:08:16 +0000727 d = PyEval_GetGlobals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000728 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000729 return d;
730}
731
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000732PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000733"globals() -> dictionary\n\
734\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000735Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000736
737
Guido van Rossum79f25d91997-04-29 20:08:16 +0000738static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000739builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000740{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000741 PyObject *v;
742 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000743
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000744 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000745 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000746 if (!PyUnicode_Check(name)) {
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000747 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000748 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000749 return NULL;
750 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000751 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000752 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000753 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000754 Py_INCREF(Py_False);
755 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000756 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000757 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000758 Py_INCREF(Py_True);
759 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000760}
761
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000762PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000763"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000764\n\
765Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000766(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000767
768
Guido van Rossum79f25d91997-04-29 20:08:16 +0000769static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000770builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000771{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000772 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000773}
774
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000775PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000776"id(object) -> integer\n\
777\n\
778Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000779simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000780
781
Guido van Rossum79f25d91997-04-29 20:08:16 +0000782static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000783builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000784{
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000785 PyObject *itertools, *imap, *result;
786 itertools = PyImport_ImportModule("itertools");
787 if (itertools == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000788 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000789 imap = PyObject_GetAttrString(itertools, "imap");
790 Py_DECREF(itertools);
791 if (imap == NULL)
Tim Peters4e9afdc2001-05-03 23:54:49 +0000792 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000793 result = PyObject_Call(imap, args, NULL);
794 Py_DECREF(imap);
Tim Peters4e9afdc2001-05-03 23:54:49 +0000795 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000796}
797
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000798PyDoc_STRVAR(map_doc,
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000799"map(function, iterable[, iterable, ...]) -> iterator\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000800\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000801Return an iterator yielding the results of applying the function to the\n\
802items of the argument iterables(s). If more than one iterable is given,\n\
803the function is called with an argument list consisting of the\n\
804corresponding item of each iterable, until an iterable is exhausted.\n\
805If the function is None, 'lambda *a: a' is assumed.\n\
806(This is identical to itertools.imap().)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000807
808
Guido van Rossum79f25d91997-04-29 20:08:16 +0000809static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +0000810builtin_next(PyObject *self, PyObject *args)
811{
812 PyObject *it, *res;
813 PyObject *def = NULL;
814
815 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
816 return NULL;
817 if (!PyIter_Check(it)) {
818 PyErr_Format(PyExc_TypeError,
819 "%.200s object is not an iterator", it->ob_type->tp_name);
820 return NULL;
821 }
822
823 res = (*it->ob_type->tp_iternext)(it);
824 if (res == NULL) {
825 if (def) {
826 if (PyErr_Occurred() &&
827 !PyErr_ExceptionMatches(PyExc_StopIteration))
828 return NULL;
829 PyErr_Clear();
830 Py_INCREF(def);
831 return def;
832 } else if (PyErr_Occurred()) {
833 return NULL;
834 } else {
835 PyErr_SetNone(PyExc_StopIteration);
836 return NULL;
837 }
838 }
839 return res;
840}
841
842PyDoc_STRVAR(next_doc,
843"next(iterator[, default])\n\
844\n\
845Return the next item from the iterator. If default is given and the iterator\n\
846is exhausted, it is returned instead of raising StopIteration.");
847
848
849static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000850builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000851{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000852 PyObject *v;
853 PyObject *name;
854 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000855
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000856 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000857 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000858 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000859 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000860 Py_INCREF(Py_None);
861 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000862}
863
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000864PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000865"setattr(object, name, value)\n\
866\n\
867Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000868``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000869
870
Guido van Rossum79f25d91997-04-29 20:08:16 +0000871static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000872builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000873{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000874 PyObject *v;
875 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000876
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000877 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +0000878 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000879 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000880 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000881 Py_INCREF(Py_None);
882 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +0000883}
884
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000885PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +0000886"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000887\n\
888Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000889``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000890
891
Guido van Rossum79f25d91997-04-29 20:08:16 +0000892static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000893builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000894{
Guido van Rossum9bfef441993-03-29 10:43:31 +0000895 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000896
Guido van Rossum79f25d91997-04-29 20:08:16 +0000897 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000898 if (x == -1)
899 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000900 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000901}
902
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000903PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000904"hash(object) -> integer\n\
905\n\
906Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000907the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000908
909
Guido van Rossum79f25d91997-04-29 20:08:16 +0000910static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000911builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +0000912{
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000913 return PyNumber_ToBase(v, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +0000914}
915
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000916PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000917"hex(number) -> string\n\
918\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000919Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000920
921
Guido van Rossum79f25d91997-04-29 20:08:16 +0000922static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000923builtin_iter(PyObject *self, PyObject *args)
924{
925 PyObject *v, *w = NULL;
926
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000927 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000928 return NULL;
929 if (w == NULL)
930 return PyObject_GetIter(v);
931 if (!PyCallable_Check(v)) {
932 PyErr_SetString(PyExc_TypeError,
933 "iter(v, w): v must be callable");
934 return NULL;
935 }
936 return PyCallIter_New(v, w);
937}
938
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000939PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000940"iter(collection) -> iterator\n\
941iter(callable, sentinel) -> iterator\n\
942\n\
943Get an iterator from an object. In the first form, the argument must\n\
944supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000945In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000946
947
948static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000949builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000950{
Martin v. Löwis18e16552006-02-15 17:27:45 +0000951 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000952
Jeremy Hylton03657cf2000-07-12 13:05:33 +0000953 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +0000954 if (res < 0 && PyErr_Occurred())
955 return NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000956 return PyInt_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000957}
958
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000959PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000960"len(object) -> integer\n\
961\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000962Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000963
964
Guido van Rossum79f25d91997-04-29 20:08:16 +0000965static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000966builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000967{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000968 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000969
Guido van Rossum79f25d91997-04-29 20:08:16 +0000970 d = PyEval_GetLocals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000971 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000972 return d;
973}
974
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000975PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000976"locals() -> dictionary\n\
977\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +0000978Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000979
980
Guido van Rossum79f25d91997-04-29 20:08:16 +0000981static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000982min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000983{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000984 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +0000985 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000986
Guido van Rossum79f25d91997-04-29 20:08:16 +0000987 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000988 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +0000989 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000990 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +0000991
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000992 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
993 keyfunc = PyDict_GetItemString(kwds, "key");
994 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000995 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000996 "%s() got an unexpected keyword argument", name);
997 return NULL;
998 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000999 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001000
Tim Petersc3074532001-05-03 07:00:32 +00001001 it = PyObject_GetIter(v);
1002 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001003 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001004
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001005 maxitem = NULL; /* the result */
1006 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001007 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001008 /* get the value from the key function */
1009 if (keyfunc != NULL) {
1010 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1011 if (val == NULL)
1012 goto Fail_it_item;
1013 }
1014 /* no key function; the value is the item */
1015 else {
1016 val = item;
1017 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001018 }
Tim Petersc3074532001-05-03 07:00:32 +00001019
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001020 /* maximum value and item are unset; set them */
1021 if (maxval == NULL) {
1022 maxitem = item;
1023 maxval = val;
1024 }
1025 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001026 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001027 int cmp = PyObject_RichCompareBool(val, maxval, op);
1028 if (cmp < 0)
1029 goto Fail_it_item_and_val;
1030 else if (cmp > 0) {
1031 Py_DECREF(maxval);
1032 Py_DECREF(maxitem);
1033 maxval = val;
1034 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001035 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001036 else {
1037 Py_DECREF(item);
1038 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001039 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001040 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001041 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001042 if (PyErr_Occurred())
1043 goto Fail_it;
1044 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001045 PyErr_Format(PyExc_ValueError,
1046 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001047 assert(maxitem == NULL);
1048 }
1049 else
1050 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001051 Py_DECREF(it);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001052 return maxitem;
1053
1054Fail_it_item_and_val:
1055 Py_DECREF(val);
1056Fail_it_item:
1057 Py_DECREF(item);
1058Fail_it:
1059 Py_XDECREF(maxval);
1060 Py_XDECREF(maxitem);
1061 Py_DECREF(it);
1062 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001063}
1064
Guido van Rossum79f25d91997-04-29 20:08:16 +00001065static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001066builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001067{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001068 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001069}
1070
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001071PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001072"min(iterable[, key=func]) -> value\n\
1073min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001074\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001075With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001076With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001077
1078
Guido van Rossum79f25d91997-04-29 20:08:16 +00001079static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001080builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001081{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001082 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001083}
1084
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001085PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001086"max(iterable[, key=func]) -> value\n\
1087max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001088\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001089With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001090With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001091
1092
Guido van Rossum79f25d91997-04-29 20:08:16 +00001093static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001094builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001095{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001096 return PyNumber_ToBase(v, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001097}
1098
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001099PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001100"oct(number) -> string\n\
1101\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001102Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001103
1104
Guido van Rossum79f25d91997-04-29 20:08:16 +00001105static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001106builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001107{
Guido van Rossum09095f32000-03-10 23:00:52 +00001108 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001109 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001110
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001111 if (PyString_Check(obj)) {
1112 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001113 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001114 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001115 return PyInt_FromLong(ord);
1116 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001117 }
1118 else if (PyUnicode_Check(obj)) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001119 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001120 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001121 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001122 return PyInt_FromLong(ord);
1123 }
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001124#ifndef Py_UNICODE_WIDE
1125 if (size == 2) {
1126 /* Decode a valid surrogate pair */
1127 int c0 = PyUnicode_AS_UNICODE(obj)[0];
1128 int c1 = PyUnicode_AS_UNICODE(obj)[1];
1129 if (0xD800 <= c0 && c0 <= 0xDBFF &&
1130 0xDC00 <= c1 && c1 <= 0xDFFF) {
1131 ord = ((((c0 & 0x03FF) << 10) | (c1 & 0x03FF)) +
1132 0x00010000);
1133 return PyInt_FromLong(ord);
1134 }
1135 }
1136#endif
Guido van Rossum6f376c42007-05-24 14:31:33 +00001137 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001138 else if (PyBytes_Check(obj)) {
1139 /* XXX Hopefully this is temporary */
1140 size = PyBytes_GET_SIZE(obj);
1141 if (size == 1) {
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001142 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
Guido van Rossum98f97462007-04-13 03:31:13 +00001143 return PyInt_FromLong(ord);
1144 }
1145 }
1146 else {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001147 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001148 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001149 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001150 return NULL;
1151 }
1152
Guido van Rossumad991772001-01-12 16:03:05 +00001153 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001154 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001155 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001156 size);
1157 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001158}
1159
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001160PyDoc_VAR(ord_doc) = PyDoc_STR(
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001161"ord(c) -> integer\n\
1162\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001163Return the integer ordinal of a one-character string."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001164)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001165#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001166PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001167"\nA valid surrogate pair is also accepted."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001168)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001169#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001170;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001171
1172
Guido van Rossum79f25d91997-04-29 20:08:16 +00001173static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001174builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001175{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001176 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001177
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001178 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001179 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001180 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001181}
1182
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001183PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001184"pow(x, y[, z]) -> number\n\
1185\n\
1186With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001187equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001188
1189
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001190
Guido van Rossum34343512006-11-30 22:13:52 +00001191static PyObject *
1192builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1193{
1194 static char *kwlist[] = {"sep", "end", "file", 0};
Georg Brandl257d3d92007-02-26 10:35:10 +00001195 static PyObject *dummy_args;
Guido van Rossum34343512006-11-30 22:13:52 +00001196 PyObject *sep = NULL, *end = NULL, *file = NULL;
1197 int i, err;
1198
Georg Brandl257d3d92007-02-26 10:35:10 +00001199 if (dummy_args == NULL) {
1200 if (!(dummy_args = PyTuple_New(0)))
1201 return NULL;
1202 }
Georg Brandl88fc6642007-02-09 21:28:07 +00001203 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
Guido van Rossum34343512006-11-30 22:13:52 +00001204 kwlist, &sep, &end, &file))
1205 return NULL;
1206 if (file == NULL || file == Py_None)
1207 file = PySys_GetObject("stdout");
1208
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001209 if (sep && sep != Py_None && !PyUnicode_Check(sep)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001210 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001211 "sep must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001212 sep->ob_type->tp_name);
1213 return NULL;
1214 }
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001215 if (end && end != Py_None && !PyUnicode_Check(end)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001216 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001217 "end must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001218 end->ob_type->tp_name);
1219 return NULL;
1220 }
Guido van Rossum34343512006-11-30 22:13:52 +00001221
1222 for (i = 0; i < PyTuple_Size(args); i++) {
1223 if (i > 0) {
1224 if (sep == NULL || sep == Py_None)
1225 err = PyFile_WriteString(" ", file);
1226 else
1227 err = PyFile_WriteObject(sep, file,
1228 Py_PRINT_RAW);
1229 if (err)
1230 return NULL;
1231 }
1232 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1233 Py_PRINT_RAW);
1234 if (err)
1235 return NULL;
1236 }
1237
1238 if (end == NULL || end == Py_None)
1239 err = PyFile_WriteString("\n", file);
1240 else
1241 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1242 if (err)
1243 return NULL;
1244
1245 Py_RETURN_NONE;
1246}
1247
1248PyDoc_STRVAR(print_doc,
Guido van Rossum452bf512007-02-09 05:32:43 +00001249"print(value, ..., file=None, sep=' ', end='\\n')\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001250\n\
1251Prints the values to a stream, or to sys.stdout by default.\n\
1252Optional keyword arguments:\n\
1253file: a file-like object (stream); defaults to the current sys.stdout.\n\
1254sep: string inserted between values, default a space.\n\
1255end: string appended after the last value, default a newline.");
1256
1257
Guido van Rossuma88a0332007-02-26 16:59:55 +00001258static PyObject *
1259builtin_input(PyObject *self, PyObject *args)
1260{
Guido van Rossumeba76962007-05-27 09:13:28 +00001261 PyObject *promptarg = NULL;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001262 PyObject *fin = PySys_GetObject("stdin");
1263 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossumeba76962007-05-27 09:13:28 +00001264 PyObject *ferr = PySys_GetObject("stderr");
1265 PyObject *tmp;
1266 long fd;
1267 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001268
Guido van Rossumeba76962007-05-27 09:13:28 +00001269 /* Parse arguments */
1270 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg))
Guido van Rossuma88a0332007-02-26 16:59:55 +00001271 return NULL;
1272
Guido van Rossumeba76962007-05-27 09:13:28 +00001273 /* Check that stdin/out/err are intact */
Guido van Rossuma88a0332007-02-26 16:59:55 +00001274 if (fin == NULL) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001275 PyErr_SetString(PyExc_RuntimeError,
1276 "input(): lost sys.stdin");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001277 return NULL;
1278 }
1279 if (fout == NULL) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001280 PyErr_SetString(PyExc_RuntimeError,
1281 "input(): lost sys.stdout");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001282 return NULL;
1283 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001284 if (ferr == NULL) {
1285 PyErr_SetString(PyExc_RuntimeError,
1286 "input(): lost sys.stderr");
1287 return NULL;
1288 }
1289
1290 /* First of all, flush stderr */
1291 tmp = PyObject_CallMethod(ferr, "flush", "");
1292 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001293 PyErr_Clear();
1294 else
1295 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001296
1297 /* We should only use (GNU) readline if Python's sys.stdin and
1298 sys.stdout are the same as C's stdin and stdout, because we
1299 need to pass it those. */
1300 tmp = PyObject_CallMethod(fin, "fileno", "");
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001301 if (tmp == NULL) {
1302 PyErr_Clear();
1303 tty = 0;
1304 }
1305 else {
Guido van Rossumeba76962007-05-27 09:13:28 +00001306 fd = PyInt_AsLong(tmp);
1307 Py_DECREF(tmp);
1308 if (fd < 0 && PyErr_Occurred())
1309 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001310 tty = fd == fileno(stdin) && isatty(fd);
1311 }
1312 if (tty) {
1313 tmp = PyObject_CallMethod(fout, "fileno", "");
1314 if (tmp == NULL)
1315 PyErr_Clear();
1316 else {
1317 fd = PyInt_AsLong(tmp);
1318 Py_DECREF(tmp);
1319 if (fd < 0 && PyErr_Occurred())
1320 return NULL;
1321 tty = fd == fileno(stdout) && isatty(fd);
1322 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001323 }
1324
1325 /* If we're interactive, use (GNU) readline */
1326 if (tty) {
Guido van Rossuma88a0332007-02-26 16:59:55 +00001327 PyObject *po;
1328 char *prompt;
1329 char *s;
1330 PyObject *result;
Guido van Rossumeba76962007-05-27 09:13:28 +00001331 tmp = PyObject_CallMethod(fout, "flush", "");
1332 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001333 PyErr_Clear();
1334 else
1335 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001336 if (promptarg != NULL) {
1337 po = PyObject_Str(promptarg);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001338 if (po == NULL)
1339 return NULL;
1340 prompt = PyString_AsString(po);
Guido van Rossumeba76962007-05-27 09:13:28 +00001341 if (prompt == NULL) {
1342 Py_DECREF(po);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001343 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001344 }
Guido van Rossuma88a0332007-02-26 16:59:55 +00001345 }
1346 else {
1347 po = NULL;
1348 prompt = "";
1349 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001350 s = PyOS_Readline(stdin, stdout, prompt);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001351 Py_XDECREF(po);
1352 if (s == NULL) {
1353 if (!PyErr_Occurred())
1354 PyErr_SetNone(PyExc_KeyboardInterrupt);
1355 return NULL;
1356 }
1357 if (*s == '\0') {
1358 PyErr_SetNone(PyExc_EOFError);
1359 result = NULL;
1360 }
1361 else { /* strip trailing '\n' */
1362 size_t len = strlen(s);
1363 if (len > PY_SSIZE_T_MAX) {
1364 PyErr_SetString(PyExc_OverflowError,
1365 "input: input too long");
1366 result = NULL;
1367 }
1368 else {
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001369 result = PyUnicode_FromStringAndSize(s, len-1);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001370 }
1371 }
1372 PyMem_FREE(s);
1373 return result;
1374 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001375
1376 /* Fallback if we're not interactive */
1377 if (promptarg != NULL) {
1378 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0)
Guido van Rossuma88a0332007-02-26 16:59:55 +00001379 return NULL;
1380 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001381 tmp = PyObject_CallMethod(fout, "flush", "");
1382 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001383 PyErr_Clear();
1384 else
1385 Py_DECREF(tmp);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001386 return PyFile_GetLine(fin, -1);
1387}
1388
1389PyDoc_STRVAR(input_doc,
1390"input([prompt]) -> string\n\
1391\n\
1392Read a string from standard input. The trailing newline is stripped.\n\
1393If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1394On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1395is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001396
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001397
Guido van Rossum79f25d91997-04-29 20:08:16 +00001398static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001399builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001400{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001401 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001402}
1403
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001404PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001405"repr(object) -> string\n\
1406\n\
1407Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001408For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001409
1410
Guido van Rossum79f25d91997-04-29 20:08:16 +00001411static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001412builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001413{
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001414#define UNDEF_NDIGITS (-0x7fffffff) /* Unlikely ndigits value */
1415 static PyObject *round_str = NULL;
1416 int ndigits = UNDEF_NDIGITS;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001417 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001418 PyObject *number, *round;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001419
Alex Martelliae211f92007-08-22 23:21:33 +00001420 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|i:round",
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001421 kwlist, &number, &ndigits))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001422 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00001423
Guido van Rossum15d3d042007-08-24 02:02:45 +00001424 if (Py_Type(number)->tp_dict == NULL) {
1425 if (PyType_Ready(Py_Type(number)) < 0)
1426 return NULL;
1427 }
1428
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001429 if (round_str == NULL) {
1430 round_str = PyUnicode_FromString("__round__");
1431 if (round_str == NULL)
Alex Martelliae211f92007-08-22 23:21:33 +00001432 return NULL;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001433 }
1434
1435 round = _PyType_Lookup(Py_Type(number), round_str);
1436 if (round == NULL) {
1437 PyErr_Format(PyExc_TypeError,
1438 "type %.100s doesn't define __round__ method",
1439 Py_Type(number)->tp_name);
Alex Martelliae211f92007-08-22 23:21:33 +00001440 return NULL;
1441 }
1442
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001443 if (ndigits == UNDEF_NDIGITS)
1444 return PyObject_CallFunction(round, "O", number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001445 else
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001446 return PyObject_CallFunction(round, "Oi", number, ndigits);
1447#undef UNDEF_NDIGITS
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001448}
1449
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001450PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001451"round(number[, ndigits]) -> floating point number\n\
1452\n\
1453Round a number to a given precision in decimal digits (default 0 digits).\n\
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001454This returns an int when called with one argument, otherwise a float.\n\
1455Precision may be negative.");
1456
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001457
Raymond Hettinger64958a12003-12-17 20:43:33 +00001458static PyObject *
1459builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1460{
1461 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
1462 PyObject *callable;
Martin v. Löwis15e62742006-02-27 16:46:16 +00001463 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001464 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001465
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001466 /* args 1-4 should match listsort in Objects/listobject.c */
Armin Rigo71d7e702005-09-20 18:13:03 +00001467 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
1468 kwlist, &seq, &compare, &keyfunc, &reverse))
1469 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001470
1471 newlist = PySequence_List(seq);
1472 if (newlist == NULL)
1473 return NULL;
1474
1475 callable = PyObject_GetAttrString(newlist, "sort");
1476 if (callable == NULL) {
1477 Py_DECREF(newlist);
1478 return NULL;
1479 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001480
Raymond Hettinger64958a12003-12-17 20:43:33 +00001481 newargs = PyTuple_GetSlice(args, 1, 4);
1482 if (newargs == NULL) {
1483 Py_DECREF(newlist);
1484 Py_DECREF(callable);
1485 return NULL;
1486 }
1487
1488 v = PyObject_Call(callable, newargs, kwds);
1489 Py_DECREF(newargs);
1490 Py_DECREF(callable);
1491 if (v == NULL) {
1492 Py_DECREF(newlist);
1493 return NULL;
1494 }
1495 Py_DECREF(v);
1496 return newlist;
1497}
1498
1499PyDoc_STRVAR(sorted_doc,
1500"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001501
Guido van Rossum79f25d91997-04-29 20:08:16 +00001502static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001503builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001504{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001505 PyObject *v = NULL;
1506 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001507
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001508 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001509 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001510 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001511 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001512 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001513 if (!PyErr_Occurred())
1514 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001515 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001516 }
1517 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001518 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001519 }
1520 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001521 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001522 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001523 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001524 "vars() argument must have __dict__ attribute");
1525 return NULL;
1526 }
1527 }
1528 return d;
1529}
1530
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001531PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001532"vars([object]) -> dictionary\n\
1533\n\
1534Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001535With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001536
Alex Martelli86d8b342007-08-22 22:39:42 +00001537static PyObject *
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001538builtin_trunc(PyObject *self, PyObject *number)
Alex Martelli86d8b342007-08-22 22:39:42 +00001539{
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001540 static PyObject *trunc_str = NULL;
1541 PyObject *trunc;
1542
Guido van Rossum15d3d042007-08-24 02:02:45 +00001543 if (Py_Type(number)->tp_dict == NULL) {
1544 if (PyType_Ready(Py_Type(number)) < 0)
1545 return NULL;
1546 }
1547
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001548 if (trunc_str == NULL) {
1549 trunc_str = PyUnicode_FromString("__trunc__");
1550 if (trunc_str == NULL)
1551 return NULL;
1552 }
1553
1554 trunc = _PyType_Lookup(Py_Type(number), trunc_str);
1555 if (trunc == NULL) {
1556 PyErr_Format(PyExc_TypeError,
1557 "type %.100s doesn't define __trunc__ method",
1558 Py_Type(number)->tp_name);
Alex Martelli86d8b342007-08-22 22:39:42 +00001559 return NULL;
1560 }
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001561 return PyObject_CallFunction(trunc, "O", number);
Alex Martelli86d8b342007-08-22 22:39:42 +00001562}
1563
1564PyDoc_STRVAR(trunc_doc,
1565"trunc(Real) -> Integral\n\
1566\n\
1567returns the integral closest to x between 0 and x.");
1568
1569
Alex Martellia70b1912003-04-22 08:12:33 +00001570
1571static PyObject*
1572builtin_sum(PyObject *self, PyObject *args)
1573{
1574 PyObject *seq;
1575 PyObject *result = NULL;
1576 PyObject *temp, *item, *iter;
1577
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001578 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001579 return NULL;
1580
1581 iter = PyObject_GetIter(seq);
1582 if (iter == NULL)
1583 return NULL;
1584
1585 if (result == NULL) {
1586 result = PyInt_FromLong(0);
1587 if (result == NULL) {
1588 Py_DECREF(iter);
1589 return NULL;
1590 }
1591 } else {
1592 /* reject string values for 'start' parameter */
1593 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
1594 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001595 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001596 Py_DECREF(iter);
1597 return NULL;
1598 }
Alex Martelli41c9f882003-04-22 09:24:48 +00001599 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001600 }
1601
1602 for(;;) {
1603 item = PyIter_Next(iter);
1604 if (item == NULL) {
1605 /* error, or end-of-sequence */
1606 if (PyErr_Occurred()) {
1607 Py_DECREF(result);
1608 result = NULL;
1609 }
1610 break;
1611 }
Alex Martellia253e182003-10-25 23:24:14 +00001612 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001613 Py_DECREF(result);
1614 Py_DECREF(item);
1615 result = temp;
1616 if (result == NULL)
1617 break;
1618 }
1619 Py_DECREF(iter);
1620 return result;
1621}
1622
1623PyDoc_STRVAR(sum_doc,
Thomas Wouters89f507f2006-12-13 04:49:30 +00001624"sum(sequence[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00001625\n\
1626Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00001627of parameter 'start' (which defaults to 0). When the sequence is\n\
1628empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00001629
1630
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001631static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001632builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001633{
1634 PyObject *inst;
1635 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001636 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001637
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001638 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001639 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001640
Guido van Rossum823649d2001-03-21 18:40:58 +00001641 retval = PyObject_IsInstance(inst, cls);
1642 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001643 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001644 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001645}
1646
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001647PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001648"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001649\n\
1650Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001651With a type as second argument, return whether that is the object's type.\n\
1652The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001653isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001654
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001655
1656static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001657builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001658{
1659 PyObject *derived;
1660 PyObject *cls;
1661 int retval;
1662
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001663 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001664 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001665
Guido van Rossum823649d2001-03-21 18:40:58 +00001666 retval = PyObject_IsSubclass(derived, cls);
1667 if (retval < 0)
1668 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001669 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001670}
1671
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001672PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001673"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001674\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00001675Return whether class C is a subclass (i.e., a derived class) of class B.\n\
1676When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
1677is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001678
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001679
Barry Warsawbd599b52000-08-03 15:45:29 +00001680static PyObject*
1681builtin_zip(PyObject *self, PyObject *args)
1682{
Guido van Rossumb65fb332006-08-25 23:26:40 +00001683 /* args must be a tuple */
1684 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00001685
Guido van Rossumb65fb332006-08-25 23:26:40 +00001686 return _PyZip_CreateIter(args);
Barry Warsawbd599b52000-08-03 15:45:29 +00001687}
1688
1689
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001690PyDoc_STRVAR(zip_doc,
Guido van Rossum801f0d72006-08-24 19:48:10 +00001691"zip(it1 [, it2 [...]]) -> iter([(it1[0], it2[0] ...), ...])\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00001692\n\
Guido van Rossum801f0d72006-08-24 19:48:10 +00001693Return an iterator yielding tuples, where each tuple contains the\n\
1694corresponding element from each of the argument iterables.\n\
1695The returned iterator ends when the shortest argument iterable is exhausted.\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001696(This is identical to itertools.izip().)");
Barry Warsawbd599b52000-08-03 15:45:29 +00001697
1698
Guido van Rossum79f25d91997-04-29 20:08:16 +00001699static PyMethodDef builtin_methods[] = {
Guido van Rossum52cc1d82007-03-18 15:41:51 +00001700 {"__build_class__", (PyCFunction)builtin___build_class__,
1701 METH_VARARGS | METH_KEYWORDS, build_class_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001702 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001703 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00001704 {"all", builtin_all, METH_O, all_doc},
1705 {"any", builtin_any, METH_O, any_doc},
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001706 {"bin", builtin_bin, METH_O, bin_doc},
Walter Dörwalde7efd592007-06-05 20:07:21 +00001707 {"chr", builtin_chr, METH_VARARGS, chr_doc},
1708 {"chr8", builtin_chr8, METH_VARARGS, chr8_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001709 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
Guido van Rossumd8faa362007-04-27 19:54:29 +00001710 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001711 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
1712 {"dir", builtin_dir, METH_VARARGS, dir_doc},
1713 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
1714 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00001715 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001716 {"filter", builtin_filter, METH_VARARGS, filter_doc},
Eric Smith8c663262007-08-25 02:26:07 +00001717 {"format", builtin_format, METH_VARARGS, format_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001718 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
1719 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
1720 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
1721 {"hash", builtin_hash, METH_O, hash_doc},
1722 {"hex", builtin_hex, METH_O, hex_doc},
1723 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00001724 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001725 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
1726 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
1727 {"iter", builtin_iter, METH_VARARGS, iter_doc},
1728 {"len", builtin_len, METH_O, len_doc},
1729 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
1730 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001731 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
1732 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandla18af4e2007-04-21 15:47:16 +00001733 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001734 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001735 {"ord", builtin_ord, METH_O, ord_doc},
1736 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00001737 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001738 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001739 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001740 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00001741 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00001742 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001743 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Alex Martelli86d8b342007-08-22 22:39:42 +00001744 {"trunc", builtin_trunc, METH_O, trunc_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001745 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00001746 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00001747};
1748
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001749PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001750"Built-in functions, exceptions, and other objects.\n\
1751\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001752Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001753
Guido van Rossum25ce5661997-08-02 03:10:38 +00001754PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001755_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001756{
Fred Drake5550de32000-06-20 04:54:19 +00001757 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001758 mod = Py_InitModule4("__builtin__", builtin_methods,
1759 builtin_doc, (PyObject *)NULL,
1760 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001761 if (mod == NULL)
1762 return NULL;
1763 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00001764
Tim Peters7571a0f2003-03-23 17:52:28 +00001765#ifdef Py_TRACE_REFS
1766 /* __builtin__ exposes a number of statically allocated objects
1767 * that, before this code was added in 2.3, never showed up in
1768 * the list of "all objects" maintained by Py_TRACE_REFS. As a
1769 * result, programs leaking references to None and False (etc)
1770 * couldn't be diagnosed by examining sys.getobjects(0).
1771 */
1772#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
1773#else
1774#define ADD_TO_ALL(OBJECT) (void)0
1775#endif
1776
Tim Peters4b7625e2001-09-13 21:37:17 +00001777#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00001778 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
1779 return NULL; \
1780 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00001781
1782 SETBUILTIN("None", Py_None);
1783 SETBUILTIN("Ellipsis", Py_Ellipsis);
1784 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001785 SETBUILTIN("False", Py_False);
1786 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00001787 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001788 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001789 SETBUILTIN("buffer", &PyBuffer_Type);
Travis E. Oliphantb99f7622007-08-18 11:21:56 +00001790 SETBUILTIN("memoryview", &PyMemoryView_Type);
Guido van Rossum4dfe8a12006-04-22 23:28:04 +00001791 SETBUILTIN("bytes", &PyBytes_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001792 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001793#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00001794 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001795#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00001796 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00001797 SETBUILTIN("enumerate", &PyEnum_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001798 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00001799 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001800 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00001801 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001802 SETBUILTIN("list", &PyList_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001803 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossum805365e2007-05-07 22:24:25 +00001804 SETBUILTIN("range", &PyRange_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00001805 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00001806 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001807 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001808 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Guido van Rossum572dbf82007-04-27 23:53:51 +00001809 SETBUILTIN("str", &PyUnicode_Type);
Guido van Rossum84fc66d2007-05-03 17:18:26 +00001810 SETBUILTIN("str8", &PyString_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001811 SETBUILTIN("super", &PySuper_Type);
1812 SETBUILTIN("tuple", &PyTuple_Type);
1813 SETBUILTIN("type", &PyType_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001814 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00001815 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
1816 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001817 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00001818 }
1819 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00001820
Guido van Rossum25ce5661997-08-02 03:10:38 +00001821 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00001822#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00001823#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00001824}