blob: 7d52e2bd622e35e95542c389b73e1e3169899f04 [file] [log] [blame]
Guido van Rossum3f5da241990-12-20 15:06:42 +00001/* Built-in functions */
2
Guido van Rossum79f25d91997-04-29 20:08:16 +00003#include "Python.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00004
5#include "node.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00006#include "code.h"
Guido van Rossum5b722181993-03-30 17:46:03 +00007#include "eval.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00008
Guido van Rossum6bf62da1997-04-11 20:37:35 +00009#include <ctype.h>
10
Guido van Rossume2ae77b2001-10-24 20:42:55 +000011#ifdef RISCOS
12#include "unixstuff.h"
13#endif
14
Mark Hammond26cffde42001-05-14 12:17:34 +000015/* The default encoding used by the platform file system APIs
16 Can remain NULL for all platforms that don't have such a concept
17*/
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000018#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
Mark Hammond26cffde42001-05-14 12:17:34 +000019const char *Py_FileSystemDefaultEncoding = "mbcs";
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000020#elif defined(__APPLE__)
21const char *Py_FileSystemDefaultEncoding = "utf-8";
Mark Hammond26cffde42001-05-14 12:17:34 +000022#else
23const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
24#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000025
Guido van Rossum12d12c51993-10-26 17:58:25 +000026/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000027static PyObject *filterstring(PyObject *, PyObject *);
Martin v. Löwis8afd7572003-01-25 22:46:11 +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 Rossumf15a29f2007-05-04 00:41:39 +0000415
416static char *
417source_as_string(PyObject *cmd)
418{
419 char *str;
420 Py_ssize_t size;
421
422 if (!PyObject_CheckReadBuffer(cmd) &&
423 !PyUnicode_Check(cmd)) {
424 PyErr_SetString(PyExc_TypeError,
425 "eval()/exec() arg 1 must be a string, bytes or code object");
426 return NULL;
427 }
428
429 if (PyUnicode_Check(cmd)) {
430 cmd = _PyUnicode_AsDefaultEncodedString(cmd, NULL);
431 if (cmd == NULL)
432 return NULL;
433 }
434 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &size) < 0) {
435 return NULL;
436 }
437 if (strlen(str) != size) {
438 PyErr_SetString(PyExc_TypeError,
439 "source code string cannot contain null bytes");
440 return NULL;
441 }
442 return str;
443}
444
Guido van Rossum79f25d91997-04-29 20:08:16 +0000445static PyObject *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000446builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000447{
448 char *str;
449 char *filename;
450 char *startstr;
451 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000452 int dont_inherit = 0;
453 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000454 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000455 PyObject *cmd;
Guido van Rossumd8faa362007-04-27 19:54:29 +0000456 static char *kwlist[] = {"source", "filename", "mode", "flags",
457 "dont_inherit", NULL};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000458
Guido van Rossumd8faa362007-04-27 19:54:29 +0000459 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
460 kwlist, &cmd, &filename, &startstr,
461 &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000462 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000463
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000464 cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000465
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000466 str = source_as_string(cmd);
467 if (str == NULL)
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000468 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000469
Guido van Rossum5b722181993-03-30 17:46:03 +0000470 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000471 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000472 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000473 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000474 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000475 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000476 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000477 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000478 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000479 return NULL;
Guido van Rossum5b722181993-03-30 17:46:03 +0000480 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000481
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000482 if (supplied_flags &
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000483 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000484 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000485 PyErr_SetString(PyExc_ValueError,
486 "compile(): unrecognised flags");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000487 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000488 }
489 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
490
Tim Peters6cd6a822001-08-17 22:11:27 +0000491 if (!dont_inherit) {
492 PyEval_MergeCompilerFlags(&cf);
493 }
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000494 return Py_CompileStringFlags(str, filename, start, &cf);
Guido van Rossum5b722181993-03-30 17:46:03 +0000495}
496
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000497PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000498"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000499\n\
500Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000501into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000502The filename will be used for run-time error messages.\n\
503The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000504single (interactive) statement, or 'eval' to compile an expression.\n\
505The flags argument, if present, controls which future statements influence\n\
506the compilation of the code.\n\
507The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
508the effects of any future statements in effect in the code calling\n\
509compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000510in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000511
Guido van Rossum79f25d91997-04-29 20:08:16 +0000512static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000513builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000514{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000515 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000516
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000517 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000518 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000519 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000520}
521
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000522PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000523"dir([object]) -> list of strings\n"
524"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000525"If called without an argument, return the names in the current scope.\n"
526"Else, return an alphabetized list of names comprising (some of) the attributes\n"
527"of the given object, and of attributes reachable from it.\n"
528"If the object supplies a method named __dir__, it will be used; otherwise\n"
529"the default dir() logic is used and returns:\n"
530" for a module object: the module's attributes.\n"
531" for a class object: its attributes, and recursively the attributes\n"
532" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000533" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000534" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000535
Guido van Rossum79f25d91997-04-29 20:08:16 +0000536static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000537builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000538{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000539 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000540
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000541 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000542 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000543 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000544}
545
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000546PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000547"divmod(x, y) -> (div, mod)\n\
548\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000549Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000550
551
Guido van Rossum79f25d91997-04-29 20:08:16 +0000552static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000553builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000554{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000555 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000556 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000557 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000558 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000559
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000560 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000561 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000562 if (locals != Py_None && !PyMapping_Check(locals)) {
563 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000564 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000565 }
566 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000567 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000568 "globals must be a real dict; try eval(expr, {}, mapping)"
569 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000570 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000571 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000572 if (globals == Py_None) {
573 globals = PyEval_GetGlobals();
574 if (locals == Py_None)
575 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000576 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000577 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000578 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000579
Georg Brandl77c85e62005-09-15 10:46:13 +0000580 if (globals == NULL || locals == NULL) {
581 PyErr_SetString(PyExc_TypeError,
582 "eval must be given globals and locals "
583 "when called without a frame");
584 return NULL;
585 }
586
Guido van Rossum79f25d91997-04-29 20:08:16 +0000587 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
588 if (PyDict_SetItemString(globals, "__builtins__",
589 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000590 return NULL;
591 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000592
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000593 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000594 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000595 PyErr_SetString(PyExc_TypeError,
596 "code object passed to eval() may not contain free variables");
597 return NULL;
598 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000599 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000600 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000601
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000602 str = source_as_string(cmd);
603 if (str == NULL)
Guido van Rossum94390a41992-08-14 15:14:30 +0000604 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000605
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000606 while (*str == ' ' || *str == '\t')
607 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000608
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000609 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Tim Peters9fa96be2001-08-17 23:04:59 +0000610 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000611 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
612 Py_XDECREF(tmp);
613 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000614}
615
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000616PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000617"eval(source[, globals[, locals]]) -> value\n\
618\n\
619Evaluate the source in the context of globals and locals.\n\
620The source may be a string representing a Python expression\n\
621or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000622The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000623defaulting to the current globals and locals.\n\
624If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000625
Georg Brandl7cae87c2006-09-06 06:51:57 +0000626static PyObject *
627builtin_exec(PyObject *self, PyObject *args)
628{
629 PyObject *v;
630 PyObject *prog, *globals = Py_None, *locals = Py_None;
631 int plain = 0;
632
633 if (!PyArg_ParseTuple(args, "O|OO:exec", &prog, &globals, &locals))
634 return NULL;
635
636 if (globals == Py_None) {
637 globals = PyEval_GetGlobals();
638 if (locals == Py_None) {
639 locals = PyEval_GetLocals();
640 plain = 1;
641 }
642 if (!globals || !locals) {
643 PyErr_SetString(PyExc_SystemError,
644 "globals and locals cannot be NULL");
645 return NULL;
646 }
647 }
648 else if (locals == Py_None)
649 locals = globals;
650 if (!PyString_Check(prog) &&
651 !PyUnicode_Check(prog) &&
652 !PyCode_Check(prog) &&
653 !PyFile_Check(prog)) {
654 PyErr_Format(PyExc_TypeError,
655 "exec() arg 1 must be a string, file, or code "
656 "object, not %.100s", prog->ob_type->tp_name);
657 return NULL;
658 }
659 if (!PyDict_Check(globals)) {
660 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
661 globals->ob_type->tp_name);
662 return NULL;
663 }
664 if (!PyMapping_Check(locals)) {
665 PyErr_Format(PyExc_TypeError,
666 "arg 3 must be a mapping or None, not %.100s",
667 locals->ob_type->tp_name);
668 return NULL;
669 }
670 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
671 if (PyDict_SetItemString(globals, "__builtins__",
672 PyEval_GetBuiltins()) != 0)
673 return NULL;
674 }
675
676 if (PyCode_Check(prog)) {
677 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
678 PyErr_SetString(PyExc_TypeError,
679 "code object passed to exec() may not "
680 "contain free variables");
681 return NULL;
682 }
683 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
684 }
685 else if (PyFile_Check(prog)) {
686 FILE *fp = PyFile_AsFile(prog);
687 char *name = PyString_AsString(PyFile_Name(prog));
688 PyCompilerFlags cf;
689 cf.cf_flags = 0;
690 if (PyEval_MergeCompilerFlags(&cf))
691 v = PyRun_FileFlags(fp, name, Py_file_input, globals,
692 locals, &cf);
693 else
694 v = PyRun_File(fp, name, Py_file_input, globals,
695 locals);
696 }
697 else {
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000698 char *str = source_as_string(prog);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000699 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000700 if (str == NULL)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000701 return NULL;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000702 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000703 if (PyEval_MergeCompilerFlags(&cf))
704 v = PyRun_StringFlags(str, Py_file_input, globals,
705 locals, &cf);
706 else
707 v = PyRun_String(str, Py_file_input, globals, locals);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000708 }
709 if (v == NULL)
710 return NULL;
711 Py_DECREF(v);
712 Py_RETURN_NONE;
713}
714
715PyDoc_STRVAR(exec_doc,
716"exec(object[, globals[, locals]])\n\
717\n\
718Read and execute code from a object, which can be a string, a code\n\
719object or a file object.\n\
720The globals and locals are dictionaries, defaulting to the current\n\
721globals and locals. If only globals is given, locals defaults to it.");
722
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000723
Guido van Rossum79f25d91997-04-29 20:08:16 +0000724static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000725builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000726{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000727 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000728 PyObject *globals = Py_None, *locals = Py_None;
729 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000730 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000731 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000732 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000733
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000734 if (!PyArg_ParseTuple(args, "s|O!O:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000735 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000736 &PyDict_Type, &globals,
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000737 &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000738 return NULL;
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000739 if (locals != Py_None && !PyMapping_Check(locals)) {
740 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
741 return NULL;
742 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000743 if (globals == Py_None) {
744 globals = PyEval_GetGlobals();
745 if (locals == Py_None)
746 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000747 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000748 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000749 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000750 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
751 if (PyDict_SetItemString(globals, "__builtins__",
752 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000753 return NULL;
754 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000755
756 exists = 0;
757 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000758#if defined(PLAN9)
759 {
760 Dir *d;
761
762 if ((d = dirstat(filename))!=nil) {
763 if(d->mode & DMDIR)
764 werrstr("is a directory");
765 else
766 exists = 1;
767 free(d);
768 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000769 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000770#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000771 if (object_exists(filename)) {
772 if (isdir(filename))
773 errno = EISDIR;
774 else
775 exists = 1;
776 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000777#else /* standard Posix */
778 {
779 struct stat s;
780 if (stat(filename, &s) == 0) {
781 if (S_ISDIR(s.st_mode))
Andrew MacIntyreda4d6cb2004-03-29 11:53:38 +0000782# if defined(PYOS_OS2) && defined(PYCC_VACPP)
Martin v. Löwis3484a182002-03-09 12:07:51 +0000783 errno = EOS2ERR;
784# else
785 errno = EISDIR;
786# endif
787 else
788 exists = 1;
789 }
790 }
791#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000792
793 if (exists) {
794 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000795 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000796 Py_END_ALLOW_THREADS
797
798 if (fp == NULL) {
799 exists = 0;
800 }
801 }
802
803 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000804 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000805 return NULL;
806 }
Tim Peters5ba58662001-07-16 02:29:45 +0000807 cf.cf_flags = 0;
808 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000809 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000810 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000811 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000812 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000813 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000814 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000815}
816
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000817PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000818"execfile(filename[, globals[, locals]])\n\
819\n\
820Read and execute a Python script from a file.\n\
821The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000822globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000823
824
Guido van Rossum79f25d91997-04-29 20:08:16 +0000825static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000826builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000827{
Guido van Rossum950ff291998-06-29 13:38:57 +0000828 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000829 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000830
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000831 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000832 return NULL;
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000833 if (PyUnicode_Check(name)) {
834 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
835 if (name == NULL)
836 return NULL;
837 }
838
839 if (!PyString_Check(name)) {
840 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000841 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000842 return NULL;
843 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000844 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000845 if (result == NULL && dflt != NULL &&
846 PyErr_ExceptionMatches(PyExc_AttributeError))
847 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000848 PyErr_Clear();
849 Py_INCREF(dflt);
850 result = dflt;
851 }
852 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000853}
854
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000855PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000856"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000857\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000858Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
859When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000860exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000861
862
Guido van Rossum79f25d91997-04-29 20:08:16 +0000863static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000864builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000865{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000866 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000867
Guido van Rossum79f25d91997-04-29 20:08:16 +0000868 d = PyEval_GetGlobals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000869 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000870 return d;
871}
872
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000873PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000874"globals() -> dictionary\n\
875\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000876Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000877
878
Guido van Rossum79f25d91997-04-29 20:08:16 +0000879static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000880builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000881{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000882 PyObject *v;
883 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000884
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000885 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000886 return NULL;
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000887 if (PyUnicode_Check(name)) {
888 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
889 if (name == NULL)
890 return NULL;
891 }
892
893 if (!PyString_Check(name)) {
894 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000895 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000896 return NULL;
897 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000898 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000899 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000900 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000901 Py_INCREF(Py_False);
902 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000903 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000904 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000905 Py_INCREF(Py_True);
906 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000907}
908
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000909PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000910"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000911\n\
912Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000913(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000914
915
Guido van Rossum79f25d91997-04-29 20:08:16 +0000916static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000917builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000918{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000919 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000920}
921
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000922PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000923"id(object) -> integer\n\
924\n\
925Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000926simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000927
928
Guido van Rossum79f25d91997-04-29 20:08:16 +0000929static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000930builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000931{
932 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000933 PyObject *it; /* the iterator object */
934 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000935 } sequence;
936
Guido van Rossum79f25d91997-04-29 20:08:16 +0000937 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000938 sequence *seqs = NULL, *sqp;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000939 Py_ssize_t n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000940 register int i, j;
941
Guido van Rossum79f25d91997-04-29 20:08:16 +0000942 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000943 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000944 PyErr_SetString(PyExc_TypeError,
945 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000946 return NULL;
947 }
948
Guido van Rossum79f25d91997-04-29 20:08:16 +0000949 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000950 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000951
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000952 if (func == Py_None && n == 1) {
953 /* map(None, S) is the same as list(S). */
954 return PySequence_List(PyTuple_GetItem(args, 1));
955 }
956
Tim Peters4e9afdc2001-05-03 23:54:49 +0000957 /* Get space for sequence descriptors. Must NULL out the iterator
958 * pointers so that jumping to Fail_2 later doesn't see trash.
959 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000960 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
961 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000962 return NULL;
963 }
964 for (i = 0; i < n; ++i) {
965 seqs[i].it = (PyObject*)NULL;
966 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000967 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000968
Tim Peters4e9afdc2001-05-03 23:54:49 +0000969 /* Do a first pass to obtain iterators for the arguments, and set len
970 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000971 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000972 len = 0;
973 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
974 PyObject *curseq;
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000975 Py_ssize_t curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000976
Tim Peters4e9afdc2001-05-03 23:54:49 +0000977 /* Get iterator. */
978 curseq = PyTuple_GetItem(args, i+1);
979 sqp->it = PyObject_GetIter(curseq);
980 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000981 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000982 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000983 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +0000984 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000985 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000986 goto Fail_2;
987 }
988
Tim Peters4e9afdc2001-05-03 23:54:49 +0000989 /* Update len. */
Armin Rigof5b3e362006-02-11 21:32:43 +0000990 curlen = _PyObject_LengthHint(curseq);
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000991 if (curlen < 0) {
Raymond Hettingera710b332005-08-21 11:03:59 +0000992 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
993 !PyErr_ExceptionMatches(PyExc_AttributeError)) {
994 goto Fail_2;
995 }
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000996 PyErr_Clear();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000997 curlen = 8; /* arbitrary */
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000998 }
999 if (curlen > len)
1000 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001001 }
1002
Tim Peters4e9afdc2001-05-03 23:54:49 +00001003 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001004 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001005 goto Fail_2;
1006
Tim Peters4e9afdc2001-05-03 23:54:49 +00001007 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +00001008 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001009 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001010 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001011
Guido van Rossum79f25d91997-04-29 20:08:16 +00001012 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +00001013 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001014 else if ((alist = PyTuple_New(n)) == NULL)
1015 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001016
1017 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001018 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001019 Py_INCREF(Py_None);
1020 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001021 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001022 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001023 item = PyIter_Next(sqp->it);
1024 if (item)
1025 ++numactive;
1026 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001027 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001028 Py_XDECREF(alist);
1029 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001030 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001031 Py_INCREF(Py_None);
1032 item = Py_None;
1033 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001034 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001035 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001036 if (alist)
1037 PyTuple_SET_ITEM(alist, j, item);
1038 else
Guido van Rossum2d951851994-08-29 12:52:16 +00001039 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001040 }
1041
Guido van Rossum32120311995-07-10 13:52:21 +00001042 if (!alist)
1043 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +00001044
Tim Peters4e9afdc2001-05-03 23:54:49 +00001045 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001046 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +00001047 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001048 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001049
Guido van Rossum79f25d91997-04-29 20:08:16 +00001050 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +00001051 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001052 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001053 value = PyEval_CallObject(func, alist);
1054 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001055 if (value == NULL)
1056 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001057 }
1058 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +00001059 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +00001060 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +00001061 if (status < 0)
1062 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001063 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001064 else if (PyList_SetItem(result, i, value) < 0)
1065 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001066 }
1067
Guido van Rossumfa4ac711998-07-10 17:37:30 +00001068 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
1069 goto Fail_1;
1070
Tim Peters4e9afdc2001-05-03 23:54:49 +00001071 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001072
Guido van Rossum12d12c51993-10-26 17:58:25 +00001073Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001074 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001075Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +00001076 result = NULL;
1077Succeed:
1078 assert(seqs);
1079 for (i = 0; i < n; ++i)
1080 Py_XDECREF(seqs[i].it);
1081 PyMem_DEL(seqs);
1082 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001083}
1084
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001085PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001086"map(function, sequence[, sequence, ...]) -> list\n\
1087\n\
1088Return a list of the results of applying the function to the items of\n\
1089the argument sequence(s). If more than one sequence is given, the\n\
1090function is called with an argument list consisting of the corresponding\n\
1091item of each sequence, substituting None for missing values when not all\n\
1092sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001093the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001094
1095
Guido van Rossum79f25d91997-04-29 20:08:16 +00001096static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +00001097builtin_next(PyObject *self, PyObject *args)
1098{
1099 PyObject *it, *res;
1100 PyObject *def = NULL;
1101
1102 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1103 return NULL;
1104 if (!PyIter_Check(it)) {
1105 PyErr_Format(PyExc_TypeError,
1106 "%.200s object is not an iterator", it->ob_type->tp_name);
1107 return NULL;
1108 }
1109
1110 res = (*it->ob_type->tp_iternext)(it);
1111 if (res == NULL) {
1112 if (def) {
1113 if (PyErr_Occurred() &&
1114 !PyErr_ExceptionMatches(PyExc_StopIteration))
1115 return NULL;
1116 PyErr_Clear();
1117 Py_INCREF(def);
1118 return def;
1119 } else if (PyErr_Occurred()) {
1120 return NULL;
1121 } else {
1122 PyErr_SetNone(PyExc_StopIteration);
1123 return NULL;
1124 }
1125 }
1126 return res;
1127}
1128
1129PyDoc_STRVAR(next_doc,
1130"next(iterator[, default])\n\
1131\n\
1132Return the next item from the iterator. If default is given and the iterator\n\
1133is exhausted, it is returned instead of raising StopIteration.");
1134
1135
1136static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001137builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001138{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001139 PyObject *v;
1140 PyObject *name;
1141 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001142
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001143 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001144 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001145 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001146 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001147 Py_INCREF(Py_None);
1148 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001149}
1150
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001151PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001152"setattr(object, name, value)\n\
1153\n\
1154Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001155``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001156
1157
Guido van Rossum79f25d91997-04-29 20:08:16 +00001158static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001159builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001160{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001161 PyObject *v;
1162 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001163
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001164 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001165 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001166 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001167 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001168 Py_INCREF(Py_None);
1169 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001170}
1171
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001172PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001173"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001174\n\
1175Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001176``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001177
1178
Guido van Rossum79f25d91997-04-29 20:08:16 +00001179static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001180builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001181{
Guido van Rossum9bfef441993-03-29 10:43:31 +00001182 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001183
Guido van Rossum79f25d91997-04-29 20:08:16 +00001184 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001185 if (x == -1)
1186 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001187 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001188}
1189
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001190PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001191"hash(object) -> integer\n\
1192\n\
1193Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001194the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001195
1196
Guido van Rossum79f25d91997-04-29 20:08:16 +00001197static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001198builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001199{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001200 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001201 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001202
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001203 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001204 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001205 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001206 "hex() argument can't be converted to hex");
1207 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001208 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001209 res = (*nb->nb_hex)(v);
1210 if (res && !PyString_Check(res)) {
1211 PyErr_Format(PyExc_TypeError,
1212 "__hex__ returned non-string (type %.200s)",
1213 res->ob_type->tp_name);
1214 Py_DECREF(res);
1215 return NULL;
1216 }
1217 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001218}
1219
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001220PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001221"hex(number) -> string\n\
1222\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001223Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001224
1225
Guido van Rossum79f25d91997-04-29 20:08:16 +00001226static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001227builtin_iter(PyObject *self, PyObject *args)
1228{
1229 PyObject *v, *w = NULL;
1230
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001231 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001232 return NULL;
1233 if (w == NULL)
1234 return PyObject_GetIter(v);
1235 if (!PyCallable_Check(v)) {
1236 PyErr_SetString(PyExc_TypeError,
1237 "iter(v, w): v must be callable");
1238 return NULL;
1239 }
1240 return PyCallIter_New(v, w);
1241}
1242
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001243PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001244"iter(collection) -> iterator\n\
1245iter(callable, sentinel) -> iterator\n\
1246\n\
1247Get an iterator from an object. In the first form, the argument must\n\
1248supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001249In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001250
1251
1252static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001253builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001254{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001255 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001256
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001257 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001258 if (res < 0 && PyErr_Occurred())
1259 return NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001260 return PyInt_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001261}
1262
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001263PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001264"len(object) -> integer\n\
1265\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001266Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001267
1268
Guido van Rossum79f25d91997-04-29 20:08:16 +00001269static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001270builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001271{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001272 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001273
Guido van Rossum79f25d91997-04-29 20:08:16 +00001274 d = PyEval_GetLocals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00001275 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001276 return d;
1277}
1278
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001279PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001280"locals() -> dictionary\n\
1281\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001282Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001283
1284
Guido van Rossum79f25d91997-04-29 20:08:16 +00001285static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001286min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001287{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001288 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001289 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001290
Guido van Rossum79f25d91997-04-29 20:08:16 +00001291 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001292 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001293 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001294 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001295
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001296 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1297 keyfunc = PyDict_GetItemString(kwds, "key");
1298 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001299 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001300 "%s() got an unexpected keyword argument", name);
1301 return NULL;
1302 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001303 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001304
Tim Petersc3074532001-05-03 07:00:32 +00001305 it = PyObject_GetIter(v);
1306 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001307 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001308
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001309 maxitem = NULL; /* the result */
1310 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001311 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001312 /* get the value from the key function */
1313 if (keyfunc != NULL) {
1314 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1315 if (val == NULL)
1316 goto Fail_it_item;
1317 }
1318 /* no key function; the value is the item */
1319 else {
1320 val = item;
1321 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001322 }
Tim Petersc3074532001-05-03 07:00:32 +00001323
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001324 /* maximum value and item are unset; set them */
1325 if (maxval == NULL) {
1326 maxitem = item;
1327 maxval = val;
1328 }
1329 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001330 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001331 int cmp = PyObject_RichCompareBool(val, maxval, op);
1332 if (cmp < 0)
1333 goto Fail_it_item_and_val;
1334 else if (cmp > 0) {
1335 Py_DECREF(maxval);
1336 Py_DECREF(maxitem);
1337 maxval = val;
1338 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001339 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001340 else {
1341 Py_DECREF(item);
1342 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001343 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001344 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001345 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001346 if (PyErr_Occurred())
1347 goto Fail_it;
1348 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001349 PyErr_Format(PyExc_ValueError,
1350 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001351 assert(maxitem == NULL);
1352 }
1353 else
1354 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001355 Py_DECREF(it);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001356 return maxitem;
1357
1358Fail_it_item_and_val:
1359 Py_DECREF(val);
1360Fail_it_item:
1361 Py_DECREF(item);
1362Fail_it:
1363 Py_XDECREF(maxval);
1364 Py_XDECREF(maxitem);
1365 Py_DECREF(it);
1366 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001367}
1368
Guido van Rossum79f25d91997-04-29 20:08:16 +00001369static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001370builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001371{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001372 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001373}
1374
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001375PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001376"min(iterable[, key=func]) -> value\n\
1377min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001378\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001379With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001380With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001381
1382
Guido van Rossum79f25d91997-04-29 20:08:16 +00001383static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001384builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001385{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001386 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001387}
1388
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001389PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001390"max(iterable[, key=func]) -> value\n\
1391max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001392\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001393With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001394With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001395
1396
Guido van Rossum79f25d91997-04-29 20:08:16 +00001397static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001398builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001399{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001400 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001401 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001402
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001403 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1404 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001405 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001406 "oct() argument can't be converted to oct");
1407 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001408 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001409 res = (*nb->nb_oct)(v);
1410 if (res && !PyString_Check(res)) {
1411 PyErr_Format(PyExc_TypeError,
1412 "__oct__ returned non-string (type %.200s)",
1413 res->ob_type->tp_name);
1414 Py_DECREF(res);
1415 return NULL;
1416 }
1417 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001418}
1419
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001420PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001421"oct(number) -> string\n\
1422\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001423Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001424
1425
Guido van Rossum79f25d91997-04-29 20:08:16 +00001426static PyObject *
Thomas Wouters477c8d52006-05-27 19:21:47 +00001427builtin_open(PyObject *self, PyObject *args, PyObject *kwds)
1428{
1429 return PyObject_Call((PyObject*)&PyFile_Type, args, kwds);
1430}
1431
1432PyDoc_STRVAR(open_doc,
1433"open(name[, mode[, buffering]]) -> file object\n\
1434\n\
1435Open a file using the file() type, returns a file object.");
1436
1437
1438static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001439builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001440{
Guido van Rossum09095f32000-03-10 23:00:52 +00001441 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001442 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001443
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001444 if (PyString_Check(obj)) {
1445 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001446 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001447 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001448 return PyInt_FromLong(ord);
1449 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001450 }
1451 else if (PyUnicode_Check(obj)) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001452 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001453 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001454 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001455 return PyInt_FromLong(ord);
1456 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001457 }
1458 else if (PyBytes_Check(obj)) {
1459 /* XXX Hopefully this is temporary */
1460 size = PyBytes_GET_SIZE(obj);
1461 if (size == 1) {
1462 ord = (long)*PyBytes_AS_STRING(obj);
1463 return PyInt_FromLong(ord);
1464 }
1465 }
1466 else {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001467 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001468 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001469 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001470 return NULL;
1471 }
1472
Guido van Rossumad991772001-01-12 16:03:05 +00001473 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001474 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001475 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001476 size);
1477 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001478}
1479
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001480PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001481"ord(c) -> integer\n\
1482\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001483Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001484
1485
Guido van Rossum79f25d91997-04-29 20:08:16 +00001486static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001487builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001488{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001489 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001490
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001491 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001492 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001493 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001494}
1495
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001496PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001497"pow(x, y[, z]) -> number\n\
1498\n\
1499With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001500equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001501
1502
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001503
Guido van Rossum34343512006-11-30 22:13:52 +00001504static PyObject *
1505builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1506{
1507 static char *kwlist[] = {"sep", "end", "file", 0};
Georg Brandl257d3d92007-02-26 10:35:10 +00001508 static PyObject *dummy_args;
Guido van Rossum34343512006-11-30 22:13:52 +00001509 PyObject *sep = NULL, *end = NULL, *file = NULL;
1510 int i, err;
1511
Georg Brandl257d3d92007-02-26 10:35:10 +00001512 if (dummy_args == NULL) {
1513 if (!(dummy_args = PyTuple_New(0)))
1514 return NULL;
1515 }
Georg Brandl88fc6642007-02-09 21:28:07 +00001516 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
Guido van Rossum34343512006-11-30 22:13:52 +00001517 kwlist, &sep, &end, &file))
1518 return NULL;
1519 if (file == NULL || file == Py_None)
1520 file = PySys_GetObject("stdout");
1521
Georg Brandl16f3e032006-11-30 22:46:03 +00001522 if (sep && sep != Py_None && !PyString_Check(sep) &&
1523 !PyUnicode_Check(sep)) {
1524 PyErr_Format(PyExc_TypeError,
1525 "sep must be None, str or unicode, not %.200s",
1526 sep->ob_type->tp_name);
1527 return NULL;
1528 }
1529 if (end && end != Py_None && !PyString_Check(end) &&
1530 !PyUnicode_Check(end)) {
1531 PyErr_Format(PyExc_TypeError,
1532 "end must be None, str or unicode, not %.200s",
1533 end->ob_type->tp_name);
1534 return NULL;
1535 }
Guido van Rossum34343512006-11-30 22:13:52 +00001536
1537 for (i = 0; i < PyTuple_Size(args); i++) {
1538 if (i > 0) {
1539 if (sep == NULL || sep == Py_None)
1540 err = PyFile_WriteString(" ", file);
1541 else
1542 err = PyFile_WriteObject(sep, file,
1543 Py_PRINT_RAW);
1544 if (err)
1545 return NULL;
1546 }
1547 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1548 Py_PRINT_RAW);
1549 if (err)
1550 return NULL;
1551 }
1552
1553 if (end == NULL || end == Py_None)
1554 err = PyFile_WriteString("\n", file);
1555 else
1556 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1557 if (err)
1558 return NULL;
1559
1560 Py_RETURN_NONE;
1561}
1562
1563PyDoc_STRVAR(print_doc,
Guido van Rossum452bf512007-02-09 05:32:43 +00001564"print(value, ..., file=None, sep=' ', end='\\n')\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001565\n\
1566Prints the values to a stream, or to sys.stdout by default.\n\
1567Optional keyword arguments:\n\
1568file: a file-like object (stream); defaults to the current sys.stdout.\n\
1569sep: string inserted between values, default a space.\n\
1570end: string appended after the last value, default a newline.");
1571
1572
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001573/* Return number of items in range (lo, hi, step), when arguments are
1574 * PyInt or PyLong objects. step > 0 required. Return a value < 0 if
1575 * & only if the true value is too large to fit in a signed long.
1576 * Arguments MUST return 1 with either PyInt_Check() or
1577 * PyLong_Check(). Return -1 when there is an error.
1578 */
1579static long
1580get_len_of_range_longs(PyObject *lo, PyObject *hi, PyObject *step)
1581{
1582 /* -------------------------------------------------------------
1583 Algorithm is equal to that of get_len_of_range(), but it operates
1584 on PyObjects (which are assumed to be PyLong or PyInt objects).
1585 ---------------------------------------------------------------*/
1586 long n;
1587 PyObject *diff = NULL;
1588 PyObject *one = NULL;
1589 PyObject *tmp1 = NULL, *tmp2 = NULL, *tmp3 = NULL;
1590 /* holds sub-expression evaluations */
1591
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001592 /* If (lo >= hi), return length of 0 (or error). */
1593 n = PyObject_RichCompareBool(lo, hi, Py_LT);
1594 if (n <= 0)
1595 return n;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001596
1597 if ((one = PyLong_FromLong(1L)) == NULL)
1598 goto Fail;
1599
1600 if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL)
1601 goto Fail;
1602
1603 if ((diff = PyNumber_Subtract(tmp1, one)) == NULL)
1604 goto Fail;
1605
1606 if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL)
1607 goto Fail;
1608
1609 if ((tmp3 = PyNumber_Add(tmp2, one)) == NULL)
1610 goto Fail;
1611
1612 n = PyLong_AsLong(tmp3);
1613 if (PyErr_Occurred()) { /* Check for Overflow */
1614 PyErr_Clear();
1615 goto Fail;
1616 }
1617
1618 Py_DECREF(tmp3);
1619 Py_DECREF(tmp2);
1620 Py_DECREF(diff);
1621 Py_DECREF(tmp1);
1622 Py_DECREF(one);
1623 return n;
1624
1625 Fail:
1626 Py_XDECREF(tmp3);
1627 Py_XDECREF(tmp2);
1628 Py_XDECREF(diff);
1629 Py_XDECREF(tmp1);
1630 Py_XDECREF(one);
1631 return -1;
1632}
1633
1634/* An extension of builtin_range() that handles the case when PyLong
1635 * arguments are given. */
1636static PyObject *
1637handle_range_longs(PyObject *self, PyObject *args)
1638{
1639 PyObject *ilow;
Tim Peters874e1f72003-04-13 22:13:08 +00001640 PyObject *ihigh = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001641 PyObject *istep = NULL;
Tim Peters874e1f72003-04-13 22:13:08 +00001642
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001643 PyObject *curnum = NULL;
1644 PyObject *v = NULL;
1645 long bign;
1646 int i, n;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001647 int step_pos;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001648
Tim Peters874e1f72003-04-13 22:13:08 +00001649 PyObject *zero = PyLong_FromLong(0);
1650
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001651 if (zero == NULL)
1652 return NULL;
1653
Tim Peters874e1f72003-04-13 22:13:08 +00001654 if (!PyArg_UnpackTuple(args, "range", 1, 3, &ilow, &ihigh, &istep)) {
1655 Py_DECREF(zero);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001656 return NULL;
1657 }
1658
Tim Peters874e1f72003-04-13 22:13:08 +00001659 /* Figure out which way we were called, supply defaults, and be
1660 * sure to incref everything so that the decrefs at the end
1661 * are correct.
1662 */
1663 assert(ilow != NULL);
1664 if (ihigh == NULL) {
1665 /* only 1 arg -- it's the upper limit */
1666 ihigh = ilow;
1667 ilow = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001668 }
Tim Peters874e1f72003-04-13 22:13:08 +00001669 assert(ihigh != NULL);
1670 Py_INCREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001671
Tim Peters874e1f72003-04-13 22:13:08 +00001672 /* ihigh correct now; do ilow */
1673 if (ilow == NULL)
1674 ilow = zero;
1675 Py_INCREF(ilow);
1676
1677 /* ilow and ihigh correct now; do istep */
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001678 if (istep == NULL) {
1679 istep = PyLong_FromLong(1L);
1680 if (istep == NULL)
1681 goto Fail;
1682 }
1683 else {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001684 Py_INCREF(istep);
1685 }
1686
Tim Peters874e1f72003-04-13 22:13:08 +00001687 if (!PyInt_Check(ilow) && !PyLong_Check(ilow)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001688 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001689 "range() integer start argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001690 ilow->ob_type->tp_name);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001691 goto Fail;
1692 }
1693
Tim Peters874e1f72003-04-13 22:13:08 +00001694 if (!PyInt_Check(ihigh) && !PyLong_Check(ihigh)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001695 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001696 "range() integer end argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001697 ihigh->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001698 goto Fail;
1699 }
1700
1701 if (!PyInt_Check(istep) && !PyLong_Check(istep)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001702 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001703 "range() integer step argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001704 istep->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001705 goto Fail;
1706 }
1707
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001708 step_pos = PyObject_RichCompareBool(istep, zero, Py_GT);
1709 if (step_pos < 0)
Tim Peters874e1f72003-04-13 22:13:08 +00001710 goto Fail;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001711 if (step_pos)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001712 bign = get_len_of_range_longs(ilow, ihigh, istep);
1713 else {
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001714 int step_zero = PyObject_RichCompareBool(istep, zero, Py_EQ);
Guido van Rossum93a66922006-08-24 02:10:21 +00001715 PyObject *neg_istep;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001716 if (step_zero < 0)
1717 goto Fail;
1718 if (step_zero) {
1719 PyErr_SetString(PyExc_ValueError,
1720 "range() step argument must not be zero");
1721 goto Fail;
1722 }
Guido van Rossum93a66922006-08-24 02:10:21 +00001723 neg_istep = PyNumber_Negative(istep);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001724 if (neg_istep == NULL)
1725 goto Fail;
1726 bign = get_len_of_range_longs(ihigh, ilow, neg_istep);
1727 Py_DECREF(neg_istep);
1728 }
1729
1730 n = (int)bign;
1731 if (bign < 0 || (long)n != bign) {
1732 PyErr_SetString(PyExc_OverflowError,
1733 "range() result has too many items");
1734 goto Fail;
1735 }
1736
1737 v = PyList_New(n);
1738 if (v == NULL)
1739 goto Fail;
1740
1741 curnum = ilow;
1742 Py_INCREF(curnum);
1743
1744 for (i = 0; i < n; i++) {
1745 PyObject *w = PyNumber_Long(curnum);
1746 PyObject *tmp_num;
1747 if (w == NULL)
1748 goto Fail;
1749
1750 PyList_SET_ITEM(v, i, w);
1751
1752 tmp_num = PyNumber_Add(curnum, istep);
1753 if (tmp_num == NULL)
1754 goto Fail;
1755
1756 Py_DECREF(curnum);
1757 curnum = tmp_num;
1758 }
Tim Peters874e1f72003-04-13 22:13:08 +00001759 Py_DECREF(ilow);
1760 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001761 Py_DECREF(istep);
1762 Py_DECREF(zero);
Tim Peters874e1f72003-04-13 22:13:08 +00001763 Py_DECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001764 return v;
1765
1766 Fail:
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_XDECREF(istep);
Tim Peters874e1f72003-04-13 22:13:08 +00001770 Py_DECREF(zero);
1771 Py_XDECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001772 Py_XDECREF(v);
1773 return NULL;
1774}
1775
Guido van Rossum124eff01999-02-23 16:11:01 +00001776/* Return number of items in range/xrange (lo, hi, step). step > 0
1777 * required. Return a value < 0 if & only if the true value is too
1778 * large to fit in a signed long.
1779 */
1780static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001781get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001782{
1783 /* -------------------------------------------------------------
1784 If lo >= hi, the range is empty.
1785 Else if n values are in the range, the last one is
1786 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1787 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1788 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1789 the RHS is non-negative and so truncation is the same as the
1790 floor. Letting M be the largest positive long, the worst case
1791 for the RHS numerator is hi=M, lo=-M-1, and then
1792 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1793 precision to compute the RHS exactly.
1794 ---------------------------------------------------------------*/
1795 long n = 0;
1796 if (lo < hi) {
1797 unsigned long uhi = (unsigned long)hi;
1798 unsigned long ulo = (unsigned long)lo;
1799 unsigned long diff = uhi - ulo - 1;
1800 n = (long)(diff / (unsigned long)step + 1);
1801 }
1802 return n;
1803}
1804
Guido van Rossum79f25d91997-04-29 20:08:16 +00001805static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001806builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001807{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001808 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001809 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001810 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001811
Guido van Rossum79f25d91997-04-29 20:08:16 +00001812 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001813
Guido van Rossum79f25d91997-04-29 20:08:16 +00001814 if (PyTuple_Size(args) <= 1) {
1815 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001816 "l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001817 &ihigh)) {
1818 PyErr_Clear();
1819 return handle_range_longs(self, args);
1820 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001821 }
1822 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001823 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001824 "ll|l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001825 &ilow, &ihigh, &istep)) {
1826 PyErr_Clear();
1827 return handle_range_longs(self, args);
1828 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001829 }
1830 if (istep == 0) {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001831 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001832 "range() step argument must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001833 return NULL;
1834 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001835 if (istep > 0)
1836 bign = get_len_of_range(ilow, ihigh, istep);
1837 else
1838 bign = get_len_of_range(ihigh, ilow, -istep);
1839 n = (int)bign;
1840 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001841 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001842 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001843 return NULL;
1844 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001845 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001846 if (v == NULL)
1847 return NULL;
1848 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001849 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001850 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001851 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001852 return NULL;
1853 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001854 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001855 ilow += istep;
1856 }
1857 return v;
1858}
1859
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001860PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001861"range([start,] stop[, step]) -> list of integers\n\
1862\n\
1863Return a list containing an arithmetic progression of integers.\n\
1864range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1865When step is given, it specifies the increment (or decrement).\n\
1866For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001867These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001868
Guido van Rossuma88a0332007-02-26 16:59:55 +00001869static PyObject *
1870builtin_input(PyObject *self, PyObject *args)
1871{
1872 PyObject *v = NULL;
1873 PyObject *fin = PySys_GetObject("stdin");
1874 PyObject *fout = PySys_GetObject("stdout");
1875
1876 if (!PyArg_UnpackTuple(args, "input", 0, 1, &v))
1877 return NULL;
1878
1879 if (fin == NULL) {
1880 PyErr_SetString(PyExc_RuntimeError, "input: lost sys.stdin");
1881 return NULL;
1882 }
1883 if (fout == NULL) {
1884 PyErr_SetString(PyExc_RuntimeError, "input: lost sys.stdout");
1885 return NULL;
1886 }
1887 if (PyFile_AsFile(fin) && PyFile_AsFile(fout)
1888 && isatty(fileno(PyFile_AsFile(fin)))
1889 && isatty(fileno(PyFile_AsFile(fout)))) {
1890 PyObject *po;
1891 char *prompt;
1892 char *s;
1893 PyObject *result;
1894 if (v != NULL) {
1895 po = PyObject_Str(v);
1896 if (po == NULL)
1897 return NULL;
1898 prompt = PyString_AsString(po);
1899 if (prompt == NULL)
1900 return NULL;
1901 }
1902 else {
1903 po = NULL;
1904 prompt = "";
1905 }
1906 s = PyOS_Readline(PyFile_AsFile(fin), PyFile_AsFile(fout),
1907 prompt);
1908 Py_XDECREF(po);
1909 if (s == NULL) {
1910 if (!PyErr_Occurred())
1911 PyErr_SetNone(PyExc_KeyboardInterrupt);
1912 return NULL;
1913 }
1914 if (*s == '\0') {
1915 PyErr_SetNone(PyExc_EOFError);
1916 result = NULL;
1917 }
1918 else { /* strip trailing '\n' */
1919 size_t len = strlen(s);
1920 if (len > PY_SSIZE_T_MAX) {
1921 PyErr_SetString(PyExc_OverflowError,
1922 "input: input too long");
1923 result = NULL;
1924 }
1925 else {
1926 result = PyString_FromStringAndSize(s, len-1);
1927 }
1928 }
1929 PyMem_FREE(s);
1930 return result;
1931 }
1932 if (v != NULL) {
1933 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
1934 return NULL;
1935 }
1936 return PyFile_GetLine(fin, -1);
1937}
1938
1939PyDoc_STRVAR(input_doc,
1940"input([prompt]) -> string\n\
1941\n\
1942Read a string from standard input. The trailing newline is stripped.\n\
1943If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1944On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1945is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001946
Guido van Rossum79f25d91997-04-29 20:08:16 +00001947static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001948builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001949{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001950 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001951}
1952
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001953PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001954"reload(module) -> module\n\
1955\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001956Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001957
1958
Guido van Rossum79f25d91997-04-29 20:08:16 +00001959static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001960builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001961{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001962 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001963}
1964
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001965PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001966"repr(object) -> string\n\
1967\n\
1968Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001969For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001970
1971
Guido van Rossum79f25d91997-04-29 20:08:16 +00001972static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001973builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001974{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001975 double number;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001976 double f;
1977 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001978 int i;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001979 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001980
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001981 if (!PyArg_ParseTupleAndKeywords(args, kwds, "d|i:round",
1982 kwlist, &number, &ndigits))
1983 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001984 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001985 i = abs(ndigits);
1986 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001987 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001988 if (ndigits < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001989 number /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001990 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001991 number *= f;
1992 if (number >= 0.0)
1993 number = floor(number + 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00001994 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001995 number = ceil(number - 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00001996 if (ndigits < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001997 number *= f;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001998 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001999 number /= f;
2000 return PyFloat_FromDouble(number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002001}
2002
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002003PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002004"round(number[, ndigits]) -> floating point number\n\
2005\n\
2006Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002007This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002008
Raymond Hettinger64958a12003-12-17 20:43:33 +00002009static PyObject *
2010builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
2011{
2012 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
2013 PyObject *callable;
Martin v. Löwis15e62742006-02-27 16:46:16 +00002014 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00002015 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002016
Neal Norwitz6f0d4792005-12-15 06:40:36 +00002017 /* args 1-4 should match listsort in Objects/listobject.c */
Armin Rigo71d7e702005-09-20 18:13:03 +00002018 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
2019 kwlist, &seq, &compare, &keyfunc, &reverse))
2020 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002021
2022 newlist = PySequence_List(seq);
2023 if (newlist == NULL)
2024 return NULL;
2025
2026 callable = PyObject_GetAttrString(newlist, "sort");
2027 if (callable == NULL) {
2028 Py_DECREF(newlist);
2029 return NULL;
2030 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002031
Raymond Hettinger64958a12003-12-17 20:43:33 +00002032 newargs = PyTuple_GetSlice(args, 1, 4);
2033 if (newargs == NULL) {
2034 Py_DECREF(newlist);
2035 Py_DECREF(callable);
2036 return NULL;
2037 }
2038
2039 v = PyObject_Call(callable, newargs, kwds);
2040 Py_DECREF(newargs);
2041 Py_DECREF(callable);
2042 if (v == NULL) {
2043 Py_DECREF(newlist);
2044 return NULL;
2045 }
2046 Py_DECREF(v);
2047 return newlist;
2048}
2049
2050PyDoc_STRVAR(sorted_doc,
2051"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002052
Guido van Rossum79f25d91997-04-29 20:08:16 +00002053static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002054builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002055{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002056 PyObject *v = NULL;
2057 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002058
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002059 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002060 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00002061 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002062 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002063 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002064 if (!PyErr_Occurred())
2065 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002066 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002067 }
2068 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00002069 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00002070 }
2071 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002072 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00002073 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002074 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00002075 "vars() argument must have __dict__ attribute");
2076 return NULL;
2077 }
2078 }
2079 return d;
2080}
2081
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002082PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002083"vars([object]) -> dictionary\n\
2084\n\
2085Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002086With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002087
Alex Martellia70b1912003-04-22 08:12:33 +00002088
2089static PyObject*
2090builtin_sum(PyObject *self, PyObject *args)
2091{
2092 PyObject *seq;
2093 PyObject *result = NULL;
2094 PyObject *temp, *item, *iter;
2095
Raymond Hettinger5cf63942003-10-25 06:41:37 +00002096 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00002097 return NULL;
2098
2099 iter = PyObject_GetIter(seq);
2100 if (iter == NULL)
2101 return NULL;
2102
2103 if (result == NULL) {
2104 result = PyInt_FromLong(0);
2105 if (result == NULL) {
2106 Py_DECREF(iter);
2107 return NULL;
2108 }
2109 } else {
2110 /* reject string values for 'start' parameter */
2111 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
2112 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002113 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00002114 Py_DECREF(iter);
2115 return NULL;
2116 }
Alex Martelli41c9f882003-04-22 09:24:48 +00002117 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00002118 }
2119
2120 for(;;) {
2121 item = PyIter_Next(iter);
2122 if (item == NULL) {
2123 /* error, or end-of-sequence */
2124 if (PyErr_Occurred()) {
2125 Py_DECREF(result);
2126 result = NULL;
2127 }
2128 break;
2129 }
Alex Martellia253e182003-10-25 23:24:14 +00002130 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00002131 Py_DECREF(result);
2132 Py_DECREF(item);
2133 result = temp;
2134 if (result == NULL)
2135 break;
2136 }
2137 Py_DECREF(iter);
2138 return result;
2139}
2140
2141PyDoc_STRVAR(sum_doc,
Thomas Wouters89f507f2006-12-13 04:49:30 +00002142"sum(sequence[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00002143\n\
2144Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00002145of parameter 'start' (which defaults to 0). When the sequence is\n\
2146empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00002147
2148
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002149static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002150builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002151{
2152 PyObject *inst;
2153 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00002154 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002155
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002156 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002157 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002158
Guido van Rossum823649d2001-03-21 18:40:58 +00002159 retval = PyObject_IsInstance(inst, cls);
2160 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00002161 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002162 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002163}
2164
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002165PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002166"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002167\n\
2168Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002169With a type as second argument, return whether that is the object's type.\n\
2170The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002171isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002172
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002173
2174static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002175builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002176{
2177 PyObject *derived;
2178 PyObject *cls;
2179 int retval;
2180
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002181 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002182 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002183
Guido van Rossum823649d2001-03-21 18:40:58 +00002184 retval = PyObject_IsSubclass(derived, cls);
2185 if (retval < 0)
2186 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002187 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002188}
2189
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002190PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002191"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002192\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002193Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2194When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2195is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002196
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002197
Barry Warsawbd599b52000-08-03 15:45:29 +00002198static PyObject*
2199builtin_zip(PyObject *self, PyObject *args)
2200{
Guido van Rossumb65fb332006-08-25 23:26:40 +00002201 /* args must be a tuple */
2202 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00002203
Guido van Rossumb65fb332006-08-25 23:26:40 +00002204 return _PyZip_CreateIter(args);
Barry Warsawbd599b52000-08-03 15:45:29 +00002205}
2206
2207
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002208PyDoc_STRVAR(zip_doc,
Guido van Rossum801f0d72006-08-24 19:48:10 +00002209"zip(it1 [, it2 [...]]) -> iter([(it1[0], it2[0] ...), ...])\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002210\n\
Guido van Rossum801f0d72006-08-24 19:48:10 +00002211Return an iterator yielding tuples, where each tuple contains the\n\
2212corresponding element from each of the argument iterables.\n\
2213The returned iterator ends when the shortest argument iterable is exhausted.\n\
2214NOTE: This is implemented using itertools.izip().");
Barry Warsawbd599b52000-08-03 15:45:29 +00002215
2216
Guido van Rossum79f25d91997-04-29 20:08:16 +00002217static PyMethodDef builtin_methods[] = {
Guido van Rossum52cc1d82007-03-18 15:41:51 +00002218 {"__build_class__", (PyCFunction)builtin___build_class__,
2219 METH_VARARGS | METH_KEYWORDS, build_class_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002220 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002221 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002222 {"all", builtin_all, METH_O, all_doc},
2223 {"any", builtin_any, METH_O, any_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002224 {"callable", builtin_callable, METH_O, callable_doc},
Guido van Rossum84fc66d2007-05-03 17:18:26 +00002225 {"chr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002226 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
Guido van Rossumd8faa362007-04-27 19:54:29 +00002227 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002228 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2229 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2230 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2231 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00002232 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002233 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
2234 {"filter", builtin_filter, METH_VARARGS, filter_doc},
2235 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2236 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2237 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2238 {"hash", builtin_hash, METH_O, hash_doc},
2239 {"hex", builtin_hex, METH_O, hex_doc},
2240 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00002241 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002242 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2243 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2244 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2245 {"len", builtin_len, METH_O, len_doc},
2246 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2247 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002248 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2249 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandla18af4e2007-04-21 15:47:16 +00002250 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002251 {"oct", builtin_oct, METH_O, oct_doc},
Thomas Wouters477c8d52006-05-27 19:21:47 +00002252 {"open", (PyCFunction)builtin_open, METH_VARARGS | METH_KEYWORDS, open_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002253 {"ord", builtin_ord, METH_O, ord_doc},
2254 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00002255 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002256 {"range", builtin_range, METH_VARARGS, range_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002257 {"reload", builtin_reload, METH_O, reload_doc},
2258 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002259 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002260 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002261 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002262 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002263 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002264 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002265 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002266};
2267
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002268PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002269"Built-in functions, exceptions, and other objects.\n\
2270\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002271Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002272
Guido van Rossum25ce5661997-08-02 03:10:38 +00002273PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002274_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002275{
Fred Drake5550de32000-06-20 04:54:19 +00002276 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002277 mod = Py_InitModule4("__builtin__", builtin_methods,
2278 builtin_doc, (PyObject *)NULL,
2279 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002280 if (mod == NULL)
2281 return NULL;
2282 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002283
Tim Peters7571a0f2003-03-23 17:52:28 +00002284#ifdef Py_TRACE_REFS
2285 /* __builtin__ exposes a number of statically allocated objects
2286 * that, before this code was added in 2.3, never showed up in
2287 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2288 * result, programs leaking references to None and False (etc)
2289 * couldn't be diagnosed by examining sys.getobjects(0).
2290 */
2291#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2292#else
2293#define ADD_TO_ALL(OBJECT) (void)0
2294#endif
2295
Tim Peters4b7625e2001-09-13 21:37:17 +00002296#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002297 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2298 return NULL; \
2299 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002300
2301 SETBUILTIN("None", Py_None);
2302 SETBUILTIN("Ellipsis", Py_Ellipsis);
2303 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002304 SETBUILTIN("False", Py_False);
2305 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00002306 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002307 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002308 SETBUILTIN("buffer", &PyBuffer_Type);
Guido van Rossum4dfe8a12006-04-22 23:28:04 +00002309 SETBUILTIN("bytes", &PyBytes_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002310 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002311#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002312 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002313#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002314 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002315 SETBUILTIN("enumerate", &PyEnum_Type);
Thomas Wouters477c8d52006-05-27 19:21:47 +00002316 SETBUILTIN("file", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002317 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002318 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002319 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00002320 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002321 SETBUILTIN("list", &PyList_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002322 SETBUILTIN("object", &PyBaseObject_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002323 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002324 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002325 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002326 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Guido van Rossum572dbf82007-04-27 23:53:51 +00002327 SETBUILTIN("str", &PyUnicode_Type);
Guido van Rossum84fc66d2007-05-03 17:18:26 +00002328 SETBUILTIN("str8", &PyString_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002329 SETBUILTIN("super", &PySuper_Type);
2330 SETBUILTIN("tuple", &PyTuple_Type);
2331 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00002332 SETBUILTIN("xrange", &PyRange_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002333 SETBUILTIN("unicode", &PyUnicode_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002334 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002335 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2336 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002337 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002338 }
2339 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002340
Guido van Rossum25ce5661997-08-02 03:10:38 +00002341 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002342#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002343#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002344}
2345
Guido van Rossume77a7571993-11-03 15:01:26 +00002346/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002347
Guido van Rossum79f25d91997-04-29 20:08:16 +00002348static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002349filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002350{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002351 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002352 Py_ssize_t i, j;
2353 Py_ssize_t len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002354
Guido van Rossumb7b45621995-08-04 04:07:45 +00002355 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002356 if (PyTuple_CheckExact(tuple))
2357 Py_INCREF(tuple);
2358 else
2359 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002360 return tuple;
2361 }
2362
Guido van Rossum79f25d91997-04-29 20:08:16 +00002363 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002364 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002365
Guido van Rossum12d12c51993-10-26 17:58:25 +00002366 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002367 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002368 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002369
Walter Dörwald8dd19322003-02-10 17:36:40 +00002370 if (tuple->ob_type->tp_as_sequence &&
2371 tuple->ob_type->tp_as_sequence->sq_item) {
2372 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002373 if (item == NULL)
2374 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002375 } else {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002376 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002377 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002378 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002379 if (func == Py_None) {
2380 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002381 good = item;
2382 }
2383 else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002384 PyObject *arg = PyTuple_Pack(1, item);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002385 if (arg == NULL) {
2386 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002387 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002388 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002389 good = PyEval_CallObject(func, arg);
2390 Py_DECREF(arg);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002391 if (good == NULL) {
2392 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002393 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002394 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002395 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002396 ok = PyObject_IsTrue(good);
2397 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002398 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002399 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002400 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002401 }
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002402 else
2403 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002404 }
2405
Tim Peters4324aa32001-05-28 22:30:08 +00002406 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002407 return NULL;
2408
Guido van Rossum12d12c51993-10-26 17:58:25 +00002409 return result;
2410
Guido van Rossum12d12c51993-10-26 17:58:25 +00002411Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002412 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002413 return NULL;
2414}
2415
2416
Guido van Rossume77a7571993-11-03 15:01:26 +00002417/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002418
Guido van Rossum79f25d91997-04-29 20:08:16 +00002419static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002420filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002421{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002422 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002423 Py_ssize_t i, j;
2424 Py_ssize_t len = PyString_Size(strobj);
2425 Py_ssize_t outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002426
Guido van Rossum79f25d91997-04-29 20:08:16 +00002427 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002428 /* If it's a real string we can return the original,
2429 * as no character is ever false and __getitem__
2430 * does return this character. If it's a subclass
2431 * we must go through the __getitem__ loop */
2432 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002433 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002434 return strobj;
2435 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002436 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002437 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002438 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002439
Guido van Rossum12d12c51993-10-26 17:58:25 +00002440 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002441 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002442 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002443
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002444 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2445 if (item == NULL)
2446 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002447 if (func==Py_None) {
2448 ok = 1;
2449 } else {
2450 PyObject *arg, *good;
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002451 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002452 if (arg == NULL) {
2453 Py_DECREF(item);
2454 goto Fail_1;
2455 }
2456 good = PyEval_CallObject(func, arg);
2457 Py_DECREF(arg);
2458 if (good == NULL) {
2459 Py_DECREF(item);
2460 goto Fail_1;
2461 }
2462 ok = PyObject_IsTrue(good);
2463 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00002464 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002465 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002466 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002467 if (!PyString_Check(item)) {
2468 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2469 " __getitem__ returned different type");
2470 Py_DECREF(item);
2471 goto Fail_1;
2472 }
2473 reslen = PyString_GET_SIZE(item);
2474 if (reslen == 1) {
2475 PyString_AS_STRING(result)[j++] =
2476 PyString_AS_STRING(item)[0];
2477 } else {
2478 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002479 Py_ssize_t need = j + reslen + len-i-1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002480 if (need > outlen) {
2481 /* overallocate, to avoid reallocations */
2482 if (need<2*outlen)
2483 need = 2*outlen;
2484 if (_PyString_Resize(&result, need)) {
2485 Py_DECREF(item);
2486 return NULL;
2487 }
2488 outlen = need;
2489 }
2490 memcpy(
2491 PyString_AS_STRING(result) + j,
2492 PyString_AS_STRING(item),
2493 reslen
2494 );
2495 j += reslen;
2496 }
2497 }
Tim Peters388ed082001-04-07 20:34:48 +00002498 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002499 }
2500
Walter Dörwald903f1e02003-02-04 16:28:00 +00002501 if (j < outlen)
Tim Peters5de98422002-04-27 18:44:32 +00002502 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002503
Guido van Rossum12d12c51993-10-26 17:58:25 +00002504 return result;
2505
Guido van Rossum12d12c51993-10-26 17:58:25 +00002506Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002507 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002508 return NULL;
2509}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002510
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002511/* Helper for filter(): filter a Unicode object through a function */
2512
2513static PyObject *
2514filterunicode(PyObject *func, PyObject *strobj)
2515{
2516 PyObject *result;
Martin v. Löwis725507b2006-03-07 12:08:51 +00002517 register Py_ssize_t i, j;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002518 Py_ssize_t len = PyUnicode_GetSize(strobj);
2519 Py_ssize_t outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002520
2521 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002522 /* If it's a real string we can return the original,
2523 * as no character is ever false and __getitem__
2524 * does return this character. If it's a subclass
2525 * we must go through the __getitem__ loop */
2526 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002527 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002528 return strobj;
2529 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002530 }
2531 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2532 return NULL;
2533
2534 for (i = j = 0; i < len; ++i) {
2535 PyObject *item, *arg, *good;
2536 int ok;
2537
2538 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2539 if (item == NULL)
2540 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002541 if (func == Py_None) {
2542 ok = 1;
2543 } else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002544 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002545 if (arg == NULL) {
2546 Py_DECREF(item);
2547 goto Fail_1;
2548 }
2549 good = PyEval_CallObject(func, arg);
2550 Py_DECREF(arg);
2551 if (good == NULL) {
2552 Py_DECREF(item);
2553 goto Fail_1;
2554 }
2555 ok = PyObject_IsTrue(good);
2556 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002557 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002558 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002559 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002560 if (!PyUnicode_Check(item)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002561 PyErr_SetString(PyExc_TypeError,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002562 "can't filter unicode to unicode:"
2563 " __getitem__ returned different type");
Walter Dörwald903f1e02003-02-04 16:28:00 +00002564 Py_DECREF(item);
2565 goto Fail_1;
2566 }
2567 reslen = PyUnicode_GET_SIZE(item);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002568 if (reslen == 1)
Walter Dörwald903f1e02003-02-04 16:28:00 +00002569 PyUnicode_AS_UNICODE(result)[j++] =
2570 PyUnicode_AS_UNICODE(item)[0];
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002571 else {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002572 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002573 Py_ssize_t need = j + reslen + len - i - 1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002574 if (need > outlen) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002575 /* overallocate,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002576 to avoid reallocations */
2577 if (need < 2 * outlen)
2578 need = 2 * outlen;
Jeremy Hylton364f6be2003-09-16 03:17:16 +00002579 if (PyUnicode_Resize(
2580 &result, need) < 0) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002581 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002582 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002583 }
2584 outlen = need;
2585 }
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002586 memcpy(PyUnicode_AS_UNICODE(result) + j,
2587 PyUnicode_AS_UNICODE(item),
2588 reslen*sizeof(Py_UNICODE));
Walter Dörwald903f1e02003-02-04 16:28:00 +00002589 j += reslen;
2590 }
2591 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002592 Py_DECREF(item);
2593 }
2594
Walter Dörwald903f1e02003-02-04 16:28:00 +00002595 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002596 PyUnicode_Resize(&result, j);
2597
2598 return result;
2599
2600Fail_1:
2601 Py_DECREF(result);
2602 return NULL;
2603}