blob: 2f4e5131525aa51f1a803b6564f1a7db70953557 [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
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000317PyDoc_VAR(chr_doc) = PyDoc_STR(
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000318"chr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000319\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000320Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000321)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000322#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000323PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000324"\nIf 0x10000 <= i, a surrogate pair is returned."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000325)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000326#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000327;
Guido van Rossum09095f32000-03-10 23:00:52 +0000328
329
330static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000331builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000332{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000333 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000334 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000335
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000336 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000337 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000338 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000339 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000340 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000341}
342
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000343PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000344"cmp(x, y) -> integer\n\
345\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000346Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000347
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000348
349static char *
350source_as_string(PyObject *cmd)
351{
352 char *str;
353 Py_ssize_t size;
354
355 if (!PyObject_CheckReadBuffer(cmd) &&
356 !PyUnicode_Check(cmd)) {
357 PyErr_SetString(PyExc_TypeError,
358 "eval()/exec() arg 1 must be a string, bytes or code object");
359 return NULL;
360 }
361
362 if (PyUnicode_Check(cmd)) {
363 cmd = _PyUnicode_AsDefaultEncodedString(cmd, NULL);
364 if (cmd == NULL)
365 return NULL;
366 }
367 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &size) < 0) {
368 return NULL;
369 }
370 if (strlen(str) != size) {
371 PyErr_SetString(PyExc_TypeError,
372 "source code string cannot contain null bytes");
373 return NULL;
374 }
375 return str;
376}
377
Guido van Rossum79f25d91997-04-29 20:08:16 +0000378static PyObject *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000379builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000380{
381 char *str;
382 char *filename;
383 char *startstr;
384 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000385 int dont_inherit = 0;
386 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000387 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000388 PyObject *cmd;
Guido van Rossumd8faa362007-04-27 19:54:29 +0000389 static char *kwlist[] = {"source", "filename", "mode", "flags",
390 "dont_inherit", NULL};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000391
Guido van Rossumd8faa362007-04-27 19:54:29 +0000392 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
393 kwlist, &cmd, &filename, &startstr,
394 &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000395 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000396
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000397 cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000398
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000399 str = source_as_string(cmd);
400 if (str == NULL)
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000401 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000402
Guido van Rossum5b722181993-03-30 17:46:03 +0000403 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000404 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000405 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000406 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000407 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000408 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000409 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000410 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000411 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000412 return NULL;
Guido van Rossum5b722181993-03-30 17:46:03 +0000413 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000414
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000415 if (supplied_flags &
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000416 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000417 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000418 PyErr_SetString(PyExc_ValueError,
419 "compile(): unrecognised flags");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000420 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000421 }
422 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
423
Tim Peters6cd6a822001-08-17 22:11:27 +0000424 if (!dont_inherit) {
425 PyEval_MergeCompilerFlags(&cf);
426 }
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000427 return Py_CompileStringFlags(str, filename, start, &cf);
Guido van Rossum5b722181993-03-30 17:46:03 +0000428}
429
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000430PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000431"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000432\n\
433Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000434into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000435The filename will be used for run-time error messages.\n\
436The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000437single (interactive) statement, or 'eval' to compile an expression.\n\
438The flags argument, if present, controls which future statements influence\n\
439the compilation of the code.\n\
440The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
441the effects of any future statements in effect in the code calling\n\
442compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000443in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000444
Guido van Rossum79f25d91997-04-29 20:08:16 +0000445static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000446builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000447{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000448 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000449
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000450 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000451 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000452 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000453}
454
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000455PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000456"dir([object]) -> list of strings\n"
457"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000458"If called without an argument, return the names in the current scope.\n"
459"Else, return an alphabetized list of names comprising (some of) the attributes\n"
460"of the given object, and of attributes reachable from it.\n"
461"If the object supplies a method named __dir__, it will be used; otherwise\n"
462"the default dir() logic is used and returns:\n"
463" for a module object: the module's attributes.\n"
464" for a class object: its attributes, and recursively the attributes\n"
465" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000466" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000467" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000468
Guido van Rossum79f25d91997-04-29 20:08:16 +0000469static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000470builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000471{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000472 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000473
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000474 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000475 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000476 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000477}
478
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000479PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000480"divmod(x, y) -> (div, mod)\n\
481\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000482Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000483
484
Guido van Rossum79f25d91997-04-29 20:08:16 +0000485static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000486builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000487{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000488 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000489 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000490 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000491 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000492
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000493 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000494 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000495 if (locals != Py_None && !PyMapping_Check(locals)) {
496 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000497 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000498 }
499 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000500 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000501 "globals must be a real dict; try eval(expr, {}, mapping)"
502 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000503 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000504 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000505 if (globals == Py_None) {
506 globals = PyEval_GetGlobals();
507 if (locals == Py_None)
508 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000509 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000510 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000511 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000512
Georg Brandl77c85e62005-09-15 10:46:13 +0000513 if (globals == NULL || locals == NULL) {
514 PyErr_SetString(PyExc_TypeError,
515 "eval must be given globals and locals "
516 "when called without a frame");
517 return NULL;
518 }
519
Guido van Rossum79f25d91997-04-29 20:08:16 +0000520 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
521 if (PyDict_SetItemString(globals, "__builtins__",
522 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000523 return NULL;
524 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000525
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000526 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000527 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000528 PyErr_SetString(PyExc_TypeError,
529 "code object passed to eval() may not contain free variables");
530 return NULL;
531 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000532 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000533 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000534
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000535 str = source_as_string(cmd);
536 if (str == NULL)
Guido van Rossum94390a41992-08-14 15:14:30 +0000537 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000538
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000539 while (*str == ' ' || *str == '\t')
540 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000541
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000542 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Tim Peters9fa96be2001-08-17 23:04:59 +0000543 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000544 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
545 Py_XDECREF(tmp);
546 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000547}
548
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000549PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000550"eval(source[, globals[, locals]]) -> value\n\
551\n\
552Evaluate the source in the context of globals and locals.\n\
553The source may be a string representing a Python expression\n\
554or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000555The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000556defaulting to the current globals and locals.\n\
557If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000558
Georg Brandl7cae87c2006-09-06 06:51:57 +0000559static PyObject *
560builtin_exec(PyObject *self, PyObject *args)
561{
562 PyObject *v;
563 PyObject *prog, *globals = Py_None, *locals = Py_None;
564 int plain = 0;
565
566 if (!PyArg_ParseTuple(args, "O|OO:exec", &prog, &globals, &locals))
567 return NULL;
568
569 if (globals == Py_None) {
570 globals = PyEval_GetGlobals();
571 if (locals == Py_None) {
572 locals = PyEval_GetLocals();
573 plain = 1;
574 }
575 if (!globals || !locals) {
576 PyErr_SetString(PyExc_SystemError,
577 "globals and locals cannot be NULL");
578 return NULL;
579 }
580 }
581 else if (locals == Py_None)
582 locals = globals;
583 if (!PyString_Check(prog) &&
584 !PyUnicode_Check(prog) &&
Guido van Rossumda5b8f22007-06-12 23:30:11 +0000585 !PyCode_Check(prog)) {
Georg Brandl7cae87c2006-09-06 06:51:57 +0000586 PyErr_Format(PyExc_TypeError,
587 "exec() arg 1 must be a string, file, or code "
588 "object, not %.100s", prog->ob_type->tp_name);
589 return NULL;
590 }
591 if (!PyDict_Check(globals)) {
592 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
593 globals->ob_type->tp_name);
594 return NULL;
595 }
596 if (!PyMapping_Check(locals)) {
597 PyErr_Format(PyExc_TypeError,
598 "arg 3 must be a mapping or None, not %.100s",
599 locals->ob_type->tp_name);
600 return NULL;
601 }
602 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
603 if (PyDict_SetItemString(globals, "__builtins__",
604 PyEval_GetBuiltins()) != 0)
605 return NULL;
606 }
607
608 if (PyCode_Check(prog)) {
609 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
610 PyErr_SetString(PyExc_TypeError,
611 "code object passed to exec() may not "
612 "contain free variables");
613 return NULL;
614 }
615 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
616 }
Georg Brandl7cae87c2006-09-06 06:51:57 +0000617 else {
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000618 char *str = source_as_string(prog);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000619 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000620 if (str == NULL)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000621 return NULL;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000622 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000623 if (PyEval_MergeCompilerFlags(&cf))
624 v = PyRun_StringFlags(str, Py_file_input, globals,
625 locals, &cf);
626 else
627 v = PyRun_String(str, Py_file_input, globals, locals);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000628 }
629 if (v == NULL)
630 return NULL;
631 Py_DECREF(v);
632 Py_RETURN_NONE;
633}
634
635PyDoc_STRVAR(exec_doc,
636"exec(object[, globals[, locals]])\n\
637\n\
638Read and execute code from a object, which can be a string, a code\n\
639object or a file object.\n\
640The globals and locals are dictionaries, defaulting to the current\n\
641globals and locals. If only globals is given, locals defaults to it.");
642
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000643
Guido van Rossum79f25d91997-04-29 20:08:16 +0000644static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000645builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000646{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000647 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000648 PyObject *globals = Py_None, *locals = Py_None;
649 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000650 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000651 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000652 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000653
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000654 if (!PyArg_ParseTuple(args, "s|O!O:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000655 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000656 &PyDict_Type, &globals,
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000657 &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000658 return NULL;
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000659 if (locals != Py_None && !PyMapping_Check(locals)) {
660 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
661 return NULL;
662 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000663 if (globals == Py_None) {
664 globals = PyEval_GetGlobals();
665 if (locals == Py_None)
666 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000667 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000668 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000669 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000670 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
671 if (PyDict_SetItemString(globals, "__builtins__",
672 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000673 return NULL;
674 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000675
676 exists = 0;
677 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000678#if defined(PLAN9)
679 {
680 Dir *d;
681
682 if ((d = dirstat(filename))!=nil) {
683 if(d->mode & DMDIR)
684 werrstr("is a directory");
685 else
686 exists = 1;
687 free(d);
688 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000689 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000690#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000691 if (object_exists(filename)) {
692 if (isdir(filename))
693 errno = EISDIR;
694 else
695 exists = 1;
696 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000697#else /* standard Posix */
698 {
699 struct stat s;
700 if (stat(filename, &s) == 0) {
701 if (S_ISDIR(s.st_mode))
Andrew MacIntyreda4d6cb2004-03-29 11:53:38 +0000702# if defined(PYOS_OS2) && defined(PYCC_VACPP)
Martin v. Löwis3484a182002-03-09 12:07:51 +0000703 errno = EOS2ERR;
704# else
705 errno = EISDIR;
706# endif
707 else
708 exists = 1;
709 }
710 }
711#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000712
713 if (exists) {
714 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000715 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000716 Py_END_ALLOW_THREADS
717
718 if (fp == NULL) {
719 exists = 0;
720 }
721 }
722
723 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000724 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000725 return NULL;
726 }
Tim Peters5ba58662001-07-16 02:29:45 +0000727 cf.cf_flags = 0;
728 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000729 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000730 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000731 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000732 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000733 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000734 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000735}
736
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000737PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000738"execfile(filename[, globals[, locals]])\n\
739\n\
740Read and execute a Python script from a file.\n\
741The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000742globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000743
744
Guido van Rossum79f25d91997-04-29 20:08:16 +0000745static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000746builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000747{
Martin v. Löwis5b222132007-06-10 09:51:05 +0000748 PyObject *v, *result, *dflt = NULL, *release = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000749 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000750
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000751 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000752 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000753
754 if (PyString_Check(name)) {
755 release = PyString_AsDecodedObject(name, NULL, NULL);
756 if (!release)
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000757 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000758 name = release;
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000759 }
760
Martin v. Löwis5b222132007-06-10 09:51:05 +0000761 if (!PyUnicode_Check(name)) {
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000762 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000763 "getattr(): attribute name must be string");
Martin v. Löwis5b222132007-06-10 09:51:05 +0000764 Py_XDECREF(release);
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000765 return NULL;
766 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000767 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000768 if (result == NULL && dflt != NULL &&
769 PyErr_ExceptionMatches(PyExc_AttributeError))
770 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000771 PyErr_Clear();
772 Py_INCREF(dflt);
773 result = dflt;
774 }
Martin v. Löwis5b222132007-06-10 09:51:05 +0000775 Py_XDECREF(release);
Guido van Rossum950ff291998-06-29 13:38:57 +0000776 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000777}
778
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000779PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000780"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000781\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000782Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
783When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000784exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000785
786
Guido van Rossum79f25d91997-04-29 20:08:16 +0000787static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000788builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000789{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000790 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000791
Guido van Rossum79f25d91997-04-29 20:08:16 +0000792 d = PyEval_GetGlobals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000793 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000794 return d;
795}
796
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000797PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000798"globals() -> dictionary\n\
799\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000800Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000801
802
Guido van Rossum79f25d91997-04-29 20:08:16 +0000803static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000804builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000805{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000806 PyObject *v;
807 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000808
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000809 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000810 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000811 if (!PyUnicode_Check(name)) {
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000812 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000813 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000814 return NULL;
815 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000816 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000817 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000818 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000819 Py_INCREF(Py_False);
820 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000821 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000822 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000823 Py_INCREF(Py_True);
824 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000825}
826
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000827PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000828"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000829\n\
830Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000831(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000832
833
Guido van Rossum79f25d91997-04-29 20:08:16 +0000834static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000835builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000836{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000837 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000838}
839
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000840PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000841"id(object) -> integer\n\
842\n\
843Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000844simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000845
846
Guido van Rossum79f25d91997-04-29 20:08:16 +0000847static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000848builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000849{
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000850 PyObject *itertools, *imap, *result;
851 itertools = PyImport_ImportModule("itertools");
852 if (itertools == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000853 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000854 imap = PyObject_GetAttrString(itertools, "imap");
855 Py_DECREF(itertools);
856 if (imap == NULL)
Tim Peters4e9afdc2001-05-03 23:54:49 +0000857 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000858 result = PyObject_Call(imap, args, NULL);
859 Py_DECREF(imap);
Tim Peters4e9afdc2001-05-03 23:54:49 +0000860 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000861}
862
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000863PyDoc_STRVAR(map_doc,
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000864"map(function, iterable[, iterable, ...]) -> iterator\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000865\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000866Return an iterator yielding the results of applying the function to the\n\
867items of the argument iterables(s). If more than one iterable is given,\n\
868the function is called with an argument list consisting of the\n\
869corresponding item of each iterable, until an iterable is exhausted.\n\
870If the function is None, 'lambda *a: a' is assumed.\n\
871(This is identical to itertools.imap().)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000872
873
Guido van Rossum79f25d91997-04-29 20:08:16 +0000874static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +0000875builtin_next(PyObject *self, PyObject *args)
876{
877 PyObject *it, *res;
878 PyObject *def = NULL;
879
880 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
881 return NULL;
882 if (!PyIter_Check(it)) {
883 PyErr_Format(PyExc_TypeError,
884 "%.200s object is not an iterator", it->ob_type->tp_name);
885 return NULL;
886 }
887
888 res = (*it->ob_type->tp_iternext)(it);
889 if (res == NULL) {
890 if (def) {
891 if (PyErr_Occurred() &&
892 !PyErr_ExceptionMatches(PyExc_StopIteration))
893 return NULL;
894 PyErr_Clear();
895 Py_INCREF(def);
896 return def;
897 } else if (PyErr_Occurred()) {
898 return NULL;
899 } else {
900 PyErr_SetNone(PyExc_StopIteration);
901 return NULL;
902 }
903 }
904 return res;
905}
906
907PyDoc_STRVAR(next_doc,
908"next(iterator[, default])\n\
909\n\
910Return the next item from the iterator. If default is given and the iterator\n\
911is exhausted, it is returned instead of raising StopIteration.");
912
913
914static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000915builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000916{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000917 PyObject *v;
918 PyObject *name;
919 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000920
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000921 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000922 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000923 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000924 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000925 Py_INCREF(Py_None);
926 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000927}
928
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000929PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000930"setattr(object, name, value)\n\
931\n\
932Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000933``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000934
935
Guido van Rossum79f25d91997-04-29 20:08:16 +0000936static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000937builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000938{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000939 PyObject *v;
940 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000941
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000942 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +0000943 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000944 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000945 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000946 Py_INCREF(Py_None);
947 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +0000948}
949
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000950PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +0000951"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000952\n\
953Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000954``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000955
956
Guido van Rossum79f25d91997-04-29 20:08:16 +0000957static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000958builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000959{
Guido van Rossum9bfef441993-03-29 10:43:31 +0000960 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000961
Guido van Rossum79f25d91997-04-29 20:08:16 +0000962 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000963 if (x == -1)
964 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000965 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000966}
967
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000968PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000969"hash(object) -> integer\n\
970\n\
971Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000972the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000973
974
Guido van Rossum79f25d91997-04-29 20:08:16 +0000975static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000976builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +0000977{
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000978 return PyNumber_ToBase(v, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +0000979}
980
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000981PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000982"hex(number) -> string\n\
983\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000984Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000985
986
Guido van Rossum79f25d91997-04-29 20:08:16 +0000987static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000988builtin_iter(PyObject *self, PyObject *args)
989{
990 PyObject *v, *w = NULL;
991
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000992 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000993 return NULL;
994 if (w == NULL)
995 return PyObject_GetIter(v);
996 if (!PyCallable_Check(v)) {
997 PyErr_SetString(PyExc_TypeError,
998 "iter(v, w): v must be callable");
999 return NULL;
1000 }
1001 return PyCallIter_New(v, w);
1002}
1003
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001004PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001005"iter(collection) -> iterator\n\
1006iter(callable, sentinel) -> iterator\n\
1007\n\
1008Get an iterator from an object. In the first form, the argument must\n\
1009supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001010In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001011
1012
1013static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001014builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001015{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001016 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001017
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001018 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001019 if (res < 0 && PyErr_Occurred())
1020 return NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001021 return PyInt_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001022}
1023
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001024PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001025"len(object) -> integer\n\
1026\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001027Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001028
1029
Guido van Rossum79f25d91997-04-29 20:08:16 +00001030static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001031builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001032{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001033 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001034
Guido van Rossum79f25d91997-04-29 20:08:16 +00001035 d = PyEval_GetLocals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00001036 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001037 return d;
1038}
1039
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001040PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001041"locals() -> dictionary\n\
1042\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001043Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001044
1045
Guido van Rossum79f25d91997-04-29 20:08:16 +00001046static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001047min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001048{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001049 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001050 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001051
Guido van Rossum79f25d91997-04-29 20:08:16 +00001052 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001053 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001054 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001055 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001056
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001057 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1058 keyfunc = PyDict_GetItemString(kwds, "key");
1059 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001060 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001061 "%s() got an unexpected keyword argument", name);
1062 return NULL;
1063 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001064 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001065
Tim Petersc3074532001-05-03 07:00:32 +00001066 it = PyObject_GetIter(v);
1067 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001068 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001069
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001070 maxitem = NULL; /* the result */
1071 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001072 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001073 /* get the value from the key function */
1074 if (keyfunc != NULL) {
1075 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1076 if (val == NULL)
1077 goto Fail_it_item;
1078 }
1079 /* no key function; the value is the item */
1080 else {
1081 val = item;
1082 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001083 }
Tim Petersc3074532001-05-03 07:00:32 +00001084
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001085 /* maximum value and item are unset; set them */
1086 if (maxval == NULL) {
1087 maxitem = item;
1088 maxval = val;
1089 }
1090 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001091 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001092 int cmp = PyObject_RichCompareBool(val, maxval, op);
1093 if (cmp < 0)
1094 goto Fail_it_item_and_val;
1095 else if (cmp > 0) {
1096 Py_DECREF(maxval);
1097 Py_DECREF(maxitem);
1098 maxval = val;
1099 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001100 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001101 else {
1102 Py_DECREF(item);
1103 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001104 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001105 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001106 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001107 if (PyErr_Occurred())
1108 goto Fail_it;
1109 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001110 PyErr_Format(PyExc_ValueError,
1111 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001112 assert(maxitem == NULL);
1113 }
1114 else
1115 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001116 Py_DECREF(it);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001117 return maxitem;
1118
1119Fail_it_item_and_val:
1120 Py_DECREF(val);
1121Fail_it_item:
1122 Py_DECREF(item);
1123Fail_it:
1124 Py_XDECREF(maxval);
1125 Py_XDECREF(maxitem);
1126 Py_DECREF(it);
1127 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001128}
1129
Guido van Rossum79f25d91997-04-29 20:08:16 +00001130static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001131builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001132{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001133 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001134}
1135
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001136PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001137"min(iterable[, key=func]) -> value\n\
1138min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001139\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001140With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001141With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001142
1143
Guido van Rossum79f25d91997-04-29 20:08:16 +00001144static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001145builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001146{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001147 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001148}
1149
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001150PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001151"max(iterable[, key=func]) -> value\n\
1152max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001153\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001154With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001155With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001156
1157
Guido van Rossum79f25d91997-04-29 20:08:16 +00001158static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001159builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001160{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001161 return PyNumber_ToBase(v, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001162}
1163
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001164PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001165"oct(number) -> string\n\
1166\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001167Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001168
1169
Guido van Rossum79f25d91997-04-29 20:08:16 +00001170static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001171builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001172{
Guido van Rossum09095f32000-03-10 23:00:52 +00001173 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001174 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001175
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001176 if (PyString_Check(obj)) {
1177 size = PyString_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)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001180 return PyInt_FromLong(ord);
1181 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001182 }
1183 else if (PyUnicode_Check(obj)) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001184 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001185 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001186 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001187 return PyInt_FromLong(ord);
1188 }
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001189#ifndef Py_UNICODE_WIDE
1190 if (size == 2) {
1191 /* Decode a valid surrogate pair */
1192 int c0 = PyUnicode_AS_UNICODE(obj)[0];
1193 int c1 = PyUnicode_AS_UNICODE(obj)[1];
1194 if (0xD800 <= c0 && c0 <= 0xDBFF &&
1195 0xDC00 <= c1 && c1 <= 0xDFFF) {
1196 ord = ((((c0 & 0x03FF) << 10) | (c1 & 0x03FF)) +
1197 0x00010000);
1198 return PyInt_FromLong(ord);
1199 }
1200 }
1201#endif
Guido van Rossum6f376c42007-05-24 14:31:33 +00001202 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001203 else if (PyBytes_Check(obj)) {
1204 /* XXX Hopefully this is temporary */
1205 size = PyBytes_GET_SIZE(obj);
1206 if (size == 1) {
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001207 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
Guido van Rossum98f97462007-04-13 03:31:13 +00001208 return PyInt_FromLong(ord);
1209 }
1210 }
1211 else {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001212 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001213 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001214 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001215 return NULL;
1216 }
1217
Guido van Rossumad991772001-01-12 16:03:05 +00001218 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001219 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001220 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001221 size);
1222 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001223}
1224
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001225PyDoc_VAR(ord_doc) = PyDoc_STR(
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001226"ord(c) -> integer\n\
1227\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001228Return the integer ordinal of a one-character string."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001229)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001230#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001231PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001232"\nA valid surrogate pair is also accepted."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001233)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001234#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001235;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001236
1237
Guido van Rossum79f25d91997-04-29 20:08:16 +00001238static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001239builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001240{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001241 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001242
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001243 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001244 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001245 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001246}
1247
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001248PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001249"pow(x, y[, z]) -> number\n\
1250\n\
1251With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001252equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001253
1254
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001255
Guido van Rossum34343512006-11-30 22:13:52 +00001256static PyObject *
1257builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1258{
1259 static char *kwlist[] = {"sep", "end", "file", 0};
Georg Brandl257d3d92007-02-26 10:35:10 +00001260 static PyObject *dummy_args;
Guido van Rossum34343512006-11-30 22:13:52 +00001261 PyObject *sep = NULL, *end = NULL, *file = NULL;
1262 int i, err;
1263
Georg Brandl257d3d92007-02-26 10:35:10 +00001264 if (dummy_args == NULL) {
1265 if (!(dummy_args = PyTuple_New(0)))
1266 return NULL;
1267 }
Georg Brandl88fc6642007-02-09 21:28:07 +00001268 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
Guido van Rossum34343512006-11-30 22:13:52 +00001269 kwlist, &sep, &end, &file))
1270 return NULL;
1271 if (file == NULL || file == Py_None)
1272 file = PySys_GetObject("stdout");
1273
Georg Brandl16f3e032006-11-30 22:46:03 +00001274 if (sep && sep != Py_None && !PyString_Check(sep) &&
1275 !PyUnicode_Check(sep)) {
1276 PyErr_Format(PyExc_TypeError,
1277 "sep must be None, str or unicode, not %.200s",
1278 sep->ob_type->tp_name);
1279 return NULL;
1280 }
1281 if (end && end != Py_None && !PyString_Check(end) &&
1282 !PyUnicode_Check(end)) {
1283 PyErr_Format(PyExc_TypeError,
1284 "end must be None, str or unicode, not %.200s",
1285 end->ob_type->tp_name);
1286 return NULL;
1287 }
Guido van Rossum34343512006-11-30 22:13:52 +00001288
1289 for (i = 0; i < PyTuple_Size(args); i++) {
1290 if (i > 0) {
1291 if (sep == NULL || sep == Py_None)
1292 err = PyFile_WriteString(" ", file);
1293 else
1294 err = PyFile_WriteObject(sep, file,
1295 Py_PRINT_RAW);
1296 if (err)
1297 return NULL;
1298 }
1299 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1300 Py_PRINT_RAW);
1301 if (err)
1302 return NULL;
1303 }
1304
1305 if (end == NULL || end == Py_None)
1306 err = PyFile_WriteString("\n", file);
1307 else
1308 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1309 if (err)
1310 return NULL;
1311
1312 Py_RETURN_NONE;
1313}
1314
1315PyDoc_STRVAR(print_doc,
Guido van Rossum452bf512007-02-09 05:32:43 +00001316"print(value, ..., file=None, sep=' ', end='\\n')\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001317\n\
1318Prints the values to a stream, or to sys.stdout by default.\n\
1319Optional keyword arguments:\n\
1320file: a file-like object (stream); defaults to the current sys.stdout.\n\
1321sep: string inserted between values, default a space.\n\
1322end: string appended after the last value, default a newline.");
1323
1324
Guido van Rossuma88a0332007-02-26 16:59:55 +00001325static PyObject *
1326builtin_input(PyObject *self, PyObject *args)
1327{
Guido van Rossumeba76962007-05-27 09:13:28 +00001328 PyObject *promptarg = NULL;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001329 PyObject *fin = PySys_GetObject("stdin");
1330 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossumeba76962007-05-27 09:13:28 +00001331 PyObject *ferr = PySys_GetObject("stderr");
1332 PyObject *tmp;
1333 long fd;
1334 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001335
Guido van Rossumeba76962007-05-27 09:13:28 +00001336 /* Parse arguments */
1337 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg))
Guido van Rossuma88a0332007-02-26 16:59:55 +00001338 return NULL;
1339
Guido van Rossumeba76962007-05-27 09:13:28 +00001340 /* Check that stdin/out/err are intact */
Guido van Rossuma88a0332007-02-26 16:59:55 +00001341 if (fin == NULL) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001342 PyErr_SetString(PyExc_RuntimeError,
1343 "input(): lost sys.stdin");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001344 return NULL;
1345 }
1346 if (fout == NULL) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001347 PyErr_SetString(PyExc_RuntimeError,
1348 "input(): lost sys.stdout");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001349 return NULL;
1350 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001351 if (ferr == NULL) {
1352 PyErr_SetString(PyExc_RuntimeError,
1353 "input(): lost sys.stderr");
1354 return NULL;
1355 }
1356
1357 /* First of all, flush stderr */
1358 tmp = PyObject_CallMethod(ferr, "flush", "");
1359 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001360 PyErr_Clear();
1361 else
1362 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001363
1364 /* We should only use (GNU) readline if Python's sys.stdin and
1365 sys.stdout are the same as C's stdin and stdout, because we
1366 need to pass it those. */
1367 tmp = PyObject_CallMethod(fin, "fileno", "");
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001368 if (tmp == NULL) {
1369 PyErr_Clear();
1370 tty = 0;
1371 }
1372 else {
Guido van Rossumeba76962007-05-27 09:13:28 +00001373 fd = PyInt_AsLong(tmp);
1374 Py_DECREF(tmp);
1375 if (fd < 0 && PyErr_Occurred())
1376 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001377 tty = fd == fileno(stdin) && isatty(fd);
1378 }
1379 if (tty) {
1380 tmp = PyObject_CallMethod(fout, "fileno", "");
1381 if (tmp == NULL)
1382 PyErr_Clear();
1383 else {
1384 fd = PyInt_AsLong(tmp);
1385 Py_DECREF(tmp);
1386 if (fd < 0 && PyErr_Occurred())
1387 return NULL;
1388 tty = fd == fileno(stdout) && isatty(fd);
1389 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001390 }
1391
1392 /* If we're interactive, use (GNU) readline */
1393 if (tty) {
Guido van Rossuma88a0332007-02-26 16:59:55 +00001394 PyObject *po;
1395 char *prompt;
1396 char *s;
1397 PyObject *result;
Guido van Rossumeba76962007-05-27 09:13:28 +00001398 tmp = PyObject_CallMethod(fout, "flush", "");
1399 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001400 PyErr_Clear();
1401 else
1402 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001403 if (promptarg != NULL) {
1404 po = PyObject_Str(promptarg);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001405 if (po == NULL)
1406 return NULL;
1407 prompt = PyString_AsString(po);
Guido van Rossumeba76962007-05-27 09:13:28 +00001408 if (prompt == NULL) {
1409 Py_DECREF(po);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001410 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001411 }
Guido van Rossuma88a0332007-02-26 16:59:55 +00001412 }
1413 else {
1414 po = NULL;
1415 prompt = "";
1416 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001417 s = PyOS_Readline(stdin, stdout, prompt);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001418 Py_XDECREF(po);
1419 if (s == NULL) {
1420 if (!PyErr_Occurred())
1421 PyErr_SetNone(PyExc_KeyboardInterrupt);
1422 return NULL;
1423 }
1424 if (*s == '\0') {
1425 PyErr_SetNone(PyExc_EOFError);
1426 result = NULL;
1427 }
1428 else { /* strip trailing '\n' */
1429 size_t len = strlen(s);
1430 if (len > PY_SSIZE_T_MAX) {
1431 PyErr_SetString(PyExc_OverflowError,
1432 "input: input too long");
1433 result = NULL;
1434 }
1435 else {
1436 result = PyString_FromStringAndSize(s, len-1);
1437 }
1438 }
1439 PyMem_FREE(s);
1440 return result;
1441 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001442
1443 /* Fallback if we're not interactive */
1444 if (promptarg != NULL) {
1445 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0)
Guido van Rossuma88a0332007-02-26 16:59:55 +00001446 return NULL;
1447 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001448 tmp = PyObject_CallMethod(fout, "flush", "");
1449 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001450 PyErr_Clear();
1451 else
1452 Py_DECREF(tmp);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001453 return PyFile_GetLine(fin, -1);
1454}
1455
1456PyDoc_STRVAR(input_doc,
1457"input([prompt]) -> string\n\
1458\n\
1459Read a string from standard input. The trailing newline is stripped.\n\
1460If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1461On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1462is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001463
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001464
Guido van Rossum79f25d91997-04-29 20:08:16 +00001465static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001466builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001467{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001468 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001469}
1470
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001471PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001472"repr(object) -> string\n\
1473\n\
1474Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001475For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001476
1477
Guido van Rossum79f25d91997-04-29 20:08:16 +00001478static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001479builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001480{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001481 double number;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001482 double f;
1483 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001484 int i;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001485 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001486
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001487 if (!PyArg_ParseTupleAndKeywords(args, kwds, "d|i:round",
1488 kwlist, &number, &ndigits))
1489 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001490 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001491 i = abs(ndigits);
1492 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001493 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001494 if (ndigits < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001495 number /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001496 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001497 number *= f;
1498 if (number >= 0.0)
1499 number = floor(number + 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00001500 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001501 number = ceil(number - 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00001502 if (ndigits < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001503 number *= f;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001504 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001505 number /= f;
1506 return PyFloat_FromDouble(number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001507}
1508
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001509PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001510"round(number[, ndigits]) -> floating point number\n\
1511\n\
1512Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001513This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001514
Raymond Hettinger64958a12003-12-17 20:43:33 +00001515static PyObject *
1516builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1517{
1518 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
1519 PyObject *callable;
Martin v. Löwis15e62742006-02-27 16:46:16 +00001520 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001521 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001522
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001523 /* args 1-4 should match listsort in Objects/listobject.c */
Armin Rigo71d7e702005-09-20 18:13:03 +00001524 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
1525 kwlist, &seq, &compare, &keyfunc, &reverse))
1526 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001527
1528 newlist = PySequence_List(seq);
1529 if (newlist == NULL)
1530 return NULL;
1531
1532 callable = PyObject_GetAttrString(newlist, "sort");
1533 if (callable == NULL) {
1534 Py_DECREF(newlist);
1535 return NULL;
1536 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001537
Raymond Hettinger64958a12003-12-17 20:43:33 +00001538 newargs = PyTuple_GetSlice(args, 1, 4);
1539 if (newargs == NULL) {
1540 Py_DECREF(newlist);
1541 Py_DECREF(callable);
1542 return NULL;
1543 }
1544
1545 v = PyObject_Call(callable, newargs, kwds);
1546 Py_DECREF(newargs);
1547 Py_DECREF(callable);
1548 if (v == NULL) {
1549 Py_DECREF(newlist);
1550 return NULL;
1551 }
1552 Py_DECREF(v);
1553 return newlist;
1554}
1555
1556PyDoc_STRVAR(sorted_doc,
1557"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001558
Guido van Rossum79f25d91997-04-29 20:08:16 +00001559static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001560builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001561{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001562 PyObject *v = NULL;
1563 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001564
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001565 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001566 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001567 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001568 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001569 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001570 if (!PyErr_Occurred())
1571 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001572 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001573 }
1574 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001575 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001576 }
1577 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001578 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001579 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001580 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001581 "vars() argument must have __dict__ attribute");
1582 return NULL;
1583 }
1584 }
1585 return d;
1586}
1587
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001588PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001589"vars([object]) -> dictionary\n\
1590\n\
1591Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001592With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001593
Alex Martellia70b1912003-04-22 08:12:33 +00001594
1595static PyObject*
1596builtin_sum(PyObject *self, PyObject *args)
1597{
1598 PyObject *seq;
1599 PyObject *result = NULL;
1600 PyObject *temp, *item, *iter;
1601
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001602 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001603 return NULL;
1604
1605 iter = PyObject_GetIter(seq);
1606 if (iter == NULL)
1607 return NULL;
1608
1609 if (result == NULL) {
1610 result = PyInt_FromLong(0);
1611 if (result == NULL) {
1612 Py_DECREF(iter);
1613 return NULL;
1614 }
1615 } else {
1616 /* reject string values for 'start' parameter */
1617 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
1618 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001619 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001620 Py_DECREF(iter);
1621 return NULL;
1622 }
Alex Martelli41c9f882003-04-22 09:24:48 +00001623 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001624 }
1625
1626 for(;;) {
1627 item = PyIter_Next(iter);
1628 if (item == NULL) {
1629 /* error, or end-of-sequence */
1630 if (PyErr_Occurred()) {
1631 Py_DECREF(result);
1632 result = NULL;
1633 }
1634 break;
1635 }
Alex Martellia253e182003-10-25 23:24:14 +00001636 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001637 Py_DECREF(result);
1638 Py_DECREF(item);
1639 result = temp;
1640 if (result == NULL)
1641 break;
1642 }
1643 Py_DECREF(iter);
1644 return result;
1645}
1646
1647PyDoc_STRVAR(sum_doc,
Thomas Wouters89f507f2006-12-13 04:49:30 +00001648"sum(sequence[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00001649\n\
1650Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00001651of parameter 'start' (which defaults to 0). When the sequence is\n\
1652empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00001653
1654
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001655static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001656builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001657{
1658 PyObject *inst;
1659 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001660 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001661
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001662 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001663 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001664
Guido van Rossum823649d2001-03-21 18:40:58 +00001665 retval = PyObject_IsInstance(inst, cls);
1666 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001667 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001668 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001669}
1670
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001671PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001672"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001673\n\
1674Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001675With a type as second argument, return whether that is the object's type.\n\
1676The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001677isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001678
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001679
1680static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001681builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001682{
1683 PyObject *derived;
1684 PyObject *cls;
1685 int retval;
1686
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001687 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001688 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001689
Guido van Rossum823649d2001-03-21 18:40:58 +00001690 retval = PyObject_IsSubclass(derived, cls);
1691 if (retval < 0)
1692 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001693 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001694}
1695
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001696PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001697"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001698\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00001699Return whether class C is a subclass (i.e., a derived class) of class B.\n\
1700When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
1701is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001702
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001703
Barry Warsawbd599b52000-08-03 15:45:29 +00001704static PyObject*
1705builtin_zip(PyObject *self, PyObject *args)
1706{
Guido van Rossumb65fb332006-08-25 23:26:40 +00001707 /* args must be a tuple */
1708 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00001709
Guido van Rossumb65fb332006-08-25 23:26:40 +00001710 return _PyZip_CreateIter(args);
Barry Warsawbd599b52000-08-03 15:45:29 +00001711}
1712
1713
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001714PyDoc_STRVAR(zip_doc,
Guido van Rossum801f0d72006-08-24 19:48:10 +00001715"zip(it1 [, it2 [...]]) -> iter([(it1[0], it2[0] ...), ...])\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00001716\n\
Guido van Rossum801f0d72006-08-24 19:48:10 +00001717Return an iterator yielding tuples, where each tuple contains the\n\
1718corresponding element from each of the argument iterables.\n\
1719The returned iterator ends when the shortest argument iterable is exhausted.\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001720(This is identical to itertools.izip().)");
Barry Warsawbd599b52000-08-03 15:45:29 +00001721
1722
Guido van Rossum79f25d91997-04-29 20:08:16 +00001723static PyMethodDef builtin_methods[] = {
Guido van Rossum52cc1d82007-03-18 15:41:51 +00001724 {"__build_class__", (PyCFunction)builtin___build_class__,
1725 METH_VARARGS | METH_KEYWORDS, build_class_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001726 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001727 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00001728 {"all", builtin_all, METH_O, all_doc},
1729 {"any", builtin_any, METH_O, any_doc},
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001730 {"bin", builtin_bin, METH_O, bin_doc},
Walter Dörwalde7efd592007-06-05 20:07:21 +00001731 {"chr", builtin_chr, METH_VARARGS, chr_doc},
1732 {"chr8", builtin_chr8, METH_VARARGS, chr8_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001733 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
Guido van Rossumd8faa362007-04-27 19:54:29 +00001734 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001735 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
1736 {"dir", builtin_dir, METH_VARARGS, dir_doc},
1737 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
1738 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00001739 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001740 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
1741 {"filter", builtin_filter, METH_VARARGS, filter_doc},
1742 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
1743 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
1744 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
1745 {"hash", builtin_hash, METH_O, hash_doc},
1746 {"hex", builtin_hex, METH_O, hex_doc},
1747 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00001748 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001749 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
1750 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
1751 {"iter", builtin_iter, METH_VARARGS, iter_doc},
1752 {"len", builtin_len, METH_O, len_doc},
1753 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
1754 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001755 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
1756 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandla18af4e2007-04-21 15:47:16 +00001757 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001758 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001759 {"ord", builtin_ord, METH_O, ord_doc},
1760 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00001761 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001762 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001763 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001764 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00001765 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00001766 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001767 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001768 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00001769 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00001770};
1771
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001772PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001773"Built-in functions, exceptions, and other objects.\n\
1774\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001775Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001776
Guido van Rossum25ce5661997-08-02 03:10:38 +00001777PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001778_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001779{
Fred Drake5550de32000-06-20 04:54:19 +00001780 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001781 mod = Py_InitModule4("__builtin__", builtin_methods,
1782 builtin_doc, (PyObject *)NULL,
1783 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001784 if (mod == NULL)
1785 return NULL;
1786 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00001787
Tim Peters7571a0f2003-03-23 17:52:28 +00001788#ifdef Py_TRACE_REFS
1789 /* __builtin__ exposes a number of statically allocated objects
1790 * that, before this code was added in 2.3, never showed up in
1791 * the list of "all objects" maintained by Py_TRACE_REFS. As a
1792 * result, programs leaking references to None and False (etc)
1793 * couldn't be diagnosed by examining sys.getobjects(0).
1794 */
1795#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
1796#else
1797#define ADD_TO_ALL(OBJECT) (void)0
1798#endif
1799
Tim Peters4b7625e2001-09-13 21:37:17 +00001800#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00001801 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
1802 return NULL; \
1803 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00001804
1805 SETBUILTIN("None", Py_None);
1806 SETBUILTIN("Ellipsis", Py_Ellipsis);
1807 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001808 SETBUILTIN("False", Py_False);
1809 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00001810 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001811 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001812 SETBUILTIN("buffer", &PyBuffer_Type);
Guido van Rossum4dfe8a12006-04-22 23:28:04 +00001813 SETBUILTIN("bytes", &PyBytes_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001814 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001815#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00001816 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001817#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00001818 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00001819 SETBUILTIN("enumerate", &PyEnum_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001820 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00001821 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001822 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00001823 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001824 SETBUILTIN("list", &PyList_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001825 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossum805365e2007-05-07 22:24:25 +00001826 SETBUILTIN("range", &PyRange_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00001827 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00001828 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001829 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001830 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Guido van Rossum572dbf82007-04-27 23:53:51 +00001831 SETBUILTIN("str", &PyUnicode_Type);
Guido van Rossum84fc66d2007-05-03 17:18:26 +00001832 SETBUILTIN("str8", &PyString_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001833 SETBUILTIN("super", &PySuper_Type);
1834 SETBUILTIN("tuple", &PyTuple_Type);
1835 SETBUILTIN("type", &PyType_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001836 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00001837 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
1838 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001839 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00001840 }
1841 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00001842
Guido van Rossum25ce5661997-08-02 03:10:38 +00001843 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00001844#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00001845#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00001846}