blob: 8ce0e4859af2cf58623301bdb684d00d527ec75d [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 *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000444builtin_compile(PyObject *self, PyObject *args)
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 Rossum1ae940a1995-01-02 19:04:15 +0000455
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000456 if (!PyArg_ParseTuple(args, "Oss|ii:compile", &cmd, &filename,
Tim Peters6cd6a822001-08-17 22:11:27 +0000457 &startstr, &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000458 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000459
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000460 cf.cf_flags = supplied_flags;
461
462#ifdef Py_USING_UNICODE
463 if (PyUnicode_Check(cmd)) {
464 tmp = PyUnicode_AsUTF8String(cmd);
465 if (tmp == NULL)
466 return NULL;
467 cmd = tmp;
468 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
469 }
470#endif
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000471 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &length))
472 return NULL;
Tim Peters2c646c92003-02-10 14:48:29 +0000473 if ((size_t)length != strlen(str)) {
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000474 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000475 "compile() expected string without null bytes");
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000476 goto cleanup;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000477 }
478
Guido van Rossum5b722181993-03-30 17:46:03 +0000479 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000480 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000481 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000482 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000483 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000484 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000485 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000486 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000487 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000488 goto cleanup;
Guido van Rossum5b722181993-03-30 17:46:03 +0000489 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000490
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000491 if (supplied_flags &
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000492 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000493 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000494 PyErr_SetString(PyExc_ValueError,
495 "compile(): unrecognised flags");
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000496 goto cleanup;
Tim Peters6cd6a822001-08-17 22:11:27 +0000497 }
498 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
499
Tim Peters6cd6a822001-08-17 22:11:27 +0000500 if (!dont_inherit) {
501 PyEval_MergeCompilerFlags(&cf);
502 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000503 result = Py_CompileStringFlags(str, filename, start, &cf);
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000504cleanup:
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000505 Py_XDECREF(tmp);
506 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000507}
508
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000509PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000510"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000511\n\
512Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000513into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000514The filename will be used for run-time error messages.\n\
515The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000516single (interactive) statement, or 'eval' to compile an expression.\n\
517The flags argument, if present, controls which future statements influence\n\
518the compilation of the code.\n\
519The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
520the effects of any future statements in effect in the code calling\n\
521compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000522in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000523
Guido van Rossum79f25d91997-04-29 20:08:16 +0000524static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000525builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000526{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000527 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000528
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000529 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000530 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000531 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000532}
533
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000534PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000535"dir([object]) -> list of strings\n"
536"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000537"If called without an argument, return the names in the current scope.\n"
538"Else, return an alphabetized list of names comprising (some of) the attributes\n"
539"of the given object, and of attributes reachable from it.\n"
540"If the object supplies a method named __dir__, it will be used; otherwise\n"
541"the default dir() logic is used and returns:\n"
542" for a module object: the module's attributes.\n"
543" for a class object: its attributes, and recursively the attributes\n"
544" of its bases.\n"
545" for an other object: its attributes, its class's attributes, and\n"
546" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000547
Guido van Rossum79f25d91997-04-29 20:08:16 +0000548static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000549builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000550{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000551 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000552
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000553 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000554 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000555 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000556}
557
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000558PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000559"divmod(x, y) -> (div, mod)\n\
560\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000561Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000562
563
Guido van Rossum79f25d91997-04-29 20:08:16 +0000564static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000565builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000566{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000567 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000568 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000569 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000570 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000571
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000572 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000573 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000574 if (locals != Py_None && !PyMapping_Check(locals)) {
575 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000576 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000577 }
578 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000579 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000580 "globals must be a real dict; try eval(expr, {}, mapping)"
581 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000582 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000583 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000584 if (globals == Py_None) {
585 globals = PyEval_GetGlobals();
586 if (locals == Py_None)
587 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000588 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000589 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000590 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000591
Georg Brandl77c85e62005-09-15 10:46:13 +0000592 if (globals == NULL || locals == NULL) {
593 PyErr_SetString(PyExc_TypeError,
594 "eval must be given globals and locals "
595 "when called without a frame");
596 return NULL;
597 }
598
Guido van Rossum79f25d91997-04-29 20:08:16 +0000599 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
600 if (PyDict_SetItemString(globals, "__builtins__",
601 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000602 return NULL;
603 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000604
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000605 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000606 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000607 PyErr_SetString(PyExc_TypeError,
608 "code object passed to eval() may not contain free variables");
609 return NULL;
610 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000611 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000612 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000613
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000614 if (!PyString_Check(cmd) &&
615 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000616 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000617 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000618 return NULL;
619 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000620 cf.cf_flags = 0;
621
622#ifdef Py_USING_UNICODE
623 if (PyUnicode_Check(cmd)) {
624 tmp = PyUnicode_AsUTF8String(cmd);
625 if (tmp == NULL)
626 return NULL;
627 cmd = tmp;
628 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
629 }
630#endif
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000631 if (PyString_AsStringAndSize(cmd, &str, NULL)) {
632 Py_XDECREF(tmp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000633 return NULL;
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000634 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000635 while (*str == ' ' || *str == '\t')
636 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000637
Tim Peters9fa96be2001-08-17 23:04:59 +0000638 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000639 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
640 Py_XDECREF(tmp);
641 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000642}
643
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000644PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000645"eval(source[, globals[, locals]]) -> value\n\
646\n\
647Evaluate the source in the context of globals and locals.\n\
648The source may be a string representing a Python expression\n\
649or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000650The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000651defaulting to the current globals and locals.\n\
652If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000653
Georg Brandl7cae87c2006-09-06 06:51:57 +0000654static PyObject *
655builtin_exec(PyObject *self, PyObject *args)
656{
657 PyObject *v;
658 PyObject *prog, *globals = Py_None, *locals = Py_None;
659 int plain = 0;
660
661 if (!PyArg_ParseTuple(args, "O|OO:exec", &prog, &globals, &locals))
662 return NULL;
663
664 if (globals == Py_None) {
665 globals = PyEval_GetGlobals();
666 if (locals == Py_None) {
667 locals = PyEval_GetLocals();
668 plain = 1;
669 }
670 if (!globals || !locals) {
671 PyErr_SetString(PyExc_SystemError,
672 "globals and locals cannot be NULL");
673 return NULL;
674 }
675 }
676 else if (locals == Py_None)
677 locals = globals;
678 if (!PyString_Check(prog) &&
679 !PyUnicode_Check(prog) &&
680 !PyCode_Check(prog) &&
681 !PyFile_Check(prog)) {
682 PyErr_Format(PyExc_TypeError,
683 "exec() arg 1 must be a string, file, or code "
684 "object, not %.100s", prog->ob_type->tp_name);
685 return NULL;
686 }
687 if (!PyDict_Check(globals)) {
688 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
689 globals->ob_type->tp_name);
690 return NULL;
691 }
692 if (!PyMapping_Check(locals)) {
693 PyErr_Format(PyExc_TypeError,
694 "arg 3 must be a mapping or None, not %.100s",
695 locals->ob_type->tp_name);
696 return NULL;
697 }
698 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
699 if (PyDict_SetItemString(globals, "__builtins__",
700 PyEval_GetBuiltins()) != 0)
701 return NULL;
702 }
703
704 if (PyCode_Check(prog)) {
705 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
706 PyErr_SetString(PyExc_TypeError,
707 "code object passed to exec() may not "
708 "contain free variables");
709 return NULL;
710 }
711 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
712 }
713 else if (PyFile_Check(prog)) {
714 FILE *fp = PyFile_AsFile(prog);
715 char *name = PyString_AsString(PyFile_Name(prog));
716 PyCompilerFlags cf;
717 cf.cf_flags = 0;
718 if (PyEval_MergeCompilerFlags(&cf))
719 v = PyRun_FileFlags(fp, name, Py_file_input, globals,
720 locals, &cf);
721 else
722 v = PyRun_File(fp, name, Py_file_input, globals,
723 locals);
724 }
725 else {
726 PyObject *tmp = NULL;
727 char *str;
728 PyCompilerFlags cf;
729 cf.cf_flags = 0;
730#ifdef Py_USING_UNICODE
731 if (PyUnicode_Check(prog)) {
732 tmp = PyUnicode_AsUTF8String(prog);
733 if (tmp == NULL)
734 return NULL;
735 prog = tmp;
736 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
737 }
738#endif
739 if (PyString_AsStringAndSize(prog, &str, NULL))
740 return NULL;
741 if (PyEval_MergeCompilerFlags(&cf))
742 v = PyRun_StringFlags(str, Py_file_input, globals,
743 locals, &cf);
744 else
745 v = PyRun_String(str, Py_file_input, globals, locals);
746 Py_XDECREF(tmp);
747 }
748 if (v == NULL)
749 return NULL;
750 Py_DECREF(v);
751 Py_RETURN_NONE;
752}
753
754PyDoc_STRVAR(exec_doc,
755"exec(object[, globals[, locals]])\n\
756\n\
757Read and execute code from a object, which can be a string, a code\n\
758object or a file object.\n\
759The globals and locals are dictionaries, defaulting to the current\n\
760globals and locals. If only globals is given, locals defaults to it.");
761
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000762
Guido van Rossum79f25d91997-04-29 20:08:16 +0000763static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000764builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000765{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000766 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000767 PyObject *globals = Py_None, *locals = Py_None;
768 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000769 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000770 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000771 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000772
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000773 if (!PyArg_ParseTuple(args, "s|O!O:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000774 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000775 &PyDict_Type, &globals,
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000776 &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000777 return NULL;
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000778 if (locals != Py_None && !PyMapping_Check(locals)) {
779 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
780 return NULL;
781 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000782 if (globals == Py_None) {
783 globals = PyEval_GetGlobals();
784 if (locals == Py_None)
785 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000786 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000787 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000788 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000789 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
790 if (PyDict_SetItemString(globals, "__builtins__",
791 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000792 return NULL;
793 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000794
795 exists = 0;
796 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000797#if defined(PLAN9)
798 {
799 Dir *d;
800
801 if ((d = dirstat(filename))!=nil) {
802 if(d->mode & DMDIR)
803 werrstr("is a directory");
804 else
805 exists = 1;
806 free(d);
807 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000808 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000809#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000810 if (object_exists(filename)) {
811 if (isdir(filename))
812 errno = EISDIR;
813 else
814 exists = 1;
815 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000816#else /* standard Posix */
817 {
818 struct stat s;
819 if (stat(filename, &s) == 0) {
820 if (S_ISDIR(s.st_mode))
Andrew MacIntyreda4d6cb2004-03-29 11:53:38 +0000821# if defined(PYOS_OS2) && defined(PYCC_VACPP)
Martin v. Löwis3484a182002-03-09 12:07:51 +0000822 errno = EOS2ERR;
823# else
824 errno = EISDIR;
825# endif
826 else
827 exists = 1;
828 }
829 }
830#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000831
832 if (exists) {
833 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000834 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000835 Py_END_ALLOW_THREADS
836
837 if (fp == NULL) {
838 exists = 0;
839 }
840 }
841
842 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000843 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000844 return NULL;
845 }
Tim Peters5ba58662001-07-16 02:29:45 +0000846 cf.cf_flags = 0;
847 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000848 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000849 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000850 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000851 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000852 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000853 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000854}
855
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000856PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000857"execfile(filename[, globals[, locals]])\n\
858\n\
859Read and execute a Python script from a file.\n\
860The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000861globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000862
863
Guido van Rossum79f25d91997-04-29 20:08:16 +0000864static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000865builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000866{
Guido van Rossum950ff291998-06-29 13:38:57 +0000867 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000868 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000869
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000870 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000871 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000872#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000873 if (PyUnicode_Check(name)) {
874 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
875 if (name == NULL)
876 return NULL;
877 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000878#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000879
880 if (!PyString_Check(name)) {
881 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000882 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000883 return NULL;
884 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000885 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000886 if (result == NULL && dflt != NULL &&
887 PyErr_ExceptionMatches(PyExc_AttributeError))
888 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000889 PyErr_Clear();
890 Py_INCREF(dflt);
891 result = dflt;
892 }
893 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000894}
895
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000896PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000897"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000898\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000899Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
900When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000901exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000902
903
Guido van Rossum79f25d91997-04-29 20:08:16 +0000904static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000905builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000906{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000907 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000908
Guido van Rossum79f25d91997-04-29 20:08:16 +0000909 d = PyEval_GetGlobals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000910 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000911 return d;
912}
913
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000914PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000915"globals() -> dictionary\n\
916\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000917Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000918
919
Guido van Rossum79f25d91997-04-29 20:08:16 +0000920static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000921builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000922{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000923 PyObject *v;
924 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000925
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000926 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000927 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000928#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000929 if (PyUnicode_Check(name)) {
930 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
931 if (name == NULL)
932 return NULL;
933 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000934#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000935
936 if (!PyString_Check(name)) {
937 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000938 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000939 return NULL;
940 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000941 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000942 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000943 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000944 Py_INCREF(Py_False);
945 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000946 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000947 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000948 Py_INCREF(Py_True);
949 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000950}
951
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000952PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000953"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000954\n\
955Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000956(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000957
958
Guido van Rossum79f25d91997-04-29 20:08:16 +0000959static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000960builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000961{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000962 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000963}
964
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000965PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000966"id(object) -> integer\n\
967\n\
968Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000969simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000970
971
Guido van Rossum79f25d91997-04-29 20:08:16 +0000972static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000973builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000974{
975 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000976 PyObject *it; /* the iterator object */
977 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000978 } sequence;
979
Guido van Rossum79f25d91997-04-29 20:08:16 +0000980 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000981 sequence *seqs = NULL, *sqp;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000982 Py_ssize_t n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000983 register int i, j;
984
Guido van Rossum79f25d91997-04-29 20:08:16 +0000985 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000986 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000987 PyErr_SetString(PyExc_TypeError,
988 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000989 return NULL;
990 }
991
Guido van Rossum79f25d91997-04-29 20:08:16 +0000992 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000993 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000994
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000995 if (func == Py_None && n == 1) {
996 /* map(None, S) is the same as list(S). */
997 return PySequence_List(PyTuple_GetItem(args, 1));
998 }
999
Tim Peters4e9afdc2001-05-03 23:54:49 +00001000 /* Get space for sequence descriptors. Must NULL out the iterator
1001 * pointers so that jumping to Fail_2 later doesn't see trash.
1002 */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001003 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
1004 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +00001005 return NULL;
1006 }
1007 for (i = 0; i < n; ++i) {
1008 seqs[i].it = (PyObject*)NULL;
1009 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001010 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001011
Tim Peters4e9afdc2001-05-03 23:54:49 +00001012 /* Do a first pass to obtain iterators for the arguments, and set len
1013 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +00001014 */
Tim Peters4e9afdc2001-05-03 23:54:49 +00001015 len = 0;
1016 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
1017 PyObject *curseq;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001018 Py_ssize_t curlen;
Guido van Rossumad991772001-01-12 16:03:05 +00001019
Tim Peters4e9afdc2001-05-03 23:54:49 +00001020 /* Get iterator. */
1021 curseq = PyTuple_GetItem(args, i+1);
1022 sqp->it = PyObject_GetIter(curseq);
1023 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +00001024 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +00001025 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +00001026 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +00001027 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001028 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001029 goto Fail_2;
1030 }
1031
Tim Peters4e9afdc2001-05-03 23:54:49 +00001032 /* Update len. */
Armin Rigof5b3e362006-02-11 21:32:43 +00001033 curlen = _PyObject_LengthHint(curseq);
Raymond Hettinger77f3c872004-01-04 08:54:44 +00001034 if (curlen < 0) {
Raymond Hettingera710b332005-08-21 11:03:59 +00001035 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
1036 !PyErr_ExceptionMatches(PyExc_AttributeError)) {
1037 goto Fail_2;
1038 }
Raymond Hettinger77f3c872004-01-04 08:54:44 +00001039 PyErr_Clear();
Tim Peters4e9afdc2001-05-03 23:54:49 +00001040 curlen = 8; /* arbitrary */
Raymond Hettinger77f3c872004-01-04 08:54:44 +00001041 }
1042 if (curlen > len)
1043 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001044 }
1045
Tim Peters4e9afdc2001-05-03 23:54:49 +00001046 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001047 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001048 goto Fail_2;
1049
Tim Peters4e9afdc2001-05-03 23:54:49 +00001050 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +00001051 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001052 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001053 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001054
Guido van Rossum79f25d91997-04-29 20:08:16 +00001055 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +00001056 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001057 else if ((alist = PyTuple_New(n)) == NULL)
1058 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001059
1060 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001061 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001062 Py_INCREF(Py_None);
1063 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001064 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001065 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001066 item = PyIter_Next(sqp->it);
1067 if (item)
1068 ++numactive;
1069 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001070 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001071 Py_XDECREF(alist);
1072 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001073 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001074 Py_INCREF(Py_None);
1075 item = Py_None;
1076 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001077 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001078 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001079 if (alist)
1080 PyTuple_SET_ITEM(alist, j, item);
1081 else
Guido van Rossum2d951851994-08-29 12:52:16 +00001082 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001083 }
1084
Guido van Rossum32120311995-07-10 13:52:21 +00001085 if (!alist)
1086 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +00001087
Tim Peters4e9afdc2001-05-03 23:54:49 +00001088 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001089 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +00001090 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001091 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001092
Guido van Rossum79f25d91997-04-29 20:08:16 +00001093 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +00001094 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001095 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001096 value = PyEval_CallObject(func, alist);
1097 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001098 if (value == NULL)
1099 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001100 }
1101 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +00001102 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +00001103 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +00001104 if (status < 0)
1105 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001106 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001107 else if (PyList_SetItem(result, i, value) < 0)
1108 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001109 }
1110
Guido van Rossumfa4ac711998-07-10 17:37:30 +00001111 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
1112 goto Fail_1;
1113
Tim Peters4e9afdc2001-05-03 23:54:49 +00001114 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001115
Guido van Rossum12d12c51993-10-26 17:58:25 +00001116Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001117 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001118Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +00001119 result = NULL;
1120Succeed:
1121 assert(seqs);
1122 for (i = 0; i < n; ++i)
1123 Py_XDECREF(seqs[i].it);
1124 PyMem_DEL(seqs);
1125 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001126}
1127
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001128PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001129"map(function, sequence[, sequence, ...]) -> list\n\
1130\n\
1131Return a list of the results of applying the function to the items of\n\
1132the argument sequence(s). If more than one sequence is given, the\n\
1133function is called with an argument list consisting of the corresponding\n\
1134item of each sequence, substituting None for missing values when not all\n\
1135sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001136the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001137
1138
Guido van Rossum79f25d91997-04-29 20:08:16 +00001139static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +00001140builtin_next(PyObject *self, PyObject *args)
1141{
1142 PyObject *it, *res;
1143 PyObject *def = NULL;
1144
1145 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1146 return NULL;
1147 if (!PyIter_Check(it)) {
1148 PyErr_Format(PyExc_TypeError,
1149 "%.200s object is not an iterator", it->ob_type->tp_name);
1150 return NULL;
1151 }
1152
1153 res = (*it->ob_type->tp_iternext)(it);
1154 if (res == NULL) {
1155 if (def) {
1156 if (PyErr_Occurred() &&
1157 !PyErr_ExceptionMatches(PyExc_StopIteration))
1158 return NULL;
1159 PyErr_Clear();
1160 Py_INCREF(def);
1161 return def;
1162 } else if (PyErr_Occurred()) {
1163 return NULL;
1164 } else {
1165 PyErr_SetNone(PyExc_StopIteration);
1166 return NULL;
1167 }
1168 }
1169 return res;
1170}
1171
1172PyDoc_STRVAR(next_doc,
1173"next(iterator[, default])\n\
1174\n\
1175Return the next item from the iterator. If default is given and the iterator\n\
1176is exhausted, it is returned instead of raising StopIteration.");
1177
1178
1179static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001180builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001181{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001182 PyObject *v;
1183 PyObject *name;
1184 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001185
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001186 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001187 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001188 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001189 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001190 Py_INCREF(Py_None);
1191 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001192}
1193
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001194PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001195"setattr(object, name, value)\n\
1196\n\
1197Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001198``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001199
1200
Guido van Rossum79f25d91997-04-29 20:08:16 +00001201static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001202builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001203{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001204 PyObject *v;
1205 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001206
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001207 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001208 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001209 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001210 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001211 Py_INCREF(Py_None);
1212 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001213}
1214
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001215PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001216"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001217\n\
1218Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001219``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001220
1221
Guido van Rossum79f25d91997-04-29 20:08:16 +00001222static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001223builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001224{
Guido van Rossum9bfef441993-03-29 10:43:31 +00001225 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001226
Guido van Rossum79f25d91997-04-29 20:08:16 +00001227 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001228 if (x == -1)
1229 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001230 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001231}
1232
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001233PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001234"hash(object) -> integer\n\
1235\n\
1236Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001237the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001238
1239
Guido van Rossum79f25d91997-04-29 20:08:16 +00001240static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001241builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001242{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001243 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001244 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001245
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001246 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001247 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001248 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001249 "hex() argument can't be converted to hex");
1250 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001251 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001252 res = (*nb->nb_hex)(v);
1253 if (res && !PyString_Check(res)) {
1254 PyErr_Format(PyExc_TypeError,
1255 "__hex__ returned non-string (type %.200s)",
1256 res->ob_type->tp_name);
1257 Py_DECREF(res);
1258 return NULL;
1259 }
1260 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001261}
1262
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001263PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001264"hex(number) -> string\n\
1265\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001266Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001267
1268
Guido van Rossum79f25d91997-04-29 20:08:16 +00001269static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001270builtin_iter(PyObject *self, PyObject *args)
1271{
1272 PyObject *v, *w = NULL;
1273
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001274 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001275 return NULL;
1276 if (w == NULL)
1277 return PyObject_GetIter(v);
1278 if (!PyCallable_Check(v)) {
1279 PyErr_SetString(PyExc_TypeError,
1280 "iter(v, w): v must be callable");
1281 return NULL;
1282 }
1283 return PyCallIter_New(v, w);
1284}
1285
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001286PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001287"iter(collection) -> iterator\n\
1288iter(callable, sentinel) -> iterator\n\
1289\n\
1290Get an iterator from an object. In the first form, the argument must\n\
1291supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001292In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001293
1294
1295static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001296builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001297{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001298 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001299
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001300 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001301 if (res < 0 && PyErr_Occurred())
1302 return NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001303 return PyInt_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001304}
1305
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001306PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001307"len(object) -> integer\n\
1308\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001309Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001310
1311
Guido van Rossum79f25d91997-04-29 20:08:16 +00001312static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001313builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001314{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001315 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001316
Guido van Rossum79f25d91997-04-29 20:08:16 +00001317 d = PyEval_GetLocals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00001318 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001319 return d;
1320}
1321
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001322PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001323"locals() -> dictionary\n\
1324\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001325Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001326
1327
Guido van Rossum79f25d91997-04-29 20:08:16 +00001328static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001329min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001330{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001331 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001332 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001333
Guido van Rossum79f25d91997-04-29 20:08:16 +00001334 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001335 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001336 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001337 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001338
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001339 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1340 keyfunc = PyDict_GetItemString(kwds, "key");
1341 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001342 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001343 "%s() got an unexpected keyword argument", name);
1344 return NULL;
1345 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001346 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001347
Tim Petersc3074532001-05-03 07:00:32 +00001348 it = PyObject_GetIter(v);
1349 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001350 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001351
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001352 maxitem = NULL; /* the result */
1353 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001354 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001355 /* get the value from the key function */
1356 if (keyfunc != NULL) {
1357 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1358 if (val == NULL)
1359 goto Fail_it_item;
1360 }
1361 /* no key function; the value is the item */
1362 else {
1363 val = item;
1364 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001365 }
Tim Petersc3074532001-05-03 07:00:32 +00001366
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001367 /* maximum value and item are unset; set them */
1368 if (maxval == NULL) {
1369 maxitem = item;
1370 maxval = val;
1371 }
1372 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001373 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001374 int cmp = PyObject_RichCompareBool(val, maxval, op);
1375 if (cmp < 0)
1376 goto Fail_it_item_and_val;
1377 else if (cmp > 0) {
1378 Py_DECREF(maxval);
1379 Py_DECREF(maxitem);
1380 maxval = val;
1381 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001382 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001383 else {
1384 Py_DECREF(item);
1385 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001386 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001387 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001388 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001389 if (PyErr_Occurred())
1390 goto Fail_it;
1391 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001392 PyErr_Format(PyExc_ValueError,
1393 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001394 assert(maxitem == NULL);
1395 }
1396 else
1397 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001398 Py_DECREF(it);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001399 return maxitem;
1400
1401Fail_it_item_and_val:
1402 Py_DECREF(val);
1403Fail_it_item:
1404 Py_DECREF(item);
1405Fail_it:
1406 Py_XDECREF(maxval);
1407 Py_XDECREF(maxitem);
1408 Py_DECREF(it);
1409 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001410}
1411
Guido van Rossum79f25d91997-04-29 20:08:16 +00001412static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001413builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001414{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001415 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001416}
1417
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001418PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001419"min(iterable[, key=func]) -> value\n\
1420min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001421\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001422With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001423With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001424
1425
Guido van Rossum79f25d91997-04-29 20:08:16 +00001426static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001427builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001428{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001429 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001430}
1431
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001432PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001433"max(iterable[, key=func]) -> value\n\
1434max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001435\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001436With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001437With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001438
1439
Guido van Rossum79f25d91997-04-29 20:08:16 +00001440static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001441builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001442{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001443 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001444 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001445
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001446 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1447 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001448 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001449 "oct() argument can't be converted to oct");
1450 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001451 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001452 res = (*nb->nb_oct)(v);
1453 if (res && !PyString_Check(res)) {
1454 PyErr_Format(PyExc_TypeError,
1455 "__oct__ returned non-string (type %.200s)",
1456 res->ob_type->tp_name);
1457 Py_DECREF(res);
1458 return NULL;
1459 }
1460 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001461}
1462
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001463PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001464"oct(number) -> string\n\
1465\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001466Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001467
1468
Guido van Rossum79f25d91997-04-29 20:08:16 +00001469static PyObject *
Thomas Wouters477c8d52006-05-27 19:21:47 +00001470builtin_open(PyObject *self, PyObject *args, PyObject *kwds)
1471{
1472 return PyObject_Call((PyObject*)&PyFile_Type, args, kwds);
1473}
1474
1475PyDoc_STRVAR(open_doc,
1476"open(name[, mode[, buffering]]) -> file object\n\
1477\n\
1478Open a file using the file() type, returns a file object.");
1479
1480
1481static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001482builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001483{
Guido van Rossum09095f32000-03-10 23:00:52 +00001484 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001485 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001486
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001487 if (PyString_Check(obj)) {
1488 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001489 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001490 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001491 return PyInt_FromLong(ord);
1492 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001493#ifdef Py_USING_UNICODE
Guido van Rossum98f97462007-04-13 03:31:13 +00001494 }
1495 else if (PyUnicode_Check(obj)) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001496 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001497 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001498 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001499 return PyInt_FromLong(ord);
1500 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001501#endif
Guido van Rossum98f97462007-04-13 03:31:13 +00001502 }
1503 else if (PyBytes_Check(obj)) {
1504 /* XXX Hopefully this is temporary */
1505 size = PyBytes_GET_SIZE(obj);
1506 if (size == 1) {
1507 ord = (long)*PyBytes_AS_STRING(obj);
1508 return PyInt_FromLong(ord);
1509 }
1510 }
1511 else {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001512 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001513 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001514 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001515 return NULL;
1516 }
1517
Guido van Rossumad991772001-01-12 16:03:05 +00001518 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001519 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001520 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001521 size);
1522 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001523}
1524
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001525PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001526"ord(c) -> integer\n\
1527\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001528Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001529
1530
Guido van Rossum79f25d91997-04-29 20:08:16 +00001531static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001532builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001533{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001534 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001535
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001536 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001537 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001538 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001539}
1540
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001541PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001542"pow(x, y[, z]) -> number\n\
1543\n\
1544With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001545equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001546
1547
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001548
Guido van Rossum34343512006-11-30 22:13:52 +00001549static PyObject *
1550builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1551{
1552 static char *kwlist[] = {"sep", "end", "file", 0};
Georg Brandl257d3d92007-02-26 10:35:10 +00001553 static PyObject *dummy_args;
Guido van Rossum34343512006-11-30 22:13:52 +00001554 PyObject *sep = NULL, *end = NULL, *file = NULL;
1555 int i, err;
1556
Georg Brandl257d3d92007-02-26 10:35:10 +00001557 if (dummy_args == NULL) {
1558 if (!(dummy_args = PyTuple_New(0)))
1559 return NULL;
1560 }
Georg Brandl88fc6642007-02-09 21:28:07 +00001561 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
Guido van Rossum34343512006-11-30 22:13:52 +00001562 kwlist, &sep, &end, &file))
1563 return NULL;
1564 if (file == NULL || file == Py_None)
1565 file = PySys_GetObject("stdout");
1566
Georg Brandl16f3e032006-11-30 22:46:03 +00001567 if (sep && sep != Py_None && !PyString_Check(sep) &&
1568 !PyUnicode_Check(sep)) {
1569 PyErr_Format(PyExc_TypeError,
1570 "sep must be None, str or unicode, not %.200s",
1571 sep->ob_type->tp_name);
1572 return NULL;
1573 }
1574 if (end && end != Py_None && !PyString_Check(end) &&
1575 !PyUnicode_Check(end)) {
1576 PyErr_Format(PyExc_TypeError,
1577 "end must be None, str or unicode, not %.200s",
1578 end->ob_type->tp_name);
1579 return NULL;
1580 }
Guido van Rossum34343512006-11-30 22:13:52 +00001581
1582 for (i = 0; i < PyTuple_Size(args); i++) {
1583 if (i > 0) {
1584 if (sep == NULL || sep == Py_None)
1585 err = PyFile_WriteString(" ", file);
1586 else
1587 err = PyFile_WriteObject(sep, file,
1588 Py_PRINT_RAW);
1589 if (err)
1590 return NULL;
1591 }
1592 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1593 Py_PRINT_RAW);
1594 if (err)
1595 return NULL;
1596 }
1597
1598 if (end == NULL || end == Py_None)
1599 err = PyFile_WriteString("\n", file);
1600 else
1601 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1602 if (err)
1603 return NULL;
1604
1605 Py_RETURN_NONE;
1606}
1607
1608PyDoc_STRVAR(print_doc,
Guido van Rossum452bf512007-02-09 05:32:43 +00001609"print(value, ..., file=None, sep=' ', end='\\n')\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001610\n\
1611Prints the values to a stream, or to sys.stdout by default.\n\
1612Optional keyword arguments:\n\
1613file: a file-like object (stream); defaults to the current sys.stdout.\n\
1614sep: string inserted between values, default a space.\n\
1615end: string appended after the last value, default a newline.");
1616
1617
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001618/* Return number of items in range (lo, hi, step), when arguments are
1619 * PyInt or PyLong objects. step > 0 required. Return a value < 0 if
1620 * & only if the true value is too large to fit in a signed long.
1621 * Arguments MUST return 1 with either PyInt_Check() or
1622 * PyLong_Check(). Return -1 when there is an error.
1623 */
1624static long
1625get_len_of_range_longs(PyObject *lo, PyObject *hi, PyObject *step)
1626{
1627 /* -------------------------------------------------------------
1628 Algorithm is equal to that of get_len_of_range(), but it operates
1629 on PyObjects (which are assumed to be PyLong or PyInt objects).
1630 ---------------------------------------------------------------*/
1631 long n;
1632 PyObject *diff = NULL;
1633 PyObject *one = NULL;
1634 PyObject *tmp1 = NULL, *tmp2 = NULL, *tmp3 = NULL;
1635 /* holds sub-expression evaluations */
1636
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001637 /* If (lo >= hi), return length of 0 (or error). */
1638 n = PyObject_RichCompareBool(lo, hi, Py_LT);
1639 if (n <= 0)
1640 return n;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001641
1642 if ((one = PyLong_FromLong(1L)) == NULL)
1643 goto Fail;
1644
1645 if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL)
1646 goto Fail;
1647
1648 if ((diff = PyNumber_Subtract(tmp1, one)) == NULL)
1649 goto Fail;
1650
1651 if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL)
1652 goto Fail;
1653
1654 if ((tmp3 = PyNumber_Add(tmp2, one)) == NULL)
1655 goto Fail;
1656
1657 n = PyLong_AsLong(tmp3);
1658 if (PyErr_Occurred()) { /* Check for Overflow */
1659 PyErr_Clear();
1660 goto Fail;
1661 }
1662
1663 Py_DECREF(tmp3);
1664 Py_DECREF(tmp2);
1665 Py_DECREF(diff);
1666 Py_DECREF(tmp1);
1667 Py_DECREF(one);
1668 return n;
1669
1670 Fail:
1671 Py_XDECREF(tmp3);
1672 Py_XDECREF(tmp2);
1673 Py_XDECREF(diff);
1674 Py_XDECREF(tmp1);
1675 Py_XDECREF(one);
1676 return -1;
1677}
1678
1679/* An extension of builtin_range() that handles the case when PyLong
1680 * arguments are given. */
1681static PyObject *
1682handle_range_longs(PyObject *self, PyObject *args)
1683{
1684 PyObject *ilow;
Tim Peters874e1f72003-04-13 22:13:08 +00001685 PyObject *ihigh = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001686 PyObject *istep = NULL;
Tim Peters874e1f72003-04-13 22:13:08 +00001687
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001688 PyObject *curnum = NULL;
1689 PyObject *v = NULL;
1690 long bign;
1691 int i, n;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001692 int step_pos;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001693
Tim Peters874e1f72003-04-13 22:13:08 +00001694 PyObject *zero = PyLong_FromLong(0);
1695
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001696 if (zero == NULL)
1697 return NULL;
1698
Tim Peters874e1f72003-04-13 22:13:08 +00001699 if (!PyArg_UnpackTuple(args, "range", 1, 3, &ilow, &ihigh, &istep)) {
1700 Py_DECREF(zero);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001701 return NULL;
1702 }
1703
Tim Peters874e1f72003-04-13 22:13:08 +00001704 /* Figure out which way we were called, supply defaults, and be
1705 * sure to incref everything so that the decrefs at the end
1706 * are correct.
1707 */
1708 assert(ilow != NULL);
1709 if (ihigh == NULL) {
1710 /* only 1 arg -- it's the upper limit */
1711 ihigh = ilow;
1712 ilow = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001713 }
Tim Peters874e1f72003-04-13 22:13:08 +00001714 assert(ihigh != NULL);
1715 Py_INCREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001716
Tim Peters874e1f72003-04-13 22:13:08 +00001717 /* ihigh correct now; do ilow */
1718 if (ilow == NULL)
1719 ilow = zero;
1720 Py_INCREF(ilow);
1721
1722 /* ilow and ihigh correct now; do istep */
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001723 if (istep == NULL) {
1724 istep = PyLong_FromLong(1L);
1725 if (istep == NULL)
1726 goto Fail;
1727 }
1728 else {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001729 Py_INCREF(istep);
1730 }
1731
Tim Peters874e1f72003-04-13 22:13:08 +00001732 if (!PyInt_Check(ilow) && !PyLong_Check(ilow)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001733 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001734 "range() integer start argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001735 ilow->ob_type->tp_name);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001736 goto Fail;
1737 }
1738
Tim Peters874e1f72003-04-13 22:13:08 +00001739 if (!PyInt_Check(ihigh) && !PyLong_Check(ihigh)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001740 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001741 "range() integer end argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001742 ihigh->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001743 goto Fail;
1744 }
1745
1746 if (!PyInt_Check(istep) && !PyLong_Check(istep)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001747 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001748 "range() integer step argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001749 istep->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001750 goto Fail;
1751 }
1752
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001753 step_pos = PyObject_RichCompareBool(istep, zero, Py_GT);
1754 if (step_pos < 0)
Tim Peters874e1f72003-04-13 22:13:08 +00001755 goto Fail;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001756 if (step_pos)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001757 bign = get_len_of_range_longs(ilow, ihigh, istep);
1758 else {
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001759 int step_zero = PyObject_RichCompareBool(istep, zero, Py_EQ);
Guido van Rossum93a66922006-08-24 02:10:21 +00001760 PyObject *neg_istep;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001761 if (step_zero < 0)
1762 goto Fail;
1763 if (step_zero) {
1764 PyErr_SetString(PyExc_ValueError,
1765 "range() step argument must not be zero");
1766 goto Fail;
1767 }
Guido van Rossum93a66922006-08-24 02:10:21 +00001768 neg_istep = PyNumber_Negative(istep);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001769 if (neg_istep == NULL)
1770 goto Fail;
1771 bign = get_len_of_range_longs(ihigh, ilow, neg_istep);
1772 Py_DECREF(neg_istep);
1773 }
1774
1775 n = (int)bign;
1776 if (bign < 0 || (long)n != bign) {
1777 PyErr_SetString(PyExc_OverflowError,
1778 "range() result has too many items");
1779 goto Fail;
1780 }
1781
1782 v = PyList_New(n);
1783 if (v == NULL)
1784 goto Fail;
1785
1786 curnum = ilow;
1787 Py_INCREF(curnum);
1788
1789 for (i = 0; i < n; i++) {
1790 PyObject *w = PyNumber_Long(curnum);
1791 PyObject *tmp_num;
1792 if (w == NULL)
1793 goto Fail;
1794
1795 PyList_SET_ITEM(v, i, w);
1796
1797 tmp_num = PyNumber_Add(curnum, istep);
1798 if (tmp_num == NULL)
1799 goto Fail;
1800
1801 Py_DECREF(curnum);
1802 curnum = tmp_num;
1803 }
Tim Peters874e1f72003-04-13 22:13:08 +00001804 Py_DECREF(ilow);
1805 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001806 Py_DECREF(istep);
1807 Py_DECREF(zero);
Tim Peters874e1f72003-04-13 22:13:08 +00001808 Py_DECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001809 return v;
1810
1811 Fail:
Tim Peters874e1f72003-04-13 22:13:08 +00001812 Py_DECREF(ilow);
1813 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001814 Py_XDECREF(istep);
Tim Peters874e1f72003-04-13 22:13:08 +00001815 Py_DECREF(zero);
1816 Py_XDECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001817 Py_XDECREF(v);
1818 return NULL;
1819}
1820
Guido van Rossum124eff01999-02-23 16:11:01 +00001821/* Return number of items in range/xrange (lo, hi, step). step > 0
1822 * required. Return a value < 0 if & only if the true value is too
1823 * large to fit in a signed long.
1824 */
1825static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001826get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001827{
1828 /* -------------------------------------------------------------
1829 If lo >= hi, the range is empty.
1830 Else if n values are in the range, the last one is
1831 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1832 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1833 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1834 the RHS is non-negative and so truncation is the same as the
1835 floor. Letting M be the largest positive long, the worst case
1836 for the RHS numerator is hi=M, lo=-M-1, and then
1837 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1838 precision to compute the RHS exactly.
1839 ---------------------------------------------------------------*/
1840 long n = 0;
1841 if (lo < hi) {
1842 unsigned long uhi = (unsigned long)hi;
1843 unsigned long ulo = (unsigned long)lo;
1844 unsigned long diff = uhi - ulo - 1;
1845 n = (long)(diff / (unsigned long)step + 1);
1846 }
1847 return n;
1848}
1849
Guido van Rossum79f25d91997-04-29 20:08:16 +00001850static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001851builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001852{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001853 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001854 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001855 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001856
Guido van Rossum79f25d91997-04-29 20:08:16 +00001857 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001858
Guido van Rossum79f25d91997-04-29 20:08:16 +00001859 if (PyTuple_Size(args) <= 1) {
1860 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001861 "l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001862 &ihigh)) {
1863 PyErr_Clear();
1864 return handle_range_longs(self, args);
1865 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001866 }
1867 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001868 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001869 "ll|l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001870 &ilow, &ihigh, &istep)) {
1871 PyErr_Clear();
1872 return handle_range_longs(self, args);
1873 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001874 }
1875 if (istep == 0) {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001876 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001877 "range() step argument must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001878 return NULL;
1879 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001880 if (istep > 0)
1881 bign = get_len_of_range(ilow, ihigh, istep);
1882 else
1883 bign = get_len_of_range(ihigh, ilow, -istep);
1884 n = (int)bign;
1885 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001886 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001887 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001888 return NULL;
1889 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001890 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001891 if (v == NULL)
1892 return NULL;
1893 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001894 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001895 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001896 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001897 return NULL;
1898 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001899 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001900 ilow += istep;
1901 }
1902 return v;
1903}
1904
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001905PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001906"range([start,] stop[, step]) -> list of integers\n\
1907\n\
1908Return a list containing an arithmetic progression of integers.\n\
1909range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1910When step is given, it specifies the increment (or decrement).\n\
1911For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001912These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001913
Guido van Rossuma88a0332007-02-26 16:59:55 +00001914static PyObject *
1915builtin_input(PyObject *self, PyObject *args)
1916{
1917 PyObject *v = NULL;
1918 PyObject *fin = PySys_GetObject("stdin");
1919 PyObject *fout = PySys_GetObject("stdout");
1920
1921 if (!PyArg_UnpackTuple(args, "input", 0, 1, &v))
1922 return NULL;
1923
1924 if (fin == NULL) {
1925 PyErr_SetString(PyExc_RuntimeError, "input: lost sys.stdin");
1926 return NULL;
1927 }
1928 if (fout == NULL) {
1929 PyErr_SetString(PyExc_RuntimeError, "input: lost sys.stdout");
1930 return NULL;
1931 }
1932 if (PyFile_AsFile(fin) && PyFile_AsFile(fout)
1933 && isatty(fileno(PyFile_AsFile(fin)))
1934 && isatty(fileno(PyFile_AsFile(fout)))) {
1935 PyObject *po;
1936 char *prompt;
1937 char *s;
1938 PyObject *result;
1939 if (v != NULL) {
1940 po = PyObject_Str(v);
1941 if (po == NULL)
1942 return NULL;
1943 prompt = PyString_AsString(po);
1944 if (prompt == NULL)
1945 return NULL;
1946 }
1947 else {
1948 po = NULL;
1949 prompt = "";
1950 }
1951 s = PyOS_Readline(PyFile_AsFile(fin), PyFile_AsFile(fout),
1952 prompt);
1953 Py_XDECREF(po);
1954 if (s == NULL) {
1955 if (!PyErr_Occurred())
1956 PyErr_SetNone(PyExc_KeyboardInterrupt);
1957 return NULL;
1958 }
1959 if (*s == '\0') {
1960 PyErr_SetNone(PyExc_EOFError);
1961 result = NULL;
1962 }
1963 else { /* strip trailing '\n' */
1964 size_t len = strlen(s);
1965 if (len > PY_SSIZE_T_MAX) {
1966 PyErr_SetString(PyExc_OverflowError,
1967 "input: input too long");
1968 result = NULL;
1969 }
1970 else {
1971 result = PyString_FromStringAndSize(s, len-1);
1972 }
1973 }
1974 PyMem_FREE(s);
1975 return result;
1976 }
1977 if (v != NULL) {
1978 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
1979 return NULL;
1980 }
1981 return PyFile_GetLine(fin, -1);
1982}
1983
1984PyDoc_STRVAR(input_doc,
1985"input([prompt]) -> string\n\
1986\n\
1987Read a string from standard input. The trailing newline is stripped.\n\
1988If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1989On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1990is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001991
Guido van Rossum79f25d91997-04-29 20:08:16 +00001992static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001993builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001994{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001995 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001996}
1997
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001998PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001999"reload(module) -> module\n\
2000\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002001Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002002
2003
Guido van Rossum79f25d91997-04-29 20:08:16 +00002004static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002005builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00002006{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002007 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00002008}
2009
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002010PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002011"repr(object) -> string\n\
2012\n\
2013Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002014For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002015
2016
Guido van Rossum79f25d91997-04-29 20:08:16 +00002017static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002018builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002019{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002020 double number;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002021 double f;
2022 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002023 int i;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002024 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002025
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002026 if (!PyArg_ParseTupleAndKeywords(args, kwds, "d|i:round",
2027 kwlist, &number, &ndigits))
2028 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002029 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00002030 i = abs(ndigits);
2031 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002032 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00002033 if (ndigits < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002034 number /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002035 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002036 number *= f;
2037 if (number >= 0.0)
2038 number = floor(number + 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00002039 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002040 number = ceil(number - 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00002041 if (ndigits < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002042 number *= f;
Guido van Rossum1e162d31998-05-09 14:42:25 +00002043 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002044 number /= f;
2045 return PyFloat_FromDouble(number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002046}
2047
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002048PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002049"round(number[, ndigits]) -> floating point number\n\
2050\n\
2051Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002052This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002053
Raymond Hettinger64958a12003-12-17 20:43:33 +00002054static PyObject *
2055builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
2056{
2057 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
2058 PyObject *callable;
Martin v. Löwis15e62742006-02-27 16:46:16 +00002059 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00002060 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002061
Neal Norwitz6f0d4792005-12-15 06:40:36 +00002062 /* args 1-4 should match listsort in Objects/listobject.c */
Armin Rigo71d7e702005-09-20 18:13:03 +00002063 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
2064 kwlist, &seq, &compare, &keyfunc, &reverse))
2065 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002066
2067 newlist = PySequence_List(seq);
2068 if (newlist == NULL)
2069 return NULL;
2070
2071 callable = PyObject_GetAttrString(newlist, "sort");
2072 if (callable == NULL) {
2073 Py_DECREF(newlist);
2074 return NULL;
2075 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002076
Raymond Hettinger64958a12003-12-17 20:43:33 +00002077 newargs = PyTuple_GetSlice(args, 1, 4);
2078 if (newargs == NULL) {
2079 Py_DECREF(newlist);
2080 Py_DECREF(callable);
2081 return NULL;
2082 }
2083
2084 v = PyObject_Call(callable, newargs, kwds);
2085 Py_DECREF(newargs);
2086 Py_DECREF(callable);
2087 if (v == NULL) {
2088 Py_DECREF(newlist);
2089 return NULL;
2090 }
2091 Py_DECREF(v);
2092 return newlist;
2093}
2094
2095PyDoc_STRVAR(sorted_doc,
2096"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002097
Guido van Rossum79f25d91997-04-29 20:08:16 +00002098static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002099builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002100{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002101 PyObject *v = NULL;
2102 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002103
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002104 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002105 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00002106 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002107 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002108 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002109 if (!PyErr_Occurred())
2110 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002111 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002112 }
2113 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00002114 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00002115 }
2116 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002117 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00002118 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002119 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00002120 "vars() argument must have __dict__ attribute");
2121 return NULL;
2122 }
2123 }
2124 return d;
2125}
2126
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002127PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002128"vars([object]) -> dictionary\n\
2129\n\
2130Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002131With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002132
Alex Martellia70b1912003-04-22 08:12:33 +00002133
2134static PyObject*
2135builtin_sum(PyObject *self, PyObject *args)
2136{
2137 PyObject *seq;
2138 PyObject *result = NULL;
2139 PyObject *temp, *item, *iter;
2140
Raymond Hettinger5cf63942003-10-25 06:41:37 +00002141 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00002142 return NULL;
2143
2144 iter = PyObject_GetIter(seq);
2145 if (iter == NULL)
2146 return NULL;
2147
2148 if (result == NULL) {
2149 result = PyInt_FromLong(0);
2150 if (result == NULL) {
2151 Py_DECREF(iter);
2152 return NULL;
2153 }
2154 } else {
2155 /* reject string values for 'start' parameter */
2156 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
2157 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002158 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00002159 Py_DECREF(iter);
2160 return NULL;
2161 }
Alex Martelli41c9f882003-04-22 09:24:48 +00002162 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00002163 }
2164
2165 for(;;) {
2166 item = PyIter_Next(iter);
2167 if (item == NULL) {
2168 /* error, or end-of-sequence */
2169 if (PyErr_Occurred()) {
2170 Py_DECREF(result);
2171 result = NULL;
2172 }
2173 break;
2174 }
Alex Martellia253e182003-10-25 23:24:14 +00002175 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00002176 Py_DECREF(result);
2177 Py_DECREF(item);
2178 result = temp;
2179 if (result == NULL)
2180 break;
2181 }
2182 Py_DECREF(iter);
2183 return result;
2184}
2185
2186PyDoc_STRVAR(sum_doc,
Thomas Wouters89f507f2006-12-13 04:49:30 +00002187"sum(sequence[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00002188\n\
2189Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00002190of parameter 'start' (which defaults to 0). When the sequence is\n\
2191empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00002192
2193
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002194static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002195builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002196{
2197 PyObject *inst;
2198 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00002199 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002200
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002201 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002202 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002203
Guido van Rossum823649d2001-03-21 18:40:58 +00002204 retval = PyObject_IsInstance(inst, cls);
2205 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00002206 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002207 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002208}
2209
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002210PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002211"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002212\n\
2213Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002214With a type as second argument, return whether that is the object's type.\n\
2215The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002216isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002217
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002218
2219static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002220builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002221{
2222 PyObject *derived;
2223 PyObject *cls;
2224 int retval;
2225
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002226 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002227 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002228
Guido van Rossum823649d2001-03-21 18:40:58 +00002229 retval = PyObject_IsSubclass(derived, cls);
2230 if (retval < 0)
2231 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002232 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002233}
2234
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002235PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002236"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002237\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002238Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2239When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2240is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002241
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002242
Barry Warsawbd599b52000-08-03 15:45:29 +00002243static PyObject*
2244builtin_zip(PyObject *self, PyObject *args)
2245{
Guido van Rossumb65fb332006-08-25 23:26:40 +00002246 /* args must be a tuple */
2247 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00002248
Guido van Rossumb65fb332006-08-25 23:26:40 +00002249 return _PyZip_CreateIter(args);
Barry Warsawbd599b52000-08-03 15:45:29 +00002250}
2251
2252
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002253PyDoc_STRVAR(zip_doc,
Guido van Rossum801f0d72006-08-24 19:48:10 +00002254"zip(it1 [, it2 [...]]) -> iter([(it1[0], it2[0] ...), ...])\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002255\n\
Guido van Rossum801f0d72006-08-24 19:48:10 +00002256Return an iterator yielding tuples, where each tuple contains the\n\
2257corresponding element from each of the argument iterables.\n\
2258The returned iterator ends when the shortest argument iterable is exhausted.\n\
2259NOTE: This is implemented using itertools.izip().");
Barry Warsawbd599b52000-08-03 15:45:29 +00002260
2261
Guido van Rossum79f25d91997-04-29 20:08:16 +00002262static PyMethodDef builtin_methods[] = {
Guido van Rossum52cc1d82007-03-18 15:41:51 +00002263 {"__build_class__", (PyCFunction)builtin___build_class__,
2264 METH_VARARGS | METH_KEYWORDS, build_class_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002265 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002266 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002267 {"all", builtin_all, METH_O, all_doc},
2268 {"any", builtin_any, METH_O, any_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002269 {"callable", builtin_callable, METH_O, callable_doc},
2270 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2271 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002272 {"compile", builtin_compile, METH_VARARGS, compile_doc},
2273 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2274 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2275 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2276 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00002277 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002278 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
2279 {"filter", builtin_filter, METH_VARARGS, filter_doc},
2280 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2281 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2282 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2283 {"hash", builtin_hash, METH_O, hash_doc},
2284 {"hex", builtin_hex, METH_O, hex_doc},
2285 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00002286 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002287 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2288 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2289 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2290 {"len", builtin_len, METH_O, len_doc},
2291 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2292 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002293 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2294 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandla18af4e2007-04-21 15:47:16 +00002295 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002296 {"oct", builtin_oct, METH_O, oct_doc},
Thomas Wouters477c8d52006-05-27 19:21:47 +00002297 {"open", (PyCFunction)builtin_open, METH_VARARGS | METH_KEYWORDS, open_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002298 {"ord", builtin_ord, METH_O, ord_doc},
2299 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00002300 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002301 {"range", builtin_range, METH_VARARGS, range_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002302 {"reload", builtin_reload, METH_O, reload_doc},
2303 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002304 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002305 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002306 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002307 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002308#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002309 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002310#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002311 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002312 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002313 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002314};
2315
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002316PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002317"Built-in functions, exceptions, and other objects.\n\
2318\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002319Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002320
Guido van Rossum25ce5661997-08-02 03:10:38 +00002321PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002322_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002323{
Fred Drake5550de32000-06-20 04:54:19 +00002324 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002325 mod = Py_InitModule4("__builtin__", builtin_methods,
2326 builtin_doc, (PyObject *)NULL,
2327 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002328 if (mod == NULL)
2329 return NULL;
2330 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002331
Tim Peters7571a0f2003-03-23 17:52:28 +00002332#ifdef Py_TRACE_REFS
2333 /* __builtin__ exposes a number of statically allocated objects
2334 * that, before this code was added in 2.3, never showed up in
2335 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2336 * result, programs leaking references to None and False (etc)
2337 * couldn't be diagnosed by examining sys.getobjects(0).
2338 */
2339#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2340#else
2341#define ADD_TO_ALL(OBJECT) (void)0
2342#endif
2343
Tim Peters4b7625e2001-09-13 21:37:17 +00002344#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002345 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2346 return NULL; \
2347 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002348
2349 SETBUILTIN("None", Py_None);
2350 SETBUILTIN("Ellipsis", Py_Ellipsis);
2351 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002352 SETBUILTIN("False", Py_False);
2353 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00002354 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002355 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002356 SETBUILTIN("buffer", &PyBuffer_Type);
Guido van Rossum4dfe8a12006-04-22 23:28:04 +00002357 SETBUILTIN("bytes", &PyBytes_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002358 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002359#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002360 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002361#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002362 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002363 SETBUILTIN("enumerate", &PyEnum_Type);
Thomas Wouters477c8d52006-05-27 19:21:47 +00002364 SETBUILTIN("file", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002365 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002366 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002367 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00002368 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002369 SETBUILTIN("list", &PyList_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002370 SETBUILTIN("object", &PyBaseObject_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002371 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002372 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002373 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002374 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2375 SETBUILTIN("str", &PyString_Type);
2376 SETBUILTIN("super", &PySuper_Type);
2377 SETBUILTIN("tuple", &PyTuple_Type);
2378 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00002379 SETBUILTIN("xrange", &PyRange_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002380#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00002381 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002382#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00002383 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002384 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2385 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002386 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002387 }
2388 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002389
Guido van Rossum25ce5661997-08-02 03:10:38 +00002390 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002391#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002392#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002393}
2394
Guido van Rossume77a7571993-11-03 15:01:26 +00002395/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002396
Guido van Rossum79f25d91997-04-29 20:08:16 +00002397static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002398filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002399{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002400 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002401 Py_ssize_t i, j;
2402 Py_ssize_t len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002403
Guido van Rossumb7b45621995-08-04 04:07:45 +00002404 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002405 if (PyTuple_CheckExact(tuple))
2406 Py_INCREF(tuple);
2407 else
2408 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002409 return tuple;
2410 }
2411
Guido van Rossum79f25d91997-04-29 20:08:16 +00002412 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002413 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002414
Guido van Rossum12d12c51993-10-26 17:58:25 +00002415 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002416 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002417 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002418
Walter Dörwald8dd19322003-02-10 17:36:40 +00002419 if (tuple->ob_type->tp_as_sequence &&
2420 tuple->ob_type->tp_as_sequence->sq_item) {
2421 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002422 if (item == NULL)
2423 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002424 } else {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002425 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002426 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002427 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002428 if (func == Py_None) {
2429 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002430 good = item;
2431 }
2432 else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002433 PyObject *arg = PyTuple_Pack(1, item);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002434 if (arg == NULL) {
2435 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002436 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002437 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002438 good = PyEval_CallObject(func, arg);
2439 Py_DECREF(arg);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002440 if (good == NULL) {
2441 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002442 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002443 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002444 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002445 ok = PyObject_IsTrue(good);
2446 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002447 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002448 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002449 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002450 }
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002451 else
2452 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002453 }
2454
Tim Peters4324aa32001-05-28 22:30:08 +00002455 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002456 return NULL;
2457
Guido van Rossum12d12c51993-10-26 17:58:25 +00002458 return result;
2459
Guido van Rossum12d12c51993-10-26 17:58:25 +00002460Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002461 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002462 return NULL;
2463}
2464
2465
Guido van Rossume77a7571993-11-03 15:01:26 +00002466/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002467
Guido van Rossum79f25d91997-04-29 20:08:16 +00002468static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002469filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002470{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002471 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002472 Py_ssize_t i, j;
2473 Py_ssize_t len = PyString_Size(strobj);
2474 Py_ssize_t outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002475
Guido van Rossum79f25d91997-04-29 20:08:16 +00002476 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002477 /* If it's a real string we can return the original,
2478 * as no character is ever false and __getitem__
2479 * does return this character. If it's a subclass
2480 * we must go through the __getitem__ loop */
2481 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002482 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002483 return strobj;
2484 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002485 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002486 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002487 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002488
Guido van Rossum12d12c51993-10-26 17:58:25 +00002489 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002490 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002491 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002492
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002493 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2494 if (item == NULL)
2495 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002496 if (func==Py_None) {
2497 ok = 1;
2498 } else {
2499 PyObject *arg, *good;
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002500 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002501 if (arg == NULL) {
2502 Py_DECREF(item);
2503 goto Fail_1;
2504 }
2505 good = PyEval_CallObject(func, arg);
2506 Py_DECREF(arg);
2507 if (good == NULL) {
2508 Py_DECREF(item);
2509 goto Fail_1;
2510 }
2511 ok = PyObject_IsTrue(good);
2512 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00002513 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002514 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002515 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002516 if (!PyString_Check(item)) {
2517 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2518 " __getitem__ returned different type");
2519 Py_DECREF(item);
2520 goto Fail_1;
2521 }
2522 reslen = PyString_GET_SIZE(item);
2523 if (reslen == 1) {
2524 PyString_AS_STRING(result)[j++] =
2525 PyString_AS_STRING(item)[0];
2526 } else {
2527 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002528 Py_ssize_t need = j + reslen + len-i-1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002529 if (need > outlen) {
2530 /* overallocate, to avoid reallocations */
2531 if (need<2*outlen)
2532 need = 2*outlen;
2533 if (_PyString_Resize(&result, need)) {
2534 Py_DECREF(item);
2535 return NULL;
2536 }
2537 outlen = need;
2538 }
2539 memcpy(
2540 PyString_AS_STRING(result) + j,
2541 PyString_AS_STRING(item),
2542 reslen
2543 );
2544 j += reslen;
2545 }
2546 }
Tim Peters388ed082001-04-07 20:34:48 +00002547 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002548 }
2549
Walter Dörwald903f1e02003-02-04 16:28:00 +00002550 if (j < outlen)
Tim Peters5de98422002-04-27 18:44:32 +00002551 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002552
Guido van Rossum12d12c51993-10-26 17:58:25 +00002553 return result;
2554
Guido van Rossum12d12c51993-10-26 17:58:25 +00002555Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002556 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002557 return NULL;
2558}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002559
2560#ifdef Py_USING_UNICODE
2561/* Helper for filter(): filter a Unicode object through a function */
2562
2563static PyObject *
2564filterunicode(PyObject *func, PyObject *strobj)
2565{
2566 PyObject *result;
Martin v. Löwis725507b2006-03-07 12:08:51 +00002567 register Py_ssize_t i, j;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002568 Py_ssize_t len = PyUnicode_GetSize(strobj);
2569 Py_ssize_t outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002570
2571 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002572 /* If it's a real string we can return the original,
2573 * as no character is ever false and __getitem__
2574 * does return this character. If it's a subclass
2575 * we must go through the __getitem__ loop */
2576 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002577 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002578 return strobj;
2579 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002580 }
2581 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2582 return NULL;
2583
2584 for (i = j = 0; i < len; ++i) {
2585 PyObject *item, *arg, *good;
2586 int ok;
2587
2588 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2589 if (item == NULL)
2590 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002591 if (func == Py_None) {
2592 ok = 1;
2593 } else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002594 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002595 if (arg == NULL) {
2596 Py_DECREF(item);
2597 goto Fail_1;
2598 }
2599 good = PyEval_CallObject(func, arg);
2600 Py_DECREF(arg);
2601 if (good == NULL) {
2602 Py_DECREF(item);
2603 goto Fail_1;
2604 }
2605 ok = PyObject_IsTrue(good);
2606 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002607 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002608 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002609 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002610 if (!PyUnicode_Check(item)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002611 PyErr_SetString(PyExc_TypeError,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002612 "can't filter unicode to unicode:"
2613 " __getitem__ returned different type");
Walter Dörwald903f1e02003-02-04 16:28:00 +00002614 Py_DECREF(item);
2615 goto Fail_1;
2616 }
2617 reslen = PyUnicode_GET_SIZE(item);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002618 if (reslen == 1)
Walter Dörwald903f1e02003-02-04 16:28:00 +00002619 PyUnicode_AS_UNICODE(result)[j++] =
2620 PyUnicode_AS_UNICODE(item)[0];
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002621 else {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002622 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002623 Py_ssize_t need = j + reslen + len - i - 1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002624 if (need > outlen) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002625 /* overallocate,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002626 to avoid reallocations */
2627 if (need < 2 * outlen)
2628 need = 2 * outlen;
Jeremy Hylton364f6be2003-09-16 03:17:16 +00002629 if (PyUnicode_Resize(
2630 &result, need) < 0) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002631 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002632 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002633 }
2634 outlen = need;
2635 }
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002636 memcpy(PyUnicode_AS_UNICODE(result) + j,
2637 PyUnicode_AS_UNICODE(item),
2638 reslen*sizeof(Py_UNICODE));
Walter Dörwald903f1e02003-02-04 16:28:00 +00002639 j += reslen;
2640 }
2641 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002642 Py_DECREF(item);
2643 }
2644
Walter Dörwald903f1e02003-02-04 16:28:00 +00002645 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002646 PyUnicode_Resize(&result, j);
2647
2648 return result;
2649
2650Fail_1:
2651 Py_DECREF(result);
2652 return NULL;
2653}
2654#endif