blob: 7988c89df6a948e67f45254b614224edbeac71f6 [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 Rossumf9d9c6c1998-06-26 21:23:49 +0000383
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000384#ifdef Py_USING_UNICODE
Guido van Rossum79f25d91997-04-29 20:08:16 +0000385static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000386builtin_unichr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000387{
388 long x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000389
390 if (!PyArg_ParseTuple(args, "l:unichr", &x))
391 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000392
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000393 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000394}
395
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000396PyDoc_STRVAR(unichr_doc,
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000397"chr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000398\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000399Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.");
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000400#endif
Guido van Rossum09095f32000-03-10 23:00:52 +0000401
402
403static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000404builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000405{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000406 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000407 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000408
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000409 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000410 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000411 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000412 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000413 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000414}
415
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000416PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000417"cmp(x, y) -> integer\n\
418\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000419Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000420
Guido van Rossum79f25d91997-04-29 20:08:16 +0000421static PyObject *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000422builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000423{
424 char *str;
425 char *filename;
426 char *startstr;
427 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000428 int dont_inherit = 0;
429 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000430 PyCompilerFlags cf;
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000431 PyObject *result = NULL, *cmd, *tmp = NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000432 Py_ssize_t length;
Guido van Rossumd8faa362007-04-27 19:54:29 +0000433 static char *kwlist[] = {"source", "filename", "mode", "flags",
434 "dont_inherit", NULL};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000435
Guido van Rossumd8faa362007-04-27 19:54:29 +0000436 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
437 kwlist, &cmd, &filename, &startstr,
438 &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000439 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000440
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000441 cf.cf_flags = supplied_flags;
442
443#ifdef Py_USING_UNICODE
444 if (PyUnicode_Check(cmd)) {
445 tmp = PyUnicode_AsUTF8String(cmd);
446 if (tmp == NULL)
447 return NULL;
448 cmd = tmp;
449 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
450 }
451#endif
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000452 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &length))
453 return NULL;
Tim Peters2c646c92003-02-10 14:48:29 +0000454 if ((size_t)length != strlen(str)) {
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000455 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000456 "compile() expected string without null bytes");
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000457 goto cleanup;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000458 }
459
Guido van Rossum5b722181993-03-30 17:46:03 +0000460 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000461 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000462 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000463 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000464 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000465 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000466 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000467 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000468 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000469 goto cleanup;
Guido van Rossum5b722181993-03-30 17:46:03 +0000470 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000471
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000472 if (supplied_flags &
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000473 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000474 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000475 PyErr_SetString(PyExc_ValueError,
476 "compile(): unrecognised flags");
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000477 goto cleanup;
Tim Peters6cd6a822001-08-17 22:11:27 +0000478 }
479 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
480
Tim Peters6cd6a822001-08-17 22:11:27 +0000481 if (!dont_inherit) {
482 PyEval_MergeCompilerFlags(&cf);
483 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000484 result = Py_CompileStringFlags(str, filename, start, &cf);
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000485cleanup:
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000486 Py_XDECREF(tmp);
487 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000488}
489
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000490PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000491"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000492\n\
493Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000494into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000495The filename will be used for run-time error messages.\n\
496The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000497single (interactive) statement, or 'eval' to compile an expression.\n\
498The flags argument, if present, controls which future statements influence\n\
499the compilation of the code.\n\
500The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
501the effects of any future statements in effect in the code calling\n\
502compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000503in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000504
Guido van Rossum79f25d91997-04-29 20:08:16 +0000505static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000506builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000507{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000508 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000509
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000510 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000511 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000512 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000513}
514
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000515PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000516"dir([object]) -> list of strings\n"
517"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000518"If called without an argument, return the names in the current scope.\n"
519"Else, return an alphabetized list of names comprising (some of) the attributes\n"
520"of the given object, and of attributes reachable from it.\n"
521"If the object supplies a method named __dir__, it will be used; otherwise\n"
522"the default dir() logic is used and returns:\n"
523" for a module object: the module's attributes.\n"
524" for a class object: its attributes, and recursively the attributes\n"
525" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000526" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000527" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000528
Guido van Rossum79f25d91997-04-29 20:08:16 +0000529static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000530builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000531{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000532 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000533
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000534 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000535 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000536 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000537}
538
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000539PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000540"divmod(x, y) -> (div, mod)\n\
541\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000542Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000543
544
Guido van Rossum79f25d91997-04-29 20:08:16 +0000545static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000546builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000547{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000548 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000549 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000550 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000551 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000552
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000553 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000554 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000555 if (locals != Py_None && !PyMapping_Check(locals)) {
556 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000557 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000558 }
559 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000560 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000561 "globals must be a real dict; try eval(expr, {}, mapping)"
562 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000563 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000564 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000565 if (globals == Py_None) {
566 globals = PyEval_GetGlobals();
567 if (locals == Py_None)
568 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000569 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000570 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000571 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000572
Georg Brandl77c85e62005-09-15 10:46:13 +0000573 if (globals == NULL || locals == NULL) {
574 PyErr_SetString(PyExc_TypeError,
575 "eval must be given globals and locals "
576 "when called without a frame");
577 return NULL;
578 }
579
Guido van Rossum79f25d91997-04-29 20:08:16 +0000580 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
581 if (PyDict_SetItemString(globals, "__builtins__",
582 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000583 return NULL;
584 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000585
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000586 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000587 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000588 PyErr_SetString(PyExc_TypeError,
589 "code object passed to eval() may not contain free variables");
590 return NULL;
591 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000592 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000593 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000594
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000595 if (!PyString_Check(cmd) &&
596 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000597 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000598 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000599 return NULL;
600 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000601 cf.cf_flags = 0;
602
603#ifdef Py_USING_UNICODE
604 if (PyUnicode_Check(cmd)) {
605 tmp = PyUnicode_AsUTF8String(cmd);
606 if (tmp == NULL)
607 return NULL;
608 cmd = tmp;
609 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
610 }
611#endif
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000612 if (PyString_AsStringAndSize(cmd, &str, NULL)) {
613 Py_XDECREF(tmp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000614 return NULL;
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000615 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000616 while (*str == ' ' || *str == '\t')
617 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000618
Tim Peters9fa96be2001-08-17 23:04:59 +0000619 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000620 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
621 Py_XDECREF(tmp);
622 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000623}
624
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000625PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000626"eval(source[, globals[, locals]]) -> value\n\
627\n\
628Evaluate the source in the context of globals and locals.\n\
629The source may be a string representing a Python expression\n\
630or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000631The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000632defaulting to the current globals and locals.\n\
633If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000634
Georg Brandl7cae87c2006-09-06 06:51:57 +0000635static PyObject *
636builtin_exec(PyObject *self, PyObject *args)
637{
638 PyObject *v;
639 PyObject *prog, *globals = Py_None, *locals = Py_None;
640 int plain = 0;
641
642 if (!PyArg_ParseTuple(args, "O|OO:exec", &prog, &globals, &locals))
643 return NULL;
644
645 if (globals == Py_None) {
646 globals = PyEval_GetGlobals();
647 if (locals == Py_None) {
648 locals = PyEval_GetLocals();
649 plain = 1;
650 }
651 if (!globals || !locals) {
652 PyErr_SetString(PyExc_SystemError,
653 "globals and locals cannot be NULL");
654 return NULL;
655 }
656 }
657 else if (locals == Py_None)
658 locals = globals;
659 if (!PyString_Check(prog) &&
660 !PyUnicode_Check(prog) &&
661 !PyCode_Check(prog) &&
662 !PyFile_Check(prog)) {
663 PyErr_Format(PyExc_TypeError,
664 "exec() arg 1 must be a string, file, or code "
665 "object, not %.100s", prog->ob_type->tp_name);
666 return NULL;
667 }
668 if (!PyDict_Check(globals)) {
669 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
670 globals->ob_type->tp_name);
671 return NULL;
672 }
673 if (!PyMapping_Check(locals)) {
674 PyErr_Format(PyExc_TypeError,
675 "arg 3 must be a mapping or None, not %.100s",
676 locals->ob_type->tp_name);
677 return NULL;
678 }
679 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
680 if (PyDict_SetItemString(globals, "__builtins__",
681 PyEval_GetBuiltins()) != 0)
682 return NULL;
683 }
684
685 if (PyCode_Check(prog)) {
686 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
687 PyErr_SetString(PyExc_TypeError,
688 "code object passed to exec() may not "
689 "contain free variables");
690 return NULL;
691 }
692 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
693 }
694 else if (PyFile_Check(prog)) {
695 FILE *fp = PyFile_AsFile(prog);
696 char *name = PyString_AsString(PyFile_Name(prog));
697 PyCompilerFlags cf;
698 cf.cf_flags = 0;
699 if (PyEval_MergeCompilerFlags(&cf))
700 v = PyRun_FileFlags(fp, name, Py_file_input, globals,
701 locals, &cf);
702 else
703 v = PyRun_File(fp, name, Py_file_input, globals,
704 locals);
705 }
706 else {
707 PyObject *tmp = NULL;
708 char *str;
709 PyCompilerFlags cf;
710 cf.cf_flags = 0;
711#ifdef Py_USING_UNICODE
712 if (PyUnicode_Check(prog)) {
713 tmp = PyUnicode_AsUTF8String(prog);
714 if (tmp == NULL)
715 return NULL;
716 prog = tmp;
717 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
718 }
719#endif
720 if (PyString_AsStringAndSize(prog, &str, NULL))
721 return NULL;
722 if (PyEval_MergeCompilerFlags(&cf))
723 v = PyRun_StringFlags(str, Py_file_input, globals,
724 locals, &cf);
725 else
726 v = PyRun_String(str, Py_file_input, globals, locals);
727 Py_XDECREF(tmp);
728 }
729 if (v == NULL)
730 return NULL;
731 Py_DECREF(v);
732 Py_RETURN_NONE;
733}
734
735PyDoc_STRVAR(exec_doc,
736"exec(object[, globals[, locals]])\n\
737\n\
738Read and execute code from a object, which can be a string, a code\n\
739object or a file object.\n\
740The globals and locals are dictionaries, defaulting to the current\n\
741globals and locals. If only globals is given, locals defaults to it.");
742
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000743
Guido van Rossum79f25d91997-04-29 20:08:16 +0000744static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000745builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000746{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000747 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000748 PyObject *globals = Py_None, *locals = Py_None;
749 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000750 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000751 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000752 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000753
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000754 if (!PyArg_ParseTuple(args, "s|O!O:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000755 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000756 &PyDict_Type, &globals,
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000757 &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000758 return NULL;
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000759 if (locals != Py_None && !PyMapping_Check(locals)) {
760 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
761 return NULL;
762 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000763 if (globals == Py_None) {
764 globals = PyEval_GetGlobals();
765 if (locals == Py_None)
766 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000767 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000768 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000769 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000770 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
771 if (PyDict_SetItemString(globals, "__builtins__",
772 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000773 return NULL;
774 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000775
776 exists = 0;
777 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000778#if defined(PLAN9)
779 {
780 Dir *d;
781
782 if ((d = dirstat(filename))!=nil) {
783 if(d->mode & DMDIR)
784 werrstr("is a directory");
785 else
786 exists = 1;
787 free(d);
788 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000789 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000790#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000791 if (object_exists(filename)) {
792 if (isdir(filename))
793 errno = EISDIR;
794 else
795 exists = 1;
796 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000797#else /* standard Posix */
798 {
799 struct stat s;
800 if (stat(filename, &s) == 0) {
801 if (S_ISDIR(s.st_mode))
Andrew MacIntyreda4d6cb2004-03-29 11:53:38 +0000802# if defined(PYOS_OS2) && defined(PYCC_VACPP)
Martin v. Löwis3484a182002-03-09 12:07:51 +0000803 errno = EOS2ERR;
804# else
805 errno = EISDIR;
806# endif
807 else
808 exists = 1;
809 }
810 }
811#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000812
813 if (exists) {
814 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000815 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000816 Py_END_ALLOW_THREADS
817
818 if (fp == NULL) {
819 exists = 0;
820 }
821 }
822
823 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000824 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000825 return NULL;
826 }
Tim Peters5ba58662001-07-16 02:29:45 +0000827 cf.cf_flags = 0;
828 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000829 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000830 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000831 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000832 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000833 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000834 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000835}
836
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000837PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000838"execfile(filename[, globals[, locals]])\n\
839\n\
840Read and execute a Python script from a file.\n\
841The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000842globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000843
844
Guido van Rossum79f25d91997-04-29 20:08:16 +0000845static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000846builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000847{
Guido van Rossum950ff291998-06-29 13:38:57 +0000848 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000849 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000850
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000851 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000852 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000853#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000854 if (PyUnicode_Check(name)) {
855 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
856 if (name == NULL)
857 return NULL;
858 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000859#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000860
861 if (!PyString_Check(name)) {
862 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000863 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000864 return NULL;
865 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000866 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000867 if (result == NULL && dflt != NULL &&
868 PyErr_ExceptionMatches(PyExc_AttributeError))
869 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000870 PyErr_Clear();
871 Py_INCREF(dflt);
872 result = dflt;
873 }
874 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000875}
876
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000877PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000878"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000879\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000880Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
881When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000882exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000883
884
Guido van Rossum79f25d91997-04-29 20:08:16 +0000885static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000886builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000887{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000888 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000889
Guido van Rossum79f25d91997-04-29 20:08:16 +0000890 d = PyEval_GetGlobals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000891 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000892 return d;
893}
894
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000895PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000896"globals() -> dictionary\n\
897\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000898Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000899
900
Guido van Rossum79f25d91997-04-29 20:08:16 +0000901static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000902builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000903{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000904 PyObject *v;
905 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000906
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000907 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000908 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000909#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000910 if (PyUnicode_Check(name)) {
911 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
912 if (name == NULL)
913 return NULL;
914 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000915#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000916
917 if (!PyString_Check(name)) {
918 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000919 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000920 return NULL;
921 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000922 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000923 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000924 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000925 Py_INCREF(Py_False);
926 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000927 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000928 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000929 Py_INCREF(Py_True);
930 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000931}
932
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000933PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000934"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000935\n\
936Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000937(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000938
939
Guido van Rossum79f25d91997-04-29 20:08:16 +0000940static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000941builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000942{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000943 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000944}
945
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000946PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000947"id(object) -> integer\n\
948\n\
949Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000950simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000951
952
Guido van Rossum79f25d91997-04-29 20:08:16 +0000953static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000954builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000955{
956 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000957 PyObject *it; /* the iterator object */
958 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000959 } sequence;
960
Guido van Rossum79f25d91997-04-29 20:08:16 +0000961 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000962 sequence *seqs = NULL, *sqp;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000963 Py_ssize_t n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000964 register int i, j;
965
Guido van Rossum79f25d91997-04-29 20:08:16 +0000966 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000967 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000968 PyErr_SetString(PyExc_TypeError,
969 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000970 return NULL;
971 }
972
Guido van Rossum79f25d91997-04-29 20:08:16 +0000973 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000974 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000975
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000976 if (func == Py_None && n == 1) {
977 /* map(None, S) is the same as list(S). */
978 return PySequence_List(PyTuple_GetItem(args, 1));
979 }
980
Tim Peters4e9afdc2001-05-03 23:54:49 +0000981 /* Get space for sequence descriptors. Must NULL out the iterator
982 * pointers so that jumping to Fail_2 later doesn't see trash.
983 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000984 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
985 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000986 return NULL;
987 }
988 for (i = 0; i < n; ++i) {
989 seqs[i].it = (PyObject*)NULL;
990 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000991 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000992
Tim Peters4e9afdc2001-05-03 23:54:49 +0000993 /* Do a first pass to obtain iterators for the arguments, and set len
994 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000995 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000996 len = 0;
997 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
998 PyObject *curseq;
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000999 Py_ssize_t curlen;
Guido van Rossumad991772001-01-12 16:03:05 +00001000
Tim Peters4e9afdc2001-05-03 23:54:49 +00001001 /* Get iterator. */
1002 curseq = PyTuple_GetItem(args, i+1);
1003 sqp->it = PyObject_GetIter(curseq);
1004 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +00001005 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +00001006 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +00001007 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +00001008 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001009 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001010 goto Fail_2;
1011 }
1012
Tim Peters4e9afdc2001-05-03 23:54:49 +00001013 /* Update len. */
Armin Rigof5b3e362006-02-11 21:32:43 +00001014 curlen = _PyObject_LengthHint(curseq);
Raymond Hettinger77f3c872004-01-04 08:54:44 +00001015 if (curlen < 0) {
Raymond Hettingera710b332005-08-21 11:03:59 +00001016 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
1017 !PyErr_ExceptionMatches(PyExc_AttributeError)) {
1018 goto Fail_2;
1019 }
Raymond Hettinger77f3c872004-01-04 08:54:44 +00001020 PyErr_Clear();
Tim Peters4e9afdc2001-05-03 23:54:49 +00001021 curlen = 8; /* arbitrary */
Raymond Hettinger77f3c872004-01-04 08:54:44 +00001022 }
1023 if (curlen > len)
1024 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001025 }
1026
Tim Peters4e9afdc2001-05-03 23:54:49 +00001027 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001028 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001029 goto Fail_2;
1030
Tim Peters4e9afdc2001-05-03 23:54:49 +00001031 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +00001032 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001033 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001034 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001035
Guido van Rossum79f25d91997-04-29 20:08:16 +00001036 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +00001037 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001038 else if ((alist = PyTuple_New(n)) == NULL)
1039 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001040
1041 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001042 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001043 Py_INCREF(Py_None);
1044 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001045 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001046 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001047 item = PyIter_Next(sqp->it);
1048 if (item)
1049 ++numactive;
1050 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001051 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001052 Py_XDECREF(alist);
1053 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001054 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001055 Py_INCREF(Py_None);
1056 item = Py_None;
1057 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001058 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001059 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001060 if (alist)
1061 PyTuple_SET_ITEM(alist, j, item);
1062 else
Guido van Rossum2d951851994-08-29 12:52:16 +00001063 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001064 }
1065
Guido van Rossum32120311995-07-10 13:52:21 +00001066 if (!alist)
1067 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +00001068
Tim Peters4e9afdc2001-05-03 23:54:49 +00001069 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001070 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +00001071 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001072 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001073
Guido van Rossum79f25d91997-04-29 20:08:16 +00001074 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +00001075 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001076 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001077 value = PyEval_CallObject(func, alist);
1078 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001079 if (value == NULL)
1080 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001081 }
1082 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +00001083 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +00001084 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +00001085 if (status < 0)
1086 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001087 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001088 else if (PyList_SetItem(result, i, value) < 0)
1089 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001090 }
1091
Guido van Rossumfa4ac711998-07-10 17:37:30 +00001092 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
1093 goto Fail_1;
1094
Tim Peters4e9afdc2001-05-03 23:54:49 +00001095 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001096
Guido van Rossum12d12c51993-10-26 17:58:25 +00001097Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001098 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001099Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +00001100 result = NULL;
1101Succeed:
1102 assert(seqs);
1103 for (i = 0; i < n; ++i)
1104 Py_XDECREF(seqs[i].it);
1105 PyMem_DEL(seqs);
1106 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001107}
1108
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001109PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001110"map(function, sequence[, sequence, ...]) -> list\n\
1111\n\
1112Return a list of the results of applying the function to the items of\n\
1113the argument sequence(s). If more than one sequence is given, the\n\
1114function is called with an argument list consisting of the corresponding\n\
1115item of each sequence, substituting None for missing values when not all\n\
1116sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001117the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001118
1119
Guido van Rossum79f25d91997-04-29 20:08:16 +00001120static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +00001121builtin_next(PyObject *self, PyObject *args)
1122{
1123 PyObject *it, *res;
1124 PyObject *def = NULL;
1125
1126 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1127 return NULL;
1128 if (!PyIter_Check(it)) {
1129 PyErr_Format(PyExc_TypeError,
1130 "%.200s object is not an iterator", it->ob_type->tp_name);
1131 return NULL;
1132 }
1133
1134 res = (*it->ob_type->tp_iternext)(it);
1135 if (res == NULL) {
1136 if (def) {
1137 if (PyErr_Occurred() &&
1138 !PyErr_ExceptionMatches(PyExc_StopIteration))
1139 return NULL;
1140 PyErr_Clear();
1141 Py_INCREF(def);
1142 return def;
1143 } else if (PyErr_Occurred()) {
1144 return NULL;
1145 } else {
1146 PyErr_SetNone(PyExc_StopIteration);
1147 return NULL;
1148 }
1149 }
1150 return res;
1151}
1152
1153PyDoc_STRVAR(next_doc,
1154"next(iterator[, default])\n\
1155\n\
1156Return the next item from the iterator. If default is given and the iterator\n\
1157is exhausted, it is returned instead of raising StopIteration.");
1158
1159
1160static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001161builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001162{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001163 PyObject *v;
1164 PyObject *name;
1165 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001166
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001167 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001168 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001169 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001170 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001171 Py_INCREF(Py_None);
1172 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001173}
1174
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001175PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001176"setattr(object, name, value)\n\
1177\n\
1178Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001179``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001180
1181
Guido van Rossum79f25d91997-04-29 20:08:16 +00001182static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001183builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001184{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001185 PyObject *v;
1186 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001187
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001188 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001189 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001190 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001191 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001192 Py_INCREF(Py_None);
1193 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001194}
1195
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001196PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001197"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001198\n\
1199Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001200``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001201
1202
Guido van Rossum79f25d91997-04-29 20:08:16 +00001203static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001204builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001205{
Guido van Rossum9bfef441993-03-29 10:43:31 +00001206 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001207
Guido van Rossum79f25d91997-04-29 20:08:16 +00001208 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001209 if (x == -1)
1210 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001211 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001212}
1213
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001214PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001215"hash(object) -> integer\n\
1216\n\
1217Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001218the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001219
1220
Guido van Rossum79f25d91997-04-29 20:08:16 +00001221static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001222builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001223{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001224 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001225 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001226
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001227 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001228 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001229 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001230 "hex() argument can't be converted to hex");
1231 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001232 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001233 res = (*nb->nb_hex)(v);
1234 if (res && !PyString_Check(res)) {
1235 PyErr_Format(PyExc_TypeError,
1236 "__hex__ returned non-string (type %.200s)",
1237 res->ob_type->tp_name);
1238 Py_DECREF(res);
1239 return NULL;
1240 }
1241 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001242}
1243
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001244PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001245"hex(number) -> string\n\
1246\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001247Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001248
1249
Guido van Rossum79f25d91997-04-29 20:08:16 +00001250static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001251builtin_iter(PyObject *self, PyObject *args)
1252{
1253 PyObject *v, *w = NULL;
1254
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001255 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001256 return NULL;
1257 if (w == NULL)
1258 return PyObject_GetIter(v);
1259 if (!PyCallable_Check(v)) {
1260 PyErr_SetString(PyExc_TypeError,
1261 "iter(v, w): v must be callable");
1262 return NULL;
1263 }
1264 return PyCallIter_New(v, w);
1265}
1266
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001267PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001268"iter(collection) -> iterator\n\
1269iter(callable, sentinel) -> iterator\n\
1270\n\
1271Get an iterator from an object. In the first form, the argument must\n\
1272supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001273In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001274
1275
1276static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001277builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001278{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001279 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001280
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001281 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001282 if (res < 0 && PyErr_Occurred())
1283 return NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001284 return PyInt_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001285}
1286
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001287PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001288"len(object) -> integer\n\
1289\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001290Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001291
1292
Guido van Rossum79f25d91997-04-29 20:08:16 +00001293static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001294builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001295{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001296 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001297
Guido van Rossum79f25d91997-04-29 20:08:16 +00001298 d = PyEval_GetLocals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00001299 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001300 return d;
1301}
1302
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001303PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001304"locals() -> dictionary\n\
1305\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001306Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001307
1308
Guido van Rossum79f25d91997-04-29 20:08:16 +00001309static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001310min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001311{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001312 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001313 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001314
Guido van Rossum79f25d91997-04-29 20:08:16 +00001315 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001316 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001317 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001318 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001319
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001320 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1321 keyfunc = PyDict_GetItemString(kwds, "key");
1322 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001323 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001324 "%s() got an unexpected keyword argument", name);
1325 return NULL;
1326 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001327 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001328
Tim Petersc3074532001-05-03 07:00:32 +00001329 it = PyObject_GetIter(v);
1330 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001331 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001332
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001333 maxitem = NULL; /* the result */
1334 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001335 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001336 /* get the value from the key function */
1337 if (keyfunc != NULL) {
1338 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1339 if (val == NULL)
1340 goto Fail_it_item;
1341 }
1342 /* no key function; the value is the item */
1343 else {
1344 val = item;
1345 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001346 }
Tim Petersc3074532001-05-03 07:00:32 +00001347
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001348 /* maximum value and item are unset; set them */
1349 if (maxval == NULL) {
1350 maxitem = item;
1351 maxval = val;
1352 }
1353 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001354 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001355 int cmp = PyObject_RichCompareBool(val, maxval, op);
1356 if (cmp < 0)
1357 goto Fail_it_item_and_val;
1358 else if (cmp > 0) {
1359 Py_DECREF(maxval);
1360 Py_DECREF(maxitem);
1361 maxval = val;
1362 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001363 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001364 else {
1365 Py_DECREF(item);
1366 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001367 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001368 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001369 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001370 if (PyErr_Occurred())
1371 goto Fail_it;
1372 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001373 PyErr_Format(PyExc_ValueError,
1374 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001375 assert(maxitem == NULL);
1376 }
1377 else
1378 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001379 Py_DECREF(it);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001380 return maxitem;
1381
1382Fail_it_item_and_val:
1383 Py_DECREF(val);
1384Fail_it_item:
1385 Py_DECREF(item);
1386Fail_it:
1387 Py_XDECREF(maxval);
1388 Py_XDECREF(maxitem);
1389 Py_DECREF(it);
1390 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001391}
1392
Guido van Rossum79f25d91997-04-29 20:08:16 +00001393static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001394builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001395{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001396 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001397}
1398
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001399PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001400"min(iterable[, key=func]) -> value\n\
1401min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001402\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001403With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001404With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001405
1406
Guido van Rossum79f25d91997-04-29 20:08:16 +00001407static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001408builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001409{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001410 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001411}
1412
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001413PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001414"max(iterable[, key=func]) -> value\n\
1415max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001416\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001417With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001418With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001419
1420
Guido van Rossum79f25d91997-04-29 20:08:16 +00001421static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001422builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001423{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001424 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001425 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001426
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001427 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1428 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001429 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001430 "oct() argument can't be converted to oct");
1431 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001432 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001433 res = (*nb->nb_oct)(v);
1434 if (res && !PyString_Check(res)) {
1435 PyErr_Format(PyExc_TypeError,
1436 "__oct__ returned non-string (type %.200s)",
1437 res->ob_type->tp_name);
1438 Py_DECREF(res);
1439 return NULL;
1440 }
1441 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001442}
1443
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001444PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001445"oct(number) -> string\n\
1446\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001447Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001448
1449
Guido van Rossum79f25d91997-04-29 20:08:16 +00001450static PyObject *
Thomas Wouters477c8d52006-05-27 19:21:47 +00001451builtin_open(PyObject *self, PyObject *args, PyObject *kwds)
1452{
1453 return PyObject_Call((PyObject*)&PyFile_Type, args, kwds);
1454}
1455
1456PyDoc_STRVAR(open_doc,
1457"open(name[, mode[, buffering]]) -> file object\n\
1458\n\
1459Open a file using the file() type, returns a file object.");
1460
1461
1462static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001463builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001464{
Guido van Rossum09095f32000-03-10 23:00:52 +00001465 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001466 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001467
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001468 if (PyString_Check(obj)) {
1469 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001470 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001471 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001472 return PyInt_FromLong(ord);
1473 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001474#ifdef Py_USING_UNICODE
Guido van Rossum98f97462007-04-13 03:31:13 +00001475 }
1476 else if (PyUnicode_Check(obj)) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001477 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001478 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001479 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001480 return PyInt_FromLong(ord);
1481 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001482#endif
Guido van Rossum98f97462007-04-13 03:31:13 +00001483 }
1484 else if (PyBytes_Check(obj)) {
1485 /* XXX Hopefully this is temporary */
1486 size = PyBytes_GET_SIZE(obj);
1487 if (size == 1) {
1488 ord = (long)*PyBytes_AS_STRING(obj);
1489 return PyInt_FromLong(ord);
1490 }
1491 }
1492 else {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001493 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001494 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001495 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001496 return NULL;
1497 }
1498
Guido van Rossumad991772001-01-12 16:03:05 +00001499 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001500 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001501 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001502 size);
1503 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001504}
1505
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001506PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001507"ord(c) -> integer\n\
1508\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001509Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001510
1511
Guido van Rossum79f25d91997-04-29 20:08:16 +00001512static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001513builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001514{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001515 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001516
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001517 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001518 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001519 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001520}
1521
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001522PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001523"pow(x, y[, z]) -> number\n\
1524\n\
1525With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001526equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001527
1528
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001529
Guido van Rossum34343512006-11-30 22:13:52 +00001530static PyObject *
1531builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1532{
1533 static char *kwlist[] = {"sep", "end", "file", 0};
Georg Brandl257d3d92007-02-26 10:35:10 +00001534 static PyObject *dummy_args;
Guido van Rossum34343512006-11-30 22:13:52 +00001535 PyObject *sep = NULL, *end = NULL, *file = NULL;
1536 int i, err;
1537
Georg Brandl257d3d92007-02-26 10:35:10 +00001538 if (dummy_args == NULL) {
1539 if (!(dummy_args = PyTuple_New(0)))
1540 return NULL;
1541 }
Georg Brandl88fc6642007-02-09 21:28:07 +00001542 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
Guido van Rossum34343512006-11-30 22:13:52 +00001543 kwlist, &sep, &end, &file))
1544 return NULL;
1545 if (file == NULL || file == Py_None)
1546 file = PySys_GetObject("stdout");
1547
Georg Brandl16f3e032006-11-30 22:46:03 +00001548 if (sep && sep != Py_None && !PyString_Check(sep) &&
1549 !PyUnicode_Check(sep)) {
1550 PyErr_Format(PyExc_TypeError,
1551 "sep must be None, str or unicode, not %.200s",
1552 sep->ob_type->tp_name);
1553 return NULL;
1554 }
1555 if (end && end != Py_None && !PyString_Check(end) &&
1556 !PyUnicode_Check(end)) {
1557 PyErr_Format(PyExc_TypeError,
1558 "end must be None, str or unicode, not %.200s",
1559 end->ob_type->tp_name);
1560 return NULL;
1561 }
Guido van Rossum34343512006-11-30 22:13:52 +00001562
1563 for (i = 0; i < PyTuple_Size(args); i++) {
1564 if (i > 0) {
1565 if (sep == NULL || sep == Py_None)
1566 err = PyFile_WriteString(" ", file);
1567 else
1568 err = PyFile_WriteObject(sep, file,
1569 Py_PRINT_RAW);
1570 if (err)
1571 return NULL;
1572 }
1573 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1574 Py_PRINT_RAW);
1575 if (err)
1576 return NULL;
1577 }
1578
1579 if (end == NULL || end == Py_None)
1580 err = PyFile_WriteString("\n", file);
1581 else
1582 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1583 if (err)
1584 return NULL;
1585
1586 Py_RETURN_NONE;
1587}
1588
1589PyDoc_STRVAR(print_doc,
Guido van Rossum452bf512007-02-09 05:32:43 +00001590"print(value, ..., file=None, sep=' ', end='\\n')\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001591\n\
1592Prints the values to a stream, or to sys.stdout by default.\n\
1593Optional keyword arguments:\n\
1594file: a file-like object (stream); defaults to the current sys.stdout.\n\
1595sep: string inserted between values, default a space.\n\
1596end: string appended after the last value, default a newline.");
1597
1598
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001599/* Return number of items in range (lo, hi, step), when arguments are
1600 * PyInt or PyLong objects. step > 0 required. Return a value < 0 if
1601 * & only if the true value is too large to fit in a signed long.
1602 * Arguments MUST return 1 with either PyInt_Check() or
1603 * PyLong_Check(). Return -1 when there is an error.
1604 */
1605static long
1606get_len_of_range_longs(PyObject *lo, PyObject *hi, PyObject *step)
1607{
1608 /* -------------------------------------------------------------
1609 Algorithm is equal to that of get_len_of_range(), but it operates
1610 on PyObjects (which are assumed to be PyLong or PyInt objects).
1611 ---------------------------------------------------------------*/
1612 long n;
1613 PyObject *diff = NULL;
1614 PyObject *one = NULL;
1615 PyObject *tmp1 = NULL, *tmp2 = NULL, *tmp3 = NULL;
1616 /* holds sub-expression evaluations */
1617
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001618 /* If (lo >= hi), return length of 0 (or error). */
1619 n = PyObject_RichCompareBool(lo, hi, Py_LT);
1620 if (n <= 0)
1621 return n;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001622
1623 if ((one = PyLong_FromLong(1L)) == NULL)
1624 goto Fail;
1625
1626 if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL)
1627 goto Fail;
1628
1629 if ((diff = PyNumber_Subtract(tmp1, one)) == NULL)
1630 goto Fail;
1631
1632 if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL)
1633 goto Fail;
1634
1635 if ((tmp3 = PyNumber_Add(tmp2, one)) == NULL)
1636 goto Fail;
1637
1638 n = PyLong_AsLong(tmp3);
1639 if (PyErr_Occurred()) { /* Check for Overflow */
1640 PyErr_Clear();
1641 goto Fail;
1642 }
1643
1644 Py_DECREF(tmp3);
1645 Py_DECREF(tmp2);
1646 Py_DECREF(diff);
1647 Py_DECREF(tmp1);
1648 Py_DECREF(one);
1649 return n;
1650
1651 Fail:
1652 Py_XDECREF(tmp3);
1653 Py_XDECREF(tmp2);
1654 Py_XDECREF(diff);
1655 Py_XDECREF(tmp1);
1656 Py_XDECREF(one);
1657 return -1;
1658}
1659
1660/* An extension of builtin_range() that handles the case when PyLong
1661 * arguments are given. */
1662static PyObject *
1663handle_range_longs(PyObject *self, PyObject *args)
1664{
1665 PyObject *ilow;
Tim Peters874e1f72003-04-13 22:13:08 +00001666 PyObject *ihigh = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001667 PyObject *istep = NULL;
Tim Peters874e1f72003-04-13 22:13:08 +00001668
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001669 PyObject *curnum = NULL;
1670 PyObject *v = NULL;
1671 long bign;
1672 int i, n;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001673 int step_pos;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001674
Tim Peters874e1f72003-04-13 22:13:08 +00001675 PyObject *zero = PyLong_FromLong(0);
1676
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001677 if (zero == NULL)
1678 return NULL;
1679
Tim Peters874e1f72003-04-13 22:13:08 +00001680 if (!PyArg_UnpackTuple(args, "range", 1, 3, &ilow, &ihigh, &istep)) {
1681 Py_DECREF(zero);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001682 return NULL;
1683 }
1684
Tim Peters874e1f72003-04-13 22:13:08 +00001685 /* Figure out which way we were called, supply defaults, and be
1686 * sure to incref everything so that the decrefs at the end
1687 * are correct.
1688 */
1689 assert(ilow != NULL);
1690 if (ihigh == NULL) {
1691 /* only 1 arg -- it's the upper limit */
1692 ihigh = ilow;
1693 ilow = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001694 }
Tim Peters874e1f72003-04-13 22:13:08 +00001695 assert(ihigh != NULL);
1696 Py_INCREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001697
Tim Peters874e1f72003-04-13 22:13:08 +00001698 /* ihigh correct now; do ilow */
1699 if (ilow == NULL)
1700 ilow = zero;
1701 Py_INCREF(ilow);
1702
1703 /* ilow and ihigh correct now; do istep */
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001704 if (istep == NULL) {
1705 istep = PyLong_FromLong(1L);
1706 if (istep == NULL)
1707 goto Fail;
1708 }
1709 else {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001710 Py_INCREF(istep);
1711 }
1712
Tim Peters874e1f72003-04-13 22:13:08 +00001713 if (!PyInt_Check(ilow) && !PyLong_Check(ilow)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001714 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001715 "range() integer start argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001716 ilow->ob_type->tp_name);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001717 goto Fail;
1718 }
1719
Tim Peters874e1f72003-04-13 22:13:08 +00001720 if (!PyInt_Check(ihigh) && !PyLong_Check(ihigh)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001721 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001722 "range() integer end argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001723 ihigh->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001724 goto Fail;
1725 }
1726
1727 if (!PyInt_Check(istep) && !PyLong_Check(istep)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001728 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001729 "range() integer step argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001730 istep->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001731 goto Fail;
1732 }
1733
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001734 step_pos = PyObject_RichCompareBool(istep, zero, Py_GT);
1735 if (step_pos < 0)
Tim Peters874e1f72003-04-13 22:13:08 +00001736 goto Fail;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001737 if (step_pos)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001738 bign = get_len_of_range_longs(ilow, ihigh, istep);
1739 else {
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001740 int step_zero = PyObject_RichCompareBool(istep, zero, Py_EQ);
Guido van Rossum93a66922006-08-24 02:10:21 +00001741 PyObject *neg_istep;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001742 if (step_zero < 0)
1743 goto Fail;
1744 if (step_zero) {
1745 PyErr_SetString(PyExc_ValueError,
1746 "range() step argument must not be zero");
1747 goto Fail;
1748 }
Guido van Rossum93a66922006-08-24 02:10:21 +00001749 neg_istep = PyNumber_Negative(istep);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001750 if (neg_istep == NULL)
1751 goto Fail;
1752 bign = get_len_of_range_longs(ihigh, ilow, neg_istep);
1753 Py_DECREF(neg_istep);
1754 }
1755
1756 n = (int)bign;
1757 if (bign < 0 || (long)n != bign) {
1758 PyErr_SetString(PyExc_OverflowError,
1759 "range() result has too many items");
1760 goto Fail;
1761 }
1762
1763 v = PyList_New(n);
1764 if (v == NULL)
1765 goto Fail;
1766
1767 curnum = ilow;
1768 Py_INCREF(curnum);
1769
1770 for (i = 0; i < n; i++) {
1771 PyObject *w = PyNumber_Long(curnum);
1772 PyObject *tmp_num;
1773 if (w == NULL)
1774 goto Fail;
1775
1776 PyList_SET_ITEM(v, i, w);
1777
1778 tmp_num = PyNumber_Add(curnum, istep);
1779 if (tmp_num == NULL)
1780 goto Fail;
1781
1782 Py_DECREF(curnum);
1783 curnum = tmp_num;
1784 }
Tim Peters874e1f72003-04-13 22:13:08 +00001785 Py_DECREF(ilow);
1786 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001787 Py_DECREF(istep);
1788 Py_DECREF(zero);
Tim Peters874e1f72003-04-13 22:13:08 +00001789 Py_DECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001790 return v;
1791
1792 Fail:
Tim Peters874e1f72003-04-13 22:13:08 +00001793 Py_DECREF(ilow);
1794 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001795 Py_XDECREF(istep);
Tim Peters874e1f72003-04-13 22:13:08 +00001796 Py_DECREF(zero);
1797 Py_XDECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001798 Py_XDECREF(v);
1799 return NULL;
1800}
1801
Guido van Rossum124eff01999-02-23 16:11:01 +00001802/* Return number of items in range/xrange (lo, hi, step). step > 0
1803 * required. Return a value < 0 if & only if the true value is too
1804 * large to fit in a signed long.
1805 */
1806static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001807get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001808{
1809 /* -------------------------------------------------------------
1810 If lo >= hi, the range is empty.
1811 Else if n values are in the range, the last one is
1812 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1813 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1814 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1815 the RHS is non-negative and so truncation is the same as the
1816 floor. Letting M be the largest positive long, the worst case
1817 for the RHS numerator is hi=M, lo=-M-1, and then
1818 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1819 precision to compute the RHS exactly.
1820 ---------------------------------------------------------------*/
1821 long n = 0;
1822 if (lo < hi) {
1823 unsigned long uhi = (unsigned long)hi;
1824 unsigned long ulo = (unsigned long)lo;
1825 unsigned long diff = uhi - ulo - 1;
1826 n = (long)(diff / (unsigned long)step + 1);
1827 }
1828 return n;
1829}
1830
Guido van Rossum79f25d91997-04-29 20:08:16 +00001831static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001832builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001833{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001834 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001835 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001836 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001837
Guido van Rossum79f25d91997-04-29 20:08:16 +00001838 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001839
Guido van Rossum79f25d91997-04-29 20:08:16 +00001840 if (PyTuple_Size(args) <= 1) {
1841 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001842 "l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001843 &ihigh)) {
1844 PyErr_Clear();
1845 return handle_range_longs(self, args);
1846 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001847 }
1848 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001849 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001850 "ll|l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001851 &ilow, &ihigh, &istep)) {
1852 PyErr_Clear();
1853 return handle_range_longs(self, args);
1854 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001855 }
1856 if (istep == 0) {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001857 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001858 "range() step argument must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001859 return NULL;
1860 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001861 if (istep > 0)
1862 bign = get_len_of_range(ilow, ihigh, istep);
1863 else
1864 bign = get_len_of_range(ihigh, ilow, -istep);
1865 n = (int)bign;
1866 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001867 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001868 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001869 return NULL;
1870 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001871 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001872 if (v == NULL)
1873 return NULL;
1874 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001875 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001876 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001877 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001878 return NULL;
1879 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001880 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001881 ilow += istep;
1882 }
1883 return v;
1884}
1885
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001886PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001887"range([start,] stop[, step]) -> list of integers\n\
1888\n\
1889Return a list containing an arithmetic progression of integers.\n\
1890range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1891When step is given, it specifies the increment (or decrement).\n\
1892For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001893These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001894
Guido van Rossuma88a0332007-02-26 16:59:55 +00001895static PyObject *
1896builtin_input(PyObject *self, PyObject *args)
1897{
1898 PyObject *v = NULL;
1899 PyObject *fin = PySys_GetObject("stdin");
1900 PyObject *fout = PySys_GetObject("stdout");
1901
1902 if (!PyArg_UnpackTuple(args, "input", 0, 1, &v))
1903 return NULL;
1904
1905 if (fin == NULL) {
1906 PyErr_SetString(PyExc_RuntimeError, "input: lost sys.stdin");
1907 return NULL;
1908 }
1909 if (fout == NULL) {
1910 PyErr_SetString(PyExc_RuntimeError, "input: lost sys.stdout");
1911 return NULL;
1912 }
1913 if (PyFile_AsFile(fin) && PyFile_AsFile(fout)
1914 && isatty(fileno(PyFile_AsFile(fin)))
1915 && isatty(fileno(PyFile_AsFile(fout)))) {
1916 PyObject *po;
1917 char *prompt;
1918 char *s;
1919 PyObject *result;
1920 if (v != NULL) {
1921 po = PyObject_Str(v);
1922 if (po == NULL)
1923 return NULL;
1924 prompt = PyString_AsString(po);
1925 if (prompt == NULL)
1926 return NULL;
1927 }
1928 else {
1929 po = NULL;
1930 prompt = "";
1931 }
1932 s = PyOS_Readline(PyFile_AsFile(fin), PyFile_AsFile(fout),
1933 prompt);
1934 Py_XDECREF(po);
1935 if (s == NULL) {
1936 if (!PyErr_Occurred())
1937 PyErr_SetNone(PyExc_KeyboardInterrupt);
1938 return NULL;
1939 }
1940 if (*s == '\0') {
1941 PyErr_SetNone(PyExc_EOFError);
1942 result = NULL;
1943 }
1944 else { /* strip trailing '\n' */
1945 size_t len = strlen(s);
1946 if (len > PY_SSIZE_T_MAX) {
1947 PyErr_SetString(PyExc_OverflowError,
1948 "input: input too long");
1949 result = NULL;
1950 }
1951 else {
1952 result = PyString_FromStringAndSize(s, len-1);
1953 }
1954 }
1955 PyMem_FREE(s);
1956 return result;
1957 }
1958 if (v != NULL) {
1959 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
1960 return NULL;
1961 }
1962 return PyFile_GetLine(fin, -1);
1963}
1964
1965PyDoc_STRVAR(input_doc,
1966"input([prompt]) -> string\n\
1967\n\
1968Read a string from standard input. The trailing newline is stripped.\n\
1969If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1970On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1971is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001972
Guido van Rossum79f25d91997-04-29 20:08:16 +00001973static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001974builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001975{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001976 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001977}
1978
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001979PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001980"reload(module) -> module\n\
1981\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001982Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001983
1984
Guido van Rossum79f25d91997-04-29 20:08:16 +00001985static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001986builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001987{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001988 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001989}
1990
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001991PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001992"repr(object) -> string\n\
1993\n\
1994Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001995For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001996
1997
Guido van Rossum79f25d91997-04-29 20:08:16 +00001998static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001999builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002000{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002001 double number;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002002 double f;
2003 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002004 int i;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002005 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002006
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002007 if (!PyArg_ParseTupleAndKeywords(args, kwds, "d|i:round",
2008 kwlist, &number, &ndigits))
2009 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002010 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00002011 i = abs(ndigits);
2012 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002013 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00002014 if (ndigits < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002015 number /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002016 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002017 number *= f;
2018 if (number >= 0.0)
2019 number = floor(number + 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00002020 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002021 number = ceil(number - 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00002022 if (ndigits < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002023 number *= f;
Guido van Rossum1e162d31998-05-09 14:42:25 +00002024 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002025 number /= f;
2026 return PyFloat_FromDouble(number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002027}
2028
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002029PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002030"round(number[, ndigits]) -> floating point number\n\
2031\n\
2032Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002033This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002034
Raymond Hettinger64958a12003-12-17 20:43:33 +00002035static PyObject *
2036builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
2037{
2038 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
2039 PyObject *callable;
Martin v. Löwis15e62742006-02-27 16:46:16 +00002040 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00002041 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002042
Neal Norwitz6f0d4792005-12-15 06:40:36 +00002043 /* args 1-4 should match listsort in Objects/listobject.c */
Armin Rigo71d7e702005-09-20 18:13:03 +00002044 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
2045 kwlist, &seq, &compare, &keyfunc, &reverse))
2046 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002047
2048 newlist = PySequence_List(seq);
2049 if (newlist == NULL)
2050 return NULL;
2051
2052 callable = PyObject_GetAttrString(newlist, "sort");
2053 if (callable == NULL) {
2054 Py_DECREF(newlist);
2055 return NULL;
2056 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002057
Raymond Hettinger64958a12003-12-17 20:43:33 +00002058 newargs = PyTuple_GetSlice(args, 1, 4);
2059 if (newargs == NULL) {
2060 Py_DECREF(newlist);
2061 Py_DECREF(callable);
2062 return NULL;
2063 }
2064
2065 v = PyObject_Call(callable, newargs, kwds);
2066 Py_DECREF(newargs);
2067 Py_DECREF(callable);
2068 if (v == NULL) {
2069 Py_DECREF(newlist);
2070 return NULL;
2071 }
2072 Py_DECREF(v);
2073 return newlist;
2074}
2075
2076PyDoc_STRVAR(sorted_doc,
2077"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002078
Guido van Rossum79f25d91997-04-29 20:08:16 +00002079static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002080builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002081{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002082 PyObject *v = NULL;
2083 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002084
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002085 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002086 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00002087 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002088 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002089 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002090 if (!PyErr_Occurred())
2091 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002092 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002093 }
2094 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00002095 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00002096 }
2097 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002098 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00002099 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002100 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00002101 "vars() argument must have __dict__ attribute");
2102 return NULL;
2103 }
2104 }
2105 return d;
2106}
2107
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002108PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002109"vars([object]) -> dictionary\n\
2110\n\
2111Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002112With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002113
Alex Martellia70b1912003-04-22 08:12:33 +00002114
2115static PyObject*
2116builtin_sum(PyObject *self, PyObject *args)
2117{
2118 PyObject *seq;
2119 PyObject *result = NULL;
2120 PyObject *temp, *item, *iter;
2121
Raymond Hettinger5cf63942003-10-25 06:41:37 +00002122 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00002123 return NULL;
2124
2125 iter = PyObject_GetIter(seq);
2126 if (iter == NULL)
2127 return NULL;
2128
2129 if (result == NULL) {
2130 result = PyInt_FromLong(0);
2131 if (result == NULL) {
2132 Py_DECREF(iter);
2133 return NULL;
2134 }
2135 } else {
2136 /* reject string values for 'start' parameter */
2137 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
2138 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002139 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00002140 Py_DECREF(iter);
2141 return NULL;
2142 }
Alex Martelli41c9f882003-04-22 09:24:48 +00002143 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00002144 }
2145
2146 for(;;) {
2147 item = PyIter_Next(iter);
2148 if (item == NULL) {
2149 /* error, or end-of-sequence */
2150 if (PyErr_Occurred()) {
2151 Py_DECREF(result);
2152 result = NULL;
2153 }
2154 break;
2155 }
Alex Martellia253e182003-10-25 23:24:14 +00002156 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00002157 Py_DECREF(result);
2158 Py_DECREF(item);
2159 result = temp;
2160 if (result == NULL)
2161 break;
2162 }
2163 Py_DECREF(iter);
2164 return result;
2165}
2166
2167PyDoc_STRVAR(sum_doc,
Thomas Wouters89f507f2006-12-13 04:49:30 +00002168"sum(sequence[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00002169\n\
2170Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00002171of parameter 'start' (which defaults to 0). When the sequence is\n\
2172empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00002173
2174
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002175static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002176builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002177{
2178 PyObject *inst;
2179 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00002180 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002181
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002182 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002183 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002184
Guido van Rossum823649d2001-03-21 18:40:58 +00002185 retval = PyObject_IsInstance(inst, cls);
2186 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00002187 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002188 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002189}
2190
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002191PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002192"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002193\n\
2194Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002195With a type as second argument, return whether that is the object's type.\n\
2196The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002197isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002198
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002199
2200static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002201builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002202{
2203 PyObject *derived;
2204 PyObject *cls;
2205 int retval;
2206
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002207 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002208 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002209
Guido van Rossum823649d2001-03-21 18:40:58 +00002210 retval = PyObject_IsSubclass(derived, cls);
2211 if (retval < 0)
2212 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002213 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002214}
2215
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002216PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002217"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002218\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002219Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2220When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2221is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002222
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002223
Barry Warsawbd599b52000-08-03 15:45:29 +00002224static PyObject*
2225builtin_zip(PyObject *self, PyObject *args)
2226{
Guido van Rossumb65fb332006-08-25 23:26:40 +00002227 /* args must be a tuple */
2228 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00002229
Guido van Rossumb65fb332006-08-25 23:26:40 +00002230 return _PyZip_CreateIter(args);
Barry Warsawbd599b52000-08-03 15:45:29 +00002231}
2232
2233
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002234PyDoc_STRVAR(zip_doc,
Guido van Rossum801f0d72006-08-24 19:48:10 +00002235"zip(it1 [, it2 [...]]) -> iter([(it1[0], it2[0] ...), ...])\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002236\n\
Guido van Rossum801f0d72006-08-24 19:48:10 +00002237Return an iterator yielding tuples, where each tuple contains the\n\
2238corresponding element from each of the argument iterables.\n\
2239The returned iterator ends when the shortest argument iterable is exhausted.\n\
2240NOTE: This is implemented using itertools.izip().");
Barry Warsawbd599b52000-08-03 15:45:29 +00002241
2242
Guido van Rossum79f25d91997-04-29 20:08:16 +00002243static PyMethodDef builtin_methods[] = {
Guido van Rossum52cc1d82007-03-18 15:41:51 +00002244 {"__build_class__", (PyCFunction)builtin___build_class__,
2245 METH_VARARGS | METH_KEYWORDS, build_class_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002246 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002247 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002248 {"all", builtin_all, METH_O, all_doc},
2249 {"any", builtin_any, METH_O, any_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002250 {"callable", builtin_callable, METH_O, callable_doc},
Guido van Rossum84fc66d2007-05-03 17:18:26 +00002251 {"chr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002252 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
Guido van Rossumd8faa362007-04-27 19:54:29 +00002253 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002254 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2255 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2256 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2257 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00002258 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002259 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
2260 {"filter", builtin_filter, METH_VARARGS, filter_doc},
2261 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2262 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2263 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2264 {"hash", builtin_hash, METH_O, hash_doc},
2265 {"hex", builtin_hex, METH_O, hex_doc},
2266 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00002267 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002268 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2269 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2270 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2271 {"len", builtin_len, METH_O, len_doc},
2272 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2273 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002274 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2275 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandla18af4e2007-04-21 15:47:16 +00002276 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002277 {"oct", builtin_oct, METH_O, oct_doc},
Thomas Wouters477c8d52006-05-27 19:21:47 +00002278 {"open", (PyCFunction)builtin_open, METH_VARARGS | METH_KEYWORDS, open_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002279 {"ord", builtin_ord, METH_O, ord_doc},
2280 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00002281 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002282 {"range", builtin_range, METH_VARARGS, range_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002283 {"reload", builtin_reload, METH_O, reload_doc},
2284 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002285 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002286 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002287 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002288 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002289#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002290 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002291#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002292 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002293 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002294 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002295};
2296
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002297PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002298"Built-in functions, exceptions, and other objects.\n\
2299\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002300Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002301
Guido van Rossum25ce5661997-08-02 03:10:38 +00002302PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002303_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002304{
Fred Drake5550de32000-06-20 04:54:19 +00002305 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002306 mod = Py_InitModule4("__builtin__", builtin_methods,
2307 builtin_doc, (PyObject *)NULL,
2308 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002309 if (mod == NULL)
2310 return NULL;
2311 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002312
Tim Peters7571a0f2003-03-23 17:52:28 +00002313#ifdef Py_TRACE_REFS
2314 /* __builtin__ exposes a number of statically allocated objects
2315 * that, before this code was added in 2.3, never showed up in
2316 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2317 * result, programs leaking references to None and False (etc)
2318 * couldn't be diagnosed by examining sys.getobjects(0).
2319 */
2320#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2321#else
2322#define ADD_TO_ALL(OBJECT) (void)0
2323#endif
2324
Tim Peters4b7625e2001-09-13 21:37:17 +00002325#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002326 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2327 return NULL; \
2328 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002329
2330 SETBUILTIN("None", Py_None);
2331 SETBUILTIN("Ellipsis", Py_Ellipsis);
2332 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002333 SETBUILTIN("False", Py_False);
2334 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00002335 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002336 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002337 SETBUILTIN("buffer", &PyBuffer_Type);
Guido van Rossum4dfe8a12006-04-22 23:28:04 +00002338 SETBUILTIN("bytes", &PyBytes_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002339 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002340#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002341 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002342#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002343 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002344 SETBUILTIN("enumerate", &PyEnum_Type);
Thomas Wouters477c8d52006-05-27 19:21:47 +00002345 SETBUILTIN("file", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002346 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002347 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002348 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00002349 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002350 SETBUILTIN("list", &PyList_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002351 SETBUILTIN("object", &PyBaseObject_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002352 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002353 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002354 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002355 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Guido van Rossum572dbf82007-04-27 23:53:51 +00002356 SETBUILTIN("str", &PyUnicode_Type);
Guido van Rossum84fc66d2007-05-03 17:18:26 +00002357 SETBUILTIN("str8", &PyString_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002358 SETBUILTIN("super", &PySuper_Type);
2359 SETBUILTIN("tuple", &PyTuple_Type);
2360 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00002361 SETBUILTIN("xrange", &PyRange_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002362#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00002363 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002364#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00002365 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002366 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2367 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002368 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002369 }
2370 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002371
Guido van Rossum25ce5661997-08-02 03:10:38 +00002372 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002373#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002374#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002375}
2376
Guido van Rossume77a7571993-11-03 15:01:26 +00002377/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002378
Guido van Rossum79f25d91997-04-29 20:08:16 +00002379static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002380filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002381{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002382 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002383 Py_ssize_t i, j;
2384 Py_ssize_t len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002385
Guido van Rossumb7b45621995-08-04 04:07:45 +00002386 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002387 if (PyTuple_CheckExact(tuple))
2388 Py_INCREF(tuple);
2389 else
2390 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002391 return tuple;
2392 }
2393
Guido van Rossum79f25d91997-04-29 20:08:16 +00002394 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002395 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002396
Guido van Rossum12d12c51993-10-26 17:58:25 +00002397 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002398 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002399 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002400
Walter Dörwald8dd19322003-02-10 17:36:40 +00002401 if (tuple->ob_type->tp_as_sequence &&
2402 tuple->ob_type->tp_as_sequence->sq_item) {
2403 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002404 if (item == NULL)
2405 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002406 } else {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002407 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002408 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002409 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002410 if (func == Py_None) {
2411 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002412 good = item;
2413 }
2414 else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002415 PyObject *arg = PyTuple_Pack(1, item);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002416 if (arg == NULL) {
2417 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002418 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002419 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002420 good = PyEval_CallObject(func, arg);
2421 Py_DECREF(arg);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002422 if (good == NULL) {
2423 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002424 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002425 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002426 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002427 ok = PyObject_IsTrue(good);
2428 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002429 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002430 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002431 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002432 }
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002433 else
2434 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002435 }
2436
Tim Peters4324aa32001-05-28 22:30:08 +00002437 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002438 return NULL;
2439
Guido van Rossum12d12c51993-10-26 17:58:25 +00002440 return result;
2441
Guido van Rossum12d12c51993-10-26 17:58:25 +00002442Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002443 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002444 return NULL;
2445}
2446
2447
Guido van Rossume77a7571993-11-03 15:01:26 +00002448/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002449
Guido van Rossum79f25d91997-04-29 20:08:16 +00002450static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002451filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002452{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002453 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002454 Py_ssize_t i, j;
2455 Py_ssize_t len = PyString_Size(strobj);
2456 Py_ssize_t outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002457
Guido van Rossum79f25d91997-04-29 20:08:16 +00002458 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002459 /* If it's a real string we can return the original,
2460 * as no character is ever false and __getitem__
2461 * does return this character. If it's a subclass
2462 * we must go through the __getitem__ loop */
2463 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002464 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002465 return strobj;
2466 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002467 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002468 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002469 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002470
Guido van Rossum12d12c51993-10-26 17:58:25 +00002471 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002472 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002473 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002474
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002475 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2476 if (item == NULL)
2477 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002478 if (func==Py_None) {
2479 ok = 1;
2480 } else {
2481 PyObject *arg, *good;
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002482 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002483 if (arg == NULL) {
2484 Py_DECREF(item);
2485 goto Fail_1;
2486 }
2487 good = PyEval_CallObject(func, arg);
2488 Py_DECREF(arg);
2489 if (good == NULL) {
2490 Py_DECREF(item);
2491 goto Fail_1;
2492 }
2493 ok = PyObject_IsTrue(good);
2494 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00002495 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002496 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002497 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002498 if (!PyString_Check(item)) {
2499 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2500 " __getitem__ returned different type");
2501 Py_DECREF(item);
2502 goto Fail_1;
2503 }
2504 reslen = PyString_GET_SIZE(item);
2505 if (reslen == 1) {
2506 PyString_AS_STRING(result)[j++] =
2507 PyString_AS_STRING(item)[0];
2508 } else {
2509 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002510 Py_ssize_t need = j + reslen + len-i-1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002511 if (need > outlen) {
2512 /* overallocate, to avoid reallocations */
2513 if (need<2*outlen)
2514 need = 2*outlen;
2515 if (_PyString_Resize(&result, need)) {
2516 Py_DECREF(item);
2517 return NULL;
2518 }
2519 outlen = need;
2520 }
2521 memcpy(
2522 PyString_AS_STRING(result) + j,
2523 PyString_AS_STRING(item),
2524 reslen
2525 );
2526 j += reslen;
2527 }
2528 }
Tim Peters388ed082001-04-07 20:34:48 +00002529 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002530 }
2531
Walter Dörwald903f1e02003-02-04 16:28:00 +00002532 if (j < outlen)
Tim Peters5de98422002-04-27 18:44:32 +00002533 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002534
Guido van Rossum12d12c51993-10-26 17:58:25 +00002535 return result;
2536
Guido van Rossum12d12c51993-10-26 17:58:25 +00002537Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002538 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002539 return NULL;
2540}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002541
2542#ifdef Py_USING_UNICODE
2543/* Helper for filter(): filter a Unicode object through a function */
2544
2545static PyObject *
2546filterunicode(PyObject *func, PyObject *strobj)
2547{
2548 PyObject *result;
Martin v. Löwis725507b2006-03-07 12:08:51 +00002549 register Py_ssize_t i, j;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002550 Py_ssize_t len = PyUnicode_GetSize(strobj);
2551 Py_ssize_t outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002552
2553 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002554 /* If it's a real string we can return the original,
2555 * as no character is ever false and __getitem__
2556 * does return this character. If it's a subclass
2557 * we must go through the __getitem__ loop */
2558 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002559 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002560 return strobj;
2561 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002562 }
2563 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2564 return NULL;
2565
2566 for (i = j = 0; i < len; ++i) {
2567 PyObject *item, *arg, *good;
2568 int ok;
2569
2570 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2571 if (item == NULL)
2572 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002573 if (func == Py_None) {
2574 ok = 1;
2575 } else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002576 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002577 if (arg == NULL) {
2578 Py_DECREF(item);
2579 goto Fail_1;
2580 }
2581 good = PyEval_CallObject(func, arg);
2582 Py_DECREF(arg);
2583 if (good == NULL) {
2584 Py_DECREF(item);
2585 goto Fail_1;
2586 }
2587 ok = PyObject_IsTrue(good);
2588 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002589 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002590 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002591 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002592 if (!PyUnicode_Check(item)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002593 PyErr_SetString(PyExc_TypeError,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002594 "can't filter unicode to unicode:"
2595 " __getitem__ returned different type");
Walter Dörwald903f1e02003-02-04 16:28:00 +00002596 Py_DECREF(item);
2597 goto Fail_1;
2598 }
2599 reslen = PyUnicode_GET_SIZE(item);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002600 if (reslen == 1)
Walter Dörwald903f1e02003-02-04 16:28:00 +00002601 PyUnicode_AS_UNICODE(result)[j++] =
2602 PyUnicode_AS_UNICODE(item)[0];
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002603 else {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002604 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002605 Py_ssize_t need = j + reslen + len - i - 1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002606 if (need > outlen) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002607 /* overallocate,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002608 to avoid reallocations */
2609 if (need < 2 * outlen)
2610 need = 2 * outlen;
Jeremy Hylton364f6be2003-09-16 03:17:16 +00002611 if (PyUnicode_Resize(
2612 &result, need) < 0) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002613 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002614 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002615 }
2616 outlen = need;
2617 }
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002618 memcpy(PyUnicode_AS_UNICODE(result) + j,
2619 PyUnicode_AS_UNICODE(item),
2620 reslen*sizeof(Py_UNICODE));
Walter Dörwald903f1e02003-02-04 16:28:00 +00002621 j += reslen;
2622 }
2623 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002624 Py_DECREF(item);
2625 }
2626
Walter Dörwald903f1e02003-02-04 16:28:00 +00002627 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002628 PyUnicode_Resize(&result, j);
2629
2630 return result;
2631
2632Fail_1:
2633 Py_DECREF(result);
2634 return NULL;
2635}
2636#endif