blob: db9ac2c4f89638b8c5541e91648aa216d5017aa1 [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
Guido van Rossume2ae77b2001-10-24 20:42:55 +000011#ifdef RISCOS
12#include "unixstuff.h"
13#endif
14
Mark Hammond26cffde42001-05-14 12:17:34 +000015/* The default encoding used by the platform file system APIs
16 Can remain NULL for all platforms that don't have such a concept
17*/
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000018#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
Mark Hammond26cffde42001-05-14 12:17:34 +000019const char *Py_FileSystemDefaultEncoding = "mbcs";
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000020#elif defined(__APPLE__)
21const char *Py_FileSystemDefaultEncoding = "utf-8";
Mark Hammond26cffde42001-05-14 12:17:34 +000022#else
23const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
24#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000025
Guido van Rossum79f25d91997-04-29 20:08:16 +000026static PyObject *
Guido van Rossum52cc1d82007-03-18 15:41:51 +000027builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds)
28{
Guido van Rossumcd16bf62007-06-13 18:07:49 +000029 PyObject *func, *name, *bases, *mkw, *meta, *prep, *ns, *cell;
30 PyObject *cls = NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +000031 Py_ssize_t nargs, nbases;
32
33 assert(args != NULL);
34 if (!PyTuple_Check(args)) {
35 PyErr_SetString(PyExc_TypeError,
36 "__build_class__: args is not a tuple");
37 return NULL;
38 }
39 nargs = PyTuple_GET_SIZE(args);
40 if (nargs < 2) {
41 PyErr_SetString(PyExc_TypeError,
42 "__build_class__: not enough arguments");
43 return NULL;
44 }
45 func = PyTuple_GET_ITEM(args, 0); /* Better be callable */
46 name = PyTuple_GET_ITEM(args, 1);
Martin v. Löwis5b222132007-06-10 09:51:05 +000047 if ((!PyString_Check(name) && !PyUnicode_Check(name))) {
Guido van Rossum52cc1d82007-03-18 15:41:51 +000048 PyErr_SetString(PyExc_TypeError,
49 "__build_class__: name is not a string");
50 return NULL;
51 }
52 bases = PyTuple_GetSlice(args, 2, nargs);
53 if (bases == NULL)
54 return NULL;
55 nbases = nargs - 2;
56
57 if (kwds == NULL) {
58 meta = NULL;
59 mkw = NULL;
60 }
61 else {
62 mkw = PyDict_Copy(kwds); /* Don't modify kwds passed in! */
63 if (mkw == NULL) {
64 Py_DECREF(bases);
65 return NULL;
66 }
67 meta = PyDict_GetItemString(mkw, "metaclass");
68 if (meta != NULL) {
69 Py_INCREF(meta);
70 if (PyDict_DelItemString(mkw, "metaclass") < 0) {
71 Py_DECREF(meta);
72 Py_DECREF(mkw);
73 Py_DECREF(bases);
74 return NULL;
75 }
76 }
77 }
78 if (meta == NULL) {
79 if (PyTuple_GET_SIZE(bases) == 0)
80 meta = (PyObject *) (&PyType_Type);
81 else {
82 PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
83 meta = (PyObject *) (base0->ob_type);
84 }
85 Py_INCREF(meta);
86 }
87 prep = PyObject_GetAttrString(meta, "__prepare__");
88 if (prep == NULL) {
89 PyErr_Clear();
90 ns = PyDict_New();
91 }
92 else {
93 PyObject *pargs = Py_BuildValue("OO", name, bases);
94 if (pargs == NULL) {
95 Py_DECREF(prep);
96 Py_DECREF(meta);
97 Py_XDECREF(mkw);
98 Py_DECREF(bases);
99 return NULL;
100 }
101 ns = PyEval_CallObjectWithKeywords(prep, pargs, mkw);
102 Py_DECREF(pargs);
103 Py_DECREF(prep);
104 if (ns == NULL) {
105 Py_DECREF(meta);
106 Py_XDECREF(mkw);
107 Py_DECREF(bases);
108 return NULL;
109 }
110 }
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000111 cell = PyObject_CallFunctionObjArgs(func, ns, NULL);
112 if (cell != NULL) {
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000113 PyObject *margs;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000114 margs = Py_BuildValue("OOO", name, bases, ns);
115 if (margs != NULL) {
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000116 cls = PyEval_CallObjectWithKeywords(meta, margs, mkw);
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000117 Py_DECREF(margs);
118 }
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000119 if (cls != NULL && PyCell_Check(cell)) {
120 Py_INCREF(cls);
121 PyCell_SET(cell, cls);
122 }
123 Py_DECREF(cell);
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000124 }
125 Py_DECREF(ns);
126 Py_DECREF(meta);
127 Py_XDECREF(mkw);
128 Py_DECREF(bases);
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000129 return cls;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000130}
131
132PyDoc_STRVAR(build_class_doc,
133"__build_class__(func, name, *bases, metaclass=None, **kwds) -> class\n\
134\n\
135Internal helper function used by the class statement.");
136
137static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000138builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000139{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000140 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
141 "level", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000142 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000143 PyObject *globals = NULL;
144 PyObject *locals = NULL;
145 PyObject *fromlist = NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +0000146 int level = -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000147
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000148 if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|OOOi:__import__",
149 kwlist, &name, &globals, &locals, &fromlist, &level))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000150 return NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +0000151 return PyImport_ImportModuleLevel(name, globals, locals,
152 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000153}
154
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000155PyDoc_STRVAR(import_doc,
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000156"__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000157\n\
158Import a module. The globals are only used to determine the context;\n\
159they are not modified. The locals are currently unused. The fromlist\n\
160should be a list of names to emulate ``from name import ...'', or an\n\
161empty list to emulate ``import name''.\n\
162When importing a module from a package, note that __import__('A.B', ...)\n\
163returns package A when fromlist is empty, but its submodule B when\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000164fromlist is not empty. Level is used to determine whether to perform \n\
165absolute or relative imports. -1 is the original strategy of attempting\n\
166both absolute and relative imports, 0 is absolute, a positive number\n\
167is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000168
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000169
Guido van Rossum79f25d91997-04-29 20:08:16 +0000170static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000171builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000172{
Guido van Rossum09df08a1998-05-22 00:51:39 +0000173 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000174}
175
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000176PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000177"abs(number) -> number\n\
178\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000179Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000180
Raymond Hettinger96229b12005-03-11 06:49:40 +0000181static PyObject *
182builtin_all(PyObject *self, PyObject *v)
183{
184 PyObject *it, *item;
185
186 it = PyObject_GetIter(v);
187 if (it == NULL)
188 return NULL;
189
190 while ((item = PyIter_Next(it)) != NULL) {
191 int cmp = PyObject_IsTrue(item);
192 Py_DECREF(item);
193 if (cmp < 0) {
194 Py_DECREF(it);
195 return NULL;
196 }
197 if (cmp == 0) {
198 Py_DECREF(it);
199 Py_RETURN_FALSE;
200 }
201 }
202 Py_DECREF(it);
203 if (PyErr_Occurred())
204 return NULL;
205 Py_RETURN_TRUE;
206}
207
208PyDoc_STRVAR(all_doc,
209"all(iterable) -> bool\n\
210\n\
211Return True if bool(x) is True for all values x in the iterable.");
212
213static PyObject *
214builtin_any(PyObject *self, PyObject *v)
215{
216 PyObject *it, *item;
217
218 it = PyObject_GetIter(v);
219 if (it == NULL)
220 return NULL;
221
222 while ((item = PyIter_Next(it)) != NULL) {
223 int cmp = PyObject_IsTrue(item);
224 Py_DECREF(item);
225 if (cmp < 0) {
226 Py_DECREF(it);
227 return NULL;
228 }
229 if (cmp == 1) {
230 Py_DECREF(it);
231 Py_RETURN_TRUE;
232 }
233 }
234 Py_DECREF(it);
235 if (PyErr_Occurred())
236 return NULL;
237 Py_RETURN_FALSE;
238}
239
240PyDoc_STRVAR(any_doc,
241"any(iterable) -> bool\n\
242\n\
243Return True if bool(x) is True for any x in the iterable.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000244
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000245
Guido van Rossum79f25d91997-04-29 20:08:16 +0000246static PyObject *
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000247builtin_bin(PyObject *self, PyObject *v)
248{
249 return PyNumber_ToBase(v, 2);
250}
251
252PyDoc_STRVAR(bin_doc,
253"bin(number) -> string\n\
254\n\
255Return the binary representation of an integer or long integer.");
256
257
258static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000259builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000260{
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000261 PyObject *itertools, *ifilter, *result;
262 itertools = PyImport_ImportModule("itertools");
263 if (itertools == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000264 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000265 ifilter = PyObject_GetAttrString(itertools, "ifilter");
266 Py_DECREF(itertools);
267 if (ifilter == NULL)
Georg Brandle35b6572005-07-19 22:20:20 +0000268 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000269 result = PyObject_Call(ifilter, args, NULL);
270 Py_DECREF(ifilter);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000271 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000272}
273
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000274PyDoc_STRVAR(filter_doc,
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000275"filter(predicate, iterable) -> iterator\n\
276\n\
277Return an iterator yielding only those elements of the input iterable\n\
278for which the predicate (a Boolean function) returns true.\n\
279If the predicate is None, 'lambda x: bool(x)' is assumed.\n\
280(This is identical to itertools.ifilter().)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000281
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000282
Guido van Rossum79f25d91997-04-29 20:08:16 +0000283static PyObject *
Walter Dörwalde7efd592007-06-05 20:07:21 +0000284builtin_chr8(PyObject *self, PyObject *args)
Guido van Rossum7fcf2242007-05-04 17:43:11 +0000285{
286 long x;
287 char s[1];
288
289 if (!PyArg_ParseTuple(args, "l:chr8", &x))
290 return NULL;
291 if (x < 0 || x >= 256) {
292 PyErr_SetString(PyExc_ValueError,
293 "chr8() arg not in range(256)");
294 return NULL;
295 }
296 s[0] = (char)x;
297 return PyString_FromStringAndSize(s, 1);
298}
299
Walter Dörwalde7efd592007-06-05 20:07:21 +0000300PyDoc_STRVAR(chr8_doc,
Guido van Rossum7fcf2242007-05-04 17:43:11 +0000301"chr8(i) -> 8-bit character\n\
302\n\
303Return a string of one character with ordinal i; 0 <= i < 256.");
304
305
306static PyObject *
Walter Dörwalde7efd592007-06-05 20:07:21 +0000307builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000308{
309 long x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000310
Walter Dörwalde7efd592007-06-05 20:07:21 +0000311 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum09095f32000-03-10 23:00:52 +0000312 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000313
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000314 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000315}
316
Walter Dörwalde7efd592007-06-05 20:07:21 +0000317PyDoc_STRVAR(chr_doc,
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000318"chr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000319\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000320Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.");
Guido van Rossum09095f32000-03-10 23:00:52 +0000321
322
323static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000324builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000325{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000326 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000327 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000328
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000329 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000330 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000331 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000332 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000333 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000334}
335
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000336PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000337"cmp(x, y) -> integer\n\
338\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000339Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000340
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000341
342static char *
343source_as_string(PyObject *cmd)
344{
345 char *str;
346 Py_ssize_t size;
347
348 if (!PyObject_CheckReadBuffer(cmd) &&
349 !PyUnicode_Check(cmd)) {
350 PyErr_SetString(PyExc_TypeError,
351 "eval()/exec() arg 1 must be a string, bytes or code object");
352 return NULL;
353 }
354
355 if (PyUnicode_Check(cmd)) {
356 cmd = _PyUnicode_AsDefaultEncodedString(cmd, NULL);
357 if (cmd == NULL)
358 return NULL;
359 }
360 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &size) < 0) {
361 return NULL;
362 }
363 if (strlen(str) != size) {
364 PyErr_SetString(PyExc_TypeError,
365 "source code string cannot contain null bytes");
366 return NULL;
367 }
368 return str;
369}
370
Guido van Rossum79f25d91997-04-29 20:08:16 +0000371static PyObject *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000372builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000373{
374 char *str;
375 char *filename;
376 char *startstr;
377 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000378 int dont_inherit = 0;
379 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000380 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000381 PyObject *cmd;
Guido van Rossumd8faa362007-04-27 19:54:29 +0000382 static char *kwlist[] = {"source", "filename", "mode", "flags",
383 "dont_inherit", NULL};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000384
Guido van Rossumd8faa362007-04-27 19:54:29 +0000385 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
386 kwlist, &cmd, &filename, &startstr,
387 &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000388 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000389
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000390 cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000391
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000392 str = source_as_string(cmd);
393 if (str == NULL)
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000394 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000395
Guido van Rossum5b722181993-03-30 17:46:03 +0000396 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000397 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000398 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000399 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000400 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000401 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000402 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000403 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000404 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000405 return NULL;
Guido van Rossum5b722181993-03-30 17:46:03 +0000406 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000407
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000408 if (supplied_flags &
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000409 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000410 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000411 PyErr_SetString(PyExc_ValueError,
412 "compile(): unrecognised flags");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000413 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000414 }
415 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
416
Tim Peters6cd6a822001-08-17 22:11:27 +0000417 if (!dont_inherit) {
418 PyEval_MergeCompilerFlags(&cf);
419 }
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000420 return Py_CompileStringFlags(str, filename, start, &cf);
Guido van Rossum5b722181993-03-30 17:46:03 +0000421}
422
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000423PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000424"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000425\n\
426Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000427into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000428The filename will be used for run-time error messages.\n\
429The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000430single (interactive) statement, or 'eval' to compile an expression.\n\
431The flags argument, if present, controls which future statements influence\n\
432the compilation of the code.\n\
433The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
434the effects of any future statements in effect in the code calling\n\
435compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000436in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000437
Guido van Rossum79f25d91997-04-29 20:08:16 +0000438static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000439builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000440{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000441 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000442
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000443 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000444 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000445 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000446}
447
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000448PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000449"dir([object]) -> list of strings\n"
450"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000451"If called without an argument, return the names in the current scope.\n"
452"Else, return an alphabetized list of names comprising (some of) the attributes\n"
453"of the given object, and of attributes reachable from it.\n"
454"If the object supplies a method named __dir__, it will be used; otherwise\n"
455"the default dir() logic is used and returns:\n"
456" for a module object: the module's attributes.\n"
457" for a class object: its attributes, and recursively the attributes\n"
458" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000459" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000460" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000461
Guido van Rossum79f25d91997-04-29 20:08:16 +0000462static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000463builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000464{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000465 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000466
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000467 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000468 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000469 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000470}
471
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000472PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000473"divmod(x, y) -> (div, mod)\n\
474\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000475Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000476
477
Guido van Rossum79f25d91997-04-29 20:08:16 +0000478static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000479builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000480{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000481 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000482 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000483 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000484 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000485
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000486 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000487 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000488 if (locals != Py_None && !PyMapping_Check(locals)) {
489 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000490 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000491 }
492 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000493 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000494 "globals must be a real dict; try eval(expr, {}, mapping)"
495 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000496 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000497 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000498 if (globals == Py_None) {
499 globals = PyEval_GetGlobals();
500 if (locals == Py_None)
501 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000502 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000503 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000504 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000505
Georg Brandl77c85e62005-09-15 10:46:13 +0000506 if (globals == NULL || locals == NULL) {
507 PyErr_SetString(PyExc_TypeError,
508 "eval must be given globals and locals "
509 "when called without a frame");
510 return NULL;
511 }
512
Guido van Rossum79f25d91997-04-29 20:08:16 +0000513 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
514 if (PyDict_SetItemString(globals, "__builtins__",
515 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000516 return NULL;
517 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000518
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000519 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000520 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000521 PyErr_SetString(PyExc_TypeError,
522 "code object passed to eval() may not contain free variables");
523 return NULL;
524 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000525 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000526 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000527
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000528 str = source_as_string(cmd);
529 if (str == NULL)
Guido van Rossum94390a41992-08-14 15:14:30 +0000530 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000531
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000532 while (*str == ' ' || *str == '\t')
533 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000534
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000535 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Tim Peters9fa96be2001-08-17 23:04:59 +0000536 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000537 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
538 Py_XDECREF(tmp);
539 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000540}
541
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000542PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000543"eval(source[, globals[, locals]]) -> value\n\
544\n\
545Evaluate the source in the context of globals and locals.\n\
546The source may be a string representing a Python expression\n\
547or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000548The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000549defaulting to the current globals and locals.\n\
550If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000551
Georg Brandl7cae87c2006-09-06 06:51:57 +0000552static PyObject *
553builtin_exec(PyObject *self, PyObject *args)
554{
555 PyObject *v;
556 PyObject *prog, *globals = Py_None, *locals = Py_None;
557 int plain = 0;
558
559 if (!PyArg_ParseTuple(args, "O|OO:exec", &prog, &globals, &locals))
560 return NULL;
561
562 if (globals == Py_None) {
563 globals = PyEval_GetGlobals();
564 if (locals == Py_None) {
565 locals = PyEval_GetLocals();
566 plain = 1;
567 }
568 if (!globals || !locals) {
569 PyErr_SetString(PyExc_SystemError,
570 "globals and locals cannot be NULL");
571 return NULL;
572 }
573 }
574 else if (locals == Py_None)
575 locals = globals;
576 if (!PyString_Check(prog) &&
577 !PyUnicode_Check(prog) &&
Guido van Rossumda5b8f22007-06-12 23:30:11 +0000578 !PyCode_Check(prog)) {
Georg Brandl7cae87c2006-09-06 06:51:57 +0000579 PyErr_Format(PyExc_TypeError,
580 "exec() arg 1 must be a string, file, or code "
581 "object, not %.100s", prog->ob_type->tp_name);
582 return NULL;
583 }
584 if (!PyDict_Check(globals)) {
585 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
586 globals->ob_type->tp_name);
587 return NULL;
588 }
589 if (!PyMapping_Check(locals)) {
590 PyErr_Format(PyExc_TypeError,
591 "arg 3 must be a mapping or None, not %.100s",
592 locals->ob_type->tp_name);
593 return NULL;
594 }
595 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
596 if (PyDict_SetItemString(globals, "__builtins__",
597 PyEval_GetBuiltins()) != 0)
598 return NULL;
599 }
600
601 if (PyCode_Check(prog)) {
602 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
603 PyErr_SetString(PyExc_TypeError,
604 "code object passed to exec() may not "
605 "contain free variables");
606 return NULL;
607 }
608 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
609 }
Georg Brandl7cae87c2006-09-06 06:51:57 +0000610 else {
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000611 char *str = source_as_string(prog);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000612 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000613 if (str == NULL)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000614 return NULL;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000615 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000616 if (PyEval_MergeCompilerFlags(&cf))
617 v = PyRun_StringFlags(str, Py_file_input, globals,
618 locals, &cf);
619 else
620 v = PyRun_String(str, Py_file_input, globals, locals);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000621 }
622 if (v == NULL)
623 return NULL;
624 Py_DECREF(v);
625 Py_RETURN_NONE;
626}
627
628PyDoc_STRVAR(exec_doc,
629"exec(object[, globals[, locals]])\n\
630\n\
631Read and execute code from a object, which can be a string, a code\n\
632object or a file object.\n\
633The globals and locals are dictionaries, defaulting to the current\n\
634globals and locals. If only globals is given, locals defaults to it.");
635
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000636
Guido van Rossum79f25d91997-04-29 20:08:16 +0000637static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000638builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000639{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000640 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000641 PyObject *globals = Py_None, *locals = Py_None;
642 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000643 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000644 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000645 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000646
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000647 if (!PyArg_ParseTuple(args, "s|O!O:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000648 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000649 &PyDict_Type, &globals,
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000650 &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000651 return NULL;
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000652 if (locals != Py_None && !PyMapping_Check(locals)) {
653 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
654 return NULL;
655 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000656 if (globals == Py_None) {
657 globals = PyEval_GetGlobals();
658 if (locals == Py_None)
659 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000660 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000661 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000662 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000663 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
664 if (PyDict_SetItemString(globals, "__builtins__",
665 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000666 return NULL;
667 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000668
669 exists = 0;
670 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000671#if defined(PLAN9)
672 {
673 Dir *d;
674
675 if ((d = dirstat(filename))!=nil) {
676 if(d->mode & DMDIR)
677 werrstr("is a directory");
678 else
679 exists = 1;
680 free(d);
681 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000682 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000683#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000684 if (object_exists(filename)) {
685 if (isdir(filename))
686 errno = EISDIR;
687 else
688 exists = 1;
689 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000690#else /* standard Posix */
691 {
692 struct stat s;
693 if (stat(filename, &s) == 0) {
694 if (S_ISDIR(s.st_mode))
Andrew MacIntyreda4d6cb2004-03-29 11:53:38 +0000695# if defined(PYOS_OS2) && defined(PYCC_VACPP)
Martin v. Löwis3484a182002-03-09 12:07:51 +0000696 errno = EOS2ERR;
697# else
698 errno = EISDIR;
699# endif
700 else
701 exists = 1;
702 }
703 }
704#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000705
706 if (exists) {
707 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000708 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000709 Py_END_ALLOW_THREADS
710
711 if (fp == NULL) {
712 exists = 0;
713 }
714 }
715
716 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000717 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000718 return NULL;
719 }
Tim Peters5ba58662001-07-16 02:29:45 +0000720 cf.cf_flags = 0;
721 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000722 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000723 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000724 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000725 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000726 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000727 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000728}
729
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000730PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000731"execfile(filename[, globals[, locals]])\n\
732\n\
733Read and execute a Python script from a file.\n\
734The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000735globals and locals. If only globals is given, locals defaults to it.");
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_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000740{
Martin v. Löwis5b222132007-06-10 09:51:05 +0000741 PyObject *v, *result, *dflt = NULL, *release = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000742 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000743
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000744 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000745 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000746
747 if (PyString_Check(name)) {
748 release = PyString_AsDecodedObject(name, NULL, NULL);
749 if (!release)
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000750 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000751 name = release;
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000752 }
753
Martin v. Löwis5b222132007-06-10 09:51:05 +0000754 if (!PyUnicode_Check(name)) {
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000755 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000756 "getattr(): attribute name must be string");
Martin v. Löwis5b222132007-06-10 09:51:05 +0000757 Py_XDECREF(release);
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000758 return NULL;
759 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000760 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000761 if (result == NULL && dflt != NULL &&
762 PyErr_ExceptionMatches(PyExc_AttributeError))
763 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000764 PyErr_Clear();
765 Py_INCREF(dflt);
766 result = dflt;
767 }
Martin v. Löwis5b222132007-06-10 09:51:05 +0000768 Py_XDECREF(release);
Guido van Rossum950ff291998-06-29 13:38:57 +0000769 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000770}
771
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000772PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000773"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000774\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000775Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
776When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000777exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000778
779
Guido van Rossum79f25d91997-04-29 20:08:16 +0000780static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000781builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000782{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000783 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000784
Guido van Rossum79f25d91997-04-29 20:08:16 +0000785 d = PyEval_GetGlobals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000786 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000787 return d;
788}
789
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000790PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000791"globals() -> dictionary\n\
792\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000793Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000794
795
Guido van Rossum79f25d91997-04-29 20:08:16 +0000796static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000797builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000798{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000799 PyObject *v;
800 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000801
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000802 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000803 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000804 if (!PyUnicode_Check(name)) {
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000805 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000806 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000807 return NULL;
808 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000809 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000810 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000811 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000812 Py_INCREF(Py_False);
813 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000814 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000815 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000816 Py_INCREF(Py_True);
817 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000818}
819
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000820PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000821"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000822\n\
823Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000824(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000825
826
Guido van Rossum79f25d91997-04-29 20:08:16 +0000827static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000828builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000829{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000830 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000831}
832
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000833PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000834"id(object) -> integer\n\
835\n\
836Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000837simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000838
839
Guido van Rossum79f25d91997-04-29 20:08:16 +0000840static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000841builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000842{
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000843 PyObject *itertools, *imap, *result;
844 itertools = PyImport_ImportModule("itertools");
845 if (itertools == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000846 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000847 imap = PyObject_GetAttrString(itertools, "imap");
848 Py_DECREF(itertools);
849 if (imap == NULL)
Tim Peters4e9afdc2001-05-03 23:54:49 +0000850 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000851 result = PyObject_Call(imap, args, NULL);
852 Py_DECREF(imap);
Tim Peters4e9afdc2001-05-03 23:54:49 +0000853 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000854}
855
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000856PyDoc_STRVAR(map_doc,
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000857"map(function, iterable[, iterable, ...]) -> iterator\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000858\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000859Return an iterator yielding the results of applying the function to the\n\
860items of the argument iterables(s). If more than one iterable is given,\n\
861the function is called with an argument list consisting of the\n\
862corresponding item of each iterable, until an iterable is exhausted.\n\
863If the function is None, 'lambda *a: a' is assumed.\n\
864(This is identical to itertools.imap().)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000865
866
Guido van Rossum79f25d91997-04-29 20:08:16 +0000867static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +0000868builtin_next(PyObject *self, PyObject *args)
869{
870 PyObject *it, *res;
871 PyObject *def = NULL;
872
873 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
874 return NULL;
875 if (!PyIter_Check(it)) {
876 PyErr_Format(PyExc_TypeError,
877 "%.200s object is not an iterator", it->ob_type->tp_name);
878 return NULL;
879 }
880
881 res = (*it->ob_type->tp_iternext)(it);
882 if (res == NULL) {
883 if (def) {
884 if (PyErr_Occurred() &&
885 !PyErr_ExceptionMatches(PyExc_StopIteration))
886 return NULL;
887 PyErr_Clear();
888 Py_INCREF(def);
889 return def;
890 } else if (PyErr_Occurred()) {
891 return NULL;
892 } else {
893 PyErr_SetNone(PyExc_StopIteration);
894 return NULL;
895 }
896 }
897 return res;
898}
899
900PyDoc_STRVAR(next_doc,
901"next(iterator[, default])\n\
902\n\
903Return the next item from the iterator. If default is given and the iterator\n\
904is exhausted, it is returned instead of raising StopIteration.");
905
906
907static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000908builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000909{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000910 PyObject *v;
911 PyObject *name;
912 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000913
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000914 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000915 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000916 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000917 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000918 Py_INCREF(Py_None);
919 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000920}
921
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000922PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000923"setattr(object, name, value)\n\
924\n\
925Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000926``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000927
928
Guido van Rossum79f25d91997-04-29 20:08:16 +0000929static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000930builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000931{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000932 PyObject *v;
933 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000934
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000935 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +0000936 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000937 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000938 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000939 Py_INCREF(Py_None);
940 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +0000941}
942
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000943PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +0000944"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000945\n\
946Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000947``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000948
949
Guido van Rossum79f25d91997-04-29 20:08:16 +0000950static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000951builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000952{
Guido van Rossum9bfef441993-03-29 10:43:31 +0000953 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000954
Guido van Rossum79f25d91997-04-29 20:08:16 +0000955 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000956 if (x == -1)
957 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000958 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000959}
960
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000961PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000962"hash(object) -> integer\n\
963\n\
964Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000965the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000966
967
Guido van Rossum79f25d91997-04-29 20:08:16 +0000968static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000969builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +0000970{
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000971 return PyNumber_ToBase(v, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +0000972}
973
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000974PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000975"hex(number) -> string\n\
976\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000977Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000978
979
Guido van Rossum79f25d91997-04-29 20:08:16 +0000980static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000981builtin_iter(PyObject *self, PyObject *args)
982{
983 PyObject *v, *w = NULL;
984
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000985 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000986 return NULL;
987 if (w == NULL)
988 return PyObject_GetIter(v);
989 if (!PyCallable_Check(v)) {
990 PyErr_SetString(PyExc_TypeError,
991 "iter(v, w): v must be callable");
992 return NULL;
993 }
994 return PyCallIter_New(v, w);
995}
996
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000997PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000998"iter(collection) -> iterator\n\
999iter(callable, sentinel) -> iterator\n\
1000\n\
1001Get an iterator from an object. In the first form, the argument must\n\
1002supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001003In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001004
1005
1006static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001007builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001008{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001009 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001010
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001011 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001012 if (res < 0 && PyErr_Occurred())
1013 return NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001014 return PyInt_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001015}
1016
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001017PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001018"len(object) -> integer\n\
1019\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001020Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001021
1022
Guido van Rossum79f25d91997-04-29 20:08:16 +00001023static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001024builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001025{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001026 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001027
Guido van Rossum79f25d91997-04-29 20:08:16 +00001028 d = PyEval_GetLocals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00001029 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001030 return d;
1031}
1032
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001033PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001034"locals() -> dictionary\n\
1035\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001036Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001037
1038
Guido van Rossum79f25d91997-04-29 20:08:16 +00001039static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001040min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001041{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001042 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001043 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001044
Guido van Rossum79f25d91997-04-29 20:08:16 +00001045 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001046 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001047 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001048 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001049
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001050 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1051 keyfunc = PyDict_GetItemString(kwds, "key");
1052 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001053 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001054 "%s() got an unexpected keyword argument", name);
1055 return NULL;
1056 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001057 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001058
Tim Petersc3074532001-05-03 07:00:32 +00001059 it = PyObject_GetIter(v);
1060 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001061 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001062
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001063 maxitem = NULL; /* the result */
1064 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001065 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001066 /* get the value from the key function */
1067 if (keyfunc != NULL) {
1068 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1069 if (val == NULL)
1070 goto Fail_it_item;
1071 }
1072 /* no key function; the value is the item */
1073 else {
1074 val = item;
1075 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001076 }
Tim Petersc3074532001-05-03 07:00:32 +00001077
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001078 /* maximum value and item are unset; set them */
1079 if (maxval == NULL) {
1080 maxitem = item;
1081 maxval = val;
1082 }
1083 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001084 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001085 int cmp = PyObject_RichCompareBool(val, maxval, op);
1086 if (cmp < 0)
1087 goto Fail_it_item_and_val;
1088 else if (cmp > 0) {
1089 Py_DECREF(maxval);
1090 Py_DECREF(maxitem);
1091 maxval = val;
1092 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001093 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001094 else {
1095 Py_DECREF(item);
1096 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001097 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001098 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001099 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001100 if (PyErr_Occurred())
1101 goto Fail_it;
1102 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001103 PyErr_Format(PyExc_ValueError,
1104 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001105 assert(maxitem == NULL);
1106 }
1107 else
1108 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001109 Py_DECREF(it);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001110 return maxitem;
1111
1112Fail_it_item_and_val:
1113 Py_DECREF(val);
1114Fail_it_item:
1115 Py_DECREF(item);
1116Fail_it:
1117 Py_XDECREF(maxval);
1118 Py_XDECREF(maxitem);
1119 Py_DECREF(it);
1120 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001121}
1122
Guido van Rossum79f25d91997-04-29 20:08:16 +00001123static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001124builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001125{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001126 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001127}
1128
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001129PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001130"min(iterable[, key=func]) -> value\n\
1131min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001132\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001133With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001134With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001135
1136
Guido van Rossum79f25d91997-04-29 20:08:16 +00001137static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001138builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001139{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001140 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001141}
1142
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001143PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001144"max(iterable[, key=func]) -> value\n\
1145max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001146\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001147With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001148With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001149
1150
Guido van Rossum79f25d91997-04-29 20:08:16 +00001151static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001152builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001153{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001154 return PyNumber_ToBase(v, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001155}
1156
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001157PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001158"oct(number) -> string\n\
1159\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001160Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001161
1162
Guido van Rossum79f25d91997-04-29 20:08:16 +00001163static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001164builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001165{
Guido van Rossum09095f32000-03-10 23:00:52 +00001166 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001167 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001168
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001169 if (PyString_Check(obj)) {
1170 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001171 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001172 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001173 return PyInt_FromLong(ord);
1174 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001175 }
1176 else if (PyUnicode_Check(obj)) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001177 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001178 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001179 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001180 return PyInt_FromLong(ord);
1181 }
Guido van Rossum6f376c42007-05-24 14:31:33 +00001182 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001183 else if (PyBytes_Check(obj)) {
1184 /* XXX Hopefully this is temporary */
1185 size = PyBytes_GET_SIZE(obj);
1186 if (size == 1) {
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001187 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
Guido van Rossum98f97462007-04-13 03:31:13 +00001188 return PyInt_FromLong(ord);
1189 }
1190 }
1191 else {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001192 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001193 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001194 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001195 return NULL;
1196 }
1197
Guido van Rossumad991772001-01-12 16:03:05 +00001198 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001199 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001200 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001201 size);
1202 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001203}
1204
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001205PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001206"ord(c) -> integer\n\
1207\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001208Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001209
1210
Guido van Rossum79f25d91997-04-29 20:08:16 +00001211static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001212builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001213{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001214 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001215
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001216 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001217 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001218 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001219}
1220
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001221PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001222"pow(x, y[, z]) -> number\n\
1223\n\
1224With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001225equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001226
1227
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001228
Guido van Rossum34343512006-11-30 22:13:52 +00001229static PyObject *
1230builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1231{
1232 static char *kwlist[] = {"sep", "end", "file", 0};
Georg Brandl257d3d92007-02-26 10:35:10 +00001233 static PyObject *dummy_args;
Guido van Rossum34343512006-11-30 22:13:52 +00001234 PyObject *sep = NULL, *end = NULL, *file = NULL;
1235 int i, err;
1236
Georg Brandl257d3d92007-02-26 10:35:10 +00001237 if (dummy_args == NULL) {
1238 if (!(dummy_args = PyTuple_New(0)))
1239 return NULL;
1240 }
Georg Brandl88fc6642007-02-09 21:28:07 +00001241 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
Guido van Rossum34343512006-11-30 22:13:52 +00001242 kwlist, &sep, &end, &file))
1243 return NULL;
1244 if (file == NULL || file == Py_None)
1245 file = PySys_GetObject("stdout");
1246
Georg Brandl16f3e032006-11-30 22:46:03 +00001247 if (sep && sep != Py_None && !PyString_Check(sep) &&
1248 !PyUnicode_Check(sep)) {
1249 PyErr_Format(PyExc_TypeError,
1250 "sep must be None, str or unicode, not %.200s",
1251 sep->ob_type->tp_name);
1252 return NULL;
1253 }
1254 if (end && end != Py_None && !PyString_Check(end) &&
1255 !PyUnicode_Check(end)) {
1256 PyErr_Format(PyExc_TypeError,
1257 "end must be None, str or unicode, not %.200s",
1258 end->ob_type->tp_name);
1259 return NULL;
1260 }
Guido van Rossum34343512006-11-30 22:13:52 +00001261
1262 for (i = 0; i < PyTuple_Size(args); i++) {
1263 if (i > 0) {
1264 if (sep == NULL || sep == Py_None)
1265 err = PyFile_WriteString(" ", file);
1266 else
1267 err = PyFile_WriteObject(sep, file,
1268 Py_PRINT_RAW);
1269 if (err)
1270 return NULL;
1271 }
1272 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1273 Py_PRINT_RAW);
1274 if (err)
1275 return NULL;
1276 }
1277
1278 if (end == NULL || end == Py_None)
1279 err = PyFile_WriteString("\n", file);
1280 else
1281 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1282 if (err)
1283 return NULL;
1284
1285 Py_RETURN_NONE;
1286}
1287
1288PyDoc_STRVAR(print_doc,
Guido van Rossum452bf512007-02-09 05:32:43 +00001289"print(value, ..., file=None, sep=' ', end='\\n')\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001290\n\
1291Prints the values to a stream, or to sys.stdout by default.\n\
1292Optional keyword arguments:\n\
1293file: a file-like object (stream); defaults to the current sys.stdout.\n\
1294sep: string inserted between values, default a space.\n\
1295end: string appended after the last value, default a newline.");
1296
1297
Guido van Rossuma88a0332007-02-26 16:59:55 +00001298static PyObject *
1299builtin_input(PyObject *self, PyObject *args)
1300{
Guido van Rossumeba76962007-05-27 09:13:28 +00001301 PyObject *promptarg = NULL;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001302 PyObject *fin = PySys_GetObject("stdin");
1303 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossumeba76962007-05-27 09:13:28 +00001304 PyObject *ferr = PySys_GetObject("stderr");
1305 PyObject *tmp;
1306 long fd;
1307 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001308
Guido van Rossumeba76962007-05-27 09:13:28 +00001309 /* Parse arguments */
1310 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg))
Guido van Rossuma88a0332007-02-26 16:59:55 +00001311 return NULL;
1312
Guido van Rossumeba76962007-05-27 09:13:28 +00001313 /* Check that stdin/out/err are intact */
Guido van Rossuma88a0332007-02-26 16:59:55 +00001314 if (fin == NULL) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001315 PyErr_SetString(PyExc_RuntimeError,
1316 "input(): lost sys.stdin");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001317 return NULL;
1318 }
1319 if (fout == NULL) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001320 PyErr_SetString(PyExc_RuntimeError,
1321 "input(): lost sys.stdout");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001322 return NULL;
1323 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001324 if (ferr == NULL) {
1325 PyErr_SetString(PyExc_RuntimeError,
1326 "input(): lost sys.stderr");
1327 return NULL;
1328 }
1329
1330 /* First of all, flush stderr */
1331 tmp = PyObject_CallMethod(ferr, "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
1337 /* We should only use (GNU) readline if Python's sys.stdin and
1338 sys.stdout are the same as C's stdin and stdout, because we
1339 need to pass it those. */
1340 tmp = PyObject_CallMethod(fin, "fileno", "");
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001341 if (tmp == NULL) {
1342 PyErr_Clear();
1343 tty = 0;
1344 }
1345 else {
Guido van Rossumeba76962007-05-27 09:13:28 +00001346 fd = PyInt_AsLong(tmp);
1347 Py_DECREF(tmp);
1348 if (fd < 0 && PyErr_Occurred())
1349 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001350 tty = fd == fileno(stdin) && isatty(fd);
1351 }
1352 if (tty) {
1353 tmp = PyObject_CallMethod(fout, "fileno", "");
1354 if (tmp == NULL)
1355 PyErr_Clear();
1356 else {
1357 fd = PyInt_AsLong(tmp);
1358 Py_DECREF(tmp);
1359 if (fd < 0 && PyErr_Occurred())
1360 return NULL;
1361 tty = fd == fileno(stdout) && isatty(fd);
1362 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001363 }
1364
1365 /* If we're interactive, use (GNU) readline */
1366 if (tty) {
Guido van Rossuma88a0332007-02-26 16:59:55 +00001367 PyObject *po;
1368 char *prompt;
1369 char *s;
1370 PyObject *result;
Guido van Rossumeba76962007-05-27 09:13:28 +00001371 tmp = PyObject_CallMethod(fout, "flush", "");
1372 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001373 PyErr_Clear();
1374 else
1375 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001376 if (promptarg != NULL) {
1377 po = PyObject_Str(promptarg);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001378 if (po == NULL)
1379 return NULL;
1380 prompt = PyString_AsString(po);
Guido van Rossumeba76962007-05-27 09:13:28 +00001381 if (prompt == NULL) {
1382 Py_DECREF(po);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001383 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001384 }
Guido van Rossuma88a0332007-02-26 16:59:55 +00001385 }
1386 else {
1387 po = NULL;
1388 prompt = "";
1389 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001390 s = PyOS_Readline(stdin, stdout, prompt);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001391 Py_XDECREF(po);
1392 if (s == NULL) {
1393 if (!PyErr_Occurred())
1394 PyErr_SetNone(PyExc_KeyboardInterrupt);
1395 return NULL;
1396 }
1397 if (*s == '\0') {
1398 PyErr_SetNone(PyExc_EOFError);
1399 result = NULL;
1400 }
1401 else { /* strip trailing '\n' */
1402 size_t len = strlen(s);
1403 if (len > PY_SSIZE_T_MAX) {
1404 PyErr_SetString(PyExc_OverflowError,
1405 "input: input too long");
1406 result = NULL;
1407 }
1408 else {
1409 result = PyString_FromStringAndSize(s, len-1);
1410 }
1411 }
1412 PyMem_FREE(s);
1413 return result;
1414 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001415
1416 /* Fallback if we're not interactive */
1417 if (promptarg != NULL) {
1418 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0)
Guido van Rossuma88a0332007-02-26 16:59:55 +00001419 return NULL;
1420 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001421 tmp = PyObject_CallMethod(fout, "flush", "");
1422 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001423 PyErr_Clear();
1424 else
1425 Py_DECREF(tmp);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001426 return PyFile_GetLine(fin, -1);
1427}
1428
1429PyDoc_STRVAR(input_doc,
1430"input([prompt]) -> string\n\
1431\n\
1432Read a string from standard input. The trailing newline is stripped.\n\
1433If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1434On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1435is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001436
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001437
Guido van Rossum79f25d91997-04-29 20:08:16 +00001438static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001439builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001440{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001441 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001442}
1443
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001444PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001445"repr(object) -> string\n\
1446\n\
1447Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001448For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001449
1450
Guido van Rossum79f25d91997-04-29 20:08:16 +00001451static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001452builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001453{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001454 double number;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001455 double f;
1456 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001457 int i;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001458 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001459
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001460 if (!PyArg_ParseTupleAndKeywords(args, kwds, "d|i:round",
1461 kwlist, &number, &ndigits))
1462 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001463 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001464 i = abs(ndigits);
1465 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001466 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001467 if (ndigits < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001468 number /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001469 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001470 number *= f;
1471 if (number >= 0.0)
1472 number = floor(number + 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00001473 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001474 number = ceil(number - 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00001475 if (ndigits < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001476 number *= f;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001477 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001478 number /= f;
1479 return PyFloat_FromDouble(number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001480}
1481
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001482PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001483"round(number[, ndigits]) -> floating point number\n\
1484\n\
1485Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001486This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001487
Raymond Hettinger64958a12003-12-17 20:43:33 +00001488static PyObject *
1489builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1490{
1491 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
1492 PyObject *callable;
Martin v. Löwis15e62742006-02-27 16:46:16 +00001493 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001494 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001495
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001496 /* args 1-4 should match listsort in Objects/listobject.c */
Armin Rigo71d7e702005-09-20 18:13:03 +00001497 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
1498 kwlist, &seq, &compare, &keyfunc, &reverse))
1499 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001500
1501 newlist = PySequence_List(seq);
1502 if (newlist == NULL)
1503 return NULL;
1504
1505 callable = PyObject_GetAttrString(newlist, "sort");
1506 if (callable == NULL) {
1507 Py_DECREF(newlist);
1508 return NULL;
1509 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001510
Raymond Hettinger64958a12003-12-17 20:43:33 +00001511 newargs = PyTuple_GetSlice(args, 1, 4);
1512 if (newargs == NULL) {
1513 Py_DECREF(newlist);
1514 Py_DECREF(callable);
1515 return NULL;
1516 }
1517
1518 v = PyObject_Call(callable, newargs, kwds);
1519 Py_DECREF(newargs);
1520 Py_DECREF(callable);
1521 if (v == NULL) {
1522 Py_DECREF(newlist);
1523 return NULL;
1524 }
1525 Py_DECREF(v);
1526 return newlist;
1527}
1528
1529PyDoc_STRVAR(sorted_doc,
1530"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001531
Guido van Rossum79f25d91997-04-29 20:08:16 +00001532static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001533builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001534{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001535 PyObject *v = NULL;
1536 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001537
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001538 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001539 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001540 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001541 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001542 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001543 if (!PyErr_Occurred())
1544 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001545 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001546 }
1547 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001548 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001549 }
1550 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001551 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001552 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001553 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001554 "vars() argument must have __dict__ attribute");
1555 return NULL;
1556 }
1557 }
1558 return d;
1559}
1560
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001561PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001562"vars([object]) -> dictionary\n\
1563\n\
1564Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001565With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001566
Alex Martellia70b1912003-04-22 08:12:33 +00001567
1568static PyObject*
1569builtin_sum(PyObject *self, PyObject *args)
1570{
1571 PyObject *seq;
1572 PyObject *result = NULL;
1573 PyObject *temp, *item, *iter;
1574
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001575 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001576 return NULL;
1577
1578 iter = PyObject_GetIter(seq);
1579 if (iter == NULL)
1580 return NULL;
1581
1582 if (result == NULL) {
1583 result = PyInt_FromLong(0);
1584 if (result == NULL) {
1585 Py_DECREF(iter);
1586 return NULL;
1587 }
1588 } else {
1589 /* reject string values for 'start' parameter */
1590 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
1591 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001592 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001593 Py_DECREF(iter);
1594 return NULL;
1595 }
Alex Martelli41c9f882003-04-22 09:24:48 +00001596 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001597 }
1598
1599 for(;;) {
1600 item = PyIter_Next(iter);
1601 if (item == NULL) {
1602 /* error, or end-of-sequence */
1603 if (PyErr_Occurred()) {
1604 Py_DECREF(result);
1605 result = NULL;
1606 }
1607 break;
1608 }
Alex Martellia253e182003-10-25 23:24:14 +00001609 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001610 Py_DECREF(result);
1611 Py_DECREF(item);
1612 result = temp;
1613 if (result == NULL)
1614 break;
1615 }
1616 Py_DECREF(iter);
1617 return result;
1618}
1619
1620PyDoc_STRVAR(sum_doc,
Thomas Wouters89f507f2006-12-13 04:49:30 +00001621"sum(sequence[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00001622\n\
1623Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00001624of parameter 'start' (which defaults to 0). When the sequence is\n\
1625empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00001626
1627
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001628static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001629builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001630{
1631 PyObject *inst;
1632 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001633 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001634
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001635 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001636 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001637
Guido van Rossum823649d2001-03-21 18:40:58 +00001638 retval = PyObject_IsInstance(inst, cls);
1639 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001640 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001641 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001642}
1643
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001644PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001645"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001646\n\
1647Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001648With a type as second argument, return whether that is the object's type.\n\
1649The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001650isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001651
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001652
1653static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001654builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001655{
1656 PyObject *derived;
1657 PyObject *cls;
1658 int retval;
1659
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001660 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001661 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001662
Guido van Rossum823649d2001-03-21 18:40:58 +00001663 retval = PyObject_IsSubclass(derived, cls);
1664 if (retval < 0)
1665 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001666 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001667}
1668
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001669PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001670"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001671\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00001672Return whether class C is a subclass (i.e., a derived class) of class B.\n\
1673When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
1674is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001675
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001676
Barry Warsawbd599b52000-08-03 15:45:29 +00001677static PyObject*
1678builtin_zip(PyObject *self, PyObject *args)
1679{
Guido van Rossumb65fb332006-08-25 23:26:40 +00001680 /* args must be a tuple */
1681 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00001682
Guido van Rossumb65fb332006-08-25 23:26:40 +00001683 return _PyZip_CreateIter(args);
Barry Warsawbd599b52000-08-03 15:45:29 +00001684}
1685
1686
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001687PyDoc_STRVAR(zip_doc,
Guido van Rossum801f0d72006-08-24 19:48:10 +00001688"zip(it1 [, it2 [...]]) -> iter([(it1[0], it2[0] ...), ...])\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00001689\n\
Guido van Rossum801f0d72006-08-24 19:48:10 +00001690Return an iterator yielding tuples, where each tuple contains the\n\
1691corresponding element from each of the argument iterables.\n\
1692The returned iterator ends when the shortest argument iterable is exhausted.\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001693(This is identical to itertools.izip().)");
Barry Warsawbd599b52000-08-03 15:45:29 +00001694
1695
Guido van Rossum79f25d91997-04-29 20:08:16 +00001696static PyMethodDef builtin_methods[] = {
Guido van Rossum52cc1d82007-03-18 15:41:51 +00001697 {"__build_class__", (PyCFunction)builtin___build_class__,
1698 METH_VARARGS | METH_KEYWORDS, build_class_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001699 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001700 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00001701 {"all", builtin_all, METH_O, all_doc},
1702 {"any", builtin_any, METH_O, any_doc},
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001703 {"bin", builtin_bin, METH_O, bin_doc},
Walter Dörwalde7efd592007-06-05 20:07:21 +00001704 {"chr", builtin_chr, METH_VARARGS, chr_doc},
1705 {"chr8", builtin_chr8, METH_VARARGS, chr8_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001706 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
Guido van Rossumd8faa362007-04-27 19:54:29 +00001707 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001708 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
1709 {"dir", builtin_dir, METH_VARARGS, dir_doc},
1710 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
1711 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00001712 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001713 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
1714 {"filter", builtin_filter, METH_VARARGS, filter_doc},
1715 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
1716 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
1717 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
1718 {"hash", builtin_hash, METH_O, hash_doc},
1719 {"hex", builtin_hex, METH_O, hex_doc},
1720 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00001721 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001722 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
1723 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
1724 {"iter", builtin_iter, METH_VARARGS, iter_doc},
1725 {"len", builtin_len, METH_O, len_doc},
1726 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
1727 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001728 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
1729 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandla18af4e2007-04-21 15:47:16 +00001730 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001731 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001732 {"ord", builtin_ord, METH_O, ord_doc},
1733 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00001734 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001735 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001736 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001737 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00001738 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00001739 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001740 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001741 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00001742 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00001743};
1744
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001745PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001746"Built-in functions, exceptions, and other objects.\n\
1747\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001748Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001749
Guido van Rossum25ce5661997-08-02 03:10:38 +00001750PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001751_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001752{
Fred Drake5550de32000-06-20 04:54:19 +00001753 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001754 mod = Py_InitModule4("__builtin__", builtin_methods,
1755 builtin_doc, (PyObject *)NULL,
1756 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001757 if (mod == NULL)
1758 return NULL;
1759 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00001760
Tim Peters7571a0f2003-03-23 17:52:28 +00001761#ifdef Py_TRACE_REFS
1762 /* __builtin__ exposes a number of statically allocated objects
1763 * that, before this code was added in 2.3, never showed up in
1764 * the list of "all objects" maintained by Py_TRACE_REFS. As a
1765 * result, programs leaking references to None and False (etc)
1766 * couldn't be diagnosed by examining sys.getobjects(0).
1767 */
1768#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
1769#else
1770#define ADD_TO_ALL(OBJECT) (void)0
1771#endif
1772
Tim Peters4b7625e2001-09-13 21:37:17 +00001773#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00001774 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
1775 return NULL; \
1776 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00001777
1778 SETBUILTIN("None", Py_None);
1779 SETBUILTIN("Ellipsis", Py_Ellipsis);
1780 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001781 SETBUILTIN("False", Py_False);
1782 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00001783 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001784 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001785 SETBUILTIN("buffer", &PyBuffer_Type);
Guido van Rossum4dfe8a12006-04-22 23:28:04 +00001786 SETBUILTIN("bytes", &PyBytes_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001787 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001788#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00001789 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001790#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00001791 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00001792 SETBUILTIN("enumerate", &PyEnum_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001793 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00001794 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001795 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00001796 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001797 SETBUILTIN("list", &PyList_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001798 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossum805365e2007-05-07 22:24:25 +00001799 SETBUILTIN("range", &PyRange_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00001800 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00001801 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001802 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001803 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Guido van Rossum572dbf82007-04-27 23:53:51 +00001804 SETBUILTIN("str", &PyUnicode_Type);
Guido van Rossum84fc66d2007-05-03 17:18:26 +00001805 SETBUILTIN("str8", &PyString_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001806 SETBUILTIN("super", &PySuper_Type);
1807 SETBUILTIN("tuple", &PyTuple_Type);
1808 SETBUILTIN("type", &PyType_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001809 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00001810 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
1811 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001812 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00001813 }
1814 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00001815
Guido van Rossum25ce5661997-08-02 03:10:38 +00001816 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00001817#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00001818#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00001819}