blob: 20746fa4bfca67055c139b01dbe84e076d0bec41 [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
Guido van Rossum98f97462007-04-13 03:31:13 +00001454 }
1455 else if (PyUnicode_Check(obj)) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001456 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001457 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001458 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001459 return PyInt_FromLong(ord);
1460 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001461#endif
Guido van Rossum98f97462007-04-13 03:31:13 +00001462 }
1463 else if (PyBytes_Check(obj)) {
1464 /* XXX Hopefully this is temporary */
1465 size = PyBytes_GET_SIZE(obj);
1466 if (size == 1) {
1467 ord = (long)*PyBytes_AS_STRING(obj);
1468 return PyInt_FromLong(ord);
1469 }
1470 }
1471 else {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001472 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001473 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001474 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001475 return NULL;
1476 }
1477
Guido van Rossumad991772001-01-12 16:03:05 +00001478 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001479 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001480 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001481 size);
1482 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001483}
1484
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001485PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001486"ord(c) -> integer\n\
1487\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001488Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001489
1490
Guido van Rossum79f25d91997-04-29 20:08:16 +00001491static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001492builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001493{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001494 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001495
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001496 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001497 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001498 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001499}
1500
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001501PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001502"pow(x, y[, z]) -> number\n\
1503\n\
1504With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001505equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001506
1507
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001508
Guido van Rossum34343512006-11-30 22:13:52 +00001509static PyObject *
1510builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1511{
1512 static char *kwlist[] = {"sep", "end", "file", 0};
Georg Brandl257d3d92007-02-26 10:35:10 +00001513 static PyObject *dummy_args;
Guido van Rossum34343512006-11-30 22:13:52 +00001514 PyObject *sep = NULL, *end = NULL, *file = NULL;
1515 int i, err;
1516
Georg Brandl257d3d92007-02-26 10:35:10 +00001517 if (dummy_args == NULL) {
1518 if (!(dummy_args = PyTuple_New(0)))
1519 return NULL;
1520 }
Georg Brandl88fc6642007-02-09 21:28:07 +00001521 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
Guido van Rossum34343512006-11-30 22:13:52 +00001522 kwlist, &sep, &end, &file))
1523 return NULL;
1524 if (file == NULL || file == Py_None)
1525 file = PySys_GetObject("stdout");
1526
Georg Brandl16f3e032006-11-30 22:46:03 +00001527 if (sep && sep != Py_None && !PyString_Check(sep) &&
1528 !PyUnicode_Check(sep)) {
1529 PyErr_Format(PyExc_TypeError,
1530 "sep must be None, str or unicode, not %.200s",
1531 sep->ob_type->tp_name);
1532 return NULL;
1533 }
1534 if (end && end != Py_None && !PyString_Check(end) &&
1535 !PyUnicode_Check(end)) {
1536 PyErr_Format(PyExc_TypeError,
1537 "end must be None, str or unicode, not %.200s",
1538 end->ob_type->tp_name);
1539 return NULL;
1540 }
Guido van Rossum34343512006-11-30 22:13:52 +00001541
1542 for (i = 0; i < PyTuple_Size(args); i++) {
1543 if (i > 0) {
1544 if (sep == NULL || sep == Py_None)
1545 err = PyFile_WriteString(" ", file);
1546 else
1547 err = PyFile_WriteObject(sep, file,
1548 Py_PRINT_RAW);
1549 if (err)
1550 return NULL;
1551 }
1552 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1553 Py_PRINT_RAW);
1554 if (err)
1555 return NULL;
1556 }
1557
1558 if (end == NULL || end == Py_None)
1559 err = PyFile_WriteString("\n", file);
1560 else
1561 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1562 if (err)
1563 return NULL;
1564
1565 Py_RETURN_NONE;
1566}
1567
1568PyDoc_STRVAR(print_doc,
Guido van Rossum452bf512007-02-09 05:32:43 +00001569"print(value, ..., file=None, sep=' ', end='\\n')\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001570\n\
1571Prints the values to a stream, or to sys.stdout by default.\n\
1572Optional keyword arguments:\n\
1573file: a file-like object (stream); defaults to the current sys.stdout.\n\
1574sep: string inserted between values, default a space.\n\
1575end: string appended after the last value, default a newline.");
1576
1577
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001578/* Return number of items in range (lo, hi, step), when arguments are
1579 * PyInt or PyLong objects. step > 0 required. Return a value < 0 if
1580 * & only if the true value is too large to fit in a signed long.
1581 * Arguments MUST return 1 with either PyInt_Check() or
1582 * PyLong_Check(). Return -1 when there is an error.
1583 */
1584static long
1585get_len_of_range_longs(PyObject *lo, PyObject *hi, PyObject *step)
1586{
1587 /* -------------------------------------------------------------
1588 Algorithm is equal to that of get_len_of_range(), but it operates
1589 on PyObjects (which are assumed to be PyLong or PyInt objects).
1590 ---------------------------------------------------------------*/
1591 long n;
1592 PyObject *diff = NULL;
1593 PyObject *one = NULL;
1594 PyObject *tmp1 = NULL, *tmp2 = NULL, *tmp3 = NULL;
1595 /* holds sub-expression evaluations */
1596
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001597 /* If (lo >= hi), return length of 0 (or error). */
1598 n = PyObject_RichCompareBool(lo, hi, Py_LT);
1599 if (n <= 0)
1600 return n;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001601
1602 if ((one = PyLong_FromLong(1L)) == NULL)
1603 goto Fail;
1604
1605 if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL)
1606 goto Fail;
1607
1608 if ((diff = PyNumber_Subtract(tmp1, one)) == NULL)
1609 goto Fail;
1610
1611 if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL)
1612 goto Fail;
1613
1614 if ((tmp3 = PyNumber_Add(tmp2, one)) == NULL)
1615 goto Fail;
1616
1617 n = PyLong_AsLong(tmp3);
1618 if (PyErr_Occurred()) { /* Check for Overflow */
1619 PyErr_Clear();
1620 goto Fail;
1621 }
1622
1623 Py_DECREF(tmp3);
1624 Py_DECREF(tmp2);
1625 Py_DECREF(diff);
1626 Py_DECREF(tmp1);
1627 Py_DECREF(one);
1628 return n;
1629
1630 Fail:
1631 Py_XDECREF(tmp3);
1632 Py_XDECREF(tmp2);
1633 Py_XDECREF(diff);
1634 Py_XDECREF(tmp1);
1635 Py_XDECREF(one);
1636 return -1;
1637}
1638
1639/* An extension of builtin_range() that handles the case when PyLong
1640 * arguments are given. */
1641static PyObject *
1642handle_range_longs(PyObject *self, PyObject *args)
1643{
1644 PyObject *ilow;
Tim Peters874e1f72003-04-13 22:13:08 +00001645 PyObject *ihigh = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001646 PyObject *istep = NULL;
Tim Peters874e1f72003-04-13 22:13:08 +00001647
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001648 PyObject *curnum = NULL;
1649 PyObject *v = NULL;
1650 long bign;
1651 int i, n;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001652 int step_pos;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001653
Tim Peters874e1f72003-04-13 22:13:08 +00001654 PyObject *zero = PyLong_FromLong(0);
1655
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001656 if (zero == NULL)
1657 return NULL;
1658
Tim Peters874e1f72003-04-13 22:13:08 +00001659 if (!PyArg_UnpackTuple(args, "range", 1, 3, &ilow, &ihigh, &istep)) {
1660 Py_DECREF(zero);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001661 return NULL;
1662 }
1663
Tim Peters874e1f72003-04-13 22:13:08 +00001664 /* Figure out which way we were called, supply defaults, and be
1665 * sure to incref everything so that the decrefs at the end
1666 * are correct.
1667 */
1668 assert(ilow != NULL);
1669 if (ihigh == NULL) {
1670 /* only 1 arg -- it's the upper limit */
1671 ihigh = ilow;
1672 ilow = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001673 }
Tim Peters874e1f72003-04-13 22:13:08 +00001674 assert(ihigh != NULL);
1675 Py_INCREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001676
Tim Peters874e1f72003-04-13 22:13:08 +00001677 /* ihigh correct now; do ilow */
1678 if (ilow == NULL)
1679 ilow = zero;
1680 Py_INCREF(ilow);
1681
1682 /* ilow and ihigh correct now; do istep */
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001683 if (istep == NULL) {
1684 istep = PyLong_FromLong(1L);
1685 if (istep == NULL)
1686 goto Fail;
1687 }
1688 else {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001689 Py_INCREF(istep);
1690 }
1691
Tim Peters874e1f72003-04-13 22:13:08 +00001692 if (!PyInt_Check(ilow) && !PyLong_Check(ilow)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001693 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001694 "range() integer start argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001695 ilow->ob_type->tp_name);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001696 goto Fail;
1697 }
1698
Tim Peters874e1f72003-04-13 22:13:08 +00001699 if (!PyInt_Check(ihigh) && !PyLong_Check(ihigh)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001700 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001701 "range() integer end argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001702 ihigh->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001703 goto Fail;
1704 }
1705
1706 if (!PyInt_Check(istep) && !PyLong_Check(istep)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001707 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001708 "range() integer step argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001709 istep->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001710 goto Fail;
1711 }
1712
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001713 step_pos = PyObject_RichCompareBool(istep, zero, Py_GT);
1714 if (step_pos < 0)
Tim Peters874e1f72003-04-13 22:13:08 +00001715 goto Fail;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001716 if (step_pos)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001717 bign = get_len_of_range_longs(ilow, ihigh, istep);
1718 else {
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001719 int step_zero = PyObject_RichCompareBool(istep, zero, Py_EQ);
Guido van Rossum93a66922006-08-24 02:10:21 +00001720 PyObject *neg_istep;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001721 if (step_zero < 0)
1722 goto Fail;
1723 if (step_zero) {
1724 PyErr_SetString(PyExc_ValueError,
1725 "range() step argument must not be zero");
1726 goto Fail;
1727 }
Guido van Rossum93a66922006-08-24 02:10:21 +00001728 neg_istep = PyNumber_Negative(istep);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001729 if (neg_istep == NULL)
1730 goto Fail;
1731 bign = get_len_of_range_longs(ihigh, ilow, neg_istep);
1732 Py_DECREF(neg_istep);
1733 }
1734
1735 n = (int)bign;
1736 if (bign < 0 || (long)n != bign) {
1737 PyErr_SetString(PyExc_OverflowError,
1738 "range() result has too many items");
1739 goto Fail;
1740 }
1741
1742 v = PyList_New(n);
1743 if (v == NULL)
1744 goto Fail;
1745
1746 curnum = ilow;
1747 Py_INCREF(curnum);
1748
1749 for (i = 0; i < n; i++) {
1750 PyObject *w = PyNumber_Long(curnum);
1751 PyObject *tmp_num;
1752 if (w == NULL)
1753 goto Fail;
1754
1755 PyList_SET_ITEM(v, i, w);
1756
1757 tmp_num = PyNumber_Add(curnum, istep);
1758 if (tmp_num == NULL)
1759 goto Fail;
1760
1761 Py_DECREF(curnum);
1762 curnum = tmp_num;
1763 }
Tim Peters874e1f72003-04-13 22:13:08 +00001764 Py_DECREF(ilow);
1765 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001766 Py_DECREF(istep);
1767 Py_DECREF(zero);
Tim Peters874e1f72003-04-13 22:13:08 +00001768 Py_DECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001769 return v;
1770
1771 Fail:
Tim Peters874e1f72003-04-13 22:13:08 +00001772 Py_DECREF(ilow);
1773 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001774 Py_XDECREF(istep);
Tim Peters874e1f72003-04-13 22:13:08 +00001775 Py_DECREF(zero);
1776 Py_XDECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001777 Py_XDECREF(v);
1778 return NULL;
1779}
1780
Guido van Rossum124eff01999-02-23 16:11:01 +00001781/* Return number of items in range/xrange (lo, hi, step). step > 0
1782 * required. Return a value < 0 if & only if the true value is too
1783 * large to fit in a signed long.
1784 */
1785static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001786get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001787{
1788 /* -------------------------------------------------------------
1789 If lo >= hi, the range is empty.
1790 Else if n values are in the range, the last one is
1791 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1792 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1793 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1794 the RHS is non-negative and so truncation is the same as the
1795 floor. Letting M be the largest positive long, the worst case
1796 for the RHS numerator is hi=M, lo=-M-1, and then
1797 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1798 precision to compute the RHS exactly.
1799 ---------------------------------------------------------------*/
1800 long n = 0;
1801 if (lo < hi) {
1802 unsigned long uhi = (unsigned long)hi;
1803 unsigned long ulo = (unsigned long)lo;
1804 unsigned long diff = uhi - ulo - 1;
1805 n = (long)(diff / (unsigned long)step + 1);
1806 }
1807 return n;
1808}
1809
Guido van Rossum79f25d91997-04-29 20:08:16 +00001810static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001811builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001812{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001813 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001814 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001815 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001816
Guido van Rossum79f25d91997-04-29 20:08:16 +00001817 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001818
Guido van Rossum79f25d91997-04-29 20:08:16 +00001819 if (PyTuple_Size(args) <= 1) {
1820 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001821 "l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001822 &ihigh)) {
1823 PyErr_Clear();
1824 return handle_range_longs(self, args);
1825 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001826 }
1827 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001828 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001829 "ll|l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001830 &ilow, &ihigh, &istep)) {
1831 PyErr_Clear();
1832 return handle_range_longs(self, args);
1833 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001834 }
1835 if (istep == 0) {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001836 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001837 "range() step argument must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001838 return NULL;
1839 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001840 if (istep > 0)
1841 bign = get_len_of_range(ilow, ihigh, istep);
1842 else
1843 bign = get_len_of_range(ihigh, ilow, -istep);
1844 n = (int)bign;
1845 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001846 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001847 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001848 return NULL;
1849 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001850 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001851 if (v == NULL)
1852 return NULL;
1853 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001854 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001855 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001856 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001857 return NULL;
1858 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001859 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001860 ilow += istep;
1861 }
1862 return v;
1863}
1864
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001865PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001866"range([start,] stop[, step]) -> list of integers\n\
1867\n\
1868Return a list containing an arithmetic progression of integers.\n\
1869range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1870When step is given, it specifies the increment (or decrement).\n\
1871For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001872These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001873
Guido van Rossuma88a0332007-02-26 16:59:55 +00001874static PyObject *
1875builtin_input(PyObject *self, PyObject *args)
1876{
1877 PyObject *v = NULL;
1878 PyObject *fin = PySys_GetObject("stdin");
1879 PyObject *fout = PySys_GetObject("stdout");
1880
1881 if (!PyArg_UnpackTuple(args, "input", 0, 1, &v))
1882 return NULL;
1883
1884 if (fin == NULL) {
1885 PyErr_SetString(PyExc_RuntimeError, "input: lost sys.stdin");
1886 return NULL;
1887 }
1888 if (fout == NULL) {
1889 PyErr_SetString(PyExc_RuntimeError, "input: lost sys.stdout");
1890 return NULL;
1891 }
1892 if (PyFile_AsFile(fin) && PyFile_AsFile(fout)
1893 && isatty(fileno(PyFile_AsFile(fin)))
1894 && isatty(fileno(PyFile_AsFile(fout)))) {
1895 PyObject *po;
1896 char *prompt;
1897 char *s;
1898 PyObject *result;
1899 if (v != NULL) {
1900 po = PyObject_Str(v);
1901 if (po == NULL)
1902 return NULL;
1903 prompt = PyString_AsString(po);
1904 if (prompt == NULL)
1905 return NULL;
1906 }
1907 else {
1908 po = NULL;
1909 prompt = "";
1910 }
1911 s = PyOS_Readline(PyFile_AsFile(fin), PyFile_AsFile(fout),
1912 prompt);
1913 Py_XDECREF(po);
1914 if (s == NULL) {
1915 if (!PyErr_Occurred())
1916 PyErr_SetNone(PyExc_KeyboardInterrupt);
1917 return NULL;
1918 }
1919 if (*s == '\0') {
1920 PyErr_SetNone(PyExc_EOFError);
1921 result = NULL;
1922 }
1923 else { /* strip trailing '\n' */
1924 size_t len = strlen(s);
1925 if (len > PY_SSIZE_T_MAX) {
1926 PyErr_SetString(PyExc_OverflowError,
1927 "input: input too long");
1928 result = NULL;
1929 }
1930 else {
1931 result = PyString_FromStringAndSize(s, len-1);
1932 }
1933 }
1934 PyMem_FREE(s);
1935 return result;
1936 }
1937 if (v != NULL) {
1938 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
1939 return NULL;
1940 }
1941 return PyFile_GetLine(fin, -1);
1942}
1943
1944PyDoc_STRVAR(input_doc,
1945"input([prompt]) -> string\n\
1946\n\
1947Read a string from standard input. The trailing newline is stripped.\n\
1948If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1949On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1950is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001951
Guido van Rossum79f25d91997-04-29 20:08:16 +00001952static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001953builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001954{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001955 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001956}
1957
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001958PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001959"reload(module) -> module\n\
1960\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001961Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001962
1963
Guido van Rossum79f25d91997-04-29 20:08:16 +00001964static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001965builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001966{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001967 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001968}
1969
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001970PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001971"repr(object) -> string\n\
1972\n\
1973Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001974For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001975
1976
Guido van Rossum79f25d91997-04-29 20:08:16 +00001977static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001978builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001979{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001980 double number;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001981 double f;
1982 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001983 int i;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001984 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001985
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001986 if (!PyArg_ParseTupleAndKeywords(args, kwds, "d|i:round",
1987 kwlist, &number, &ndigits))
1988 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001989 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001990 i = abs(ndigits);
1991 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001992 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001993 if (ndigits < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001994 number /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001995 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001996 number *= f;
1997 if (number >= 0.0)
1998 number = floor(number + 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00001999 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002000 number = ceil(number - 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00002001 if (ndigits < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002002 number *= f;
Guido van Rossum1e162d31998-05-09 14:42:25 +00002003 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002004 number /= f;
2005 return PyFloat_FromDouble(number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002006}
2007
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002008PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002009"round(number[, ndigits]) -> floating point number\n\
2010\n\
2011Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002012This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002013
Raymond Hettinger64958a12003-12-17 20:43:33 +00002014static PyObject *
2015builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
2016{
2017 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
2018 PyObject *callable;
Martin v. Löwis15e62742006-02-27 16:46:16 +00002019 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00002020 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002021
Neal Norwitz6f0d4792005-12-15 06:40:36 +00002022 /* args 1-4 should match listsort in Objects/listobject.c */
Armin Rigo71d7e702005-09-20 18:13:03 +00002023 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
2024 kwlist, &seq, &compare, &keyfunc, &reverse))
2025 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002026
2027 newlist = PySequence_List(seq);
2028 if (newlist == NULL)
2029 return NULL;
2030
2031 callable = PyObject_GetAttrString(newlist, "sort");
2032 if (callable == NULL) {
2033 Py_DECREF(newlist);
2034 return NULL;
2035 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002036
Raymond Hettinger64958a12003-12-17 20:43:33 +00002037 newargs = PyTuple_GetSlice(args, 1, 4);
2038 if (newargs == NULL) {
2039 Py_DECREF(newlist);
2040 Py_DECREF(callable);
2041 return NULL;
2042 }
2043
2044 v = PyObject_Call(callable, newargs, kwds);
2045 Py_DECREF(newargs);
2046 Py_DECREF(callable);
2047 if (v == NULL) {
2048 Py_DECREF(newlist);
2049 return NULL;
2050 }
2051 Py_DECREF(v);
2052 return newlist;
2053}
2054
2055PyDoc_STRVAR(sorted_doc,
2056"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002057
Guido van Rossum79f25d91997-04-29 20:08:16 +00002058static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002059builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002060{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002061 PyObject *v = NULL;
2062 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002063
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002064 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002065 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00002066 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002067 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002068 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002069 if (!PyErr_Occurred())
2070 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002071 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002072 }
2073 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00002074 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00002075 }
2076 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002077 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00002078 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002079 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00002080 "vars() argument must have __dict__ attribute");
2081 return NULL;
2082 }
2083 }
2084 return d;
2085}
2086
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002087PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002088"vars([object]) -> dictionary\n\
2089\n\
2090Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002091With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002092
Alex Martellia70b1912003-04-22 08:12:33 +00002093
2094static PyObject*
2095builtin_sum(PyObject *self, PyObject *args)
2096{
2097 PyObject *seq;
2098 PyObject *result = NULL;
2099 PyObject *temp, *item, *iter;
2100
Raymond Hettinger5cf63942003-10-25 06:41:37 +00002101 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00002102 return NULL;
2103
2104 iter = PyObject_GetIter(seq);
2105 if (iter == NULL)
2106 return NULL;
2107
2108 if (result == NULL) {
2109 result = PyInt_FromLong(0);
2110 if (result == NULL) {
2111 Py_DECREF(iter);
2112 return NULL;
2113 }
2114 } else {
2115 /* reject string values for 'start' parameter */
2116 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
2117 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002118 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00002119 Py_DECREF(iter);
2120 return NULL;
2121 }
Alex Martelli41c9f882003-04-22 09:24:48 +00002122 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00002123 }
2124
2125 for(;;) {
2126 item = PyIter_Next(iter);
2127 if (item == NULL) {
2128 /* error, or end-of-sequence */
2129 if (PyErr_Occurred()) {
2130 Py_DECREF(result);
2131 result = NULL;
2132 }
2133 break;
2134 }
Alex Martellia253e182003-10-25 23:24:14 +00002135 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00002136 Py_DECREF(result);
2137 Py_DECREF(item);
2138 result = temp;
2139 if (result == NULL)
2140 break;
2141 }
2142 Py_DECREF(iter);
2143 return result;
2144}
2145
2146PyDoc_STRVAR(sum_doc,
Thomas Wouters89f507f2006-12-13 04:49:30 +00002147"sum(sequence[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00002148\n\
2149Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00002150of parameter 'start' (which defaults to 0). When the sequence is\n\
2151empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00002152
2153
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002154static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002155builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002156{
2157 PyObject *inst;
2158 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00002159 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002160
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002161 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002162 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002163
Guido van Rossum823649d2001-03-21 18:40:58 +00002164 retval = PyObject_IsInstance(inst, cls);
2165 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00002166 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002167 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002168}
2169
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002170PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002171"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002172\n\
2173Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002174With a type as second argument, return whether that is the object's type.\n\
2175The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002176isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002177
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002178
2179static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002180builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002181{
2182 PyObject *derived;
2183 PyObject *cls;
2184 int retval;
2185
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002186 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002187 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002188
Guido van Rossum823649d2001-03-21 18:40:58 +00002189 retval = PyObject_IsSubclass(derived, cls);
2190 if (retval < 0)
2191 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002192 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002193}
2194
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002195PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002196"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002197\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002198Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2199When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2200is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002201
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002202
Barry Warsawbd599b52000-08-03 15:45:29 +00002203static PyObject*
2204builtin_zip(PyObject *self, PyObject *args)
2205{
Guido van Rossumb65fb332006-08-25 23:26:40 +00002206 /* args must be a tuple */
2207 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00002208
Guido van Rossumb65fb332006-08-25 23:26:40 +00002209 return _PyZip_CreateIter(args);
Barry Warsawbd599b52000-08-03 15:45:29 +00002210}
2211
2212
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002213PyDoc_STRVAR(zip_doc,
Guido van Rossum801f0d72006-08-24 19:48:10 +00002214"zip(it1 [, it2 [...]]) -> iter([(it1[0], it2[0] ...), ...])\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002215\n\
Guido van Rossum801f0d72006-08-24 19:48:10 +00002216Return an iterator yielding tuples, where each tuple contains the\n\
2217corresponding element from each of the argument iterables.\n\
2218The returned iterator ends when the shortest argument iterable is exhausted.\n\
2219NOTE: This is implemented using itertools.izip().");
Barry Warsawbd599b52000-08-03 15:45:29 +00002220
2221
Guido van Rossum79f25d91997-04-29 20:08:16 +00002222static PyMethodDef builtin_methods[] = {
Guido van Rossum52cc1d82007-03-18 15:41:51 +00002223 {"__build_class__", (PyCFunction)builtin___build_class__,
2224 METH_VARARGS | METH_KEYWORDS, build_class_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002225 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002226 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002227 {"all", builtin_all, METH_O, all_doc},
2228 {"any", builtin_any, METH_O, any_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002229 {"callable", builtin_callable, METH_O, callable_doc},
2230 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2231 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002232 {"compile", builtin_compile, METH_VARARGS, compile_doc},
2233 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2234 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2235 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2236 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00002237 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002238 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
2239 {"filter", builtin_filter, METH_VARARGS, filter_doc},
2240 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2241 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2242 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2243 {"hash", builtin_hash, METH_O, hash_doc},
2244 {"hex", builtin_hex, METH_O, hex_doc},
2245 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00002246 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002247 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2248 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2249 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2250 {"len", builtin_len, METH_O, len_doc},
2251 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2252 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002253 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2254 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002255 {"oct", builtin_oct, METH_O, oct_doc},
Thomas Wouters477c8d52006-05-27 19:21:47 +00002256 {"open", (PyCFunction)builtin_open, METH_VARARGS | METH_KEYWORDS, open_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002257 {"ord", builtin_ord, METH_O, ord_doc},
2258 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00002259 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002260 {"range", builtin_range, METH_VARARGS, range_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002261 {"reload", builtin_reload, METH_O, reload_doc},
2262 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002263 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002264 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002265 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002266 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002267#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002268 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002269#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002270 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002271 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002272 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002273};
2274
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002275PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002276"Built-in functions, exceptions, and other objects.\n\
2277\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002278Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002279
Guido van Rossum25ce5661997-08-02 03:10:38 +00002280PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002281_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002282{
Fred Drake5550de32000-06-20 04:54:19 +00002283 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002284 mod = Py_InitModule4("__builtin__", builtin_methods,
2285 builtin_doc, (PyObject *)NULL,
2286 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002287 if (mod == NULL)
2288 return NULL;
2289 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002290
Tim Peters7571a0f2003-03-23 17:52:28 +00002291#ifdef Py_TRACE_REFS
2292 /* __builtin__ exposes a number of statically allocated objects
2293 * that, before this code was added in 2.3, never showed up in
2294 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2295 * result, programs leaking references to None and False (etc)
2296 * couldn't be diagnosed by examining sys.getobjects(0).
2297 */
2298#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2299#else
2300#define ADD_TO_ALL(OBJECT) (void)0
2301#endif
2302
Tim Peters4b7625e2001-09-13 21:37:17 +00002303#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002304 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2305 return NULL; \
2306 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002307
2308 SETBUILTIN("None", Py_None);
2309 SETBUILTIN("Ellipsis", Py_Ellipsis);
2310 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002311 SETBUILTIN("False", Py_False);
2312 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00002313 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002314 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002315 SETBUILTIN("buffer", &PyBuffer_Type);
Guido van Rossum4dfe8a12006-04-22 23:28:04 +00002316 SETBUILTIN("bytes", &PyBytes_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002317 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002318#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002319 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002320#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002321 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002322 SETBUILTIN("enumerate", &PyEnum_Type);
Thomas Wouters477c8d52006-05-27 19:21:47 +00002323 SETBUILTIN("file", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002324 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002325 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002326 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00002327 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002328 SETBUILTIN("list", &PyList_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002329 SETBUILTIN("object", &PyBaseObject_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002330 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002331 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002332 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002333 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2334 SETBUILTIN("str", &PyString_Type);
2335 SETBUILTIN("super", &PySuper_Type);
2336 SETBUILTIN("tuple", &PyTuple_Type);
2337 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00002338 SETBUILTIN("xrange", &PyRange_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002339#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00002340 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002341#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00002342 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002343 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2344 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002345 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002346 }
2347 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002348
Guido van Rossum25ce5661997-08-02 03:10:38 +00002349 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002350#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002351#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002352}
2353
Guido van Rossume77a7571993-11-03 15:01:26 +00002354/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002355
Guido van Rossum79f25d91997-04-29 20:08:16 +00002356static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002357filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002358{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002359 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002360 Py_ssize_t i, j;
2361 Py_ssize_t len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002362
Guido van Rossumb7b45621995-08-04 04:07:45 +00002363 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002364 if (PyTuple_CheckExact(tuple))
2365 Py_INCREF(tuple);
2366 else
2367 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002368 return tuple;
2369 }
2370
Guido van Rossum79f25d91997-04-29 20:08:16 +00002371 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002372 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002373
Guido van Rossum12d12c51993-10-26 17:58:25 +00002374 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002375 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002376 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002377
Walter Dörwald8dd19322003-02-10 17:36:40 +00002378 if (tuple->ob_type->tp_as_sequence &&
2379 tuple->ob_type->tp_as_sequence->sq_item) {
2380 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002381 if (item == NULL)
2382 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002383 } else {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002384 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002385 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002386 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002387 if (func == Py_None) {
2388 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002389 good = item;
2390 }
2391 else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002392 PyObject *arg = PyTuple_Pack(1, item);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002393 if (arg == NULL) {
2394 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002395 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002396 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002397 good = PyEval_CallObject(func, arg);
2398 Py_DECREF(arg);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002399 if (good == NULL) {
2400 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002401 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002402 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002403 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002404 ok = PyObject_IsTrue(good);
2405 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002406 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002407 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002408 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002409 }
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002410 else
2411 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002412 }
2413
Tim Peters4324aa32001-05-28 22:30:08 +00002414 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002415 return NULL;
2416
Guido van Rossum12d12c51993-10-26 17:58:25 +00002417 return result;
2418
Guido van Rossum12d12c51993-10-26 17:58:25 +00002419Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002420 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002421 return NULL;
2422}
2423
2424
Guido van Rossume77a7571993-11-03 15:01:26 +00002425/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002426
Guido van Rossum79f25d91997-04-29 20:08:16 +00002427static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002428filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002429{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002430 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002431 Py_ssize_t i, j;
2432 Py_ssize_t len = PyString_Size(strobj);
2433 Py_ssize_t outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002434
Guido van Rossum79f25d91997-04-29 20:08:16 +00002435 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002436 /* If it's a real string we can return the original,
2437 * as no character is ever false and __getitem__
2438 * does return this character. If it's a subclass
2439 * we must go through the __getitem__ loop */
2440 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002441 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002442 return strobj;
2443 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002444 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002445 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002446 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002447
Guido van Rossum12d12c51993-10-26 17:58:25 +00002448 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002449 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002450 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002451
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002452 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2453 if (item == NULL)
2454 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002455 if (func==Py_None) {
2456 ok = 1;
2457 } else {
2458 PyObject *arg, *good;
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002459 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002460 if (arg == NULL) {
2461 Py_DECREF(item);
2462 goto Fail_1;
2463 }
2464 good = PyEval_CallObject(func, arg);
2465 Py_DECREF(arg);
2466 if (good == NULL) {
2467 Py_DECREF(item);
2468 goto Fail_1;
2469 }
2470 ok = PyObject_IsTrue(good);
2471 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00002472 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002473 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002474 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002475 if (!PyString_Check(item)) {
2476 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2477 " __getitem__ returned different type");
2478 Py_DECREF(item);
2479 goto Fail_1;
2480 }
2481 reslen = PyString_GET_SIZE(item);
2482 if (reslen == 1) {
2483 PyString_AS_STRING(result)[j++] =
2484 PyString_AS_STRING(item)[0];
2485 } else {
2486 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002487 Py_ssize_t need = j + reslen + len-i-1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002488 if (need > outlen) {
2489 /* overallocate, to avoid reallocations */
2490 if (need<2*outlen)
2491 need = 2*outlen;
2492 if (_PyString_Resize(&result, need)) {
2493 Py_DECREF(item);
2494 return NULL;
2495 }
2496 outlen = need;
2497 }
2498 memcpy(
2499 PyString_AS_STRING(result) + j,
2500 PyString_AS_STRING(item),
2501 reslen
2502 );
2503 j += reslen;
2504 }
2505 }
Tim Peters388ed082001-04-07 20:34:48 +00002506 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002507 }
2508
Walter Dörwald903f1e02003-02-04 16:28:00 +00002509 if (j < outlen)
Tim Peters5de98422002-04-27 18:44:32 +00002510 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002511
Guido van Rossum12d12c51993-10-26 17:58:25 +00002512 return result;
2513
Guido van Rossum12d12c51993-10-26 17:58:25 +00002514Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002515 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002516 return NULL;
2517}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002518
2519#ifdef Py_USING_UNICODE
2520/* Helper for filter(): filter a Unicode object through a function */
2521
2522static PyObject *
2523filterunicode(PyObject *func, PyObject *strobj)
2524{
2525 PyObject *result;
Martin v. Löwis725507b2006-03-07 12:08:51 +00002526 register Py_ssize_t i, j;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002527 Py_ssize_t len = PyUnicode_GetSize(strobj);
2528 Py_ssize_t outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002529
2530 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002531 /* If it's a real string we can return the original,
2532 * as no character is ever false and __getitem__
2533 * does return this character. If it's a subclass
2534 * we must go through the __getitem__ loop */
2535 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002536 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002537 return strobj;
2538 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002539 }
2540 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2541 return NULL;
2542
2543 for (i = j = 0; i < len; ++i) {
2544 PyObject *item, *arg, *good;
2545 int ok;
2546
2547 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2548 if (item == NULL)
2549 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002550 if (func == Py_None) {
2551 ok = 1;
2552 } else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002553 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002554 if (arg == NULL) {
2555 Py_DECREF(item);
2556 goto Fail_1;
2557 }
2558 good = PyEval_CallObject(func, arg);
2559 Py_DECREF(arg);
2560 if (good == NULL) {
2561 Py_DECREF(item);
2562 goto Fail_1;
2563 }
2564 ok = PyObject_IsTrue(good);
2565 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002566 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002567 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002568 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002569 if (!PyUnicode_Check(item)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002570 PyErr_SetString(PyExc_TypeError,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002571 "can't filter unicode to unicode:"
2572 " __getitem__ returned different type");
Walter Dörwald903f1e02003-02-04 16:28:00 +00002573 Py_DECREF(item);
2574 goto Fail_1;
2575 }
2576 reslen = PyUnicode_GET_SIZE(item);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002577 if (reslen == 1)
Walter Dörwald903f1e02003-02-04 16:28:00 +00002578 PyUnicode_AS_UNICODE(result)[j++] =
2579 PyUnicode_AS_UNICODE(item)[0];
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002580 else {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002581 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002582 Py_ssize_t need = j + reslen + len - i - 1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002583 if (need > outlen) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002584 /* overallocate,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002585 to avoid reallocations */
2586 if (need < 2 * outlen)
2587 need = 2 * outlen;
Jeremy Hylton364f6be2003-09-16 03:17:16 +00002588 if (PyUnicode_Resize(
2589 &result, need) < 0) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002590 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002591 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002592 }
2593 outlen = need;
2594 }
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002595 memcpy(PyUnicode_AS_UNICODE(result) + j,
2596 PyUnicode_AS_UNICODE(item),
2597 reslen*sizeof(Py_UNICODE));
Walter Dörwald903f1e02003-02-04 16:28:00 +00002598 j += reslen;
2599 }
2600 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002601 Py_DECREF(item);
2602 }
2603
Walter Dörwald903f1e02003-02-04 16:28:00 +00002604 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002605 PyUnicode_Resize(&result, j);
2606
2607 return result;
2608
2609Fail_1:
2610 Py_DECREF(result);
2611 return NULL;
2612}
2613#endif