blob: 17cdb92c31d1da4cc7943ea907c4e5e0c32958d0 [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 Rossum12d12c51993-10-26 17:58:25 +000026/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000027static PyObject *filterstring(PyObject *, PyObject *);
Martin v. Löwis8afd7572003-01-25 22:46:11 +000028#ifdef Py_USING_UNICODE
29static PyObject *filterunicode(PyObject *, PyObject *);
30#endif
Tim Petersdbd9ba62000-07-09 03:09:57 +000031static PyObject *filtertuple (PyObject *, PyObject *);
Guido van Rossum12d12c51993-10-26 17:58:25 +000032
Guido van Rossum79f25d91997-04-29 20:08:16 +000033static PyObject *
Guido van Rossum52cc1d82007-03-18 15:41:51 +000034builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds)
35{
36 PyObject *func, *name, *bases, *mkw, *meta, *prep, *ns, *res;
37 Py_ssize_t nargs, nbases;
38
39 assert(args != NULL);
40 if (!PyTuple_Check(args)) {
41 PyErr_SetString(PyExc_TypeError,
42 "__build_class__: args is not a tuple");
43 return NULL;
44 }
45 nargs = PyTuple_GET_SIZE(args);
46 if (nargs < 2) {
47 PyErr_SetString(PyExc_TypeError,
48 "__build_class__: not enough arguments");
49 return NULL;
50 }
51 func = PyTuple_GET_ITEM(args, 0); /* Better be callable */
52 name = PyTuple_GET_ITEM(args, 1);
53 if (!PyString_Check(name)) {
54 PyErr_SetString(PyExc_TypeError,
55 "__build_class__: name is not a string");
56 return NULL;
57 }
58 bases = PyTuple_GetSlice(args, 2, nargs);
59 if (bases == NULL)
60 return NULL;
61 nbases = nargs - 2;
62
63 if (kwds == NULL) {
64 meta = NULL;
65 mkw = NULL;
66 }
67 else {
68 mkw = PyDict_Copy(kwds); /* Don't modify kwds passed in! */
69 if (mkw == NULL) {
70 Py_DECREF(bases);
71 return NULL;
72 }
73 meta = PyDict_GetItemString(mkw, "metaclass");
74 if (meta != NULL) {
75 Py_INCREF(meta);
76 if (PyDict_DelItemString(mkw, "metaclass") < 0) {
77 Py_DECREF(meta);
78 Py_DECREF(mkw);
79 Py_DECREF(bases);
80 return NULL;
81 }
82 }
83 }
84 if (meta == NULL) {
85 if (PyTuple_GET_SIZE(bases) == 0)
86 meta = (PyObject *) (&PyType_Type);
87 else {
88 PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
89 meta = (PyObject *) (base0->ob_type);
90 }
91 Py_INCREF(meta);
92 }
93 prep = PyObject_GetAttrString(meta, "__prepare__");
94 if (prep == NULL) {
95 PyErr_Clear();
96 ns = PyDict_New();
97 }
98 else {
99 PyObject *pargs = Py_BuildValue("OO", name, bases);
100 if (pargs == NULL) {
101 Py_DECREF(prep);
102 Py_DECREF(meta);
103 Py_XDECREF(mkw);
104 Py_DECREF(bases);
105 return NULL;
106 }
107 ns = PyEval_CallObjectWithKeywords(prep, pargs, mkw);
108 Py_DECREF(pargs);
109 Py_DECREF(prep);
110 if (ns == NULL) {
111 Py_DECREF(meta);
112 Py_XDECREF(mkw);
113 Py_DECREF(bases);
114 return NULL;
115 }
116 }
117 res = PyObject_CallFunctionObjArgs(func, ns, NULL);
118 if (res != NULL) {
119 PyObject *margs;
120 Py_DECREF(res);
121 res = NULL;
122 margs = Py_BuildValue("OOO", name, bases, ns);
123 if (margs != NULL) {
124 res = PyEval_CallObjectWithKeywords(meta, margs, mkw);
125 Py_DECREF(margs);
126 }
127 }
128 Py_DECREF(ns);
129 Py_DECREF(meta);
130 Py_XDECREF(mkw);
131 Py_DECREF(bases);
132 return res;
133}
134
135PyDoc_STRVAR(build_class_doc,
136"__build_class__(func, name, *bases, metaclass=None, **kwds) -> class\n\
137\n\
138Internal helper function used by the class statement.");
139
140static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000141builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000142{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000143 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
144 "level", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000145 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000146 PyObject *globals = NULL;
147 PyObject *locals = NULL;
148 PyObject *fromlist = NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +0000149 int level = -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000150
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000151 if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|OOOi:__import__",
152 kwlist, &name, &globals, &locals, &fromlist, &level))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000153 return NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +0000154 return PyImport_ImportModuleLevel(name, globals, locals,
155 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000156}
157
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000158PyDoc_STRVAR(import_doc,
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000159"__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000160\n\
161Import a module. The globals are only used to determine the context;\n\
162they are not modified. The locals are currently unused. The fromlist\n\
163should be a list of names to emulate ``from name import ...'', or an\n\
164empty list to emulate ``import name''.\n\
165When importing a module from a package, note that __import__('A.B', ...)\n\
166returns package A when fromlist is empty, but its submodule B when\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000167fromlist is not empty. Level is used to determine whether to perform \n\
168absolute or relative imports. -1 is the original strategy of attempting\n\
169both absolute and relative imports, 0 is absolute, a positive number\n\
170is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000171
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000172
Guido van Rossum79f25d91997-04-29 20:08:16 +0000173static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000174builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000175{
Guido van Rossum09df08a1998-05-22 00:51:39 +0000176 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000177}
178
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000179PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000180"abs(number) -> number\n\
181\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000182Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000183
Raymond Hettinger96229b12005-03-11 06:49:40 +0000184static PyObject *
185builtin_all(PyObject *self, PyObject *v)
186{
187 PyObject *it, *item;
188
189 it = PyObject_GetIter(v);
190 if (it == NULL)
191 return NULL;
192
193 while ((item = PyIter_Next(it)) != NULL) {
194 int cmp = PyObject_IsTrue(item);
195 Py_DECREF(item);
196 if (cmp < 0) {
197 Py_DECREF(it);
198 return NULL;
199 }
200 if (cmp == 0) {
201 Py_DECREF(it);
202 Py_RETURN_FALSE;
203 }
204 }
205 Py_DECREF(it);
206 if (PyErr_Occurred())
207 return NULL;
208 Py_RETURN_TRUE;
209}
210
211PyDoc_STRVAR(all_doc,
212"all(iterable) -> bool\n\
213\n\
214Return True if bool(x) is True for all values x in the iterable.");
215
216static PyObject *
217builtin_any(PyObject *self, PyObject *v)
218{
219 PyObject *it, *item;
220
221 it = PyObject_GetIter(v);
222 if (it == NULL)
223 return NULL;
224
225 while ((item = PyIter_Next(it)) != NULL) {
226 int cmp = PyObject_IsTrue(item);
227 Py_DECREF(item);
228 if (cmp < 0) {
229 Py_DECREF(it);
230 return NULL;
231 }
232 if (cmp == 1) {
233 Py_DECREF(it);
234 Py_RETURN_TRUE;
235 }
236 }
237 Py_DECREF(it);
238 if (PyErr_Occurred())
239 return NULL;
240 Py_RETURN_FALSE;
241}
242
243PyDoc_STRVAR(any_doc,
244"any(iterable) -> bool\n\
245\n\
246Return True if bool(x) is True for any x in the iterable.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000247
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000248
Guido van Rossum79f25d91997-04-29 20:08:16 +0000249static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000250builtin_callable(PyObject *self, PyObject *v)
Guido van Rossum2d951851994-08-29 12:52:16 +0000251{
Guido van Rossum77f6a652002-04-03 22:41:51 +0000252 return PyBool_FromLong((long)PyCallable_Check(v));
Guido van Rossum2d951851994-08-29 12:52:16 +0000253}
254
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000255PyDoc_STRVAR(callable_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000256"callable(object) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000257\n\
258Return whether the object is callable (i.e., some kind of function).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000259Note that classes are callable, as are instances with a __call__() method.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000260
261
Guido van Rossum79f25d91997-04-29 20:08:16 +0000262static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000263builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000264{
Guido van Rossumc7903a12002-08-16 07:04:56 +0000265 PyObject *func, *seq, *result, *it, *arg;
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000266 Py_ssize_t len; /* guess for result list size */
267 register Py_ssize_t j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000268
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000269 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000270 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000271
Tim Peters0e57abf2001-05-02 07:39:38 +0000272 /* Strings and tuples return a result of the same type. */
273 if (PyString_Check(seq))
274 return filterstring(func, seq);
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000275#ifdef Py_USING_UNICODE
276 if (PyUnicode_Check(seq))
277 return filterunicode(func, seq);
278#endif
Tim Peters0e57abf2001-05-02 07:39:38 +0000279 if (PyTuple_Check(seq))
280 return filtertuple(func, seq);
281
Georg Brandle35b6572005-07-19 22:20:20 +0000282 /* Pre-allocate argument list tuple. */
283 arg = PyTuple_New(1);
284 if (arg == NULL)
285 return NULL;
286
Tim Peters0e57abf2001-05-02 07:39:38 +0000287 /* Get iterator. */
288 it = PyObject_GetIter(seq);
289 if (it == NULL)
Georg Brandle35b6572005-07-19 22:20:20 +0000290 goto Fail_arg;
Tim Peters0e57abf2001-05-02 07:39:38 +0000291
292 /* Guess a result list size. */
Armin Rigof5b3e362006-02-11 21:32:43 +0000293 len = _PyObject_LengthHint(seq);
Raymond Hettingerb86269d2004-01-04 11:00:08 +0000294 if (len < 0) {
Raymond Hettingera710b332005-08-21 11:03:59 +0000295 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
296 !PyErr_ExceptionMatches(PyExc_AttributeError)) {
297 goto Fail_it;
298 }
Raymond Hettingerb86269d2004-01-04 11:00:08 +0000299 PyErr_Clear();
300 len = 8; /* arbitrary */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000301 }
302
Tim Peters0e57abf2001-05-02 07:39:38 +0000303 /* Get a result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000304 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000305 /* Eww - can modify the list in-place. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000306 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000307 result = seq;
308 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000309 else {
Tim Peters0e57abf2001-05-02 07:39:38 +0000310 result = PyList_New(len);
311 if (result == NULL)
312 goto Fail_it;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000313 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000314
Tim Peters0e57abf2001-05-02 07:39:38 +0000315 /* Build the result list. */
Tim Petersf4848da2001-05-05 00:14:56 +0000316 j = 0;
317 for (;;) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000318 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000319 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000320
Tim Peters0e57abf2001-05-02 07:39:38 +0000321 item = PyIter_Next(it);
322 if (item == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +0000323 if (PyErr_Occurred())
324 goto Fail_result_it;
Tim Peters0e57abf2001-05-02 07:39:38 +0000325 break;
Guido van Rossum2d951851994-08-29 12:52:16 +0000326 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000327
Neil Schemenauer68973552003-08-14 20:37:34 +0000328 if (func == (PyObject *)&PyBool_Type || func == Py_None) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000329 ok = PyObject_IsTrue(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000330 }
331 else {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000332 PyObject *good;
333 PyTuple_SET_ITEM(arg, 0, item);
334 good = PyObject_Call(func, arg, NULL);
335 PyTuple_SET_ITEM(arg, 0, NULL);
Guido van Rossum58b68731995-01-10 17:40:55 +0000336 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000337 Py_DECREF(item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000338 goto Fail_result_it;
Guido van Rossum58b68731995-01-10 17:40:55 +0000339 }
Guido van Rossumc7903a12002-08-16 07:04:56 +0000340 ok = PyObject_IsTrue(good);
341 Py_DECREF(good);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000342 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000343 if (ok) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000344 if (j < len)
345 PyList_SET_ITEM(result, j, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000346 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000347 int status = PyList_Append(result, item);
Barry Warsawfa77e091999-01-28 18:49:12 +0000348 Py_DECREF(item);
349 if (status < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000350 goto Fail_result_it;
Guido van Rossum2d951851994-08-29 12:52:16 +0000351 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000352 ++j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000353 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000354 else
355 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000356 }
357
Guido van Rossum12d12c51993-10-26 17:58:25 +0000358
Tim Peters0e57abf2001-05-02 07:39:38 +0000359 /* Cut back result list if len is too big. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000360 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000361 goto Fail_result_it;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000362
Tim Peters3c6b1482001-05-21 08:07:05 +0000363 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000364 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000365 return result;
366
Tim Peters0e57abf2001-05-02 07:39:38 +0000367Fail_result_it:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000368 Py_DECREF(result);
Tim Peters0e57abf2001-05-02 07:39:38 +0000369Fail_it:
370 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000371Fail_arg:
372 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000373 return NULL;
374}
375
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000376PyDoc_STRVAR(filter_doc,
Tim Petersd50e5442002-03-09 00:06:26 +0000377"filter(function or None, sequence) -> list, tuple, or string\n"
378"\n"
379"Return those items of sequence for which function(item) is true. If\n"
380"function is None, return the items that are true. If sequence is a tuple\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000381"or string, return the same type, else return a list.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000382
Guido van Rossum79f25d91997-04-29 20:08:16 +0000383static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000384builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000385{
386 long x;
387 char s[1];
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000388
Guido van Rossum79f25d91997-04-29 20:08:16 +0000389 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000390 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000391 if (x < 0 || x >= 256) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000392 PyErr_SetString(PyExc_ValueError,
393 "chr() arg not in range(256)");
Guido van Rossum3f5da241990-12-20 15:06:42 +0000394 return NULL;
395 }
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000396 s[0] = (char)x;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000397 return PyString_FromStringAndSize(s, 1);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000398}
399
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000400PyDoc_STRVAR(chr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000401"chr(i) -> character\n\
402\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000403Return a string of one character with ordinal i; 0 <= i < 256.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000404
405
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000406#ifdef Py_USING_UNICODE
Guido van Rossum79f25d91997-04-29 20:08:16 +0000407static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000408builtin_unichr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000409{
410 long x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000411
412 if (!PyArg_ParseTuple(args, "l:unichr", &x))
413 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000414
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000415 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000416}
417
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000418PyDoc_STRVAR(unichr_doc,
Fred Drake078b24f2000-04-13 02:42:50 +0000419"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000420\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000421Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.");
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000422#endif
Guido van Rossum09095f32000-03-10 23:00:52 +0000423
424
425static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000426builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000427{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000428 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000429 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000430
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000431 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000432 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000433 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000434 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000435 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000436}
437
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000438PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000439"cmp(x, y) -> integer\n\
440\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000441Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000442
Guido van Rossum79f25d91997-04-29 20:08:16 +0000443static PyObject *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000444builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000445{
446 char *str;
447 char *filename;
448 char *startstr;
449 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000450 int dont_inherit = 0;
451 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000452 PyCompilerFlags cf;
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000453 PyObject *result = NULL, *cmd, *tmp = NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000454 Py_ssize_t length;
Guido van Rossumd8faa362007-04-27 19:54:29 +0000455 static char *kwlist[] = {"source", "filename", "mode", "flags",
456 "dont_inherit", NULL};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000457
Guido van Rossumd8faa362007-04-27 19:54:29 +0000458 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
459 kwlist, &cmd, &filename, &startstr,
460 &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000461 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000462
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000463 cf.cf_flags = supplied_flags;
464
465#ifdef Py_USING_UNICODE
466 if (PyUnicode_Check(cmd)) {
467 tmp = PyUnicode_AsUTF8String(cmd);
468 if (tmp == NULL)
469 return NULL;
470 cmd = tmp;
471 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
472 }
473#endif
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000474 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &length))
475 return NULL;
Tim Peters2c646c92003-02-10 14:48:29 +0000476 if ((size_t)length != strlen(str)) {
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000477 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000478 "compile() expected string without null bytes");
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000479 goto cleanup;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000480 }
481
Guido van Rossum5b722181993-03-30 17:46:03 +0000482 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000483 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000484 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000485 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000486 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000487 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000488 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000489 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000490 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000491 goto cleanup;
Guido van Rossum5b722181993-03-30 17:46:03 +0000492 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000493
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000494 if (supplied_flags &
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000495 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000496 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000497 PyErr_SetString(PyExc_ValueError,
498 "compile(): unrecognised flags");
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000499 goto cleanup;
Tim Peters6cd6a822001-08-17 22:11:27 +0000500 }
501 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
502
Tim Peters6cd6a822001-08-17 22:11:27 +0000503 if (!dont_inherit) {
504 PyEval_MergeCompilerFlags(&cf);
505 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000506 result = Py_CompileStringFlags(str, filename, start, &cf);
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000507cleanup:
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000508 Py_XDECREF(tmp);
509 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000510}
511
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000512PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000513"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000514\n\
515Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000516into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000517The filename will be used for run-time error messages.\n\
518The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000519single (interactive) statement, or 'eval' to compile an expression.\n\
520The flags argument, if present, controls which future statements influence\n\
521the compilation of the code.\n\
522The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
523the effects of any future statements in effect in the code calling\n\
524compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000525in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000526
Guido van Rossum79f25d91997-04-29 20:08:16 +0000527static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000528builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000529{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000530 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000531
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000532 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000533 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000534 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000535}
536
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000537PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000538"dir([object]) -> list of strings\n"
539"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000540"If called without an argument, return the names in the current scope.\n"
541"Else, return an alphabetized list of names comprising (some of) the attributes\n"
542"of the given object, and of attributes reachable from it.\n"
543"If the object supplies a method named __dir__, it will be used; otherwise\n"
544"the default dir() logic is used and returns:\n"
545" for a module object: the module's attributes.\n"
546" for a class object: its attributes, and recursively the attributes\n"
547" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000548" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000549" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000550
Guido van Rossum79f25d91997-04-29 20:08:16 +0000551static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000552builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000553{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000554 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000555
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000556 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000557 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000558 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000559}
560
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000561PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000562"divmod(x, y) -> (div, mod)\n\
563\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000564Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000565
566
Guido van Rossum79f25d91997-04-29 20:08:16 +0000567static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000568builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000569{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000570 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000571 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000572 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000573 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000574
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000575 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000576 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000577 if (locals != Py_None && !PyMapping_Check(locals)) {
578 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000579 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000580 }
581 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000582 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000583 "globals must be a real dict; try eval(expr, {}, mapping)"
584 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000585 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000586 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000587 if (globals == Py_None) {
588 globals = PyEval_GetGlobals();
589 if (locals == Py_None)
590 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000591 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000592 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000593 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000594
Georg Brandl77c85e62005-09-15 10:46:13 +0000595 if (globals == NULL || locals == NULL) {
596 PyErr_SetString(PyExc_TypeError,
597 "eval must be given globals and locals "
598 "when called without a frame");
599 return NULL;
600 }
601
Guido van Rossum79f25d91997-04-29 20:08:16 +0000602 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
603 if (PyDict_SetItemString(globals, "__builtins__",
604 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000605 return NULL;
606 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000607
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000608 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000609 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000610 PyErr_SetString(PyExc_TypeError,
611 "code object passed to eval() may not contain free variables");
612 return NULL;
613 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000614 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000615 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000616
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000617 if (!PyString_Check(cmd) &&
618 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000619 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000620 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000621 return NULL;
622 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000623 cf.cf_flags = 0;
624
625#ifdef Py_USING_UNICODE
626 if (PyUnicode_Check(cmd)) {
627 tmp = PyUnicode_AsUTF8String(cmd);
628 if (tmp == NULL)
629 return NULL;
630 cmd = tmp;
631 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
632 }
633#endif
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000634 if (PyString_AsStringAndSize(cmd, &str, NULL)) {
635 Py_XDECREF(tmp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000636 return NULL;
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000637 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000638 while (*str == ' ' || *str == '\t')
639 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000640
Tim Peters9fa96be2001-08-17 23:04:59 +0000641 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000642 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
643 Py_XDECREF(tmp);
644 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000645}
646
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000647PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000648"eval(source[, globals[, locals]]) -> value\n\
649\n\
650Evaluate the source in the context of globals and locals.\n\
651The source may be a string representing a Python expression\n\
652or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000653The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000654defaulting to the current globals and locals.\n\
655If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000656
Georg Brandl7cae87c2006-09-06 06:51:57 +0000657static PyObject *
658builtin_exec(PyObject *self, PyObject *args)
659{
660 PyObject *v;
661 PyObject *prog, *globals = Py_None, *locals = Py_None;
662 int plain = 0;
663
664 if (!PyArg_ParseTuple(args, "O|OO:exec", &prog, &globals, &locals))
665 return NULL;
666
667 if (globals == Py_None) {
668 globals = PyEval_GetGlobals();
669 if (locals == Py_None) {
670 locals = PyEval_GetLocals();
671 plain = 1;
672 }
673 if (!globals || !locals) {
674 PyErr_SetString(PyExc_SystemError,
675 "globals and locals cannot be NULL");
676 return NULL;
677 }
678 }
679 else if (locals == Py_None)
680 locals = globals;
681 if (!PyString_Check(prog) &&
682 !PyUnicode_Check(prog) &&
683 !PyCode_Check(prog) &&
684 !PyFile_Check(prog)) {
685 PyErr_Format(PyExc_TypeError,
686 "exec() arg 1 must be a string, file, or code "
687 "object, not %.100s", prog->ob_type->tp_name);
688 return NULL;
689 }
690 if (!PyDict_Check(globals)) {
691 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
692 globals->ob_type->tp_name);
693 return NULL;
694 }
695 if (!PyMapping_Check(locals)) {
696 PyErr_Format(PyExc_TypeError,
697 "arg 3 must be a mapping or None, not %.100s",
698 locals->ob_type->tp_name);
699 return NULL;
700 }
701 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
702 if (PyDict_SetItemString(globals, "__builtins__",
703 PyEval_GetBuiltins()) != 0)
704 return NULL;
705 }
706
707 if (PyCode_Check(prog)) {
708 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
709 PyErr_SetString(PyExc_TypeError,
710 "code object passed to exec() may not "
711 "contain free variables");
712 return NULL;
713 }
714 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
715 }
716 else if (PyFile_Check(prog)) {
717 FILE *fp = PyFile_AsFile(prog);
718 char *name = PyString_AsString(PyFile_Name(prog));
719 PyCompilerFlags cf;
720 cf.cf_flags = 0;
721 if (PyEval_MergeCompilerFlags(&cf))
722 v = PyRun_FileFlags(fp, name, Py_file_input, globals,
723 locals, &cf);
724 else
725 v = PyRun_File(fp, name, Py_file_input, globals,
726 locals);
727 }
728 else {
729 PyObject *tmp = NULL;
730 char *str;
731 PyCompilerFlags cf;
732 cf.cf_flags = 0;
733#ifdef Py_USING_UNICODE
734 if (PyUnicode_Check(prog)) {
735 tmp = PyUnicode_AsUTF8String(prog);
736 if (tmp == NULL)
737 return NULL;
738 prog = tmp;
739 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
740 }
741#endif
742 if (PyString_AsStringAndSize(prog, &str, NULL))
743 return NULL;
744 if (PyEval_MergeCompilerFlags(&cf))
745 v = PyRun_StringFlags(str, Py_file_input, globals,
746 locals, &cf);
747 else
748 v = PyRun_String(str, Py_file_input, globals, locals);
749 Py_XDECREF(tmp);
750 }
751 if (v == NULL)
752 return NULL;
753 Py_DECREF(v);
754 Py_RETURN_NONE;
755}
756
757PyDoc_STRVAR(exec_doc,
758"exec(object[, globals[, locals]])\n\
759\n\
760Read and execute code from a object, which can be a string, a code\n\
761object or a file object.\n\
762The globals and locals are dictionaries, defaulting to the current\n\
763globals and locals. If only globals is given, locals defaults to it.");
764
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000765
Guido van Rossum79f25d91997-04-29 20:08:16 +0000766static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000767builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000768{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000769 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000770 PyObject *globals = Py_None, *locals = Py_None;
771 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000772 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000773 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000774 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000775
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000776 if (!PyArg_ParseTuple(args, "s|O!O:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000777 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000778 &PyDict_Type, &globals,
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000779 &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000780 return NULL;
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000781 if (locals != Py_None && !PyMapping_Check(locals)) {
782 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
783 return NULL;
784 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000785 if (globals == Py_None) {
786 globals = PyEval_GetGlobals();
787 if (locals == Py_None)
788 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000789 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000790 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000791 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000792 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
793 if (PyDict_SetItemString(globals, "__builtins__",
794 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000795 return NULL;
796 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000797
798 exists = 0;
799 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000800#if defined(PLAN9)
801 {
802 Dir *d;
803
804 if ((d = dirstat(filename))!=nil) {
805 if(d->mode & DMDIR)
806 werrstr("is a directory");
807 else
808 exists = 1;
809 free(d);
810 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000811 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000812#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000813 if (object_exists(filename)) {
814 if (isdir(filename))
815 errno = EISDIR;
816 else
817 exists = 1;
818 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000819#else /* standard Posix */
820 {
821 struct stat s;
822 if (stat(filename, &s) == 0) {
823 if (S_ISDIR(s.st_mode))
Andrew MacIntyreda4d6cb2004-03-29 11:53:38 +0000824# if defined(PYOS_OS2) && defined(PYCC_VACPP)
Martin v. Löwis3484a182002-03-09 12:07:51 +0000825 errno = EOS2ERR;
826# else
827 errno = EISDIR;
828# endif
829 else
830 exists = 1;
831 }
832 }
833#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000834
835 if (exists) {
836 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000837 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000838 Py_END_ALLOW_THREADS
839
840 if (fp == NULL) {
841 exists = 0;
842 }
843 }
844
845 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000846 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000847 return NULL;
848 }
Tim Peters5ba58662001-07-16 02:29:45 +0000849 cf.cf_flags = 0;
850 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000851 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000852 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000853 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000854 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000855 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000856 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000857}
858
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000859PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000860"execfile(filename[, globals[, locals]])\n\
861\n\
862Read and execute a Python script from a file.\n\
863The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000864globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000865
866
Guido van Rossum79f25d91997-04-29 20:08:16 +0000867static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000868builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000869{
Guido van Rossum950ff291998-06-29 13:38:57 +0000870 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000871 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000872
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000873 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000874 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000875#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000876 if (PyUnicode_Check(name)) {
877 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
878 if (name == NULL)
879 return NULL;
880 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000881#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000882
883 if (!PyString_Check(name)) {
884 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000885 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000886 return NULL;
887 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000888 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000889 if (result == NULL && dflt != NULL &&
890 PyErr_ExceptionMatches(PyExc_AttributeError))
891 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000892 PyErr_Clear();
893 Py_INCREF(dflt);
894 result = dflt;
895 }
896 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000897}
898
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000899PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000900"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000901\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000902Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
903When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000904exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000905
906
Guido van Rossum79f25d91997-04-29 20:08:16 +0000907static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000908builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000909{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000910 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000911
Guido van Rossum79f25d91997-04-29 20:08:16 +0000912 d = PyEval_GetGlobals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000913 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000914 return d;
915}
916
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000917PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000918"globals() -> dictionary\n\
919\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000920Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000921
922
Guido van Rossum79f25d91997-04-29 20:08:16 +0000923static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000924builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000925{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000926 PyObject *v;
927 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000928
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000929 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000930 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000931#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000932 if (PyUnicode_Check(name)) {
933 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
934 if (name == NULL)
935 return NULL;
936 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000937#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000938
939 if (!PyString_Check(name)) {
940 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000941 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000942 return NULL;
943 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000944 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000945 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000946 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000947 Py_INCREF(Py_False);
948 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000949 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000950 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000951 Py_INCREF(Py_True);
952 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000953}
954
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000955PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000956"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000957\n\
958Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000959(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000960
961
Guido van Rossum79f25d91997-04-29 20:08:16 +0000962static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000963builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000964{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000965 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000966}
967
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000968PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000969"id(object) -> integer\n\
970\n\
971Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000972simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000973
974
Guido van Rossum79f25d91997-04-29 20:08:16 +0000975static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000976builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000977{
978 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000979 PyObject *it; /* the iterator object */
980 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000981 } sequence;
982
Guido van Rossum79f25d91997-04-29 20:08:16 +0000983 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000984 sequence *seqs = NULL, *sqp;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000985 Py_ssize_t n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000986 register int i, j;
987
Guido van Rossum79f25d91997-04-29 20:08:16 +0000988 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000989 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000990 PyErr_SetString(PyExc_TypeError,
991 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000992 return NULL;
993 }
994
Guido van Rossum79f25d91997-04-29 20:08:16 +0000995 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000996 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000997
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000998 if (func == Py_None && n == 1) {
999 /* map(None, S) is the same as list(S). */
1000 return PySequence_List(PyTuple_GetItem(args, 1));
1001 }
1002
Tim Peters4e9afdc2001-05-03 23:54:49 +00001003 /* Get space for sequence descriptors. Must NULL out the iterator
1004 * pointers so that jumping to Fail_2 later doesn't see trash.
1005 */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001006 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
1007 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +00001008 return NULL;
1009 }
1010 for (i = 0; i < n; ++i) {
1011 seqs[i].it = (PyObject*)NULL;
1012 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001013 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001014
Tim Peters4e9afdc2001-05-03 23:54:49 +00001015 /* Do a first pass to obtain iterators for the arguments, and set len
1016 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +00001017 */
Tim Peters4e9afdc2001-05-03 23:54:49 +00001018 len = 0;
1019 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
1020 PyObject *curseq;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001021 Py_ssize_t curlen;
Guido van Rossumad991772001-01-12 16:03:05 +00001022
Tim Peters4e9afdc2001-05-03 23:54:49 +00001023 /* Get iterator. */
1024 curseq = PyTuple_GetItem(args, i+1);
1025 sqp->it = PyObject_GetIter(curseq);
1026 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +00001027 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +00001028 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +00001029 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +00001030 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001031 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001032 goto Fail_2;
1033 }
1034
Tim Peters4e9afdc2001-05-03 23:54:49 +00001035 /* Update len. */
Armin Rigof5b3e362006-02-11 21:32:43 +00001036 curlen = _PyObject_LengthHint(curseq);
Raymond Hettinger77f3c872004-01-04 08:54:44 +00001037 if (curlen < 0) {
Raymond Hettingera710b332005-08-21 11:03:59 +00001038 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
1039 !PyErr_ExceptionMatches(PyExc_AttributeError)) {
1040 goto Fail_2;
1041 }
Raymond Hettinger77f3c872004-01-04 08:54:44 +00001042 PyErr_Clear();
Tim Peters4e9afdc2001-05-03 23:54:49 +00001043 curlen = 8; /* arbitrary */
Raymond Hettinger77f3c872004-01-04 08:54:44 +00001044 }
1045 if (curlen > len)
1046 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001047 }
1048
Tim Peters4e9afdc2001-05-03 23:54:49 +00001049 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001050 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001051 goto Fail_2;
1052
Tim Peters4e9afdc2001-05-03 23:54:49 +00001053 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +00001054 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001055 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001056 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001057
Guido van Rossum79f25d91997-04-29 20:08:16 +00001058 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +00001059 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001060 else if ((alist = PyTuple_New(n)) == NULL)
1061 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001062
1063 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001064 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001065 Py_INCREF(Py_None);
1066 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001067 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001068 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001069 item = PyIter_Next(sqp->it);
1070 if (item)
1071 ++numactive;
1072 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001073 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001074 Py_XDECREF(alist);
1075 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001076 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001077 Py_INCREF(Py_None);
1078 item = Py_None;
1079 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001080 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001081 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001082 if (alist)
1083 PyTuple_SET_ITEM(alist, j, item);
1084 else
Guido van Rossum2d951851994-08-29 12:52:16 +00001085 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001086 }
1087
Guido van Rossum32120311995-07-10 13:52:21 +00001088 if (!alist)
1089 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +00001090
Tim Peters4e9afdc2001-05-03 23:54:49 +00001091 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001092 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +00001093 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001094 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001095
Guido van Rossum79f25d91997-04-29 20:08:16 +00001096 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +00001097 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001098 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001099 value = PyEval_CallObject(func, alist);
1100 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001101 if (value == NULL)
1102 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001103 }
1104 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +00001105 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +00001106 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +00001107 if (status < 0)
1108 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001109 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001110 else if (PyList_SetItem(result, i, value) < 0)
1111 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001112 }
1113
Guido van Rossumfa4ac711998-07-10 17:37:30 +00001114 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
1115 goto Fail_1;
1116
Tim Peters4e9afdc2001-05-03 23:54:49 +00001117 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001118
Guido van Rossum12d12c51993-10-26 17:58:25 +00001119Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001120 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001121Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +00001122 result = NULL;
1123Succeed:
1124 assert(seqs);
1125 for (i = 0; i < n; ++i)
1126 Py_XDECREF(seqs[i].it);
1127 PyMem_DEL(seqs);
1128 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001129}
1130
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001131PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001132"map(function, sequence[, sequence, ...]) -> list\n\
1133\n\
1134Return a list of the results of applying the function to the items of\n\
1135the argument sequence(s). If more than one sequence is given, the\n\
1136function is called with an argument list consisting of the corresponding\n\
1137item of each sequence, substituting None for missing values when not all\n\
1138sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001139the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001140
1141
Guido van Rossum79f25d91997-04-29 20:08:16 +00001142static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +00001143builtin_next(PyObject *self, PyObject *args)
1144{
1145 PyObject *it, *res;
1146 PyObject *def = NULL;
1147
1148 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1149 return NULL;
1150 if (!PyIter_Check(it)) {
1151 PyErr_Format(PyExc_TypeError,
1152 "%.200s object is not an iterator", it->ob_type->tp_name);
1153 return NULL;
1154 }
1155
1156 res = (*it->ob_type->tp_iternext)(it);
1157 if (res == NULL) {
1158 if (def) {
1159 if (PyErr_Occurred() &&
1160 !PyErr_ExceptionMatches(PyExc_StopIteration))
1161 return NULL;
1162 PyErr_Clear();
1163 Py_INCREF(def);
1164 return def;
1165 } else if (PyErr_Occurred()) {
1166 return NULL;
1167 } else {
1168 PyErr_SetNone(PyExc_StopIteration);
1169 return NULL;
1170 }
1171 }
1172 return res;
1173}
1174
1175PyDoc_STRVAR(next_doc,
1176"next(iterator[, default])\n\
1177\n\
1178Return the next item from the iterator. If default is given and the iterator\n\
1179is exhausted, it is returned instead of raising StopIteration.");
1180
1181
1182static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001183builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001184{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001185 PyObject *v;
1186 PyObject *name;
1187 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001188
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001189 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001190 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001191 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001192 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001193 Py_INCREF(Py_None);
1194 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001195}
1196
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001197PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001198"setattr(object, name, value)\n\
1199\n\
1200Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001201``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001202
1203
Guido van Rossum79f25d91997-04-29 20:08:16 +00001204static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001205builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001206{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001207 PyObject *v;
1208 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001209
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001210 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001211 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001212 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001213 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001214 Py_INCREF(Py_None);
1215 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001216}
1217
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001218PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001219"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001220\n\
1221Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001222``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001223
1224
Guido van Rossum79f25d91997-04-29 20:08:16 +00001225static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001226builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001227{
Guido van Rossum9bfef441993-03-29 10:43:31 +00001228 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001229
Guido van Rossum79f25d91997-04-29 20:08:16 +00001230 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001231 if (x == -1)
1232 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001233 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001234}
1235
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001236PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001237"hash(object) -> integer\n\
1238\n\
1239Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001240the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001241
1242
Guido van Rossum79f25d91997-04-29 20:08:16 +00001243static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001244builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001245{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001246 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001247 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001248
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001249 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001250 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001251 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001252 "hex() argument can't be converted to hex");
1253 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001254 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001255 res = (*nb->nb_hex)(v);
1256 if (res && !PyString_Check(res)) {
1257 PyErr_Format(PyExc_TypeError,
1258 "__hex__ returned non-string (type %.200s)",
1259 res->ob_type->tp_name);
1260 Py_DECREF(res);
1261 return NULL;
1262 }
1263 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001264}
1265
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001266PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001267"hex(number) -> string\n\
1268\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001269Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001270
1271
Guido van Rossum79f25d91997-04-29 20:08:16 +00001272static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001273builtin_iter(PyObject *self, PyObject *args)
1274{
1275 PyObject *v, *w = NULL;
1276
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001277 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001278 return NULL;
1279 if (w == NULL)
1280 return PyObject_GetIter(v);
1281 if (!PyCallable_Check(v)) {
1282 PyErr_SetString(PyExc_TypeError,
1283 "iter(v, w): v must be callable");
1284 return NULL;
1285 }
1286 return PyCallIter_New(v, w);
1287}
1288
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001289PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001290"iter(collection) -> iterator\n\
1291iter(callable, sentinel) -> iterator\n\
1292\n\
1293Get an iterator from an object. In the first form, the argument must\n\
1294supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001295In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001296
1297
1298static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001299builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001300{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001301 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001302
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001303 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001304 if (res < 0 && PyErr_Occurred())
1305 return NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001306 return PyInt_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001307}
1308
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001309PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001310"len(object) -> integer\n\
1311\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001312Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001313
1314
Guido van Rossum79f25d91997-04-29 20:08:16 +00001315static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001316builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001317{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001318 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001319
Guido van Rossum79f25d91997-04-29 20:08:16 +00001320 d = PyEval_GetLocals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00001321 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001322 return d;
1323}
1324
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001325PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001326"locals() -> dictionary\n\
1327\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001328Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001329
1330
Guido van Rossum79f25d91997-04-29 20:08:16 +00001331static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001332min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001333{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001334 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001335 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001336
Guido van Rossum79f25d91997-04-29 20:08:16 +00001337 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001338 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001339 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001340 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001341
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001342 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1343 keyfunc = PyDict_GetItemString(kwds, "key");
1344 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001345 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001346 "%s() got an unexpected keyword argument", name);
1347 return NULL;
1348 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001349 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001350
Tim Petersc3074532001-05-03 07:00:32 +00001351 it = PyObject_GetIter(v);
1352 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001353 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001354
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001355 maxitem = NULL; /* the result */
1356 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001357 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001358 /* get the value from the key function */
1359 if (keyfunc != NULL) {
1360 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1361 if (val == NULL)
1362 goto Fail_it_item;
1363 }
1364 /* no key function; the value is the item */
1365 else {
1366 val = item;
1367 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001368 }
Tim Petersc3074532001-05-03 07:00:32 +00001369
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001370 /* maximum value and item are unset; set them */
1371 if (maxval == NULL) {
1372 maxitem = item;
1373 maxval = val;
1374 }
1375 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001376 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001377 int cmp = PyObject_RichCompareBool(val, maxval, op);
1378 if (cmp < 0)
1379 goto Fail_it_item_and_val;
1380 else if (cmp > 0) {
1381 Py_DECREF(maxval);
1382 Py_DECREF(maxitem);
1383 maxval = val;
1384 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001385 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001386 else {
1387 Py_DECREF(item);
1388 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001389 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001390 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001391 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001392 if (PyErr_Occurred())
1393 goto Fail_it;
1394 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001395 PyErr_Format(PyExc_ValueError,
1396 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001397 assert(maxitem == NULL);
1398 }
1399 else
1400 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001401 Py_DECREF(it);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001402 return maxitem;
1403
1404Fail_it_item_and_val:
1405 Py_DECREF(val);
1406Fail_it_item:
1407 Py_DECREF(item);
1408Fail_it:
1409 Py_XDECREF(maxval);
1410 Py_XDECREF(maxitem);
1411 Py_DECREF(it);
1412 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001413}
1414
Guido van Rossum79f25d91997-04-29 20:08:16 +00001415static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001416builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001417{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001418 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001419}
1420
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001421PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001422"min(iterable[, key=func]) -> value\n\
1423min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001424\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001425With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001426With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001427
1428
Guido van Rossum79f25d91997-04-29 20:08:16 +00001429static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001430builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001431{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001432 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001433}
1434
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001435PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001436"max(iterable[, key=func]) -> value\n\
1437max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001438\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001439With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001440With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001441
1442
Guido van Rossum79f25d91997-04-29 20:08:16 +00001443static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001444builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001445{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001446 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001447 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001448
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001449 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1450 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001451 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001452 "oct() argument can't be converted to oct");
1453 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001454 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001455 res = (*nb->nb_oct)(v);
1456 if (res && !PyString_Check(res)) {
1457 PyErr_Format(PyExc_TypeError,
1458 "__oct__ returned non-string (type %.200s)",
1459 res->ob_type->tp_name);
1460 Py_DECREF(res);
1461 return NULL;
1462 }
1463 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001464}
1465
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001466PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001467"oct(number) -> string\n\
1468\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001469Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001470
1471
Guido van Rossum79f25d91997-04-29 20:08:16 +00001472static PyObject *
Thomas Wouters477c8d52006-05-27 19:21:47 +00001473builtin_open(PyObject *self, PyObject *args, PyObject *kwds)
1474{
1475 return PyObject_Call((PyObject*)&PyFile_Type, args, kwds);
1476}
1477
1478PyDoc_STRVAR(open_doc,
1479"open(name[, mode[, buffering]]) -> file object\n\
1480\n\
1481Open a file using the file() type, returns a file object.");
1482
1483
1484static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001485builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001486{
Guido van Rossum09095f32000-03-10 23:00:52 +00001487 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001488 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001489
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001490 if (PyString_Check(obj)) {
1491 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001492 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001493 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001494 return PyInt_FromLong(ord);
1495 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001496#ifdef Py_USING_UNICODE
Guido van Rossum98f97462007-04-13 03:31:13 +00001497 }
1498 else if (PyUnicode_Check(obj)) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001499 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001500 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001501 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001502 return PyInt_FromLong(ord);
1503 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001504#endif
Guido van Rossum98f97462007-04-13 03:31:13 +00001505 }
1506 else if (PyBytes_Check(obj)) {
1507 /* XXX Hopefully this is temporary */
1508 size = PyBytes_GET_SIZE(obj);
1509 if (size == 1) {
1510 ord = (long)*PyBytes_AS_STRING(obj);
1511 return PyInt_FromLong(ord);
1512 }
1513 }
1514 else {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001515 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001516 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001517 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001518 return NULL;
1519 }
1520
Guido van Rossumad991772001-01-12 16:03:05 +00001521 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001522 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001523 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001524 size);
1525 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001526}
1527
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001528PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001529"ord(c) -> integer\n\
1530\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001531Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001532
1533
Guido van Rossum79f25d91997-04-29 20:08:16 +00001534static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001535builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001536{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001537 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001538
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001539 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001540 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001541 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001542}
1543
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001544PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001545"pow(x, y[, z]) -> number\n\
1546\n\
1547With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001548equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001549
1550
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001551
Guido van Rossum34343512006-11-30 22:13:52 +00001552static PyObject *
1553builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1554{
1555 static char *kwlist[] = {"sep", "end", "file", 0};
Georg Brandl257d3d92007-02-26 10:35:10 +00001556 static PyObject *dummy_args;
Guido van Rossum34343512006-11-30 22:13:52 +00001557 PyObject *sep = NULL, *end = NULL, *file = NULL;
1558 int i, err;
1559
Georg Brandl257d3d92007-02-26 10:35:10 +00001560 if (dummy_args == NULL) {
1561 if (!(dummy_args = PyTuple_New(0)))
1562 return NULL;
1563 }
Georg Brandl88fc6642007-02-09 21:28:07 +00001564 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
Guido van Rossum34343512006-11-30 22:13:52 +00001565 kwlist, &sep, &end, &file))
1566 return NULL;
1567 if (file == NULL || file == Py_None)
1568 file = PySys_GetObject("stdout");
1569
Georg Brandl16f3e032006-11-30 22:46:03 +00001570 if (sep && sep != Py_None && !PyString_Check(sep) &&
1571 !PyUnicode_Check(sep)) {
1572 PyErr_Format(PyExc_TypeError,
1573 "sep must be None, str or unicode, not %.200s",
1574 sep->ob_type->tp_name);
1575 return NULL;
1576 }
1577 if (end && end != Py_None && !PyString_Check(end) &&
1578 !PyUnicode_Check(end)) {
1579 PyErr_Format(PyExc_TypeError,
1580 "end must be None, str or unicode, not %.200s",
1581 end->ob_type->tp_name);
1582 return NULL;
1583 }
Guido van Rossum34343512006-11-30 22:13:52 +00001584
1585 for (i = 0; i < PyTuple_Size(args); i++) {
1586 if (i > 0) {
1587 if (sep == NULL || sep == Py_None)
1588 err = PyFile_WriteString(" ", file);
1589 else
1590 err = PyFile_WriteObject(sep, file,
1591 Py_PRINT_RAW);
1592 if (err)
1593 return NULL;
1594 }
1595 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1596 Py_PRINT_RAW);
1597 if (err)
1598 return NULL;
1599 }
1600
1601 if (end == NULL || end == Py_None)
1602 err = PyFile_WriteString("\n", file);
1603 else
1604 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1605 if (err)
1606 return NULL;
1607
1608 Py_RETURN_NONE;
1609}
1610
1611PyDoc_STRVAR(print_doc,
Guido van Rossum452bf512007-02-09 05:32:43 +00001612"print(value, ..., file=None, sep=' ', end='\\n')\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001613\n\
1614Prints the values to a stream, or to sys.stdout by default.\n\
1615Optional keyword arguments:\n\
1616file: a file-like object (stream); defaults to the current sys.stdout.\n\
1617sep: string inserted between values, default a space.\n\
1618end: string appended after the last value, default a newline.");
1619
1620
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001621/* Return number of items in range (lo, hi, step), when arguments are
1622 * PyInt or PyLong objects. step > 0 required. Return a value < 0 if
1623 * & only if the true value is too large to fit in a signed long.
1624 * Arguments MUST return 1 with either PyInt_Check() or
1625 * PyLong_Check(). Return -1 when there is an error.
1626 */
1627static long
1628get_len_of_range_longs(PyObject *lo, PyObject *hi, PyObject *step)
1629{
1630 /* -------------------------------------------------------------
1631 Algorithm is equal to that of get_len_of_range(), but it operates
1632 on PyObjects (which are assumed to be PyLong or PyInt objects).
1633 ---------------------------------------------------------------*/
1634 long n;
1635 PyObject *diff = NULL;
1636 PyObject *one = NULL;
1637 PyObject *tmp1 = NULL, *tmp2 = NULL, *tmp3 = NULL;
1638 /* holds sub-expression evaluations */
1639
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001640 /* If (lo >= hi), return length of 0 (or error). */
1641 n = PyObject_RichCompareBool(lo, hi, Py_LT);
1642 if (n <= 0)
1643 return n;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001644
1645 if ((one = PyLong_FromLong(1L)) == NULL)
1646 goto Fail;
1647
1648 if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL)
1649 goto Fail;
1650
1651 if ((diff = PyNumber_Subtract(tmp1, one)) == NULL)
1652 goto Fail;
1653
1654 if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL)
1655 goto Fail;
1656
1657 if ((tmp3 = PyNumber_Add(tmp2, one)) == NULL)
1658 goto Fail;
1659
1660 n = PyLong_AsLong(tmp3);
1661 if (PyErr_Occurred()) { /* Check for Overflow */
1662 PyErr_Clear();
1663 goto Fail;
1664 }
1665
1666 Py_DECREF(tmp3);
1667 Py_DECREF(tmp2);
1668 Py_DECREF(diff);
1669 Py_DECREF(tmp1);
1670 Py_DECREF(one);
1671 return n;
1672
1673 Fail:
1674 Py_XDECREF(tmp3);
1675 Py_XDECREF(tmp2);
1676 Py_XDECREF(diff);
1677 Py_XDECREF(tmp1);
1678 Py_XDECREF(one);
1679 return -1;
1680}
1681
1682/* An extension of builtin_range() that handles the case when PyLong
1683 * arguments are given. */
1684static PyObject *
1685handle_range_longs(PyObject *self, PyObject *args)
1686{
1687 PyObject *ilow;
Tim Peters874e1f72003-04-13 22:13:08 +00001688 PyObject *ihigh = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001689 PyObject *istep = NULL;
Tim Peters874e1f72003-04-13 22:13:08 +00001690
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001691 PyObject *curnum = NULL;
1692 PyObject *v = NULL;
1693 long bign;
1694 int i, n;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001695 int step_pos;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001696
Tim Peters874e1f72003-04-13 22:13:08 +00001697 PyObject *zero = PyLong_FromLong(0);
1698
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001699 if (zero == NULL)
1700 return NULL;
1701
Tim Peters874e1f72003-04-13 22:13:08 +00001702 if (!PyArg_UnpackTuple(args, "range", 1, 3, &ilow, &ihigh, &istep)) {
1703 Py_DECREF(zero);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001704 return NULL;
1705 }
1706
Tim Peters874e1f72003-04-13 22:13:08 +00001707 /* Figure out which way we were called, supply defaults, and be
1708 * sure to incref everything so that the decrefs at the end
1709 * are correct.
1710 */
1711 assert(ilow != NULL);
1712 if (ihigh == NULL) {
1713 /* only 1 arg -- it's the upper limit */
1714 ihigh = ilow;
1715 ilow = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001716 }
Tim Peters874e1f72003-04-13 22:13:08 +00001717 assert(ihigh != NULL);
1718 Py_INCREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001719
Tim Peters874e1f72003-04-13 22:13:08 +00001720 /* ihigh correct now; do ilow */
1721 if (ilow == NULL)
1722 ilow = zero;
1723 Py_INCREF(ilow);
1724
1725 /* ilow and ihigh correct now; do istep */
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001726 if (istep == NULL) {
1727 istep = PyLong_FromLong(1L);
1728 if (istep == NULL)
1729 goto Fail;
1730 }
1731 else {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001732 Py_INCREF(istep);
1733 }
1734
Tim Peters874e1f72003-04-13 22:13:08 +00001735 if (!PyInt_Check(ilow) && !PyLong_Check(ilow)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001736 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001737 "range() integer start argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001738 ilow->ob_type->tp_name);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001739 goto Fail;
1740 }
1741
Tim Peters874e1f72003-04-13 22:13:08 +00001742 if (!PyInt_Check(ihigh) && !PyLong_Check(ihigh)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001743 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001744 "range() integer end argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001745 ihigh->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001746 goto Fail;
1747 }
1748
1749 if (!PyInt_Check(istep) && !PyLong_Check(istep)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001750 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001751 "range() integer step argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001752 istep->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001753 goto Fail;
1754 }
1755
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001756 step_pos = PyObject_RichCompareBool(istep, zero, Py_GT);
1757 if (step_pos < 0)
Tim Peters874e1f72003-04-13 22:13:08 +00001758 goto Fail;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001759 if (step_pos)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001760 bign = get_len_of_range_longs(ilow, ihigh, istep);
1761 else {
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001762 int step_zero = PyObject_RichCompareBool(istep, zero, Py_EQ);
Guido van Rossum93a66922006-08-24 02:10:21 +00001763 PyObject *neg_istep;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001764 if (step_zero < 0)
1765 goto Fail;
1766 if (step_zero) {
1767 PyErr_SetString(PyExc_ValueError,
1768 "range() step argument must not be zero");
1769 goto Fail;
1770 }
Guido van Rossum93a66922006-08-24 02:10:21 +00001771 neg_istep = PyNumber_Negative(istep);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001772 if (neg_istep == NULL)
1773 goto Fail;
1774 bign = get_len_of_range_longs(ihigh, ilow, neg_istep);
1775 Py_DECREF(neg_istep);
1776 }
1777
1778 n = (int)bign;
1779 if (bign < 0 || (long)n != bign) {
1780 PyErr_SetString(PyExc_OverflowError,
1781 "range() result has too many items");
1782 goto Fail;
1783 }
1784
1785 v = PyList_New(n);
1786 if (v == NULL)
1787 goto Fail;
1788
1789 curnum = ilow;
1790 Py_INCREF(curnum);
1791
1792 for (i = 0; i < n; i++) {
1793 PyObject *w = PyNumber_Long(curnum);
1794 PyObject *tmp_num;
1795 if (w == NULL)
1796 goto Fail;
1797
1798 PyList_SET_ITEM(v, i, w);
1799
1800 tmp_num = PyNumber_Add(curnum, istep);
1801 if (tmp_num == NULL)
1802 goto Fail;
1803
1804 Py_DECREF(curnum);
1805 curnum = tmp_num;
1806 }
Tim Peters874e1f72003-04-13 22:13:08 +00001807 Py_DECREF(ilow);
1808 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001809 Py_DECREF(istep);
1810 Py_DECREF(zero);
Tim Peters874e1f72003-04-13 22:13:08 +00001811 Py_DECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001812 return v;
1813
1814 Fail:
Tim Peters874e1f72003-04-13 22:13:08 +00001815 Py_DECREF(ilow);
1816 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001817 Py_XDECREF(istep);
Tim Peters874e1f72003-04-13 22:13:08 +00001818 Py_DECREF(zero);
1819 Py_XDECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001820 Py_XDECREF(v);
1821 return NULL;
1822}
1823
Guido van Rossum124eff01999-02-23 16:11:01 +00001824/* Return number of items in range/xrange (lo, hi, step). step > 0
1825 * required. Return a value < 0 if & only if the true value is too
1826 * large to fit in a signed long.
1827 */
1828static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001829get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001830{
1831 /* -------------------------------------------------------------
1832 If lo >= hi, the range is empty.
1833 Else if n values are in the range, the last one is
1834 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1835 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1836 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1837 the RHS is non-negative and so truncation is the same as the
1838 floor. Letting M be the largest positive long, the worst case
1839 for the RHS numerator is hi=M, lo=-M-1, and then
1840 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1841 precision to compute the RHS exactly.
1842 ---------------------------------------------------------------*/
1843 long n = 0;
1844 if (lo < hi) {
1845 unsigned long uhi = (unsigned long)hi;
1846 unsigned long ulo = (unsigned long)lo;
1847 unsigned long diff = uhi - ulo - 1;
1848 n = (long)(diff / (unsigned long)step + 1);
1849 }
1850 return n;
1851}
1852
Guido van Rossum79f25d91997-04-29 20:08:16 +00001853static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001854builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001855{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001856 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001857 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001858 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001859
Guido van Rossum79f25d91997-04-29 20:08:16 +00001860 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001861
Guido van Rossum79f25d91997-04-29 20:08:16 +00001862 if (PyTuple_Size(args) <= 1) {
1863 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001864 "l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001865 &ihigh)) {
1866 PyErr_Clear();
1867 return handle_range_longs(self, args);
1868 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001869 }
1870 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001871 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001872 "ll|l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001873 &ilow, &ihigh, &istep)) {
1874 PyErr_Clear();
1875 return handle_range_longs(self, args);
1876 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001877 }
1878 if (istep == 0) {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001879 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001880 "range() step argument must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001881 return NULL;
1882 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001883 if (istep > 0)
1884 bign = get_len_of_range(ilow, ihigh, istep);
1885 else
1886 bign = get_len_of_range(ihigh, ilow, -istep);
1887 n = (int)bign;
1888 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001889 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001890 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001891 return NULL;
1892 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001893 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001894 if (v == NULL)
1895 return NULL;
1896 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001897 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001898 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001899 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001900 return NULL;
1901 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001902 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001903 ilow += istep;
1904 }
1905 return v;
1906}
1907
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001908PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001909"range([start,] stop[, step]) -> list of integers\n\
1910\n\
1911Return a list containing an arithmetic progression of integers.\n\
1912range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1913When step is given, it specifies the increment (or decrement).\n\
1914For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001915These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001916
Guido van Rossuma88a0332007-02-26 16:59:55 +00001917static PyObject *
1918builtin_input(PyObject *self, PyObject *args)
1919{
1920 PyObject *v = NULL;
1921 PyObject *fin = PySys_GetObject("stdin");
1922 PyObject *fout = PySys_GetObject("stdout");
1923
1924 if (!PyArg_UnpackTuple(args, "input", 0, 1, &v))
1925 return NULL;
1926
1927 if (fin == NULL) {
1928 PyErr_SetString(PyExc_RuntimeError, "input: lost sys.stdin");
1929 return NULL;
1930 }
1931 if (fout == NULL) {
1932 PyErr_SetString(PyExc_RuntimeError, "input: lost sys.stdout");
1933 return NULL;
1934 }
1935 if (PyFile_AsFile(fin) && PyFile_AsFile(fout)
1936 && isatty(fileno(PyFile_AsFile(fin)))
1937 && isatty(fileno(PyFile_AsFile(fout)))) {
1938 PyObject *po;
1939 char *prompt;
1940 char *s;
1941 PyObject *result;
1942 if (v != NULL) {
1943 po = PyObject_Str(v);
1944 if (po == NULL)
1945 return NULL;
1946 prompt = PyString_AsString(po);
1947 if (prompt == NULL)
1948 return NULL;
1949 }
1950 else {
1951 po = NULL;
1952 prompt = "";
1953 }
1954 s = PyOS_Readline(PyFile_AsFile(fin), PyFile_AsFile(fout),
1955 prompt);
1956 Py_XDECREF(po);
1957 if (s == NULL) {
1958 if (!PyErr_Occurred())
1959 PyErr_SetNone(PyExc_KeyboardInterrupt);
1960 return NULL;
1961 }
1962 if (*s == '\0') {
1963 PyErr_SetNone(PyExc_EOFError);
1964 result = NULL;
1965 }
1966 else { /* strip trailing '\n' */
1967 size_t len = strlen(s);
1968 if (len > PY_SSIZE_T_MAX) {
1969 PyErr_SetString(PyExc_OverflowError,
1970 "input: input too long");
1971 result = NULL;
1972 }
1973 else {
1974 result = PyString_FromStringAndSize(s, len-1);
1975 }
1976 }
1977 PyMem_FREE(s);
1978 return result;
1979 }
1980 if (v != NULL) {
1981 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
1982 return NULL;
1983 }
1984 return PyFile_GetLine(fin, -1);
1985}
1986
1987PyDoc_STRVAR(input_doc,
1988"input([prompt]) -> string\n\
1989\n\
1990Read a string from standard input. The trailing newline is stripped.\n\
1991If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1992On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1993is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001994
Guido van Rossum79f25d91997-04-29 20:08:16 +00001995static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001996builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001997{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001998 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001999}
2000
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002001PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002002"reload(module) -> module\n\
2003\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002004Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002005
2006
Guido van Rossum79f25d91997-04-29 20:08:16 +00002007static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002008builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00002009{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002010 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00002011}
2012
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002013PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002014"repr(object) -> string\n\
2015\n\
2016Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002017For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002018
2019
Guido van Rossum79f25d91997-04-29 20:08:16 +00002020static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002021builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002022{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002023 double number;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002024 double f;
2025 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002026 int i;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002027 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002028
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002029 if (!PyArg_ParseTupleAndKeywords(args, kwds, "d|i:round",
2030 kwlist, &number, &ndigits))
2031 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002032 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00002033 i = abs(ndigits);
2034 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002035 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00002036 if (ndigits < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002037 number /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002038 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002039 number *= f;
2040 if (number >= 0.0)
2041 number = floor(number + 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00002042 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002043 number = ceil(number - 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00002044 if (ndigits < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002045 number *= f;
Guido van Rossum1e162d31998-05-09 14:42:25 +00002046 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002047 number /= f;
2048 return PyFloat_FromDouble(number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002049}
2050
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002051PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002052"round(number[, ndigits]) -> floating point number\n\
2053\n\
2054Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002055This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002056
Raymond Hettinger64958a12003-12-17 20:43:33 +00002057static PyObject *
2058builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
2059{
2060 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
2061 PyObject *callable;
Martin v. Löwis15e62742006-02-27 16:46:16 +00002062 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00002063 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002064
Neal Norwitz6f0d4792005-12-15 06:40:36 +00002065 /* args 1-4 should match listsort in Objects/listobject.c */
Armin Rigo71d7e702005-09-20 18:13:03 +00002066 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
2067 kwlist, &seq, &compare, &keyfunc, &reverse))
2068 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002069
2070 newlist = PySequence_List(seq);
2071 if (newlist == NULL)
2072 return NULL;
2073
2074 callable = PyObject_GetAttrString(newlist, "sort");
2075 if (callable == NULL) {
2076 Py_DECREF(newlist);
2077 return NULL;
2078 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002079
Raymond Hettinger64958a12003-12-17 20:43:33 +00002080 newargs = PyTuple_GetSlice(args, 1, 4);
2081 if (newargs == NULL) {
2082 Py_DECREF(newlist);
2083 Py_DECREF(callable);
2084 return NULL;
2085 }
2086
2087 v = PyObject_Call(callable, newargs, kwds);
2088 Py_DECREF(newargs);
2089 Py_DECREF(callable);
2090 if (v == NULL) {
2091 Py_DECREF(newlist);
2092 return NULL;
2093 }
2094 Py_DECREF(v);
2095 return newlist;
2096}
2097
2098PyDoc_STRVAR(sorted_doc,
2099"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002100
Guido van Rossum79f25d91997-04-29 20:08:16 +00002101static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002102builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002103{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002104 PyObject *v = NULL;
2105 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002106
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002107 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002108 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00002109 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002110 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002111 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002112 if (!PyErr_Occurred())
2113 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002114 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002115 }
2116 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00002117 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00002118 }
2119 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002120 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00002121 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002122 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00002123 "vars() argument must have __dict__ attribute");
2124 return NULL;
2125 }
2126 }
2127 return d;
2128}
2129
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002130PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002131"vars([object]) -> dictionary\n\
2132\n\
2133Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002134With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002135
Alex Martellia70b1912003-04-22 08:12:33 +00002136
2137static PyObject*
2138builtin_sum(PyObject *self, PyObject *args)
2139{
2140 PyObject *seq;
2141 PyObject *result = NULL;
2142 PyObject *temp, *item, *iter;
2143
Raymond Hettinger5cf63942003-10-25 06:41:37 +00002144 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00002145 return NULL;
2146
2147 iter = PyObject_GetIter(seq);
2148 if (iter == NULL)
2149 return NULL;
2150
2151 if (result == NULL) {
2152 result = PyInt_FromLong(0);
2153 if (result == NULL) {
2154 Py_DECREF(iter);
2155 return NULL;
2156 }
2157 } else {
2158 /* reject string values for 'start' parameter */
2159 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
2160 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002161 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00002162 Py_DECREF(iter);
2163 return NULL;
2164 }
Alex Martelli41c9f882003-04-22 09:24:48 +00002165 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00002166 }
2167
2168 for(;;) {
2169 item = PyIter_Next(iter);
2170 if (item == NULL) {
2171 /* error, or end-of-sequence */
2172 if (PyErr_Occurred()) {
2173 Py_DECREF(result);
2174 result = NULL;
2175 }
2176 break;
2177 }
Alex Martellia253e182003-10-25 23:24:14 +00002178 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00002179 Py_DECREF(result);
2180 Py_DECREF(item);
2181 result = temp;
2182 if (result == NULL)
2183 break;
2184 }
2185 Py_DECREF(iter);
2186 return result;
2187}
2188
2189PyDoc_STRVAR(sum_doc,
Thomas Wouters89f507f2006-12-13 04:49:30 +00002190"sum(sequence[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00002191\n\
2192Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00002193of parameter 'start' (which defaults to 0). When the sequence is\n\
2194empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00002195
2196
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002197static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002198builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002199{
2200 PyObject *inst;
2201 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00002202 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002203
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002204 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002205 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002206
Guido van Rossum823649d2001-03-21 18:40:58 +00002207 retval = PyObject_IsInstance(inst, cls);
2208 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00002209 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002210 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002211}
2212
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002213PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002214"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002215\n\
2216Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002217With a type as second argument, return whether that is the object's type.\n\
2218The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002219isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002220
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002221
2222static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002223builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002224{
2225 PyObject *derived;
2226 PyObject *cls;
2227 int retval;
2228
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002229 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002230 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002231
Guido van Rossum823649d2001-03-21 18:40:58 +00002232 retval = PyObject_IsSubclass(derived, cls);
2233 if (retval < 0)
2234 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002235 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002236}
2237
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002238PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002239"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002240\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002241Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2242When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2243is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002244
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002245
Barry Warsawbd599b52000-08-03 15:45:29 +00002246static PyObject*
2247builtin_zip(PyObject *self, PyObject *args)
2248{
Guido van Rossumb65fb332006-08-25 23:26:40 +00002249 /* args must be a tuple */
2250 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00002251
Guido van Rossumb65fb332006-08-25 23:26:40 +00002252 return _PyZip_CreateIter(args);
Barry Warsawbd599b52000-08-03 15:45:29 +00002253}
2254
2255
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002256PyDoc_STRVAR(zip_doc,
Guido van Rossum801f0d72006-08-24 19:48:10 +00002257"zip(it1 [, it2 [...]]) -> iter([(it1[0], it2[0] ...), ...])\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002258\n\
Guido van Rossum801f0d72006-08-24 19:48:10 +00002259Return an iterator yielding tuples, where each tuple contains the\n\
2260corresponding element from each of the argument iterables.\n\
2261The returned iterator ends when the shortest argument iterable is exhausted.\n\
2262NOTE: This is implemented using itertools.izip().");
Barry Warsawbd599b52000-08-03 15:45:29 +00002263
2264
Guido van Rossum79f25d91997-04-29 20:08:16 +00002265static PyMethodDef builtin_methods[] = {
Guido van Rossum52cc1d82007-03-18 15:41:51 +00002266 {"__build_class__", (PyCFunction)builtin___build_class__,
2267 METH_VARARGS | METH_KEYWORDS, build_class_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002268 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002269 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002270 {"all", builtin_all, METH_O, all_doc},
2271 {"any", builtin_any, METH_O, any_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002272 {"callable", builtin_callable, METH_O, callable_doc},
2273 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2274 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
Guido van Rossumd8faa362007-04-27 19:54:29 +00002275 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002276 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2277 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2278 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2279 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00002280 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002281 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
2282 {"filter", builtin_filter, METH_VARARGS, filter_doc},
2283 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2284 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2285 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2286 {"hash", builtin_hash, METH_O, hash_doc},
2287 {"hex", builtin_hex, METH_O, hex_doc},
2288 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00002289 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002290 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2291 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2292 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2293 {"len", builtin_len, METH_O, len_doc},
2294 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2295 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002296 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2297 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandla18af4e2007-04-21 15:47:16 +00002298 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002299 {"oct", builtin_oct, METH_O, oct_doc},
Thomas Wouters477c8d52006-05-27 19:21:47 +00002300 {"open", (PyCFunction)builtin_open, METH_VARARGS | METH_KEYWORDS, open_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002301 {"ord", builtin_ord, METH_O, ord_doc},
2302 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00002303 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002304 {"range", builtin_range, METH_VARARGS, range_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002305 {"reload", builtin_reload, METH_O, reload_doc},
2306 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002307 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002308 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002309 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002310 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002311#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002312 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002313#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002314 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002315 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002316 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002317};
2318
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002319PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002320"Built-in functions, exceptions, and other objects.\n\
2321\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002322Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002323
Guido van Rossum25ce5661997-08-02 03:10:38 +00002324PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002325_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002326{
Fred Drake5550de32000-06-20 04:54:19 +00002327 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002328 mod = Py_InitModule4("__builtin__", builtin_methods,
2329 builtin_doc, (PyObject *)NULL,
2330 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002331 if (mod == NULL)
2332 return NULL;
2333 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002334
Tim Peters7571a0f2003-03-23 17:52:28 +00002335#ifdef Py_TRACE_REFS
2336 /* __builtin__ exposes a number of statically allocated objects
2337 * that, before this code was added in 2.3, never showed up in
2338 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2339 * result, programs leaking references to None and False (etc)
2340 * couldn't be diagnosed by examining sys.getobjects(0).
2341 */
2342#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2343#else
2344#define ADD_TO_ALL(OBJECT) (void)0
2345#endif
2346
Tim Peters4b7625e2001-09-13 21:37:17 +00002347#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002348 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2349 return NULL; \
2350 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002351
2352 SETBUILTIN("None", Py_None);
2353 SETBUILTIN("Ellipsis", Py_Ellipsis);
2354 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002355 SETBUILTIN("False", Py_False);
2356 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00002357 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002358 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002359 SETBUILTIN("buffer", &PyBuffer_Type);
Guido van Rossum4dfe8a12006-04-22 23:28:04 +00002360 SETBUILTIN("bytes", &PyBytes_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002361 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002362#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002363 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002364#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002365 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002366 SETBUILTIN("enumerate", &PyEnum_Type);
Thomas Wouters477c8d52006-05-27 19:21:47 +00002367 SETBUILTIN("file", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002368 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002369 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002370 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00002371 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002372 SETBUILTIN("list", &PyList_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002373 SETBUILTIN("object", &PyBaseObject_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002374 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002375 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002376 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002377 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2378 SETBUILTIN("str", &PyString_Type);
2379 SETBUILTIN("super", &PySuper_Type);
2380 SETBUILTIN("tuple", &PyTuple_Type);
2381 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00002382 SETBUILTIN("xrange", &PyRange_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002383#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00002384 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002385#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00002386 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002387 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2388 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002389 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002390 }
2391 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002392
Guido van Rossum25ce5661997-08-02 03:10:38 +00002393 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002394#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002395#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002396}
2397
Guido van Rossume77a7571993-11-03 15:01:26 +00002398/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002399
Guido van Rossum79f25d91997-04-29 20:08:16 +00002400static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002401filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002402{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002403 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002404 Py_ssize_t i, j;
2405 Py_ssize_t len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002406
Guido van Rossumb7b45621995-08-04 04:07:45 +00002407 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002408 if (PyTuple_CheckExact(tuple))
2409 Py_INCREF(tuple);
2410 else
2411 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002412 return tuple;
2413 }
2414
Guido van Rossum79f25d91997-04-29 20:08:16 +00002415 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002416 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002417
Guido van Rossum12d12c51993-10-26 17:58:25 +00002418 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002419 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002420 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002421
Walter Dörwald8dd19322003-02-10 17:36:40 +00002422 if (tuple->ob_type->tp_as_sequence &&
2423 tuple->ob_type->tp_as_sequence->sq_item) {
2424 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002425 if (item == NULL)
2426 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002427 } else {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002428 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002429 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002430 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002431 if (func == Py_None) {
2432 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002433 good = item;
2434 }
2435 else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002436 PyObject *arg = PyTuple_Pack(1, item);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002437 if (arg == NULL) {
2438 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002439 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002440 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002441 good = PyEval_CallObject(func, arg);
2442 Py_DECREF(arg);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002443 if (good == NULL) {
2444 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002445 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002446 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002447 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002448 ok = PyObject_IsTrue(good);
2449 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002450 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002451 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002452 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002453 }
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002454 else
2455 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002456 }
2457
Tim Peters4324aa32001-05-28 22:30:08 +00002458 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002459 return NULL;
2460
Guido van Rossum12d12c51993-10-26 17:58:25 +00002461 return result;
2462
Guido van Rossum12d12c51993-10-26 17:58:25 +00002463Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002464 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002465 return NULL;
2466}
2467
2468
Guido van Rossume77a7571993-11-03 15:01:26 +00002469/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002470
Guido van Rossum79f25d91997-04-29 20:08:16 +00002471static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002472filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002473{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002474 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002475 Py_ssize_t i, j;
2476 Py_ssize_t len = PyString_Size(strobj);
2477 Py_ssize_t outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002478
Guido van Rossum79f25d91997-04-29 20:08:16 +00002479 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002480 /* If it's a real string we can return the original,
2481 * as no character is ever false and __getitem__
2482 * does return this character. If it's a subclass
2483 * we must go through the __getitem__ loop */
2484 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002485 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002486 return strobj;
2487 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002488 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002489 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002490 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002491
Guido van Rossum12d12c51993-10-26 17:58:25 +00002492 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002493 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002494 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002495
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002496 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2497 if (item == NULL)
2498 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002499 if (func==Py_None) {
2500 ok = 1;
2501 } else {
2502 PyObject *arg, *good;
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002503 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002504 if (arg == NULL) {
2505 Py_DECREF(item);
2506 goto Fail_1;
2507 }
2508 good = PyEval_CallObject(func, arg);
2509 Py_DECREF(arg);
2510 if (good == NULL) {
2511 Py_DECREF(item);
2512 goto Fail_1;
2513 }
2514 ok = PyObject_IsTrue(good);
2515 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00002516 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002517 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002518 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002519 if (!PyString_Check(item)) {
2520 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2521 " __getitem__ returned different type");
2522 Py_DECREF(item);
2523 goto Fail_1;
2524 }
2525 reslen = PyString_GET_SIZE(item);
2526 if (reslen == 1) {
2527 PyString_AS_STRING(result)[j++] =
2528 PyString_AS_STRING(item)[0];
2529 } else {
2530 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002531 Py_ssize_t need = j + reslen + len-i-1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002532 if (need > outlen) {
2533 /* overallocate, to avoid reallocations */
2534 if (need<2*outlen)
2535 need = 2*outlen;
2536 if (_PyString_Resize(&result, need)) {
2537 Py_DECREF(item);
2538 return NULL;
2539 }
2540 outlen = need;
2541 }
2542 memcpy(
2543 PyString_AS_STRING(result) + j,
2544 PyString_AS_STRING(item),
2545 reslen
2546 );
2547 j += reslen;
2548 }
2549 }
Tim Peters388ed082001-04-07 20:34:48 +00002550 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002551 }
2552
Walter Dörwald903f1e02003-02-04 16:28:00 +00002553 if (j < outlen)
Tim Peters5de98422002-04-27 18:44:32 +00002554 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002555
Guido van Rossum12d12c51993-10-26 17:58:25 +00002556 return result;
2557
Guido van Rossum12d12c51993-10-26 17:58:25 +00002558Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002559 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002560 return NULL;
2561}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002562
2563#ifdef Py_USING_UNICODE
2564/* Helper for filter(): filter a Unicode object through a function */
2565
2566static PyObject *
2567filterunicode(PyObject *func, PyObject *strobj)
2568{
2569 PyObject *result;
Martin v. Löwis725507b2006-03-07 12:08:51 +00002570 register Py_ssize_t i, j;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002571 Py_ssize_t len = PyUnicode_GetSize(strobj);
2572 Py_ssize_t outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002573
2574 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002575 /* If it's a real string we can return the original,
2576 * as no character is ever false and __getitem__
2577 * does return this character. If it's a subclass
2578 * we must go through the __getitem__ loop */
2579 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002580 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002581 return strobj;
2582 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002583 }
2584 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2585 return NULL;
2586
2587 for (i = j = 0; i < len; ++i) {
2588 PyObject *item, *arg, *good;
2589 int ok;
2590
2591 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2592 if (item == NULL)
2593 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002594 if (func == Py_None) {
2595 ok = 1;
2596 } else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002597 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002598 if (arg == NULL) {
2599 Py_DECREF(item);
2600 goto Fail_1;
2601 }
2602 good = PyEval_CallObject(func, arg);
2603 Py_DECREF(arg);
2604 if (good == NULL) {
2605 Py_DECREF(item);
2606 goto Fail_1;
2607 }
2608 ok = PyObject_IsTrue(good);
2609 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002610 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002611 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002612 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002613 if (!PyUnicode_Check(item)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002614 PyErr_SetString(PyExc_TypeError,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002615 "can't filter unicode to unicode:"
2616 " __getitem__ returned different type");
Walter Dörwald903f1e02003-02-04 16:28:00 +00002617 Py_DECREF(item);
2618 goto Fail_1;
2619 }
2620 reslen = PyUnicode_GET_SIZE(item);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002621 if (reslen == 1)
Walter Dörwald903f1e02003-02-04 16:28:00 +00002622 PyUnicode_AS_UNICODE(result)[j++] =
2623 PyUnicode_AS_UNICODE(item)[0];
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002624 else {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002625 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002626 Py_ssize_t need = j + reslen + len - i - 1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002627 if (need > outlen) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002628 /* overallocate,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002629 to avoid reallocations */
2630 if (need < 2 * outlen)
2631 need = 2 * outlen;
Jeremy Hylton364f6be2003-09-16 03:17:16 +00002632 if (PyUnicode_Resize(
2633 &result, need) < 0) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002634 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002635 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002636 }
2637 outlen = need;
2638 }
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002639 memcpy(PyUnicode_AS_UNICODE(result) + j,
2640 PyUnicode_AS_UNICODE(item),
2641 reslen*sizeof(Py_UNICODE));
Walter Dörwald903f1e02003-02-04 16:28:00 +00002642 j += reslen;
2643 }
2644 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002645 Py_DECREF(item);
2646 }
2647
Walter Dörwald903f1e02003-02-04 16:28:00 +00002648 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002649 PyUnicode_Resize(&result, j);
2650
2651 return result;
2652
2653Fail_1:
2654 Py_DECREF(result);
2655 return NULL;
2656}
2657#endif