blob: 4aa9c6290d32a1994eefc2e6f725a3ad768eda2b [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 *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001140builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001141{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001142 PyObject *v;
1143 PyObject *name;
1144 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001145
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001146 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001147 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001148 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001149 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001150 Py_INCREF(Py_None);
1151 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001152}
1153
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001154PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001155"setattr(object, name, value)\n\
1156\n\
1157Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001158``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001159
1160
Guido van Rossum79f25d91997-04-29 20:08:16 +00001161static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001162builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001163{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001164 PyObject *v;
1165 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001166
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001167 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001168 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001169 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001170 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001171 Py_INCREF(Py_None);
1172 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001173}
1174
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001175PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001176"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001177\n\
1178Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001179``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001180
1181
Guido van Rossum79f25d91997-04-29 20:08:16 +00001182static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001183builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001184{
Guido van Rossum9bfef441993-03-29 10:43:31 +00001185 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001186
Guido van Rossum79f25d91997-04-29 20:08:16 +00001187 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001188 if (x == -1)
1189 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001190 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001191}
1192
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001193PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001194"hash(object) -> integer\n\
1195\n\
1196Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001197the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001198
1199
Guido van Rossum79f25d91997-04-29 20:08:16 +00001200static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001201builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001202{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001203 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001204 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001205
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001206 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001207 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001208 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001209 "hex() argument can't be converted to hex");
1210 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001211 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001212 res = (*nb->nb_hex)(v);
1213 if (res && !PyString_Check(res)) {
1214 PyErr_Format(PyExc_TypeError,
1215 "__hex__ returned non-string (type %.200s)",
1216 res->ob_type->tp_name);
1217 Py_DECREF(res);
1218 return NULL;
1219 }
1220 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001221}
1222
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001223PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001224"hex(number) -> string\n\
1225\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001226Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001227
1228
Guido van Rossum79f25d91997-04-29 20:08:16 +00001229static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001230builtin_iter(PyObject *self, PyObject *args)
1231{
1232 PyObject *v, *w = NULL;
1233
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001234 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001235 return NULL;
1236 if (w == NULL)
1237 return PyObject_GetIter(v);
1238 if (!PyCallable_Check(v)) {
1239 PyErr_SetString(PyExc_TypeError,
1240 "iter(v, w): v must be callable");
1241 return NULL;
1242 }
1243 return PyCallIter_New(v, w);
1244}
1245
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001246PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001247"iter(collection) -> iterator\n\
1248iter(callable, sentinel) -> iterator\n\
1249\n\
1250Get an iterator from an object. In the first form, the argument must\n\
1251supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001252In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001253
1254
1255static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001256builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001257{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001258 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001259
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001260 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001261 if (res < 0 && PyErr_Occurred())
1262 return NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001263 return PyInt_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001264}
1265
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001266PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001267"len(object) -> integer\n\
1268\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001269Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001270
1271
Guido van Rossum79f25d91997-04-29 20:08:16 +00001272static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001273builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001274{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001275 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001276
Guido van Rossum79f25d91997-04-29 20:08:16 +00001277 d = PyEval_GetLocals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00001278 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001279 return d;
1280}
1281
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001282PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001283"locals() -> dictionary\n\
1284\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001285Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001286
1287
Guido van Rossum79f25d91997-04-29 20:08:16 +00001288static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001289min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001290{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001291 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001292 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001293
Guido van Rossum79f25d91997-04-29 20:08:16 +00001294 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001295 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001296 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001297 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001298
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001299 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1300 keyfunc = PyDict_GetItemString(kwds, "key");
1301 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001302 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001303 "%s() got an unexpected keyword argument", name);
1304 return NULL;
1305 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001306 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001307
Tim Petersc3074532001-05-03 07:00:32 +00001308 it = PyObject_GetIter(v);
1309 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001310 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001311
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001312 maxitem = NULL; /* the result */
1313 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001314 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001315 /* get the value from the key function */
1316 if (keyfunc != NULL) {
1317 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1318 if (val == NULL)
1319 goto Fail_it_item;
1320 }
1321 /* no key function; the value is the item */
1322 else {
1323 val = item;
1324 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001325 }
Tim Petersc3074532001-05-03 07:00:32 +00001326
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001327 /* maximum value and item are unset; set them */
1328 if (maxval == NULL) {
1329 maxitem = item;
1330 maxval = val;
1331 }
1332 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001333 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001334 int cmp = PyObject_RichCompareBool(val, maxval, op);
1335 if (cmp < 0)
1336 goto Fail_it_item_and_val;
1337 else if (cmp > 0) {
1338 Py_DECREF(maxval);
1339 Py_DECREF(maxitem);
1340 maxval = val;
1341 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001342 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001343 else {
1344 Py_DECREF(item);
1345 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001346 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001347 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001348 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001349 if (PyErr_Occurred())
1350 goto Fail_it;
1351 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001352 PyErr_Format(PyExc_ValueError,
1353 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001354 assert(maxitem == NULL);
1355 }
1356 else
1357 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001358 Py_DECREF(it);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001359 return maxitem;
1360
1361Fail_it_item_and_val:
1362 Py_DECREF(val);
1363Fail_it_item:
1364 Py_DECREF(item);
1365Fail_it:
1366 Py_XDECREF(maxval);
1367 Py_XDECREF(maxitem);
1368 Py_DECREF(it);
1369 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001370}
1371
Guido van Rossum79f25d91997-04-29 20:08:16 +00001372static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001373builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001374{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001375 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001376}
1377
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001378PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001379"min(iterable[, key=func]) -> value\n\
1380min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001381\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001382With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001383With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001384
1385
Guido van Rossum79f25d91997-04-29 20:08:16 +00001386static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001387builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001388{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001389 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001390}
1391
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001392PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001393"max(iterable[, key=func]) -> value\n\
1394max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001395\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001396With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001397With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001398
1399
Guido van Rossum79f25d91997-04-29 20:08:16 +00001400static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001401builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001402{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001403 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001404 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001405
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001406 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1407 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001408 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001409 "oct() argument can't be converted to oct");
1410 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001411 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001412 res = (*nb->nb_oct)(v);
1413 if (res && !PyString_Check(res)) {
1414 PyErr_Format(PyExc_TypeError,
1415 "__oct__ returned non-string (type %.200s)",
1416 res->ob_type->tp_name);
1417 Py_DECREF(res);
1418 return NULL;
1419 }
1420 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001421}
1422
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001423PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001424"oct(number) -> string\n\
1425\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001426Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001427
1428
Guido van Rossum79f25d91997-04-29 20:08:16 +00001429static PyObject *
Thomas Wouters477c8d52006-05-27 19:21:47 +00001430builtin_open(PyObject *self, PyObject *args, PyObject *kwds)
1431{
1432 return PyObject_Call((PyObject*)&PyFile_Type, args, kwds);
1433}
1434
1435PyDoc_STRVAR(open_doc,
1436"open(name[, mode[, buffering]]) -> file object\n\
1437\n\
1438Open a file using the file() type, returns a file object.");
1439
1440
1441static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001442builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001443{
Guido van Rossum09095f32000-03-10 23:00:52 +00001444 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001445 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001446
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001447 if (PyString_Check(obj)) {
1448 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001449 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001450 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001451 return PyInt_FromLong(ord);
1452 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001453#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001454 } else if (PyUnicode_Check(obj)) {
1455 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001456 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001457 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001458 return PyInt_FromLong(ord);
1459 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001460#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001461 } else {
1462 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001463 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001464 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001465 return NULL;
1466 }
1467
Guido van Rossumad991772001-01-12 16:03:05 +00001468 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001469 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001470 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001471 size);
1472 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001473}
1474
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001475PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001476"ord(c) -> integer\n\
1477\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001478Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001479
1480
Guido van Rossum79f25d91997-04-29 20:08:16 +00001481static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001482builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001483{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001484 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001485
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001486 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001487 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001488 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001489}
1490
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001491PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001492"pow(x, y[, z]) -> number\n\
1493\n\
1494With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001495equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001496
1497
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001498
Guido van Rossum34343512006-11-30 22:13:52 +00001499static PyObject *
1500builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1501{
1502 static char *kwlist[] = {"sep", "end", "file", 0};
Georg Brandl257d3d92007-02-26 10:35:10 +00001503 static PyObject *dummy_args;
Guido van Rossum34343512006-11-30 22:13:52 +00001504 PyObject *sep = NULL, *end = NULL, *file = NULL;
1505 int i, err;
1506
Georg Brandl257d3d92007-02-26 10:35:10 +00001507 if (dummy_args == NULL) {
1508 if (!(dummy_args = PyTuple_New(0)))
1509 return NULL;
1510 }
Georg Brandl88fc6642007-02-09 21:28:07 +00001511 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
Guido van Rossum34343512006-11-30 22:13:52 +00001512 kwlist, &sep, &end, &file))
1513 return NULL;
1514 if (file == NULL || file == Py_None)
1515 file = PySys_GetObject("stdout");
1516
Georg Brandl16f3e032006-11-30 22:46:03 +00001517 if (sep && sep != Py_None && !PyString_Check(sep) &&
1518 !PyUnicode_Check(sep)) {
1519 PyErr_Format(PyExc_TypeError,
1520 "sep must be None, str or unicode, not %.200s",
1521 sep->ob_type->tp_name);
1522 return NULL;
1523 }
1524 if (end && end != Py_None && !PyString_Check(end) &&
1525 !PyUnicode_Check(end)) {
1526 PyErr_Format(PyExc_TypeError,
1527 "end must be None, str or unicode, not %.200s",
1528 end->ob_type->tp_name);
1529 return NULL;
1530 }
Guido van Rossum34343512006-11-30 22:13:52 +00001531
1532 for (i = 0; i < PyTuple_Size(args); i++) {
1533 if (i > 0) {
1534 if (sep == NULL || sep == Py_None)
1535 err = PyFile_WriteString(" ", file);
1536 else
1537 err = PyFile_WriteObject(sep, file,
1538 Py_PRINT_RAW);
1539 if (err)
1540 return NULL;
1541 }
1542 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1543 Py_PRINT_RAW);
1544 if (err)
1545 return NULL;
1546 }
1547
1548 if (end == NULL || end == Py_None)
1549 err = PyFile_WriteString("\n", file);
1550 else
1551 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1552 if (err)
1553 return NULL;
1554
1555 Py_RETURN_NONE;
1556}
1557
1558PyDoc_STRVAR(print_doc,
Guido van Rossum452bf512007-02-09 05:32:43 +00001559"print(value, ..., file=None, sep=' ', end='\\n')\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001560\n\
1561Prints the values to a stream, or to sys.stdout by default.\n\
1562Optional keyword arguments:\n\
1563file: a file-like object (stream); defaults to the current sys.stdout.\n\
1564sep: string inserted between values, default a space.\n\
1565end: string appended after the last value, default a newline.");
1566
1567
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001568/* Return number of items in range (lo, hi, step), when arguments are
1569 * PyInt or PyLong objects. step > 0 required. Return a value < 0 if
1570 * & only if the true value is too large to fit in a signed long.
1571 * Arguments MUST return 1 with either PyInt_Check() or
1572 * PyLong_Check(). Return -1 when there is an error.
1573 */
1574static long
1575get_len_of_range_longs(PyObject *lo, PyObject *hi, PyObject *step)
1576{
1577 /* -------------------------------------------------------------
1578 Algorithm is equal to that of get_len_of_range(), but it operates
1579 on PyObjects (which are assumed to be PyLong or PyInt objects).
1580 ---------------------------------------------------------------*/
1581 long n;
1582 PyObject *diff = NULL;
1583 PyObject *one = NULL;
1584 PyObject *tmp1 = NULL, *tmp2 = NULL, *tmp3 = NULL;
1585 /* holds sub-expression evaluations */
1586
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001587 /* If (lo >= hi), return length of 0 (or error). */
1588 n = PyObject_RichCompareBool(lo, hi, Py_LT);
1589 if (n <= 0)
1590 return n;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001591
1592 if ((one = PyLong_FromLong(1L)) == NULL)
1593 goto Fail;
1594
1595 if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL)
1596 goto Fail;
1597
1598 if ((diff = PyNumber_Subtract(tmp1, one)) == NULL)
1599 goto Fail;
1600
1601 if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL)
1602 goto Fail;
1603
1604 if ((tmp3 = PyNumber_Add(tmp2, one)) == NULL)
1605 goto Fail;
1606
1607 n = PyLong_AsLong(tmp3);
1608 if (PyErr_Occurred()) { /* Check for Overflow */
1609 PyErr_Clear();
1610 goto Fail;
1611 }
1612
1613 Py_DECREF(tmp3);
1614 Py_DECREF(tmp2);
1615 Py_DECREF(diff);
1616 Py_DECREF(tmp1);
1617 Py_DECREF(one);
1618 return n;
1619
1620 Fail:
1621 Py_XDECREF(tmp3);
1622 Py_XDECREF(tmp2);
1623 Py_XDECREF(diff);
1624 Py_XDECREF(tmp1);
1625 Py_XDECREF(one);
1626 return -1;
1627}
1628
1629/* An extension of builtin_range() that handles the case when PyLong
1630 * arguments are given. */
1631static PyObject *
1632handle_range_longs(PyObject *self, PyObject *args)
1633{
1634 PyObject *ilow;
Tim Peters874e1f72003-04-13 22:13:08 +00001635 PyObject *ihigh = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001636 PyObject *istep = NULL;
Tim Peters874e1f72003-04-13 22:13:08 +00001637
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001638 PyObject *curnum = NULL;
1639 PyObject *v = NULL;
1640 long bign;
1641 int i, n;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001642 int step_pos;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001643
Tim Peters874e1f72003-04-13 22:13:08 +00001644 PyObject *zero = PyLong_FromLong(0);
1645
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001646 if (zero == NULL)
1647 return NULL;
1648
Tim Peters874e1f72003-04-13 22:13:08 +00001649 if (!PyArg_UnpackTuple(args, "range", 1, 3, &ilow, &ihigh, &istep)) {
1650 Py_DECREF(zero);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001651 return NULL;
1652 }
1653
Tim Peters874e1f72003-04-13 22:13:08 +00001654 /* Figure out which way we were called, supply defaults, and be
1655 * sure to incref everything so that the decrefs at the end
1656 * are correct.
1657 */
1658 assert(ilow != NULL);
1659 if (ihigh == NULL) {
1660 /* only 1 arg -- it's the upper limit */
1661 ihigh = ilow;
1662 ilow = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001663 }
Tim Peters874e1f72003-04-13 22:13:08 +00001664 assert(ihigh != NULL);
1665 Py_INCREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001666
Tim Peters874e1f72003-04-13 22:13:08 +00001667 /* ihigh correct now; do ilow */
1668 if (ilow == NULL)
1669 ilow = zero;
1670 Py_INCREF(ilow);
1671
1672 /* ilow and ihigh correct now; do istep */
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001673 if (istep == NULL) {
1674 istep = PyLong_FromLong(1L);
1675 if (istep == NULL)
1676 goto Fail;
1677 }
1678 else {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001679 Py_INCREF(istep);
1680 }
1681
Tim Peters874e1f72003-04-13 22:13:08 +00001682 if (!PyInt_Check(ilow) && !PyLong_Check(ilow)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001683 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001684 "range() integer start argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001685 ilow->ob_type->tp_name);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001686 goto Fail;
1687 }
1688
Tim Peters874e1f72003-04-13 22:13:08 +00001689 if (!PyInt_Check(ihigh) && !PyLong_Check(ihigh)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001690 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001691 "range() integer end argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001692 ihigh->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001693 goto Fail;
1694 }
1695
1696 if (!PyInt_Check(istep) && !PyLong_Check(istep)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001697 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001698 "range() integer step argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001699 istep->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001700 goto Fail;
1701 }
1702
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001703 step_pos = PyObject_RichCompareBool(istep, zero, Py_GT);
1704 if (step_pos < 0)
Tim Peters874e1f72003-04-13 22:13:08 +00001705 goto Fail;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001706 if (step_pos)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001707 bign = get_len_of_range_longs(ilow, ihigh, istep);
1708 else {
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001709 int step_zero = PyObject_RichCompareBool(istep, zero, Py_EQ);
Guido van Rossum93a66922006-08-24 02:10:21 +00001710 PyObject *neg_istep;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001711 if (step_zero < 0)
1712 goto Fail;
1713 if (step_zero) {
1714 PyErr_SetString(PyExc_ValueError,
1715 "range() step argument must not be zero");
1716 goto Fail;
1717 }
Guido van Rossum93a66922006-08-24 02:10:21 +00001718 neg_istep = PyNumber_Negative(istep);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001719 if (neg_istep == NULL)
1720 goto Fail;
1721 bign = get_len_of_range_longs(ihigh, ilow, neg_istep);
1722 Py_DECREF(neg_istep);
1723 }
1724
1725 n = (int)bign;
1726 if (bign < 0 || (long)n != bign) {
1727 PyErr_SetString(PyExc_OverflowError,
1728 "range() result has too many items");
1729 goto Fail;
1730 }
1731
1732 v = PyList_New(n);
1733 if (v == NULL)
1734 goto Fail;
1735
1736 curnum = ilow;
1737 Py_INCREF(curnum);
1738
1739 for (i = 0; i < n; i++) {
1740 PyObject *w = PyNumber_Long(curnum);
1741 PyObject *tmp_num;
1742 if (w == NULL)
1743 goto Fail;
1744
1745 PyList_SET_ITEM(v, i, w);
1746
1747 tmp_num = PyNumber_Add(curnum, istep);
1748 if (tmp_num == NULL)
1749 goto Fail;
1750
1751 Py_DECREF(curnum);
1752 curnum = tmp_num;
1753 }
Tim Peters874e1f72003-04-13 22:13:08 +00001754 Py_DECREF(ilow);
1755 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001756 Py_DECREF(istep);
1757 Py_DECREF(zero);
Tim Peters874e1f72003-04-13 22:13:08 +00001758 Py_DECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001759 return v;
1760
1761 Fail:
Tim Peters874e1f72003-04-13 22:13:08 +00001762 Py_DECREF(ilow);
1763 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001764 Py_XDECREF(istep);
Tim Peters874e1f72003-04-13 22:13:08 +00001765 Py_DECREF(zero);
1766 Py_XDECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001767 Py_XDECREF(v);
1768 return NULL;
1769}
1770
Guido van Rossum124eff01999-02-23 16:11:01 +00001771/* Return number of items in range/xrange (lo, hi, step). step > 0
1772 * required. Return a value < 0 if & only if the true value is too
1773 * large to fit in a signed long.
1774 */
1775static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001776get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001777{
1778 /* -------------------------------------------------------------
1779 If lo >= hi, the range is empty.
1780 Else if n values are in the range, the last one is
1781 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1782 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1783 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1784 the RHS is non-negative and so truncation is the same as the
1785 floor. Letting M be the largest positive long, the worst case
1786 for the RHS numerator is hi=M, lo=-M-1, and then
1787 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1788 precision to compute the RHS exactly.
1789 ---------------------------------------------------------------*/
1790 long n = 0;
1791 if (lo < hi) {
1792 unsigned long uhi = (unsigned long)hi;
1793 unsigned long ulo = (unsigned long)lo;
1794 unsigned long diff = uhi - ulo - 1;
1795 n = (long)(diff / (unsigned long)step + 1);
1796 }
1797 return n;
1798}
1799
Guido van Rossum79f25d91997-04-29 20:08:16 +00001800static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001801builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001802{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001803 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001804 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001805 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001806
Guido van Rossum79f25d91997-04-29 20:08:16 +00001807 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001808
Guido van Rossum79f25d91997-04-29 20:08:16 +00001809 if (PyTuple_Size(args) <= 1) {
1810 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001811 "l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001812 &ihigh)) {
1813 PyErr_Clear();
1814 return handle_range_longs(self, args);
1815 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001816 }
1817 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001818 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001819 "ll|l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001820 &ilow, &ihigh, &istep)) {
1821 PyErr_Clear();
1822 return handle_range_longs(self, args);
1823 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001824 }
1825 if (istep == 0) {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001826 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001827 "range() step argument must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001828 return NULL;
1829 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001830 if (istep > 0)
1831 bign = get_len_of_range(ilow, ihigh, istep);
1832 else
1833 bign = get_len_of_range(ihigh, ilow, -istep);
1834 n = (int)bign;
1835 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001836 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001837 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001838 return NULL;
1839 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001840 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001841 if (v == NULL)
1842 return NULL;
1843 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001844 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001845 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001846 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001847 return NULL;
1848 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001849 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001850 ilow += istep;
1851 }
1852 return v;
1853}
1854
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001855PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001856"range([start,] stop[, step]) -> list of integers\n\
1857\n\
1858Return a list containing an arithmetic progression of integers.\n\
1859range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1860When step is given, it specifies the increment (or decrement).\n\
1861For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001862These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001863
Guido van Rossuma88a0332007-02-26 16:59:55 +00001864static PyObject *
1865builtin_input(PyObject *self, PyObject *args)
1866{
1867 PyObject *v = NULL;
1868 PyObject *fin = PySys_GetObject("stdin");
1869 PyObject *fout = PySys_GetObject("stdout");
1870
1871 if (!PyArg_UnpackTuple(args, "input", 0, 1, &v))
1872 return NULL;
1873
1874 if (fin == NULL) {
1875 PyErr_SetString(PyExc_RuntimeError, "input: lost sys.stdin");
1876 return NULL;
1877 }
1878 if (fout == NULL) {
1879 PyErr_SetString(PyExc_RuntimeError, "input: lost sys.stdout");
1880 return NULL;
1881 }
1882 if (PyFile_AsFile(fin) && PyFile_AsFile(fout)
1883 && isatty(fileno(PyFile_AsFile(fin)))
1884 && isatty(fileno(PyFile_AsFile(fout)))) {
1885 PyObject *po;
1886 char *prompt;
1887 char *s;
1888 PyObject *result;
1889 if (v != NULL) {
1890 po = PyObject_Str(v);
1891 if (po == NULL)
1892 return NULL;
1893 prompt = PyString_AsString(po);
1894 if (prompt == NULL)
1895 return NULL;
1896 }
1897 else {
1898 po = NULL;
1899 prompt = "";
1900 }
1901 s = PyOS_Readline(PyFile_AsFile(fin), PyFile_AsFile(fout),
1902 prompt);
1903 Py_XDECREF(po);
1904 if (s == NULL) {
1905 if (!PyErr_Occurred())
1906 PyErr_SetNone(PyExc_KeyboardInterrupt);
1907 return NULL;
1908 }
1909 if (*s == '\0') {
1910 PyErr_SetNone(PyExc_EOFError);
1911 result = NULL;
1912 }
1913 else { /* strip trailing '\n' */
1914 size_t len = strlen(s);
1915 if (len > PY_SSIZE_T_MAX) {
1916 PyErr_SetString(PyExc_OverflowError,
1917 "input: input too long");
1918 result = NULL;
1919 }
1920 else {
1921 result = PyString_FromStringAndSize(s, len-1);
1922 }
1923 }
1924 PyMem_FREE(s);
1925 return result;
1926 }
1927 if (v != NULL) {
1928 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
1929 return NULL;
1930 }
1931 return PyFile_GetLine(fin, -1);
1932}
1933
1934PyDoc_STRVAR(input_doc,
1935"input([prompt]) -> string\n\
1936\n\
1937Read a string from standard input. The trailing newline is stripped.\n\
1938If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1939On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1940is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001941
Guido van Rossum79f25d91997-04-29 20:08:16 +00001942static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001943builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001944{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001945 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001946}
1947
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001948PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001949"reload(module) -> module\n\
1950\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001951Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001952
1953
Guido van Rossum79f25d91997-04-29 20:08:16 +00001954static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001955builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001956{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001957 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001958}
1959
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001960PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001961"repr(object) -> string\n\
1962\n\
1963Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001964For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001965
1966
Guido van Rossum79f25d91997-04-29 20:08:16 +00001967static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001968builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001969{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001970 double number;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001971 double f;
1972 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001973 int i;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001974 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001975
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001976 if (!PyArg_ParseTupleAndKeywords(args, kwds, "d|i:round",
1977 kwlist, &number, &ndigits))
1978 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001979 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001980 i = abs(ndigits);
1981 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001982 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001983 if (ndigits < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001984 number /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001985 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001986 number *= f;
1987 if (number >= 0.0)
1988 number = floor(number + 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00001989 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001990 number = ceil(number - 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00001991 if (ndigits < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001992 number *= f;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001993 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001994 number /= f;
1995 return PyFloat_FromDouble(number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001996}
1997
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001998PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001999"round(number[, ndigits]) -> floating point number\n\
2000\n\
2001Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002002This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002003
Raymond Hettinger64958a12003-12-17 20:43:33 +00002004static PyObject *
2005builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
2006{
2007 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
2008 PyObject *callable;
Martin v. Löwis15e62742006-02-27 16:46:16 +00002009 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00002010 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002011
Neal Norwitz6f0d4792005-12-15 06:40:36 +00002012 /* args 1-4 should match listsort in Objects/listobject.c */
Armin Rigo71d7e702005-09-20 18:13:03 +00002013 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
2014 kwlist, &seq, &compare, &keyfunc, &reverse))
2015 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002016
2017 newlist = PySequence_List(seq);
2018 if (newlist == NULL)
2019 return NULL;
2020
2021 callable = PyObject_GetAttrString(newlist, "sort");
2022 if (callable == NULL) {
2023 Py_DECREF(newlist);
2024 return NULL;
2025 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002026
Raymond Hettinger64958a12003-12-17 20:43:33 +00002027 newargs = PyTuple_GetSlice(args, 1, 4);
2028 if (newargs == NULL) {
2029 Py_DECREF(newlist);
2030 Py_DECREF(callable);
2031 return NULL;
2032 }
2033
2034 v = PyObject_Call(callable, newargs, kwds);
2035 Py_DECREF(newargs);
2036 Py_DECREF(callable);
2037 if (v == NULL) {
2038 Py_DECREF(newlist);
2039 return NULL;
2040 }
2041 Py_DECREF(v);
2042 return newlist;
2043}
2044
2045PyDoc_STRVAR(sorted_doc,
2046"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002047
Guido van Rossum79f25d91997-04-29 20:08:16 +00002048static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002049builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002050{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002051 PyObject *v = NULL;
2052 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002053
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002054 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002055 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00002056 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002057 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002058 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002059 if (!PyErr_Occurred())
2060 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002061 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002062 }
2063 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00002064 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00002065 }
2066 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002067 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00002068 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002069 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00002070 "vars() argument must have __dict__ attribute");
2071 return NULL;
2072 }
2073 }
2074 return d;
2075}
2076
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002077PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002078"vars([object]) -> dictionary\n\
2079\n\
2080Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002081With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002082
Alex Martellia70b1912003-04-22 08:12:33 +00002083
2084static PyObject*
2085builtin_sum(PyObject *self, PyObject *args)
2086{
2087 PyObject *seq;
2088 PyObject *result = NULL;
2089 PyObject *temp, *item, *iter;
2090
Raymond Hettinger5cf63942003-10-25 06:41:37 +00002091 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00002092 return NULL;
2093
2094 iter = PyObject_GetIter(seq);
2095 if (iter == NULL)
2096 return NULL;
2097
2098 if (result == NULL) {
2099 result = PyInt_FromLong(0);
2100 if (result == NULL) {
2101 Py_DECREF(iter);
2102 return NULL;
2103 }
2104 } else {
2105 /* reject string values for 'start' parameter */
2106 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
2107 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002108 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00002109 Py_DECREF(iter);
2110 return NULL;
2111 }
Alex Martelli41c9f882003-04-22 09:24:48 +00002112 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00002113 }
2114
2115 for(;;) {
2116 item = PyIter_Next(iter);
2117 if (item == NULL) {
2118 /* error, or end-of-sequence */
2119 if (PyErr_Occurred()) {
2120 Py_DECREF(result);
2121 result = NULL;
2122 }
2123 break;
2124 }
Alex Martellia253e182003-10-25 23:24:14 +00002125 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00002126 Py_DECREF(result);
2127 Py_DECREF(item);
2128 result = temp;
2129 if (result == NULL)
2130 break;
2131 }
2132 Py_DECREF(iter);
2133 return result;
2134}
2135
2136PyDoc_STRVAR(sum_doc,
Thomas Wouters89f507f2006-12-13 04:49:30 +00002137"sum(sequence[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00002138\n\
2139Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00002140of parameter 'start' (which defaults to 0). When the sequence is\n\
2141empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00002142
2143
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002144static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002145builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002146{
2147 PyObject *inst;
2148 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00002149 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002150
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002151 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002152 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002153
Guido van Rossum823649d2001-03-21 18:40:58 +00002154 retval = PyObject_IsInstance(inst, cls);
2155 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00002156 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002157 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002158}
2159
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002160PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002161"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002162\n\
2163Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002164With a type as second argument, return whether that is the object's type.\n\
2165The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002166isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002167
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002168
2169static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002170builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002171{
2172 PyObject *derived;
2173 PyObject *cls;
2174 int retval;
2175
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002176 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002177 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002178
Guido van Rossum823649d2001-03-21 18:40:58 +00002179 retval = PyObject_IsSubclass(derived, cls);
2180 if (retval < 0)
2181 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002182 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002183}
2184
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002185PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002186"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002187\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002188Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2189When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2190is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002191
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002192
Barry Warsawbd599b52000-08-03 15:45:29 +00002193static PyObject*
2194builtin_zip(PyObject *self, PyObject *args)
2195{
Guido van Rossumb65fb332006-08-25 23:26:40 +00002196 /* args must be a tuple */
2197 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00002198
Guido van Rossumb65fb332006-08-25 23:26:40 +00002199 return _PyZip_CreateIter(args);
Barry Warsawbd599b52000-08-03 15:45:29 +00002200}
2201
2202
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002203PyDoc_STRVAR(zip_doc,
Guido van Rossum801f0d72006-08-24 19:48:10 +00002204"zip(it1 [, it2 [...]]) -> iter([(it1[0], it2[0] ...), ...])\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002205\n\
Guido van Rossum801f0d72006-08-24 19:48:10 +00002206Return an iterator yielding tuples, where each tuple contains the\n\
2207corresponding element from each of the argument iterables.\n\
2208The returned iterator ends when the shortest argument iterable is exhausted.\n\
2209NOTE: This is implemented using itertools.izip().");
Barry Warsawbd599b52000-08-03 15:45:29 +00002210
2211
Guido van Rossum79f25d91997-04-29 20:08:16 +00002212static PyMethodDef builtin_methods[] = {
Guido van Rossum52cc1d82007-03-18 15:41:51 +00002213 {"__build_class__", (PyCFunction)builtin___build_class__,
2214 METH_VARARGS | METH_KEYWORDS, build_class_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002215 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002216 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002217 {"all", builtin_all, METH_O, all_doc},
2218 {"any", builtin_any, METH_O, any_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002219 {"callable", builtin_callable, METH_O, callable_doc},
2220 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2221 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002222 {"compile", builtin_compile, METH_VARARGS, compile_doc},
2223 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2224 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2225 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2226 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00002227 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002228 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
2229 {"filter", builtin_filter, METH_VARARGS, filter_doc},
2230 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2231 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2232 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2233 {"hash", builtin_hash, METH_O, hash_doc},
2234 {"hex", builtin_hex, METH_O, hex_doc},
2235 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00002236 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002237 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2238 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2239 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2240 {"len", builtin_len, METH_O, len_doc},
2241 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2242 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002243 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2244 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002245 {"oct", builtin_oct, METH_O, oct_doc},
Thomas Wouters477c8d52006-05-27 19:21:47 +00002246 {"open", (PyCFunction)builtin_open, METH_VARARGS | METH_KEYWORDS, open_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002247 {"ord", builtin_ord, METH_O, ord_doc},
2248 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00002249 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002250 {"range", builtin_range, METH_VARARGS, range_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002251 {"reload", builtin_reload, METH_O, reload_doc},
2252 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002253 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002254 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002255 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002256 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002257#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002258 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002259#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002260 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002261 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002262 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002263};
2264
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002265PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002266"Built-in functions, exceptions, and other objects.\n\
2267\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002268Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002269
Guido van Rossum25ce5661997-08-02 03:10:38 +00002270PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002271_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002272{
Fred Drake5550de32000-06-20 04:54:19 +00002273 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002274 mod = Py_InitModule4("__builtin__", builtin_methods,
2275 builtin_doc, (PyObject *)NULL,
2276 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002277 if (mod == NULL)
2278 return NULL;
2279 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002280
Tim Peters7571a0f2003-03-23 17:52:28 +00002281#ifdef Py_TRACE_REFS
2282 /* __builtin__ exposes a number of statically allocated objects
2283 * that, before this code was added in 2.3, never showed up in
2284 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2285 * result, programs leaking references to None and False (etc)
2286 * couldn't be diagnosed by examining sys.getobjects(0).
2287 */
2288#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2289#else
2290#define ADD_TO_ALL(OBJECT) (void)0
2291#endif
2292
Tim Peters4b7625e2001-09-13 21:37:17 +00002293#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002294 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2295 return NULL; \
2296 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002297
2298 SETBUILTIN("None", Py_None);
2299 SETBUILTIN("Ellipsis", Py_Ellipsis);
2300 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002301 SETBUILTIN("False", Py_False);
2302 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00002303 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002304 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002305 SETBUILTIN("buffer", &PyBuffer_Type);
Guido van Rossum4dfe8a12006-04-22 23:28:04 +00002306 SETBUILTIN("bytes", &PyBytes_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002307 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002308#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002309 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002310#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002311 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002312 SETBUILTIN("enumerate", &PyEnum_Type);
Thomas Wouters477c8d52006-05-27 19:21:47 +00002313 SETBUILTIN("file", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002314 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002315 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002316 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00002317 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002318 SETBUILTIN("list", &PyList_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002319 SETBUILTIN("object", &PyBaseObject_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002320 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002321 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002322 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002323 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2324 SETBUILTIN("str", &PyString_Type);
2325 SETBUILTIN("super", &PySuper_Type);
2326 SETBUILTIN("tuple", &PyTuple_Type);
2327 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00002328 SETBUILTIN("xrange", &PyRange_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002329#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00002330 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002331#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00002332 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002333 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2334 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002335 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002336 }
2337 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002338
Guido van Rossum25ce5661997-08-02 03:10:38 +00002339 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002340#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002341#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002342}
2343
Guido van Rossume77a7571993-11-03 15:01:26 +00002344/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002345
Guido van Rossum79f25d91997-04-29 20:08:16 +00002346static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002347filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002348{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002349 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002350 Py_ssize_t i, j;
2351 Py_ssize_t len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002352
Guido van Rossumb7b45621995-08-04 04:07:45 +00002353 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002354 if (PyTuple_CheckExact(tuple))
2355 Py_INCREF(tuple);
2356 else
2357 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002358 return tuple;
2359 }
2360
Guido van Rossum79f25d91997-04-29 20:08:16 +00002361 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002362 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002363
Guido van Rossum12d12c51993-10-26 17:58:25 +00002364 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002365 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002366 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002367
Walter Dörwald8dd19322003-02-10 17:36:40 +00002368 if (tuple->ob_type->tp_as_sequence &&
2369 tuple->ob_type->tp_as_sequence->sq_item) {
2370 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002371 if (item == NULL)
2372 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002373 } else {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002374 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002375 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002376 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002377 if (func == Py_None) {
2378 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002379 good = item;
2380 }
2381 else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002382 PyObject *arg = PyTuple_Pack(1, item);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002383 if (arg == NULL) {
2384 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002385 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002386 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002387 good = PyEval_CallObject(func, arg);
2388 Py_DECREF(arg);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002389 if (good == NULL) {
2390 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002391 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002392 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002393 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002394 ok = PyObject_IsTrue(good);
2395 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002396 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002397 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002398 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002399 }
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002400 else
2401 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002402 }
2403
Tim Peters4324aa32001-05-28 22:30:08 +00002404 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002405 return NULL;
2406
Guido van Rossum12d12c51993-10-26 17:58:25 +00002407 return result;
2408
Guido van Rossum12d12c51993-10-26 17:58:25 +00002409Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002410 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002411 return NULL;
2412}
2413
2414
Guido van Rossume77a7571993-11-03 15:01:26 +00002415/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002416
Guido van Rossum79f25d91997-04-29 20:08:16 +00002417static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002418filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002419{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002420 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002421 Py_ssize_t i, j;
2422 Py_ssize_t len = PyString_Size(strobj);
2423 Py_ssize_t outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002424
Guido van Rossum79f25d91997-04-29 20:08:16 +00002425 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002426 /* If it's a real string we can return the original,
2427 * as no character is ever false and __getitem__
2428 * does return this character. If it's a subclass
2429 * we must go through the __getitem__ loop */
2430 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002431 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002432 return strobj;
2433 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002434 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002435 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002436 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002437
Guido van Rossum12d12c51993-10-26 17:58:25 +00002438 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002439 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002440 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002441
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002442 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2443 if (item == NULL)
2444 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002445 if (func==Py_None) {
2446 ok = 1;
2447 } else {
2448 PyObject *arg, *good;
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002449 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002450 if (arg == NULL) {
2451 Py_DECREF(item);
2452 goto Fail_1;
2453 }
2454 good = PyEval_CallObject(func, arg);
2455 Py_DECREF(arg);
2456 if (good == NULL) {
2457 Py_DECREF(item);
2458 goto Fail_1;
2459 }
2460 ok = PyObject_IsTrue(good);
2461 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00002462 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002463 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002464 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002465 if (!PyString_Check(item)) {
2466 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2467 " __getitem__ returned different type");
2468 Py_DECREF(item);
2469 goto Fail_1;
2470 }
2471 reslen = PyString_GET_SIZE(item);
2472 if (reslen == 1) {
2473 PyString_AS_STRING(result)[j++] =
2474 PyString_AS_STRING(item)[0];
2475 } else {
2476 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002477 Py_ssize_t need = j + reslen + len-i-1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002478 if (need > outlen) {
2479 /* overallocate, to avoid reallocations */
2480 if (need<2*outlen)
2481 need = 2*outlen;
2482 if (_PyString_Resize(&result, need)) {
2483 Py_DECREF(item);
2484 return NULL;
2485 }
2486 outlen = need;
2487 }
2488 memcpy(
2489 PyString_AS_STRING(result) + j,
2490 PyString_AS_STRING(item),
2491 reslen
2492 );
2493 j += reslen;
2494 }
2495 }
Tim Peters388ed082001-04-07 20:34:48 +00002496 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002497 }
2498
Walter Dörwald903f1e02003-02-04 16:28:00 +00002499 if (j < outlen)
Tim Peters5de98422002-04-27 18:44:32 +00002500 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002501
Guido van Rossum12d12c51993-10-26 17:58:25 +00002502 return result;
2503
Guido van Rossum12d12c51993-10-26 17:58:25 +00002504Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002505 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002506 return NULL;
2507}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002508
2509#ifdef Py_USING_UNICODE
2510/* Helper for filter(): filter a Unicode object through a function */
2511
2512static PyObject *
2513filterunicode(PyObject *func, PyObject *strobj)
2514{
2515 PyObject *result;
Martin v. Löwis725507b2006-03-07 12:08:51 +00002516 register Py_ssize_t i, j;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002517 Py_ssize_t len = PyUnicode_GetSize(strobj);
2518 Py_ssize_t outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002519
2520 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002521 /* If it's a real string we can return the original,
2522 * as no character is ever false and __getitem__
2523 * does return this character. If it's a subclass
2524 * we must go through the __getitem__ loop */
2525 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002526 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002527 return strobj;
2528 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002529 }
2530 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2531 return NULL;
2532
2533 for (i = j = 0; i < len; ++i) {
2534 PyObject *item, *arg, *good;
2535 int ok;
2536
2537 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2538 if (item == NULL)
2539 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002540 if (func == Py_None) {
2541 ok = 1;
2542 } else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002543 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002544 if (arg == NULL) {
2545 Py_DECREF(item);
2546 goto Fail_1;
2547 }
2548 good = PyEval_CallObject(func, arg);
2549 Py_DECREF(arg);
2550 if (good == NULL) {
2551 Py_DECREF(item);
2552 goto Fail_1;
2553 }
2554 ok = PyObject_IsTrue(good);
2555 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002556 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002557 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002558 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002559 if (!PyUnicode_Check(item)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002560 PyErr_SetString(PyExc_TypeError,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002561 "can't filter unicode to unicode:"
2562 " __getitem__ returned different type");
Walter Dörwald903f1e02003-02-04 16:28:00 +00002563 Py_DECREF(item);
2564 goto Fail_1;
2565 }
2566 reslen = PyUnicode_GET_SIZE(item);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002567 if (reslen == 1)
Walter Dörwald903f1e02003-02-04 16:28:00 +00002568 PyUnicode_AS_UNICODE(result)[j++] =
2569 PyUnicode_AS_UNICODE(item)[0];
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002570 else {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002571 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002572 Py_ssize_t need = j + reslen + len - i - 1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002573 if (need > outlen) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002574 /* overallocate,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002575 to avoid reallocations */
2576 if (need < 2 * outlen)
2577 need = 2 * outlen;
Jeremy Hylton364f6be2003-09-16 03:17:16 +00002578 if (PyUnicode_Resize(
2579 &result, need) < 0) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002580 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002581 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002582 }
2583 outlen = need;
2584 }
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002585 memcpy(PyUnicode_AS_UNICODE(result) + j,
2586 PyUnicode_AS_UNICODE(item),
2587 reslen*sizeof(Py_UNICODE));
Walter Dörwald903f1e02003-02-04 16:28:00 +00002588 j += reslen;
2589 }
2590 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002591 Py_DECREF(item);
2592 }
2593
Walter Dörwald903f1e02003-02-04 16:28:00 +00002594 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002595 PyUnicode_Resize(&result, j);
2596
2597 return result;
2598
2599Fail_1:
2600 Py_DECREF(result);
2601 return NULL;
2602}
2603#endif