blob: 828cb5d4cd22d1229c972be477ed302e3a1f291b [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 Hammond26cffde2001-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 Hammond26cffde2001-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 Hammond26cffde2001-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 +000028static PyObject *filterunicode(PyObject *, PyObject *);
Tim Petersdbd9ba62000-07-09 03:09:57 +000029static PyObject *filtertuple (PyObject *, PyObject *);
Guido van Rossum12d12c51993-10-26 17:58:25 +000030
Guido van Rossum79f25d91997-04-29 20:08:16 +000031static PyObject *
Guido van Rossum52cc1d82007-03-18 15:41:51 +000032builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds)
33{
34 PyObject *func, *name, *bases, *mkw, *meta, *prep, *ns, *res;
35 Py_ssize_t nargs, nbases;
36
37 assert(args != NULL);
38 if (!PyTuple_Check(args)) {
39 PyErr_SetString(PyExc_TypeError,
40 "__build_class__: args is not a tuple");
41 return NULL;
42 }
43 nargs = PyTuple_GET_SIZE(args);
44 if (nargs < 2) {
45 PyErr_SetString(PyExc_TypeError,
46 "__build_class__: not enough arguments");
47 return NULL;
48 }
49 func = PyTuple_GET_ITEM(args, 0); /* Better be callable */
50 name = PyTuple_GET_ITEM(args, 1);
51 if (!PyString_Check(name)) {
52 PyErr_SetString(PyExc_TypeError,
53 "__build_class__: name is not a string");
54 return NULL;
55 }
56 bases = PyTuple_GetSlice(args, 2, nargs);
57 if (bases == NULL)
58 return NULL;
59 nbases = nargs - 2;
60
61 if (kwds == NULL) {
62 meta = NULL;
63 mkw = NULL;
64 }
65 else {
66 mkw = PyDict_Copy(kwds); /* Don't modify kwds passed in! */
67 if (mkw == NULL) {
68 Py_DECREF(bases);
69 return NULL;
70 }
71 meta = PyDict_GetItemString(mkw, "metaclass");
72 if (meta != NULL) {
73 Py_INCREF(meta);
74 if (PyDict_DelItemString(mkw, "metaclass") < 0) {
75 Py_DECREF(meta);
76 Py_DECREF(mkw);
77 Py_DECREF(bases);
78 return NULL;
79 }
80 }
81 }
82 if (meta == NULL) {
83 if (PyTuple_GET_SIZE(bases) == 0)
84 meta = (PyObject *) (&PyType_Type);
85 else {
86 PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
87 meta = (PyObject *) (base0->ob_type);
88 }
89 Py_INCREF(meta);
90 }
91 prep = PyObject_GetAttrString(meta, "__prepare__");
92 if (prep == NULL) {
93 PyErr_Clear();
94 ns = PyDict_New();
95 }
96 else {
97 PyObject *pargs = Py_BuildValue("OO", name, bases);
98 if (pargs == NULL) {
99 Py_DECREF(prep);
100 Py_DECREF(meta);
101 Py_XDECREF(mkw);
102 Py_DECREF(bases);
103 return NULL;
104 }
105 ns = PyEval_CallObjectWithKeywords(prep, pargs, mkw);
106 Py_DECREF(pargs);
107 Py_DECREF(prep);
108 if (ns == NULL) {
109 Py_DECREF(meta);
110 Py_XDECREF(mkw);
111 Py_DECREF(bases);
112 return NULL;
113 }
114 }
115 res = PyObject_CallFunctionObjArgs(func, ns, NULL);
116 if (res != NULL) {
117 PyObject *margs;
118 Py_DECREF(res);
119 res = NULL;
120 margs = Py_BuildValue("OOO", name, bases, ns);
121 if (margs != NULL) {
122 res = PyEval_CallObjectWithKeywords(meta, margs, mkw);
123 Py_DECREF(margs);
124 }
125 }
126 Py_DECREF(ns);
127 Py_DECREF(meta);
128 Py_XDECREF(mkw);
129 Py_DECREF(bases);
130 return res;
131}
132
133PyDoc_STRVAR(build_class_doc,
134"__build_class__(func, name, *bases, metaclass=None, **kwds) -> class\n\
135\n\
136Internal helper function used by the class statement.");
137
138static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000139builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000140{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000141 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
142 "level", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000143 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000144 PyObject *globals = NULL;
145 PyObject *locals = NULL;
146 PyObject *fromlist = NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +0000147 int level = -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000148
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000149 if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|OOOi:__import__",
150 kwlist, &name, &globals, &locals, &fromlist, &level))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000151 return NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +0000152 return PyImport_ImportModuleLevel(name, globals, locals,
153 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000154}
155
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000156PyDoc_STRVAR(import_doc,
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000157"__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000158\n\
159Import a module. The globals are only used to determine the context;\n\
160they are not modified. The locals are currently unused. The fromlist\n\
161should be a list of names to emulate ``from name import ...'', or an\n\
162empty list to emulate ``import name''.\n\
163When importing a module from a package, note that __import__('A.B', ...)\n\
164returns package A when fromlist is empty, but its submodule B when\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000165fromlist is not empty. Level is used to determine whether to perform \n\
166absolute or relative imports. -1 is the original strategy of attempting\n\
167both absolute and relative imports, 0 is absolute, a positive number\n\
168is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000169
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000170
Guido van Rossum79f25d91997-04-29 20:08:16 +0000171static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000172builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000173{
Guido van Rossum09df08a1998-05-22 00:51:39 +0000174 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000175}
176
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000177PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000178"abs(number) -> number\n\
179\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000180Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000181
Raymond Hettinger96229b12005-03-11 06:49:40 +0000182static PyObject *
183builtin_all(PyObject *self, PyObject *v)
184{
185 PyObject *it, *item;
186
187 it = PyObject_GetIter(v);
188 if (it == NULL)
189 return NULL;
190
191 while ((item = PyIter_Next(it)) != NULL) {
192 int cmp = PyObject_IsTrue(item);
193 Py_DECREF(item);
194 if (cmp < 0) {
195 Py_DECREF(it);
196 return NULL;
197 }
198 if (cmp == 0) {
199 Py_DECREF(it);
200 Py_RETURN_FALSE;
201 }
202 }
203 Py_DECREF(it);
204 if (PyErr_Occurred())
205 return NULL;
206 Py_RETURN_TRUE;
207}
208
209PyDoc_STRVAR(all_doc,
210"all(iterable) -> bool\n\
211\n\
212Return True if bool(x) is True for all values x in the iterable.");
213
214static PyObject *
215builtin_any(PyObject *self, PyObject *v)
216{
217 PyObject *it, *item;
218
219 it = PyObject_GetIter(v);
220 if (it == NULL)
221 return NULL;
222
223 while ((item = PyIter_Next(it)) != NULL) {
224 int cmp = PyObject_IsTrue(item);
225 Py_DECREF(item);
226 if (cmp < 0) {
227 Py_DECREF(it);
228 return NULL;
229 }
230 if (cmp == 1) {
231 Py_DECREF(it);
232 Py_RETURN_TRUE;
233 }
234 }
235 Py_DECREF(it);
236 if (PyErr_Occurred())
237 return NULL;
238 Py_RETURN_FALSE;
239}
240
241PyDoc_STRVAR(any_doc,
242"any(iterable) -> bool\n\
243\n\
244Return True if bool(x) is True for any x in the iterable.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000245
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000246
Guido van Rossum79f25d91997-04-29 20:08:16 +0000247static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000248builtin_callable(PyObject *self, PyObject *v)
Guido van Rossum2d951851994-08-29 12:52:16 +0000249{
Guido van Rossum77f6a652002-04-03 22:41:51 +0000250 return PyBool_FromLong((long)PyCallable_Check(v));
Guido van Rossum2d951851994-08-29 12:52:16 +0000251}
252
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000253PyDoc_STRVAR(callable_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000254"callable(object) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000255\n\
256Return whether the object is callable (i.e., some kind of function).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000257Note that classes are callable, as are instances with a __call__() method.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000258
259
Guido van Rossum79f25d91997-04-29 20:08:16 +0000260static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000261builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000262{
Guido van Rossumc7903a12002-08-16 07:04:56 +0000263 PyObject *func, *seq, *result, *it, *arg;
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000264 Py_ssize_t len; /* guess for result list size */
265 register Py_ssize_t j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000266
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000267 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000268 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000269
Tim Peters0e57abf2001-05-02 07:39:38 +0000270 /* Strings and tuples return a result of the same type. */
271 if (PyString_Check(seq))
272 return filterstring(func, seq);
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000273 if (PyUnicode_Check(seq))
274 return filterunicode(func, seq);
Tim Peters0e57abf2001-05-02 07:39:38 +0000275 if (PyTuple_Check(seq))
276 return filtertuple(func, seq);
277
Georg Brandle35b6572005-07-19 22:20:20 +0000278 /* Pre-allocate argument list tuple. */
279 arg = PyTuple_New(1);
280 if (arg == NULL)
281 return NULL;
282
Tim Peters0e57abf2001-05-02 07:39:38 +0000283 /* Get iterator. */
284 it = PyObject_GetIter(seq);
285 if (it == NULL)
Georg Brandle35b6572005-07-19 22:20:20 +0000286 goto Fail_arg;
Tim Peters0e57abf2001-05-02 07:39:38 +0000287
288 /* Guess a result list size. */
Armin Rigof5b3e362006-02-11 21:32:43 +0000289 len = _PyObject_LengthHint(seq);
Raymond Hettingerb86269d2004-01-04 11:00:08 +0000290 if (len < 0) {
Raymond Hettingera710b332005-08-21 11:03:59 +0000291 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
292 !PyErr_ExceptionMatches(PyExc_AttributeError)) {
293 goto Fail_it;
294 }
Raymond Hettingerb86269d2004-01-04 11:00:08 +0000295 PyErr_Clear();
296 len = 8; /* arbitrary */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000297 }
298
Tim Peters0e57abf2001-05-02 07:39:38 +0000299 /* Get a result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000300 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000301 /* Eww - can modify the list in-place. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000302 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000303 result = seq;
304 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000305 else {
Tim Peters0e57abf2001-05-02 07:39:38 +0000306 result = PyList_New(len);
307 if (result == NULL)
308 goto Fail_it;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000309 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000310
Tim Peters0e57abf2001-05-02 07:39:38 +0000311 /* Build the result list. */
Tim Petersf4848da2001-05-05 00:14:56 +0000312 j = 0;
313 for (;;) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000314 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000315 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000316
Tim Peters0e57abf2001-05-02 07:39:38 +0000317 item = PyIter_Next(it);
318 if (item == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +0000319 if (PyErr_Occurred())
320 goto Fail_result_it;
Tim Peters0e57abf2001-05-02 07:39:38 +0000321 break;
Guido van Rossum2d951851994-08-29 12:52:16 +0000322 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000323
Neil Schemenauer68973552003-08-14 20:37:34 +0000324 if (func == (PyObject *)&PyBool_Type || func == Py_None) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000325 ok = PyObject_IsTrue(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000326 }
327 else {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000328 PyObject *good;
329 PyTuple_SET_ITEM(arg, 0, item);
330 good = PyObject_Call(func, arg, NULL);
331 PyTuple_SET_ITEM(arg, 0, NULL);
Guido van Rossum58b68731995-01-10 17:40:55 +0000332 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000333 Py_DECREF(item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000334 goto Fail_result_it;
Guido van Rossum58b68731995-01-10 17:40:55 +0000335 }
Guido van Rossumc7903a12002-08-16 07:04:56 +0000336 ok = PyObject_IsTrue(good);
337 Py_DECREF(good);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000338 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000339 if (ok) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000340 if (j < len)
341 PyList_SET_ITEM(result, j, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000342 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000343 int status = PyList_Append(result, item);
Barry Warsawfa77e091999-01-28 18:49:12 +0000344 Py_DECREF(item);
345 if (status < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000346 goto Fail_result_it;
Guido van Rossum2d951851994-08-29 12:52:16 +0000347 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000348 ++j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000349 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000350 else
351 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000352 }
353
Guido van Rossum12d12c51993-10-26 17:58:25 +0000354
Tim Peters0e57abf2001-05-02 07:39:38 +0000355 /* Cut back result list if len is too big. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000356 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000357 goto Fail_result_it;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000358
Tim Peters3c6b1482001-05-21 08:07:05 +0000359 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000360 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000361 return result;
362
Tim Peters0e57abf2001-05-02 07:39:38 +0000363Fail_result_it:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000364 Py_DECREF(result);
Tim Peters0e57abf2001-05-02 07:39:38 +0000365Fail_it:
366 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000367Fail_arg:
368 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000369 return NULL;
370}
371
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000372PyDoc_STRVAR(filter_doc,
Tim Petersd50e5442002-03-09 00:06:26 +0000373"filter(function or None, sequence) -> list, tuple, or string\n"
374"\n"
375"Return those items of sequence for which function(item) is true. If\n"
376"function is None, return the items that are true. If sequence is a tuple\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000377"or string, return the same type, else return a list.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000378
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000379
Guido van Rossum79f25d91997-04-29 20:08:16 +0000380static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000381builtin_unichr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000382{
383 long x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000384
385 if (!PyArg_ParseTuple(args, "l:unichr", &x))
386 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000387
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000388 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000389}
390
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000391PyDoc_STRVAR(unichr_doc,
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000392"chr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000393\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000394Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.");
Guido van Rossum09095f32000-03-10 23:00:52 +0000395
396
397static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000398builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000399{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000400 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000401 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000402
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000403 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000404 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000405 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000406 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000407 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000408}
409
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000410PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000411"cmp(x, y) -> integer\n\
412\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000413Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000414
Guido van Rossum79f25d91997-04-29 20:08:16 +0000415static PyObject *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000416builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000417{
418 char *str;
419 char *filename;
420 char *startstr;
421 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000422 int dont_inherit = 0;
423 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000424 PyCompilerFlags cf;
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000425 PyObject *result = NULL, *cmd, *tmp = NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000426 Py_ssize_t length;
Guido van Rossumd8faa362007-04-27 19:54:29 +0000427 static char *kwlist[] = {"source", "filename", "mode", "flags",
428 "dont_inherit", NULL};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000429
Guido van Rossumd8faa362007-04-27 19:54:29 +0000430 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
431 kwlist, &cmd, &filename, &startstr,
432 &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000433 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000434
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000435 cf.cf_flags = supplied_flags;
436
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000437 if (PyUnicode_Check(cmd)) {
438 tmp = PyUnicode_AsUTF8String(cmd);
439 if (tmp == NULL)
440 return NULL;
441 cmd = tmp;
442 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
443 }
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000444 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &length))
445 return NULL;
Tim Peters2c646c92003-02-10 14:48:29 +0000446 if ((size_t)length != strlen(str)) {
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000447 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000448 "compile() expected string without null bytes");
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000449 goto cleanup;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000450 }
451
Guido van Rossum5b722181993-03-30 17:46:03 +0000452 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000453 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000454 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000455 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000456 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000457 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000458 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000459 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000460 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000461 goto cleanup;
Guido van Rossum5b722181993-03-30 17:46:03 +0000462 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000463
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000464 if (supplied_flags &
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000465 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000466 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000467 PyErr_SetString(PyExc_ValueError,
468 "compile(): unrecognised flags");
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000469 goto cleanup;
Tim Peters6cd6a822001-08-17 22:11:27 +0000470 }
471 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
472
Tim Peters6cd6a822001-08-17 22:11:27 +0000473 if (!dont_inherit) {
474 PyEval_MergeCompilerFlags(&cf);
475 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000476 result = Py_CompileStringFlags(str, filename, start, &cf);
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000477cleanup:
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000478 Py_XDECREF(tmp);
479 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000480}
481
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000482PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000483"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000484\n\
485Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000486into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000487The filename will be used for run-time error messages.\n\
488The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000489single (interactive) statement, or 'eval' to compile an expression.\n\
490The flags argument, if present, controls which future statements influence\n\
491the compilation of the code.\n\
492The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
493the effects of any future statements in effect in the code calling\n\
494compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000495in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000496
Guido van Rossum79f25d91997-04-29 20:08:16 +0000497static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000498builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000499{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000500 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000501
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000502 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000503 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000504 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000505}
506
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000507PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000508"dir([object]) -> list of strings\n"
509"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000510"If called without an argument, return the names in the current scope.\n"
511"Else, return an alphabetized list of names comprising (some of) the attributes\n"
512"of the given object, and of attributes reachable from it.\n"
513"If the object supplies a method named __dir__, it will be used; otherwise\n"
514"the default dir() logic is used and returns:\n"
515" for a module object: the module's attributes.\n"
516" for a class object: its attributes, and recursively the attributes\n"
517" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000518" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000519" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000520
Guido van Rossum79f25d91997-04-29 20:08:16 +0000521static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000522builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000523{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000524 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000525
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000526 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000527 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000528 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000529}
530
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000531PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000532"divmod(x, y) -> (div, mod)\n\
533\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000534Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000535
536
Guido van Rossum79f25d91997-04-29 20:08:16 +0000537static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000538builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000539{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000540 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000541 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000542 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000543 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000544
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000545 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000546 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000547 if (locals != Py_None && !PyMapping_Check(locals)) {
548 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000549 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000550 }
551 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000552 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000553 "globals must be a real dict; try eval(expr, {}, mapping)"
554 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000555 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000556 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000557 if (globals == Py_None) {
558 globals = PyEval_GetGlobals();
559 if (locals == Py_None)
560 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000561 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000562 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000563 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000564
Georg Brandl77c85e62005-09-15 10:46:13 +0000565 if (globals == NULL || locals == NULL) {
566 PyErr_SetString(PyExc_TypeError,
567 "eval must be given globals and locals "
568 "when called without a frame");
569 return NULL;
570 }
571
Guido van Rossum79f25d91997-04-29 20:08:16 +0000572 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
573 if (PyDict_SetItemString(globals, "__builtins__",
574 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000575 return NULL;
576 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000577
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000578 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000579 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000580 PyErr_SetString(PyExc_TypeError,
581 "code object passed to eval() may not contain free variables");
582 return NULL;
583 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000584 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000585 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000586
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000587 if (!PyString_Check(cmd) &&
588 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000589 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000590 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000591 return NULL;
592 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000593 cf.cf_flags = 0;
594
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000595 if (PyUnicode_Check(cmd)) {
596 tmp = PyUnicode_AsUTF8String(cmd);
597 if (tmp == NULL)
598 return NULL;
599 cmd = tmp;
600 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
601 }
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000602 if (PyString_AsStringAndSize(cmd, &str, NULL)) {
603 Py_XDECREF(tmp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000604 return NULL;
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000605 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000606 while (*str == ' ' || *str == '\t')
607 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000608
Tim Peters9fa96be2001-08-17 23:04:59 +0000609 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000610 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
611 Py_XDECREF(tmp);
612 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000613}
614
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000615PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000616"eval(source[, globals[, locals]]) -> value\n\
617\n\
618Evaluate the source in the context of globals and locals.\n\
619The source may be a string representing a Python expression\n\
620or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000621The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000622defaulting to the current globals and locals.\n\
623If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000624
Georg Brandl7cae87c2006-09-06 06:51:57 +0000625static PyObject *
626builtin_exec(PyObject *self, PyObject *args)
627{
628 PyObject *v;
629 PyObject *prog, *globals = Py_None, *locals = Py_None;
630 int plain = 0;
631
632 if (!PyArg_ParseTuple(args, "O|OO:exec", &prog, &globals, &locals))
633 return NULL;
634
635 if (globals == Py_None) {
636 globals = PyEval_GetGlobals();
637 if (locals == Py_None) {
638 locals = PyEval_GetLocals();
639 plain = 1;
640 }
641 if (!globals || !locals) {
642 PyErr_SetString(PyExc_SystemError,
643 "globals and locals cannot be NULL");
644 return NULL;
645 }
646 }
647 else if (locals == Py_None)
648 locals = globals;
649 if (!PyString_Check(prog) &&
650 !PyUnicode_Check(prog) &&
651 !PyCode_Check(prog) &&
652 !PyFile_Check(prog)) {
653 PyErr_Format(PyExc_TypeError,
654 "exec() arg 1 must be a string, file, or code "
655 "object, not %.100s", prog->ob_type->tp_name);
656 return NULL;
657 }
658 if (!PyDict_Check(globals)) {
659 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
660 globals->ob_type->tp_name);
661 return NULL;
662 }
663 if (!PyMapping_Check(locals)) {
664 PyErr_Format(PyExc_TypeError,
665 "arg 3 must be a mapping or None, not %.100s",
666 locals->ob_type->tp_name);
667 return NULL;
668 }
669 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
670 if (PyDict_SetItemString(globals, "__builtins__",
671 PyEval_GetBuiltins()) != 0)
672 return NULL;
673 }
674
675 if (PyCode_Check(prog)) {
676 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
677 PyErr_SetString(PyExc_TypeError,
678 "code object passed to exec() may not "
679 "contain free variables");
680 return NULL;
681 }
682 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
683 }
684 else if (PyFile_Check(prog)) {
685 FILE *fp = PyFile_AsFile(prog);
686 char *name = PyString_AsString(PyFile_Name(prog));
687 PyCompilerFlags cf;
688 cf.cf_flags = 0;
689 if (PyEval_MergeCompilerFlags(&cf))
690 v = PyRun_FileFlags(fp, name, Py_file_input, globals,
691 locals, &cf);
692 else
693 v = PyRun_File(fp, name, Py_file_input, globals,
694 locals);
695 }
696 else {
697 PyObject *tmp = NULL;
698 char *str;
699 PyCompilerFlags cf;
700 cf.cf_flags = 0;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000701 if (PyUnicode_Check(prog)) {
702 tmp = PyUnicode_AsUTF8String(prog);
703 if (tmp == NULL)
704 return NULL;
705 prog = tmp;
706 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
707 }
Georg Brandl7cae87c2006-09-06 06:51:57 +0000708 if (PyString_AsStringAndSize(prog, &str, NULL))
709 return NULL;
710 if (PyEval_MergeCompilerFlags(&cf))
711 v = PyRun_StringFlags(str, Py_file_input, globals,
712 locals, &cf);
713 else
714 v = PyRun_String(str, Py_file_input, globals, locals);
715 Py_XDECREF(tmp);
716 }
717 if (v == NULL)
718 return NULL;
719 Py_DECREF(v);
720 Py_RETURN_NONE;
721}
722
723PyDoc_STRVAR(exec_doc,
724"exec(object[, globals[, locals]])\n\
725\n\
726Read and execute code from a object, which can be a string, a code\n\
727object or a file object.\n\
728The globals and locals are dictionaries, defaulting to the current\n\
729globals and locals. If only globals is given, locals defaults to it.");
730
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000731
Guido van Rossum79f25d91997-04-29 20:08:16 +0000732static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000733builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000734{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000735 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000736 PyObject *globals = Py_None, *locals = Py_None;
737 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000738 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000739 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000740 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000741
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000742 if (!PyArg_ParseTuple(args, "s|O!O:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000743 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000744 &PyDict_Type, &globals,
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000745 &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000746 return NULL;
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000747 if (locals != Py_None && !PyMapping_Check(locals)) {
748 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
749 return NULL;
750 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000751 if (globals == Py_None) {
752 globals = PyEval_GetGlobals();
753 if (locals == Py_None)
754 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000755 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000756 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000757 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000758 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
759 if (PyDict_SetItemString(globals, "__builtins__",
760 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000761 return NULL;
762 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000763
764 exists = 0;
765 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000766#if defined(PLAN9)
767 {
768 Dir *d;
769
770 if ((d = dirstat(filename))!=nil) {
771 if(d->mode & DMDIR)
772 werrstr("is a directory");
773 else
774 exists = 1;
775 free(d);
776 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000777 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000778#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000779 if (object_exists(filename)) {
780 if (isdir(filename))
781 errno = EISDIR;
782 else
783 exists = 1;
784 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000785#else /* standard Posix */
786 {
787 struct stat s;
788 if (stat(filename, &s) == 0) {
789 if (S_ISDIR(s.st_mode))
Andrew MacIntyreda4d6cb2004-03-29 11:53:38 +0000790# if defined(PYOS_OS2) && defined(PYCC_VACPP)
Martin v. Löwis3484a182002-03-09 12:07:51 +0000791 errno = EOS2ERR;
792# else
793 errno = EISDIR;
794# endif
795 else
796 exists = 1;
797 }
798 }
799#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000800
801 if (exists) {
802 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000803 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000804 Py_END_ALLOW_THREADS
805
806 if (fp == NULL) {
807 exists = 0;
808 }
809 }
810
811 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000812 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000813 return NULL;
814 }
Tim Peters5ba58662001-07-16 02:29:45 +0000815 cf.cf_flags = 0;
816 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000817 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000818 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000819 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000820 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000821 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000822 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000823}
824
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000825PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000826"execfile(filename[, globals[, locals]])\n\
827\n\
828Read and execute a Python script from a file.\n\
829The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000830globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000831
832
Guido van Rossum79f25d91997-04-29 20:08:16 +0000833static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000834builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000835{
Guido van Rossum950ff291998-06-29 13:38:57 +0000836 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000837 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000838
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000839 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000840 return NULL;
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000841 if (PyUnicode_Check(name)) {
842 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
843 if (name == NULL)
844 return NULL;
845 }
846
847 if (!PyString_Check(name)) {
848 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000849 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000850 return NULL;
851 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000852 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000853 if (result == NULL && dflt != NULL &&
854 PyErr_ExceptionMatches(PyExc_AttributeError))
855 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000856 PyErr_Clear();
857 Py_INCREF(dflt);
858 result = dflt;
859 }
860 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000861}
862
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000863PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000864"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000865\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000866Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
867When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000868exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000869
870
Guido van Rossum79f25d91997-04-29 20:08:16 +0000871static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000872builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000873{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000874 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000875
Guido van Rossum79f25d91997-04-29 20:08:16 +0000876 d = PyEval_GetGlobals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000877 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000878 return d;
879}
880
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000881PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000882"globals() -> dictionary\n\
883\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000884Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000885
886
Guido van Rossum79f25d91997-04-29 20:08:16 +0000887static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000888builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000889{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000890 PyObject *v;
891 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000892
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000893 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000894 return NULL;
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000895 if (PyUnicode_Check(name)) {
896 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
897 if (name == NULL)
898 return NULL;
899 }
900
901 if (!PyString_Check(name)) {
902 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000903 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000904 return NULL;
905 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000906 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000907 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000908 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000909 Py_INCREF(Py_False);
910 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000911 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000912 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000913 Py_INCREF(Py_True);
914 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000915}
916
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000917PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000918"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000919\n\
920Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000921(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000922
923
Guido van Rossum79f25d91997-04-29 20:08:16 +0000924static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000925builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000926{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000927 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000928}
929
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000930PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000931"id(object) -> integer\n\
932\n\
933Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000934simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000935
936
Guido van Rossum79f25d91997-04-29 20:08:16 +0000937static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000938builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000939{
940 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000941 PyObject *it; /* the iterator object */
942 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000943 } sequence;
944
Guido van Rossum79f25d91997-04-29 20:08:16 +0000945 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000946 sequence *seqs = NULL, *sqp;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000947 Py_ssize_t n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000948 register int i, j;
949
Guido van Rossum79f25d91997-04-29 20:08:16 +0000950 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000951 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000952 PyErr_SetString(PyExc_TypeError,
953 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000954 return NULL;
955 }
956
Guido van Rossum79f25d91997-04-29 20:08:16 +0000957 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000958 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000959
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000960 if (func == Py_None && n == 1) {
961 /* map(None, S) is the same as list(S). */
962 return PySequence_List(PyTuple_GetItem(args, 1));
963 }
964
Tim Peters4e9afdc2001-05-03 23:54:49 +0000965 /* Get space for sequence descriptors. Must NULL out the iterator
966 * pointers so that jumping to Fail_2 later doesn't see trash.
967 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000968 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
969 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000970 return NULL;
971 }
972 for (i = 0; i < n; ++i) {
973 seqs[i].it = (PyObject*)NULL;
974 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000975 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000976
Tim Peters4e9afdc2001-05-03 23:54:49 +0000977 /* Do a first pass to obtain iterators for the arguments, and set len
978 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000979 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000980 len = 0;
981 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
982 PyObject *curseq;
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000983 Py_ssize_t curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000984
Tim Peters4e9afdc2001-05-03 23:54:49 +0000985 /* Get iterator. */
986 curseq = PyTuple_GetItem(args, i+1);
987 sqp->it = PyObject_GetIter(curseq);
988 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000989 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000990 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000991 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +0000992 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000993 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000994 goto Fail_2;
995 }
996
Tim Peters4e9afdc2001-05-03 23:54:49 +0000997 /* Update len. */
Armin Rigof5b3e362006-02-11 21:32:43 +0000998 curlen = _PyObject_LengthHint(curseq);
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000999 if (curlen < 0) {
Raymond Hettingera710b332005-08-21 11:03:59 +00001000 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
1001 !PyErr_ExceptionMatches(PyExc_AttributeError)) {
1002 goto Fail_2;
1003 }
Raymond Hettinger77f3c872004-01-04 08:54:44 +00001004 PyErr_Clear();
Tim Peters4e9afdc2001-05-03 23:54:49 +00001005 curlen = 8; /* arbitrary */
Raymond Hettinger77f3c872004-01-04 08:54:44 +00001006 }
1007 if (curlen > len)
1008 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001009 }
1010
Tim Peters4e9afdc2001-05-03 23:54:49 +00001011 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001012 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001013 goto Fail_2;
1014
Tim Peters4e9afdc2001-05-03 23:54:49 +00001015 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +00001016 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001017 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001018 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001019
Guido van Rossum79f25d91997-04-29 20:08:16 +00001020 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +00001021 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001022 else if ((alist = PyTuple_New(n)) == NULL)
1023 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001024
1025 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001026 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001027 Py_INCREF(Py_None);
1028 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001029 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001030 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001031 item = PyIter_Next(sqp->it);
1032 if (item)
1033 ++numactive;
1034 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001035 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001036 Py_XDECREF(alist);
1037 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001038 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001039 Py_INCREF(Py_None);
1040 item = Py_None;
1041 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001042 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001043 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001044 if (alist)
1045 PyTuple_SET_ITEM(alist, j, item);
1046 else
Guido van Rossum2d951851994-08-29 12:52:16 +00001047 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001048 }
1049
Guido van Rossum32120311995-07-10 13:52:21 +00001050 if (!alist)
1051 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +00001052
Tim Peters4e9afdc2001-05-03 23:54:49 +00001053 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001054 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +00001055 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001056 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001057
Guido van Rossum79f25d91997-04-29 20:08:16 +00001058 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +00001059 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001060 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001061 value = PyEval_CallObject(func, alist);
1062 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001063 if (value == NULL)
1064 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001065 }
1066 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +00001067 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +00001068 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +00001069 if (status < 0)
1070 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001071 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001072 else if (PyList_SetItem(result, i, value) < 0)
1073 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001074 }
1075
Guido van Rossumfa4ac711998-07-10 17:37:30 +00001076 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
1077 goto Fail_1;
1078
Tim Peters4e9afdc2001-05-03 23:54:49 +00001079 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001080
Guido van Rossum12d12c51993-10-26 17:58:25 +00001081Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001082 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001083Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +00001084 result = NULL;
1085Succeed:
1086 assert(seqs);
1087 for (i = 0; i < n; ++i)
1088 Py_XDECREF(seqs[i].it);
1089 PyMem_DEL(seqs);
1090 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001091}
1092
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001093PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001094"map(function, sequence[, sequence, ...]) -> list\n\
1095\n\
1096Return a list of the results of applying the function to the items of\n\
1097the argument sequence(s). If more than one sequence is given, the\n\
1098function is called with an argument list consisting of the corresponding\n\
1099item of each sequence, substituting None for missing values when not all\n\
1100sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001101the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001102
1103
Guido van Rossum79f25d91997-04-29 20:08:16 +00001104static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +00001105builtin_next(PyObject *self, PyObject *args)
1106{
1107 PyObject *it, *res;
1108 PyObject *def = NULL;
1109
1110 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1111 return NULL;
1112 if (!PyIter_Check(it)) {
1113 PyErr_Format(PyExc_TypeError,
1114 "%.200s object is not an iterator", it->ob_type->tp_name);
1115 return NULL;
1116 }
1117
1118 res = (*it->ob_type->tp_iternext)(it);
1119 if (res == NULL) {
1120 if (def) {
1121 if (PyErr_Occurred() &&
1122 !PyErr_ExceptionMatches(PyExc_StopIteration))
1123 return NULL;
1124 PyErr_Clear();
1125 Py_INCREF(def);
1126 return def;
1127 } else if (PyErr_Occurred()) {
1128 return NULL;
1129 } else {
1130 PyErr_SetNone(PyExc_StopIteration);
1131 return NULL;
1132 }
1133 }
1134 return res;
1135}
1136
1137PyDoc_STRVAR(next_doc,
1138"next(iterator[, default])\n\
1139\n\
1140Return the next item from the iterator. If default is given and the iterator\n\
1141is exhausted, it is returned instead of raising StopIteration.");
1142
1143
1144static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001145builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001146{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001147 PyObject *v;
1148 PyObject *name;
1149 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001150
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001151 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001152 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001153 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001154 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001155 Py_INCREF(Py_None);
1156 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001157}
1158
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001159PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001160"setattr(object, name, value)\n\
1161\n\
1162Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001163``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001164
1165
Guido van Rossum79f25d91997-04-29 20:08:16 +00001166static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001167builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001168{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001169 PyObject *v;
1170 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001171
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001172 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001173 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001174 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001175 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001176 Py_INCREF(Py_None);
1177 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001178}
1179
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001180PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001181"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001182\n\
1183Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001184``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001185
1186
Guido van Rossum79f25d91997-04-29 20:08:16 +00001187static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001188builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001189{
Guido van Rossum9bfef441993-03-29 10:43:31 +00001190 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001191
Guido van Rossum79f25d91997-04-29 20:08:16 +00001192 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001193 if (x == -1)
1194 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001195 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001196}
1197
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001198PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001199"hash(object) -> integer\n\
1200\n\
1201Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001202the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001203
1204
Guido van Rossum79f25d91997-04-29 20:08:16 +00001205static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001206builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001207{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001208 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001209 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001210
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001211 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001212 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001213 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001214 "hex() argument can't be converted to hex");
1215 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001216 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001217 res = (*nb->nb_hex)(v);
1218 if (res && !PyString_Check(res)) {
1219 PyErr_Format(PyExc_TypeError,
1220 "__hex__ returned non-string (type %.200s)",
1221 res->ob_type->tp_name);
1222 Py_DECREF(res);
1223 return NULL;
1224 }
1225 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001226}
1227
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001228PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001229"hex(number) -> string\n\
1230\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001231Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001232
1233
Guido van Rossum79f25d91997-04-29 20:08:16 +00001234static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001235builtin_iter(PyObject *self, PyObject *args)
1236{
1237 PyObject *v, *w = NULL;
1238
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001239 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001240 return NULL;
1241 if (w == NULL)
1242 return PyObject_GetIter(v);
1243 if (!PyCallable_Check(v)) {
1244 PyErr_SetString(PyExc_TypeError,
1245 "iter(v, w): v must be callable");
1246 return NULL;
1247 }
1248 return PyCallIter_New(v, w);
1249}
1250
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001251PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001252"iter(collection) -> iterator\n\
1253iter(callable, sentinel) -> iterator\n\
1254\n\
1255Get an iterator from an object. In the first form, the argument must\n\
1256supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001257In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001258
1259
1260static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001261builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001262{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001263 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001264
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001265 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001266 if (res < 0 && PyErr_Occurred())
1267 return NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001268 return PyInt_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001269}
1270
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001271PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001272"len(object) -> integer\n\
1273\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001274Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001275
1276
Guido van Rossum79f25d91997-04-29 20:08:16 +00001277static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001278builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001279{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001280 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001281
Guido van Rossum79f25d91997-04-29 20:08:16 +00001282 d = PyEval_GetLocals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00001283 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001284 return d;
1285}
1286
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001287PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001288"locals() -> dictionary\n\
1289\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001290Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001291
1292
Guido van Rossum79f25d91997-04-29 20:08:16 +00001293static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001294min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001295{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001296 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001297 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001298
Guido van Rossum79f25d91997-04-29 20:08:16 +00001299 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001300 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001301 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001302 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001303
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001304 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1305 keyfunc = PyDict_GetItemString(kwds, "key");
1306 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001307 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001308 "%s() got an unexpected keyword argument", name);
1309 return NULL;
1310 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001311 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001312
Tim Petersc3074532001-05-03 07:00:32 +00001313 it = PyObject_GetIter(v);
1314 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001315 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001316
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001317 maxitem = NULL; /* the result */
1318 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001319 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001320 /* get the value from the key function */
1321 if (keyfunc != NULL) {
1322 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1323 if (val == NULL)
1324 goto Fail_it_item;
1325 }
1326 /* no key function; the value is the item */
1327 else {
1328 val = item;
1329 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001330 }
Tim Petersc3074532001-05-03 07:00:32 +00001331
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001332 /* maximum value and item are unset; set them */
1333 if (maxval == NULL) {
1334 maxitem = item;
1335 maxval = val;
1336 }
1337 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001338 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001339 int cmp = PyObject_RichCompareBool(val, maxval, op);
1340 if (cmp < 0)
1341 goto Fail_it_item_and_val;
1342 else if (cmp > 0) {
1343 Py_DECREF(maxval);
1344 Py_DECREF(maxitem);
1345 maxval = val;
1346 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001347 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001348 else {
1349 Py_DECREF(item);
1350 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001351 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001352 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001353 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001354 if (PyErr_Occurred())
1355 goto Fail_it;
1356 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001357 PyErr_Format(PyExc_ValueError,
1358 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001359 assert(maxitem == NULL);
1360 }
1361 else
1362 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001363 Py_DECREF(it);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001364 return maxitem;
1365
1366Fail_it_item_and_val:
1367 Py_DECREF(val);
1368Fail_it_item:
1369 Py_DECREF(item);
1370Fail_it:
1371 Py_XDECREF(maxval);
1372 Py_XDECREF(maxitem);
1373 Py_DECREF(it);
1374 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001375}
1376
Guido van Rossum79f25d91997-04-29 20:08:16 +00001377static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001378builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001379{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001380 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001381}
1382
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001383PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001384"min(iterable[, key=func]) -> value\n\
1385min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001386\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001387With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001388With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001389
1390
Guido van Rossum79f25d91997-04-29 20:08:16 +00001391static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001392builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001393{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001394 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001395}
1396
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001397PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001398"max(iterable[, key=func]) -> value\n\
1399max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001400\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001401With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001402With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001403
1404
Guido van Rossum79f25d91997-04-29 20:08:16 +00001405static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001406builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001407{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001408 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001409 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001410
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001411 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1412 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001413 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001414 "oct() argument can't be converted to oct");
1415 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001416 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001417 res = (*nb->nb_oct)(v);
1418 if (res && !PyString_Check(res)) {
1419 PyErr_Format(PyExc_TypeError,
1420 "__oct__ returned non-string (type %.200s)",
1421 res->ob_type->tp_name);
1422 Py_DECREF(res);
1423 return NULL;
1424 }
1425 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001426}
1427
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001428PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001429"oct(number) -> string\n\
1430\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001431Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001432
1433
Guido van Rossum79f25d91997-04-29 20:08:16 +00001434static PyObject *
Thomas Wouters477c8d52006-05-27 19:21:47 +00001435builtin_open(PyObject *self, PyObject *args, PyObject *kwds)
1436{
1437 return PyObject_Call((PyObject*)&PyFile_Type, args, kwds);
1438}
1439
1440PyDoc_STRVAR(open_doc,
1441"open(name[, mode[, buffering]]) -> file object\n\
1442\n\
1443Open a file using the file() type, returns a file object.");
1444
1445
1446static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001447builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001448{
Guido van Rossum09095f32000-03-10 23:00:52 +00001449 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001450 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001451
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001452 if (PyString_Check(obj)) {
1453 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001454 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001455 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001456 return PyInt_FromLong(ord);
1457 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001458 }
1459 else if (PyUnicode_Check(obj)) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001460 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001461 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001462 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001463 return PyInt_FromLong(ord);
1464 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001465 }
1466 else if (PyBytes_Check(obj)) {
1467 /* XXX Hopefully this is temporary */
1468 size = PyBytes_GET_SIZE(obj);
1469 if (size == 1) {
1470 ord = (long)*PyBytes_AS_STRING(obj);
1471 return PyInt_FromLong(ord);
1472 }
1473 }
1474 else {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001475 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001476 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001477 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001478 return NULL;
1479 }
1480
Guido van Rossumad991772001-01-12 16:03:05 +00001481 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001482 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001483 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001484 size);
1485 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001486}
1487
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001488PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001489"ord(c) -> integer\n\
1490\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001491Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001492
1493
Guido van Rossum79f25d91997-04-29 20:08:16 +00001494static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001495builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001496{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001497 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001498
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001499 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001500 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001501 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001502}
1503
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001504PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001505"pow(x, y[, z]) -> number\n\
1506\n\
1507With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001508equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001509
1510
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001511
Guido van Rossum34343512006-11-30 22:13:52 +00001512static PyObject *
1513builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1514{
1515 static char *kwlist[] = {"sep", "end", "file", 0};
Georg Brandl257d3d92007-02-26 10:35:10 +00001516 static PyObject *dummy_args;
Guido van Rossum34343512006-11-30 22:13:52 +00001517 PyObject *sep = NULL, *end = NULL, *file = NULL;
1518 int i, err;
1519
Georg Brandl257d3d92007-02-26 10:35:10 +00001520 if (dummy_args == NULL) {
1521 if (!(dummy_args = PyTuple_New(0)))
1522 return NULL;
1523 }
Georg Brandl88fc6642007-02-09 21:28:07 +00001524 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
Guido van Rossum34343512006-11-30 22:13:52 +00001525 kwlist, &sep, &end, &file))
1526 return NULL;
1527 if (file == NULL || file == Py_None)
1528 file = PySys_GetObject("stdout");
1529
Georg Brandl16f3e032006-11-30 22:46:03 +00001530 if (sep && sep != Py_None && !PyString_Check(sep) &&
1531 !PyUnicode_Check(sep)) {
1532 PyErr_Format(PyExc_TypeError,
1533 "sep must be None, str or unicode, not %.200s",
1534 sep->ob_type->tp_name);
1535 return NULL;
1536 }
1537 if (end && end != Py_None && !PyString_Check(end) &&
1538 !PyUnicode_Check(end)) {
1539 PyErr_Format(PyExc_TypeError,
1540 "end must be None, str or unicode, not %.200s",
1541 end->ob_type->tp_name);
1542 return NULL;
1543 }
Guido van Rossum34343512006-11-30 22:13:52 +00001544
1545 for (i = 0; i < PyTuple_Size(args); i++) {
1546 if (i > 0) {
1547 if (sep == NULL || sep == Py_None)
1548 err = PyFile_WriteString(" ", file);
1549 else
1550 err = PyFile_WriteObject(sep, file,
1551 Py_PRINT_RAW);
1552 if (err)
1553 return NULL;
1554 }
1555 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1556 Py_PRINT_RAW);
1557 if (err)
1558 return NULL;
1559 }
1560
1561 if (end == NULL || end == Py_None)
1562 err = PyFile_WriteString("\n", file);
1563 else
1564 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1565 if (err)
1566 return NULL;
1567
1568 Py_RETURN_NONE;
1569}
1570
1571PyDoc_STRVAR(print_doc,
Guido van Rossum452bf512007-02-09 05:32:43 +00001572"print(value, ..., file=None, sep=' ', end='\\n')\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001573\n\
1574Prints the values to a stream, or to sys.stdout by default.\n\
1575Optional keyword arguments:\n\
1576file: a file-like object (stream); defaults to the current sys.stdout.\n\
1577sep: string inserted between values, default a space.\n\
1578end: string appended after the last value, default a newline.");
1579
1580
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001581/* Return number of items in range (lo, hi, step), when arguments are
1582 * PyInt or PyLong objects. step > 0 required. Return a value < 0 if
1583 * & only if the true value is too large to fit in a signed long.
1584 * Arguments MUST return 1 with either PyInt_Check() or
1585 * PyLong_Check(). Return -1 when there is an error.
1586 */
1587static long
1588get_len_of_range_longs(PyObject *lo, PyObject *hi, PyObject *step)
1589{
1590 /* -------------------------------------------------------------
1591 Algorithm is equal to that of get_len_of_range(), but it operates
1592 on PyObjects (which are assumed to be PyLong or PyInt objects).
1593 ---------------------------------------------------------------*/
1594 long n;
1595 PyObject *diff = NULL;
1596 PyObject *one = NULL;
1597 PyObject *tmp1 = NULL, *tmp2 = NULL, *tmp3 = NULL;
1598 /* holds sub-expression evaluations */
1599
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001600 /* If (lo >= hi), return length of 0 (or error). */
1601 n = PyObject_RichCompareBool(lo, hi, Py_LT);
1602 if (n <= 0)
1603 return n;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001604
1605 if ((one = PyLong_FromLong(1L)) == NULL)
1606 goto Fail;
1607
1608 if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL)
1609 goto Fail;
1610
1611 if ((diff = PyNumber_Subtract(tmp1, one)) == NULL)
1612 goto Fail;
1613
1614 if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL)
1615 goto Fail;
1616
1617 if ((tmp3 = PyNumber_Add(tmp2, one)) == NULL)
1618 goto Fail;
1619
1620 n = PyLong_AsLong(tmp3);
1621 if (PyErr_Occurred()) { /* Check for Overflow */
1622 PyErr_Clear();
1623 goto Fail;
1624 }
1625
1626 Py_DECREF(tmp3);
1627 Py_DECREF(tmp2);
1628 Py_DECREF(diff);
1629 Py_DECREF(tmp1);
1630 Py_DECREF(one);
1631 return n;
1632
1633 Fail:
1634 Py_XDECREF(tmp3);
1635 Py_XDECREF(tmp2);
1636 Py_XDECREF(diff);
1637 Py_XDECREF(tmp1);
1638 Py_XDECREF(one);
1639 return -1;
1640}
1641
1642/* An extension of builtin_range() that handles the case when PyLong
1643 * arguments are given. */
1644static PyObject *
1645handle_range_longs(PyObject *self, PyObject *args)
1646{
1647 PyObject *ilow;
Tim Peters874e1f72003-04-13 22:13:08 +00001648 PyObject *ihigh = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001649 PyObject *istep = NULL;
Tim Peters874e1f72003-04-13 22:13:08 +00001650
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001651 PyObject *curnum = NULL;
1652 PyObject *v = NULL;
1653 long bign;
1654 int i, n;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001655 int step_pos;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001656
Tim Peters874e1f72003-04-13 22:13:08 +00001657 PyObject *zero = PyLong_FromLong(0);
1658
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001659 if (zero == NULL)
1660 return NULL;
1661
Tim Peters874e1f72003-04-13 22:13:08 +00001662 if (!PyArg_UnpackTuple(args, "range", 1, 3, &ilow, &ihigh, &istep)) {
1663 Py_DECREF(zero);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001664 return NULL;
1665 }
1666
Tim Peters874e1f72003-04-13 22:13:08 +00001667 /* Figure out which way we were called, supply defaults, and be
1668 * sure to incref everything so that the decrefs at the end
1669 * are correct.
1670 */
1671 assert(ilow != NULL);
1672 if (ihigh == NULL) {
1673 /* only 1 arg -- it's the upper limit */
1674 ihigh = ilow;
1675 ilow = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001676 }
Tim Peters874e1f72003-04-13 22:13:08 +00001677 assert(ihigh != NULL);
1678 Py_INCREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001679
Tim Peters874e1f72003-04-13 22:13:08 +00001680 /* ihigh correct now; do ilow */
1681 if (ilow == NULL)
1682 ilow = zero;
1683 Py_INCREF(ilow);
1684
1685 /* ilow and ihigh correct now; do istep */
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001686 if (istep == NULL) {
1687 istep = PyLong_FromLong(1L);
1688 if (istep == NULL)
1689 goto Fail;
1690 }
1691 else {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001692 Py_INCREF(istep);
1693 }
1694
Tim Peters874e1f72003-04-13 22:13:08 +00001695 if (!PyInt_Check(ilow) && !PyLong_Check(ilow)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001696 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001697 "range() integer start argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001698 ilow->ob_type->tp_name);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001699 goto Fail;
1700 }
1701
Tim Peters874e1f72003-04-13 22:13:08 +00001702 if (!PyInt_Check(ihigh) && !PyLong_Check(ihigh)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001703 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001704 "range() integer end argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001705 ihigh->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001706 goto Fail;
1707 }
1708
1709 if (!PyInt_Check(istep) && !PyLong_Check(istep)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001710 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001711 "range() integer step argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001712 istep->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001713 goto Fail;
1714 }
1715
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001716 step_pos = PyObject_RichCompareBool(istep, zero, Py_GT);
1717 if (step_pos < 0)
Tim Peters874e1f72003-04-13 22:13:08 +00001718 goto Fail;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001719 if (step_pos)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001720 bign = get_len_of_range_longs(ilow, ihigh, istep);
1721 else {
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001722 int step_zero = PyObject_RichCompareBool(istep, zero, Py_EQ);
Guido van Rossum93a66922006-08-24 02:10:21 +00001723 PyObject *neg_istep;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001724 if (step_zero < 0)
1725 goto Fail;
1726 if (step_zero) {
1727 PyErr_SetString(PyExc_ValueError,
1728 "range() step argument must not be zero");
1729 goto Fail;
1730 }
Guido van Rossum93a66922006-08-24 02:10:21 +00001731 neg_istep = PyNumber_Negative(istep);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001732 if (neg_istep == NULL)
1733 goto Fail;
1734 bign = get_len_of_range_longs(ihigh, ilow, neg_istep);
1735 Py_DECREF(neg_istep);
1736 }
1737
1738 n = (int)bign;
1739 if (bign < 0 || (long)n != bign) {
1740 PyErr_SetString(PyExc_OverflowError,
1741 "range() result has too many items");
1742 goto Fail;
1743 }
1744
1745 v = PyList_New(n);
1746 if (v == NULL)
1747 goto Fail;
1748
1749 curnum = ilow;
1750 Py_INCREF(curnum);
1751
1752 for (i = 0; i < n; i++) {
1753 PyObject *w = PyNumber_Long(curnum);
1754 PyObject *tmp_num;
1755 if (w == NULL)
1756 goto Fail;
1757
1758 PyList_SET_ITEM(v, i, w);
1759
1760 tmp_num = PyNumber_Add(curnum, istep);
1761 if (tmp_num == NULL)
1762 goto Fail;
1763
1764 Py_DECREF(curnum);
1765 curnum = tmp_num;
1766 }
Tim Peters874e1f72003-04-13 22:13:08 +00001767 Py_DECREF(ilow);
1768 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001769 Py_DECREF(istep);
1770 Py_DECREF(zero);
Tim Peters874e1f72003-04-13 22:13:08 +00001771 Py_DECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001772 return v;
1773
1774 Fail:
Tim Peters874e1f72003-04-13 22:13:08 +00001775 Py_DECREF(ilow);
1776 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001777 Py_XDECREF(istep);
Tim Peters874e1f72003-04-13 22:13:08 +00001778 Py_DECREF(zero);
1779 Py_XDECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001780 Py_XDECREF(v);
1781 return NULL;
1782}
1783
Guido van Rossum124eff01999-02-23 16:11:01 +00001784/* Return number of items in range/xrange (lo, hi, step). step > 0
1785 * required. Return a value < 0 if & only if the true value is too
1786 * large to fit in a signed long.
1787 */
1788static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001789get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001790{
1791 /* -------------------------------------------------------------
1792 If lo >= hi, the range is empty.
1793 Else if n values are in the range, the last one is
1794 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1795 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1796 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1797 the RHS is non-negative and so truncation is the same as the
1798 floor. Letting M be the largest positive long, the worst case
1799 for the RHS numerator is hi=M, lo=-M-1, and then
1800 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1801 precision to compute the RHS exactly.
1802 ---------------------------------------------------------------*/
1803 long n = 0;
1804 if (lo < hi) {
1805 unsigned long uhi = (unsigned long)hi;
1806 unsigned long ulo = (unsigned long)lo;
1807 unsigned long diff = uhi - ulo - 1;
1808 n = (long)(diff / (unsigned long)step + 1);
1809 }
1810 return n;
1811}
1812
Guido van Rossum79f25d91997-04-29 20:08:16 +00001813static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001814builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001815{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001816 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001817 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001818 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001819
Guido van Rossum79f25d91997-04-29 20:08:16 +00001820 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001821
Guido van Rossum79f25d91997-04-29 20:08:16 +00001822 if (PyTuple_Size(args) <= 1) {
1823 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001824 "l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001825 &ihigh)) {
1826 PyErr_Clear();
1827 return handle_range_longs(self, args);
1828 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001829 }
1830 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001831 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001832 "ll|l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001833 &ilow, &ihigh, &istep)) {
1834 PyErr_Clear();
1835 return handle_range_longs(self, args);
1836 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001837 }
1838 if (istep == 0) {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001839 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001840 "range() step argument must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001841 return NULL;
1842 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001843 if (istep > 0)
1844 bign = get_len_of_range(ilow, ihigh, istep);
1845 else
1846 bign = get_len_of_range(ihigh, ilow, -istep);
1847 n = (int)bign;
1848 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001849 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001850 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001851 return NULL;
1852 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001853 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001854 if (v == NULL)
1855 return NULL;
1856 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001857 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001858 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001859 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001860 return NULL;
1861 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001862 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001863 ilow += istep;
1864 }
1865 return v;
1866}
1867
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001868PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001869"range([start,] stop[, step]) -> list of integers\n\
1870\n\
1871Return a list containing an arithmetic progression of integers.\n\
1872range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1873When step is given, it specifies the increment (or decrement).\n\
1874For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001875These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001876
Guido van Rossuma88a0332007-02-26 16:59:55 +00001877static PyObject *
1878builtin_input(PyObject *self, PyObject *args)
1879{
1880 PyObject *v = NULL;
1881 PyObject *fin = PySys_GetObject("stdin");
1882 PyObject *fout = PySys_GetObject("stdout");
1883
1884 if (!PyArg_UnpackTuple(args, "input", 0, 1, &v))
1885 return NULL;
1886
1887 if (fin == NULL) {
1888 PyErr_SetString(PyExc_RuntimeError, "input: lost sys.stdin");
1889 return NULL;
1890 }
1891 if (fout == NULL) {
1892 PyErr_SetString(PyExc_RuntimeError, "input: lost sys.stdout");
1893 return NULL;
1894 }
1895 if (PyFile_AsFile(fin) && PyFile_AsFile(fout)
1896 && isatty(fileno(PyFile_AsFile(fin)))
1897 && isatty(fileno(PyFile_AsFile(fout)))) {
1898 PyObject *po;
1899 char *prompt;
1900 char *s;
1901 PyObject *result;
1902 if (v != NULL) {
1903 po = PyObject_Str(v);
1904 if (po == NULL)
1905 return NULL;
1906 prompt = PyString_AsString(po);
1907 if (prompt == NULL)
1908 return NULL;
1909 }
1910 else {
1911 po = NULL;
1912 prompt = "";
1913 }
1914 s = PyOS_Readline(PyFile_AsFile(fin), PyFile_AsFile(fout),
1915 prompt);
1916 Py_XDECREF(po);
1917 if (s == NULL) {
1918 if (!PyErr_Occurred())
1919 PyErr_SetNone(PyExc_KeyboardInterrupt);
1920 return NULL;
1921 }
1922 if (*s == '\0') {
1923 PyErr_SetNone(PyExc_EOFError);
1924 result = NULL;
1925 }
1926 else { /* strip trailing '\n' */
1927 size_t len = strlen(s);
1928 if (len > PY_SSIZE_T_MAX) {
1929 PyErr_SetString(PyExc_OverflowError,
1930 "input: input too long");
1931 result = NULL;
1932 }
1933 else {
1934 result = PyString_FromStringAndSize(s, len-1);
1935 }
1936 }
1937 PyMem_FREE(s);
1938 return result;
1939 }
1940 if (v != NULL) {
1941 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
1942 return NULL;
1943 }
1944 return PyFile_GetLine(fin, -1);
1945}
1946
1947PyDoc_STRVAR(input_doc,
1948"input([prompt]) -> string\n\
1949\n\
1950Read a string from standard input. The trailing newline is stripped.\n\
1951If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1952On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1953is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001954
Guido van Rossum79f25d91997-04-29 20:08:16 +00001955static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001956builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001957{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001958 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001959}
1960
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001961PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001962"reload(module) -> module\n\
1963\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001964Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001965
1966
Guido van Rossum79f25d91997-04-29 20:08:16 +00001967static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001968builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001969{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001970 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001971}
1972
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001973PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001974"repr(object) -> string\n\
1975\n\
1976Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001977For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001978
1979
Guido van Rossum79f25d91997-04-29 20:08:16 +00001980static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001981builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001982{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001983 double number;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001984 double f;
1985 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001986 int i;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001987 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001988
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001989 if (!PyArg_ParseTupleAndKeywords(args, kwds, "d|i:round",
1990 kwlist, &number, &ndigits))
1991 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001992 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001993 i = abs(ndigits);
1994 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001995 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001996 if (ndigits < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001997 number /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001998 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001999 number *= f;
2000 if (number >= 0.0)
2001 number = floor(number + 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00002002 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002003 number = ceil(number - 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00002004 if (ndigits < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002005 number *= f;
Guido van Rossum1e162d31998-05-09 14:42:25 +00002006 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002007 number /= f;
2008 return PyFloat_FromDouble(number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002009}
2010
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002011PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002012"round(number[, ndigits]) -> floating point number\n\
2013\n\
2014Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002015This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002016
Raymond Hettinger64958a12003-12-17 20:43:33 +00002017static PyObject *
2018builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
2019{
2020 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
2021 PyObject *callable;
Martin v. Löwis15e62742006-02-27 16:46:16 +00002022 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00002023 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002024
Neal Norwitz6f0d4792005-12-15 06:40:36 +00002025 /* args 1-4 should match listsort in Objects/listobject.c */
Armin Rigo71d7e702005-09-20 18:13:03 +00002026 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
2027 kwlist, &seq, &compare, &keyfunc, &reverse))
2028 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002029
2030 newlist = PySequence_List(seq);
2031 if (newlist == NULL)
2032 return NULL;
2033
2034 callable = PyObject_GetAttrString(newlist, "sort");
2035 if (callable == NULL) {
2036 Py_DECREF(newlist);
2037 return NULL;
2038 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002039
Raymond Hettinger64958a12003-12-17 20:43:33 +00002040 newargs = PyTuple_GetSlice(args, 1, 4);
2041 if (newargs == NULL) {
2042 Py_DECREF(newlist);
2043 Py_DECREF(callable);
2044 return NULL;
2045 }
2046
2047 v = PyObject_Call(callable, newargs, kwds);
2048 Py_DECREF(newargs);
2049 Py_DECREF(callable);
2050 if (v == NULL) {
2051 Py_DECREF(newlist);
2052 return NULL;
2053 }
2054 Py_DECREF(v);
2055 return newlist;
2056}
2057
2058PyDoc_STRVAR(sorted_doc,
2059"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002060
Guido van Rossum79f25d91997-04-29 20:08:16 +00002061static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002062builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002063{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002064 PyObject *v = NULL;
2065 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002066
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002067 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002068 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00002069 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002070 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002071 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002072 if (!PyErr_Occurred())
2073 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002074 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002075 }
2076 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00002077 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00002078 }
2079 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002080 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00002081 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002082 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00002083 "vars() argument must have __dict__ attribute");
2084 return NULL;
2085 }
2086 }
2087 return d;
2088}
2089
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002090PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002091"vars([object]) -> dictionary\n\
2092\n\
2093Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002094With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002095
Alex Martellia70b1912003-04-22 08:12:33 +00002096
2097static PyObject*
2098builtin_sum(PyObject *self, PyObject *args)
2099{
2100 PyObject *seq;
2101 PyObject *result = NULL;
2102 PyObject *temp, *item, *iter;
2103
Raymond Hettinger5cf63942003-10-25 06:41:37 +00002104 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00002105 return NULL;
2106
2107 iter = PyObject_GetIter(seq);
2108 if (iter == NULL)
2109 return NULL;
2110
2111 if (result == NULL) {
2112 result = PyInt_FromLong(0);
2113 if (result == NULL) {
2114 Py_DECREF(iter);
2115 return NULL;
2116 }
2117 } else {
2118 /* reject string values for 'start' parameter */
2119 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
2120 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002121 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00002122 Py_DECREF(iter);
2123 return NULL;
2124 }
Alex Martelli41c9f882003-04-22 09:24:48 +00002125 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00002126 }
2127
2128 for(;;) {
2129 item = PyIter_Next(iter);
2130 if (item == NULL) {
2131 /* error, or end-of-sequence */
2132 if (PyErr_Occurred()) {
2133 Py_DECREF(result);
2134 result = NULL;
2135 }
2136 break;
2137 }
Alex Martellia253e182003-10-25 23:24:14 +00002138 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00002139 Py_DECREF(result);
2140 Py_DECREF(item);
2141 result = temp;
2142 if (result == NULL)
2143 break;
2144 }
2145 Py_DECREF(iter);
2146 return result;
2147}
2148
2149PyDoc_STRVAR(sum_doc,
Thomas Wouters89f507f2006-12-13 04:49:30 +00002150"sum(sequence[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00002151\n\
2152Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00002153of parameter 'start' (which defaults to 0). When the sequence is\n\
2154empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00002155
2156
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002157static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002158builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002159{
2160 PyObject *inst;
2161 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00002162 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002163
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002164 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002165 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002166
Guido van Rossum823649d2001-03-21 18:40:58 +00002167 retval = PyObject_IsInstance(inst, cls);
2168 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00002169 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002170 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002171}
2172
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002173PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002174"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002175\n\
2176Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002177With a type as second argument, return whether that is the object's type.\n\
2178The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002179isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002180
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002181
2182static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002183builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002184{
2185 PyObject *derived;
2186 PyObject *cls;
2187 int retval;
2188
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002189 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002190 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002191
Guido van Rossum823649d2001-03-21 18:40:58 +00002192 retval = PyObject_IsSubclass(derived, cls);
2193 if (retval < 0)
2194 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002195 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002196}
2197
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002198PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002199"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002200\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002201Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2202When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2203is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002204
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002205
Barry Warsawbd599b52000-08-03 15:45:29 +00002206static PyObject*
2207builtin_zip(PyObject *self, PyObject *args)
2208{
Guido van Rossumb65fb332006-08-25 23:26:40 +00002209 /* args must be a tuple */
2210 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00002211
Guido van Rossumb65fb332006-08-25 23:26:40 +00002212 return _PyZip_CreateIter(args);
Barry Warsawbd599b52000-08-03 15:45:29 +00002213}
2214
2215
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002216PyDoc_STRVAR(zip_doc,
Guido van Rossum801f0d72006-08-24 19:48:10 +00002217"zip(it1 [, it2 [...]]) -> iter([(it1[0], it2[0] ...), ...])\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002218\n\
Guido van Rossum801f0d72006-08-24 19:48:10 +00002219Return an iterator yielding tuples, where each tuple contains the\n\
2220corresponding element from each of the argument iterables.\n\
2221The returned iterator ends when the shortest argument iterable is exhausted.\n\
2222NOTE: This is implemented using itertools.izip().");
Barry Warsawbd599b52000-08-03 15:45:29 +00002223
2224
Guido van Rossum79f25d91997-04-29 20:08:16 +00002225static PyMethodDef builtin_methods[] = {
Guido van Rossum52cc1d82007-03-18 15:41:51 +00002226 {"__build_class__", (PyCFunction)builtin___build_class__,
2227 METH_VARARGS | METH_KEYWORDS, build_class_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002228 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002229 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002230 {"all", builtin_all, METH_O, all_doc},
2231 {"any", builtin_any, METH_O, any_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002232 {"callable", builtin_callable, METH_O, callable_doc},
Guido van Rossum84fc66d2007-05-03 17:18:26 +00002233 {"chr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002234 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
Guido van Rossumd8faa362007-04-27 19:54:29 +00002235 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002236 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2237 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2238 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2239 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00002240 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002241 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
2242 {"filter", builtin_filter, METH_VARARGS, filter_doc},
2243 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2244 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2245 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2246 {"hash", builtin_hash, METH_O, hash_doc},
2247 {"hex", builtin_hex, METH_O, hex_doc},
2248 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00002249 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002250 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2251 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2252 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2253 {"len", builtin_len, METH_O, len_doc},
2254 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2255 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002256 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2257 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandla18af4e2007-04-21 15:47:16 +00002258 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002259 {"oct", builtin_oct, METH_O, oct_doc},
Thomas Wouters477c8d52006-05-27 19:21:47 +00002260 {"open", (PyCFunction)builtin_open, METH_VARARGS | METH_KEYWORDS, open_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002261 {"ord", builtin_ord, METH_O, ord_doc},
2262 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00002263 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002264 {"range", builtin_range, METH_VARARGS, range_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002265 {"reload", builtin_reload, METH_O, reload_doc},
2266 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002267 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002268 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002269 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002270 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002271 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002272 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002273 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002274};
2275
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002276PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002277"Built-in functions, exceptions, and other objects.\n\
2278\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002279Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002280
Guido van Rossum25ce5661997-08-02 03:10:38 +00002281PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002282_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002283{
Fred Drake5550de32000-06-20 04:54:19 +00002284 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002285 mod = Py_InitModule4("__builtin__", builtin_methods,
2286 builtin_doc, (PyObject *)NULL,
2287 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002288 if (mod == NULL)
2289 return NULL;
2290 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002291
Tim Peters7571a0f2003-03-23 17:52:28 +00002292#ifdef Py_TRACE_REFS
2293 /* __builtin__ exposes a number of statically allocated objects
2294 * that, before this code was added in 2.3, never showed up in
2295 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2296 * result, programs leaking references to None and False (etc)
2297 * couldn't be diagnosed by examining sys.getobjects(0).
2298 */
2299#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2300#else
2301#define ADD_TO_ALL(OBJECT) (void)0
2302#endif
2303
Tim Peters4b7625e2001-09-13 21:37:17 +00002304#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002305 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2306 return NULL; \
2307 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002308
2309 SETBUILTIN("None", Py_None);
2310 SETBUILTIN("Ellipsis", Py_Ellipsis);
2311 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002312 SETBUILTIN("False", Py_False);
2313 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00002314 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002315 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002316 SETBUILTIN("buffer", &PyBuffer_Type);
Guido van Rossum4dfe8a12006-04-22 23:28:04 +00002317 SETBUILTIN("bytes", &PyBytes_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002318 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002319#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002320 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002321#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002322 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002323 SETBUILTIN("enumerate", &PyEnum_Type);
Thomas Wouters477c8d52006-05-27 19:21:47 +00002324 SETBUILTIN("file", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002325 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002326 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002327 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00002328 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002329 SETBUILTIN("list", &PyList_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002330 SETBUILTIN("object", &PyBaseObject_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002331 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002332 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002333 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002334 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Guido van Rossum572dbf82007-04-27 23:53:51 +00002335 SETBUILTIN("str", &PyUnicode_Type);
Guido van Rossum84fc66d2007-05-03 17:18:26 +00002336 SETBUILTIN("str8", &PyString_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002337 SETBUILTIN("super", &PySuper_Type);
2338 SETBUILTIN("tuple", &PyTuple_Type);
2339 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00002340 SETBUILTIN("xrange", &PyRange_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002341 SETBUILTIN("unicode", &PyUnicode_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002342 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002343 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2344 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002345 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002346 }
2347 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002348
Guido van Rossum25ce5661997-08-02 03:10:38 +00002349 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002350#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002351#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002352}
2353
Guido van Rossume77a7571993-11-03 15:01:26 +00002354/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002355
Guido van Rossum79f25d91997-04-29 20:08:16 +00002356static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002357filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002358{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002359 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002360 Py_ssize_t i, j;
2361 Py_ssize_t len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002362
Guido van Rossumb7b45621995-08-04 04:07:45 +00002363 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002364 if (PyTuple_CheckExact(tuple))
2365 Py_INCREF(tuple);
2366 else
2367 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002368 return tuple;
2369 }
2370
Guido van Rossum79f25d91997-04-29 20:08:16 +00002371 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002372 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002373
Guido van Rossum12d12c51993-10-26 17:58:25 +00002374 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002375 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002376 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002377
Walter Dörwald8dd19322003-02-10 17:36:40 +00002378 if (tuple->ob_type->tp_as_sequence &&
2379 tuple->ob_type->tp_as_sequence->sq_item) {
2380 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002381 if (item == NULL)
2382 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002383 } else {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002384 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002385 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002386 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002387 if (func == Py_None) {
2388 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002389 good = item;
2390 }
2391 else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002392 PyObject *arg = PyTuple_Pack(1, item);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002393 if (arg == NULL) {
2394 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002395 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002396 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002397 good = PyEval_CallObject(func, arg);
2398 Py_DECREF(arg);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002399 if (good == NULL) {
2400 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002401 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002402 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002403 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002404 ok = PyObject_IsTrue(good);
2405 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002406 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002407 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002408 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002409 }
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002410 else
2411 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002412 }
2413
Tim Peters4324aa32001-05-28 22:30:08 +00002414 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002415 return NULL;
2416
Guido van Rossum12d12c51993-10-26 17:58:25 +00002417 return result;
2418
Guido van Rossum12d12c51993-10-26 17:58:25 +00002419Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002420 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002421 return NULL;
2422}
2423
2424
Guido van Rossume77a7571993-11-03 15:01:26 +00002425/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002426
Guido van Rossum79f25d91997-04-29 20:08:16 +00002427static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002428filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002429{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002430 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002431 Py_ssize_t i, j;
2432 Py_ssize_t len = PyString_Size(strobj);
2433 Py_ssize_t outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002434
Guido van Rossum79f25d91997-04-29 20:08:16 +00002435 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002436 /* If it's a real string we can return the original,
2437 * as no character is ever false and __getitem__
2438 * does return this character. If it's a subclass
2439 * we must go through the __getitem__ loop */
2440 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002441 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002442 return strobj;
2443 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002444 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002445 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002446 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002447
Guido van Rossum12d12c51993-10-26 17:58:25 +00002448 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002449 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002450 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002451
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002452 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2453 if (item == NULL)
2454 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002455 if (func==Py_None) {
2456 ok = 1;
2457 } else {
2458 PyObject *arg, *good;
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002459 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002460 if (arg == NULL) {
2461 Py_DECREF(item);
2462 goto Fail_1;
2463 }
2464 good = PyEval_CallObject(func, arg);
2465 Py_DECREF(arg);
2466 if (good == NULL) {
2467 Py_DECREF(item);
2468 goto Fail_1;
2469 }
2470 ok = PyObject_IsTrue(good);
2471 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00002472 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002473 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002474 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002475 if (!PyString_Check(item)) {
2476 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2477 " __getitem__ returned different type");
2478 Py_DECREF(item);
2479 goto Fail_1;
2480 }
2481 reslen = PyString_GET_SIZE(item);
2482 if (reslen == 1) {
2483 PyString_AS_STRING(result)[j++] =
2484 PyString_AS_STRING(item)[0];
2485 } else {
2486 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002487 Py_ssize_t need = j + reslen + len-i-1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002488 if (need > outlen) {
2489 /* overallocate, to avoid reallocations */
2490 if (need<2*outlen)
2491 need = 2*outlen;
2492 if (_PyString_Resize(&result, need)) {
2493 Py_DECREF(item);
2494 return NULL;
2495 }
2496 outlen = need;
2497 }
2498 memcpy(
2499 PyString_AS_STRING(result) + j,
2500 PyString_AS_STRING(item),
2501 reslen
2502 );
2503 j += reslen;
2504 }
2505 }
Tim Peters388ed082001-04-07 20:34:48 +00002506 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002507 }
2508
Walter Dörwald903f1e02003-02-04 16:28:00 +00002509 if (j < outlen)
Tim Peters5de98422002-04-27 18:44:32 +00002510 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002511
Guido van Rossum12d12c51993-10-26 17:58:25 +00002512 return result;
2513
Guido van Rossum12d12c51993-10-26 17:58:25 +00002514Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002515 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002516 return NULL;
2517}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002518
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002519/* Helper for filter(): filter a Unicode object through a function */
2520
2521static PyObject *
2522filterunicode(PyObject *func, PyObject *strobj)
2523{
2524 PyObject *result;
Martin v. Löwis725507b2006-03-07 12:08:51 +00002525 register Py_ssize_t i, j;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002526 Py_ssize_t len = PyUnicode_GetSize(strobj);
2527 Py_ssize_t outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002528
2529 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002530 /* If it's a real string we can return the original,
2531 * as no character is ever false and __getitem__
2532 * does return this character. If it's a subclass
2533 * we must go through the __getitem__ loop */
2534 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002535 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002536 return strobj;
2537 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002538 }
2539 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2540 return NULL;
2541
2542 for (i = j = 0; i < len; ++i) {
2543 PyObject *item, *arg, *good;
2544 int ok;
2545
2546 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2547 if (item == NULL)
2548 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002549 if (func == Py_None) {
2550 ok = 1;
2551 } else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002552 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002553 if (arg == NULL) {
2554 Py_DECREF(item);
2555 goto Fail_1;
2556 }
2557 good = PyEval_CallObject(func, arg);
2558 Py_DECREF(arg);
2559 if (good == NULL) {
2560 Py_DECREF(item);
2561 goto Fail_1;
2562 }
2563 ok = PyObject_IsTrue(good);
2564 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002565 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002566 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002567 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002568 if (!PyUnicode_Check(item)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002569 PyErr_SetString(PyExc_TypeError,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002570 "can't filter unicode to unicode:"
2571 " __getitem__ returned different type");
Walter Dörwald903f1e02003-02-04 16:28:00 +00002572 Py_DECREF(item);
2573 goto Fail_1;
2574 }
2575 reslen = PyUnicode_GET_SIZE(item);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002576 if (reslen == 1)
Walter Dörwald903f1e02003-02-04 16:28:00 +00002577 PyUnicode_AS_UNICODE(result)[j++] =
2578 PyUnicode_AS_UNICODE(item)[0];
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002579 else {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002580 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002581 Py_ssize_t need = j + reslen + len - i - 1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002582 if (need > outlen) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002583 /* overallocate,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002584 to avoid reallocations */
2585 if (need < 2 * outlen)
2586 need = 2 * outlen;
Jeremy Hylton364f6be2003-09-16 03:17:16 +00002587 if (PyUnicode_Resize(
2588 &result, need) < 0) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002589 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002590 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002591 }
2592 outlen = need;
2593 }
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002594 memcpy(PyUnicode_AS_UNICODE(result) + j,
2595 PyUnicode_AS_UNICODE(item),
2596 reslen*sizeof(Py_UNICODE));
Walter Dörwald903f1e02003-02-04 16:28:00 +00002597 j += reslen;
2598 }
2599 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002600 Py_DECREF(item);
2601 }
2602
Walter Dörwald903f1e02003-02-04 16:28:00 +00002603 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002604 PyUnicode_Resize(&result, j);
2605
2606 return result;
2607
2608Fail_1:
2609 Py_DECREF(result);
2610 return NULL;
2611}