blob: 093bb8114ff2f15daceffb41ffab464154f51078 [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 *
Guido van Rossum7fcf2242007-05-04 17:43:11 +0000381builtin_chr(PyObject *self, PyObject *args)
382{
383 long x;
384 char s[1];
385
386 if (!PyArg_ParseTuple(args, "l:chr8", &x))
387 return NULL;
388 if (x < 0 || x >= 256) {
389 PyErr_SetString(PyExc_ValueError,
390 "chr8() arg not in range(256)");
391 return NULL;
392 }
393 s[0] = (char)x;
394 return PyString_FromStringAndSize(s, 1);
395}
396
397PyDoc_STRVAR(chr_doc,
398"chr8(i) -> 8-bit character\n\
399\n\
400Return a string of one character with ordinal i; 0 <= i < 256.");
401
402
403static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000404builtin_unichr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000405{
406 long x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000407
408 if (!PyArg_ParseTuple(args, "l:unichr", &x))
409 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000410
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000411 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000412}
413
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000414PyDoc_STRVAR(unichr_doc,
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000415"chr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000416\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000417Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.");
Guido van Rossum09095f32000-03-10 23:00:52 +0000418
419
420static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000421builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000422{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000423 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000424 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000425
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000426 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000427 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000428 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000429 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000430 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000431}
432
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000433PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000434"cmp(x, y) -> integer\n\
435\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000436Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000437
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000438
439static char *
440source_as_string(PyObject *cmd)
441{
442 char *str;
443 Py_ssize_t size;
444
445 if (!PyObject_CheckReadBuffer(cmd) &&
446 !PyUnicode_Check(cmd)) {
447 PyErr_SetString(PyExc_TypeError,
448 "eval()/exec() arg 1 must be a string, bytes or code object");
449 return NULL;
450 }
451
452 if (PyUnicode_Check(cmd)) {
453 cmd = _PyUnicode_AsDefaultEncodedString(cmd, NULL);
454 if (cmd == NULL)
455 return NULL;
456 }
457 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &size) < 0) {
458 return NULL;
459 }
460 if (strlen(str) != size) {
461 PyErr_SetString(PyExc_TypeError,
462 "source code string cannot contain null bytes");
463 return NULL;
464 }
465 return str;
466}
467
Guido van Rossum79f25d91997-04-29 20:08:16 +0000468static PyObject *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000469builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000470{
471 char *str;
472 char *filename;
473 char *startstr;
474 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000475 int dont_inherit = 0;
476 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000477 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000478 PyObject *cmd;
Guido van Rossumd8faa362007-04-27 19:54:29 +0000479 static char *kwlist[] = {"source", "filename", "mode", "flags",
480 "dont_inherit", NULL};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000481
Guido van Rossumd8faa362007-04-27 19:54:29 +0000482 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
483 kwlist, &cmd, &filename, &startstr,
484 &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000485 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000486
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000487 cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000488
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000489 str = source_as_string(cmd);
490 if (str == NULL)
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000491 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000492
Guido van Rossum5b722181993-03-30 17:46:03 +0000493 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000494 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000495 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000496 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000497 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000498 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000499 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000500 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000501 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000502 return NULL;
Guido van Rossum5b722181993-03-30 17:46:03 +0000503 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000504
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000505 if (supplied_flags &
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000506 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000507 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000508 PyErr_SetString(PyExc_ValueError,
509 "compile(): unrecognised flags");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000510 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000511 }
512 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
513
Tim Peters6cd6a822001-08-17 22:11:27 +0000514 if (!dont_inherit) {
515 PyEval_MergeCompilerFlags(&cf);
516 }
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000517 return Py_CompileStringFlags(str, filename, start, &cf);
Guido van Rossum5b722181993-03-30 17:46:03 +0000518}
519
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000520PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000521"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000522\n\
523Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000524into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000525The filename will be used for run-time error messages.\n\
526The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000527single (interactive) statement, or 'eval' to compile an expression.\n\
528The flags argument, if present, controls which future statements influence\n\
529the compilation of the code.\n\
530The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
531the effects of any future statements in effect in the code calling\n\
532compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000533in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000534
Guido van Rossum79f25d91997-04-29 20:08:16 +0000535static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000536builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000537{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000538 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000539
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000540 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000541 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000542 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000543}
544
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000545PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000546"dir([object]) -> list of strings\n"
547"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000548"If called without an argument, return the names in the current scope.\n"
549"Else, return an alphabetized list of names comprising (some of) the attributes\n"
550"of the given object, and of attributes reachable from it.\n"
551"If the object supplies a method named __dir__, it will be used; otherwise\n"
552"the default dir() logic is used and returns:\n"
553" for a module object: the module's attributes.\n"
554" for a class object: its attributes, and recursively the attributes\n"
555" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000556" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000557" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000558
Guido van Rossum79f25d91997-04-29 20:08:16 +0000559static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000560builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000561{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000562 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000563
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000564 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000565 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000566 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000567}
568
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000569PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000570"divmod(x, y) -> (div, mod)\n\
571\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000572Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000573
574
Guido van Rossum79f25d91997-04-29 20:08:16 +0000575static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000576builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000577{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000578 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000579 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000580 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000581 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000582
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000583 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000584 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000585 if (locals != Py_None && !PyMapping_Check(locals)) {
586 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000587 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000588 }
589 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000590 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000591 "globals must be a real dict; try eval(expr, {}, mapping)"
592 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000593 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000594 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000595 if (globals == Py_None) {
596 globals = PyEval_GetGlobals();
597 if (locals == Py_None)
598 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000599 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000600 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000601 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000602
Georg Brandl77c85e62005-09-15 10:46:13 +0000603 if (globals == NULL || locals == NULL) {
604 PyErr_SetString(PyExc_TypeError,
605 "eval must be given globals and locals "
606 "when called without a frame");
607 return NULL;
608 }
609
Guido van Rossum79f25d91997-04-29 20:08:16 +0000610 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
611 if (PyDict_SetItemString(globals, "__builtins__",
612 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000613 return NULL;
614 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000615
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000616 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000617 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000618 PyErr_SetString(PyExc_TypeError,
619 "code object passed to eval() may not contain free variables");
620 return NULL;
621 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000622 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000623 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000624
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000625 str = source_as_string(cmd);
626 if (str == NULL)
Guido van Rossum94390a41992-08-14 15:14:30 +0000627 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000628
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000629 while (*str == ' ' || *str == '\t')
630 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000631
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000632 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Tim Peters9fa96be2001-08-17 23:04:59 +0000633 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000634 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
635 Py_XDECREF(tmp);
636 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000637}
638
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000639PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000640"eval(source[, globals[, locals]]) -> value\n\
641\n\
642Evaluate the source in the context of globals and locals.\n\
643The source may be a string representing a Python expression\n\
644or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000645The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000646defaulting to the current globals and locals.\n\
647If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000648
Georg Brandl7cae87c2006-09-06 06:51:57 +0000649static PyObject *
650builtin_exec(PyObject *self, PyObject *args)
651{
652 PyObject *v;
653 PyObject *prog, *globals = Py_None, *locals = Py_None;
654 int plain = 0;
655
656 if (!PyArg_ParseTuple(args, "O|OO:exec", &prog, &globals, &locals))
657 return NULL;
658
659 if (globals == Py_None) {
660 globals = PyEval_GetGlobals();
661 if (locals == Py_None) {
662 locals = PyEval_GetLocals();
663 plain = 1;
664 }
665 if (!globals || !locals) {
666 PyErr_SetString(PyExc_SystemError,
667 "globals and locals cannot be NULL");
668 return NULL;
669 }
670 }
671 else if (locals == Py_None)
672 locals = globals;
673 if (!PyString_Check(prog) &&
674 !PyUnicode_Check(prog) &&
675 !PyCode_Check(prog) &&
676 !PyFile_Check(prog)) {
677 PyErr_Format(PyExc_TypeError,
678 "exec() arg 1 must be a string, file, or code "
679 "object, not %.100s", prog->ob_type->tp_name);
680 return NULL;
681 }
682 if (!PyDict_Check(globals)) {
683 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
684 globals->ob_type->tp_name);
685 return NULL;
686 }
687 if (!PyMapping_Check(locals)) {
688 PyErr_Format(PyExc_TypeError,
689 "arg 3 must be a mapping or None, not %.100s",
690 locals->ob_type->tp_name);
691 return NULL;
692 }
693 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
694 if (PyDict_SetItemString(globals, "__builtins__",
695 PyEval_GetBuiltins()) != 0)
696 return NULL;
697 }
698
699 if (PyCode_Check(prog)) {
700 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
701 PyErr_SetString(PyExc_TypeError,
702 "code object passed to exec() may not "
703 "contain free variables");
704 return NULL;
705 }
706 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
707 }
708 else if (PyFile_Check(prog)) {
709 FILE *fp = PyFile_AsFile(prog);
710 char *name = PyString_AsString(PyFile_Name(prog));
711 PyCompilerFlags cf;
712 cf.cf_flags = 0;
713 if (PyEval_MergeCompilerFlags(&cf))
714 v = PyRun_FileFlags(fp, name, Py_file_input, globals,
715 locals, &cf);
716 else
717 v = PyRun_File(fp, name, Py_file_input, globals,
718 locals);
719 }
720 else {
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000721 char *str = source_as_string(prog);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000722 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000723 if (str == NULL)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000724 return NULL;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000725 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000726 if (PyEval_MergeCompilerFlags(&cf))
727 v = PyRun_StringFlags(str, Py_file_input, globals,
728 locals, &cf);
729 else
730 v = PyRun_String(str, Py_file_input, globals, locals);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000731 }
732 if (v == NULL)
733 return NULL;
734 Py_DECREF(v);
735 Py_RETURN_NONE;
736}
737
738PyDoc_STRVAR(exec_doc,
739"exec(object[, globals[, locals]])\n\
740\n\
741Read and execute code from a object, which can be a string, a code\n\
742object or a file object.\n\
743The globals and locals are dictionaries, defaulting to the current\n\
744globals and locals. If only globals is given, locals defaults to it.");
745
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000746
Guido van Rossum79f25d91997-04-29 20:08:16 +0000747static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000748builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000749{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000750 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000751 PyObject *globals = Py_None, *locals = Py_None;
752 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000753 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000754 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000755 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000756
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000757 if (!PyArg_ParseTuple(args, "s|O!O:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000758 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000759 &PyDict_Type, &globals,
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000760 &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000761 return NULL;
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000762 if (locals != Py_None && !PyMapping_Check(locals)) {
763 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
764 return NULL;
765 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000766 if (globals == Py_None) {
767 globals = PyEval_GetGlobals();
768 if (locals == Py_None)
769 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000770 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000771 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000772 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000773 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
774 if (PyDict_SetItemString(globals, "__builtins__",
775 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000776 return NULL;
777 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000778
779 exists = 0;
780 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000781#if defined(PLAN9)
782 {
783 Dir *d;
784
785 if ((d = dirstat(filename))!=nil) {
786 if(d->mode & DMDIR)
787 werrstr("is a directory");
788 else
789 exists = 1;
790 free(d);
791 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000792 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000793#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000794 if (object_exists(filename)) {
795 if (isdir(filename))
796 errno = EISDIR;
797 else
798 exists = 1;
799 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000800#else /* standard Posix */
801 {
802 struct stat s;
803 if (stat(filename, &s) == 0) {
804 if (S_ISDIR(s.st_mode))
Andrew MacIntyreda4d6cb2004-03-29 11:53:38 +0000805# if defined(PYOS_OS2) && defined(PYCC_VACPP)
Martin v. Löwis3484a182002-03-09 12:07:51 +0000806 errno = EOS2ERR;
807# else
808 errno = EISDIR;
809# endif
810 else
811 exists = 1;
812 }
813 }
814#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000815
816 if (exists) {
817 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000818 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000819 Py_END_ALLOW_THREADS
820
821 if (fp == NULL) {
822 exists = 0;
823 }
824 }
825
826 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000827 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000828 return NULL;
829 }
Tim Peters5ba58662001-07-16 02:29:45 +0000830 cf.cf_flags = 0;
831 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000832 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000833 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000834 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000835 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000836 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000837 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000838}
839
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000840PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000841"execfile(filename[, globals[, locals]])\n\
842\n\
843Read and execute a Python script from a file.\n\
844The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000845globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000846
847
Guido van Rossum79f25d91997-04-29 20:08:16 +0000848static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000849builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000850{
Guido van Rossum950ff291998-06-29 13:38:57 +0000851 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000852 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000853
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000854 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000855 return NULL;
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000856 if (PyUnicode_Check(name)) {
857 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
858 if (name == NULL)
859 return NULL;
860 }
861
862 if (!PyString_Check(name)) {
863 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000864 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000865 return NULL;
866 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000867 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000868 if (result == NULL && dflt != NULL &&
869 PyErr_ExceptionMatches(PyExc_AttributeError))
870 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000871 PyErr_Clear();
872 Py_INCREF(dflt);
873 result = dflt;
874 }
875 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000876}
877
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000878PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000879"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000880\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000881Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
882When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000883exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000884
885
Guido van Rossum79f25d91997-04-29 20:08:16 +0000886static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000887builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000888{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000889 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000890
Guido van Rossum79f25d91997-04-29 20:08:16 +0000891 d = PyEval_GetGlobals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000892 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000893 return d;
894}
895
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000896PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000897"globals() -> dictionary\n\
898\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000899Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000900
901
Guido van Rossum79f25d91997-04-29 20:08:16 +0000902static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000903builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000904{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000905 PyObject *v;
906 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000907
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000908 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000909 return NULL;
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000910 if (PyUnicode_Check(name)) {
911 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
912 if (name == NULL)
913 return NULL;
914 }
915
916 if (!PyString_Check(name)) {
917 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000918 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000919 return NULL;
920 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000921 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000922 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000923 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000924 Py_INCREF(Py_False);
925 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000926 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000927 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000928 Py_INCREF(Py_True);
929 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000930}
931
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000932PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000933"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000934\n\
935Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000936(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000937
938
Guido van Rossum79f25d91997-04-29 20:08:16 +0000939static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000940builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000941{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000942 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000943}
944
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000945PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000946"id(object) -> integer\n\
947\n\
948Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000949simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000950
951
Guido van Rossum79f25d91997-04-29 20:08:16 +0000952static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000953builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000954{
955 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000956 PyObject *it; /* the iterator object */
957 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000958 } sequence;
959
Guido van Rossum79f25d91997-04-29 20:08:16 +0000960 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000961 sequence *seqs = NULL, *sqp;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000962 Py_ssize_t n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000963 register int i, j;
964
Guido van Rossum79f25d91997-04-29 20:08:16 +0000965 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000966 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000967 PyErr_SetString(PyExc_TypeError,
968 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000969 return NULL;
970 }
971
Guido van Rossum79f25d91997-04-29 20:08:16 +0000972 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000973 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000974
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000975 if (func == Py_None && n == 1) {
976 /* map(None, S) is the same as list(S). */
977 return PySequence_List(PyTuple_GetItem(args, 1));
978 }
979
Tim Peters4e9afdc2001-05-03 23:54:49 +0000980 /* Get space for sequence descriptors. Must NULL out the iterator
981 * pointers so that jumping to Fail_2 later doesn't see trash.
982 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000983 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
984 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000985 return NULL;
986 }
987 for (i = 0; i < n; ++i) {
988 seqs[i].it = (PyObject*)NULL;
989 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000990 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000991
Tim Peters4e9afdc2001-05-03 23:54:49 +0000992 /* Do a first pass to obtain iterators for the arguments, and set len
993 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000994 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000995 len = 0;
996 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
997 PyObject *curseq;
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000998 Py_ssize_t curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000999
Tim Peters4e9afdc2001-05-03 23:54:49 +00001000 /* Get iterator. */
1001 curseq = PyTuple_GetItem(args, i+1);
1002 sqp->it = PyObject_GetIter(curseq);
1003 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +00001004 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +00001005 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +00001006 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +00001007 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001008 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001009 goto Fail_2;
1010 }
1011
Tim Peters4e9afdc2001-05-03 23:54:49 +00001012 /* Update len. */
Armin Rigof5b3e362006-02-11 21:32:43 +00001013 curlen = _PyObject_LengthHint(curseq);
Raymond Hettinger77f3c872004-01-04 08:54:44 +00001014 if (curlen < 0) {
Raymond Hettingera710b332005-08-21 11:03:59 +00001015 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
1016 !PyErr_ExceptionMatches(PyExc_AttributeError)) {
1017 goto Fail_2;
1018 }
Raymond Hettinger77f3c872004-01-04 08:54:44 +00001019 PyErr_Clear();
Tim Peters4e9afdc2001-05-03 23:54:49 +00001020 curlen = 8; /* arbitrary */
Raymond Hettinger77f3c872004-01-04 08:54:44 +00001021 }
1022 if (curlen > len)
1023 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001024 }
1025
Tim Peters4e9afdc2001-05-03 23:54:49 +00001026 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001027 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001028 goto Fail_2;
1029
Tim Peters4e9afdc2001-05-03 23:54:49 +00001030 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +00001031 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001032 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001033 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001034
Guido van Rossum79f25d91997-04-29 20:08:16 +00001035 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +00001036 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001037 else if ((alist = PyTuple_New(n)) == NULL)
1038 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001039
1040 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001041 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001042 Py_INCREF(Py_None);
1043 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001044 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001045 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001046 item = PyIter_Next(sqp->it);
1047 if (item)
1048 ++numactive;
1049 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001050 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001051 Py_XDECREF(alist);
1052 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001053 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001054 Py_INCREF(Py_None);
1055 item = Py_None;
1056 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001057 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001058 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001059 if (alist)
1060 PyTuple_SET_ITEM(alist, j, item);
1061 else
Guido van Rossum2d951851994-08-29 12:52:16 +00001062 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001063 }
1064
Guido van Rossum32120311995-07-10 13:52:21 +00001065 if (!alist)
1066 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +00001067
Tim Peters4e9afdc2001-05-03 23:54:49 +00001068 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001069 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +00001070 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001071 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001072
Guido van Rossum79f25d91997-04-29 20:08:16 +00001073 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +00001074 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001075 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001076 value = PyEval_CallObject(func, alist);
1077 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001078 if (value == NULL)
1079 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001080 }
1081 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +00001082 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +00001083 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +00001084 if (status < 0)
1085 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001086 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001087 else if (PyList_SetItem(result, i, value) < 0)
1088 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001089 }
1090
Guido van Rossumfa4ac711998-07-10 17:37:30 +00001091 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
1092 goto Fail_1;
1093
Tim Peters4e9afdc2001-05-03 23:54:49 +00001094 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001095
Guido van Rossum12d12c51993-10-26 17:58:25 +00001096Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001097 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001098Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +00001099 result = NULL;
1100Succeed:
1101 assert(seqs);
1102 for (i = 0; i < n; ++i)
1103 Py_XDECREF(seqs[i].it);
1104 PyMem_DEL(seqs);
1105 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001106}
1107
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001108PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001109"map(function, sequence[, sequence, ...]) -> list\n\
1110\n\
1111Return a list of the results of applying the function to the items of\n\
1112the argument sequence(s). If more than one sequence is given, the\n\
1113function is called with an argument list consisting of the corresponding\n\
1114item of each sequence, substituting None for missing values when not all\n\
1115sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001116the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001117
1118
Guido van Rossum79f25d91997-04-29 20:08:16 +00001119static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +00001120builtin_next(PyObject *self, PyObject *args)
1121{
1122 PyObject *it, *res;
1123 PyObject *def = NULL;
1124
1125 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1126 return NULL;
1127 if (!PyIter_Check(it)) {
1128 PyErr_Format(PyExc_TypeError,
1129 "%.200s object is not an iterator", it->ob_type->tp_name);
1130 return NULL;
1131 }
1132
1133 res = (*it->ob_type->tp_iternext)(it);
1134 if (res == NULL) {
1135 if (def) {
1136 if (PyErr_Occurred() &&
1137 !PyErr_ExceptionMatches(PyExc_StopIteration))
1138 return NULL;
1139 PyErr_Clear();
1140 Py_INCREF(def);
1141 return def;
1142 } else if (PyErr_Occurred()) {
1143 return NULL;
1144 } else {
1145 PyErr_SetNone(PyExc_StopIteration);
1146 return NULL;
1147 }
1148 }
1149 return res;
1150}
1151
1152PyDoc_STRVAR(next_doc,
1153"next(iterator[, default])\n\
1154\n\
1155Return the next item from the iterator. If default is given and the iterator\n\
1156is exhausted, it is returned instead of raising StopIteration.");
1157
1158
1159static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001160builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001161{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001162 PyObject *v;
1163 PyObject *name;
1164 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001165
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001166 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001167 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001168 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001169 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001170 Py_INCREF(Py_None);
1171 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001172}
1173
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001174PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001175"setattr(object, name, value)\n\
1176\n\
1177Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001178``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001179
1180
Guido van Rossum79f25d91997-04-29 20:08:16 +00001181static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001182builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001183{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001184 PyObject *v;
1185 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001186
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001187 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001188 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001189 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001190 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001191 Py_INCREF(Py_None);
1192 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001193}
1194
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001195PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001196"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001197\n\
1198Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001199``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001200
1201
Guido van Rossum79f25d91997-04-29 20:08:16 +00001202static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001203builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001204{
Guido van Rossum9bfef441993-03-29 10:43:31 +00001205 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001206
Guido van Rossum79f25d91997-04-29 20:08:16 +00001207 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001208 if (x == -1)
1209 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001210 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001211}
1212
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001213PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001214"hash(object) -> integer\n\
1215\n\
1216Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001217the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001218
1219
Guido van Rossum79f25d91997-04-29 20:08:16 +00001220static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001221builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001222{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001223 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001224 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001225
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001226 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001227 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001228 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001229 "hex() argument can't be converted to hex");
1230 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001231 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001232 res = (*nb->nb_hex)(v);
1233 if (res && !PyString_Check(res)) {
1234 PyErr_Format(PyExc_TypeError,
1235 "__hex__ returned non-string (type %.200s)",
1236 res->ob_type->tp_name);
1237 Py_DECREF(res);
1238 return NULL;
1239 }
1240 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001241}
1242
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001243PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001244"hex(number) -> string\n\
1245\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001246Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001247
1248
Guido van Rossum79f25d91997-04-29 20:08:16 +00001249static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001250builtin_iter(PyObject *self, PyObject *args)
1251{
1252 PyObject *v, *w = NULL;
1253
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001254 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001255 return NULL;
1256 if (w == NULL)
1257 return PyObject_GetIter(v);
1258 if (!PyCallable_Check(v)) {
1259 PyErr_SetString(PyExc_TypeError,
1260 "iter(v, w): v must be callable");
1261 return NULL;
1262 }
1263 return PyCallIter_New(v, w);
1264}
1265
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001266PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001267"iter(collection) -> iterator\n\
1268iter(callable, sentinel) -> iterator\n\
1269\n\
1270Get an iterator from an object. In the first form, the argument must\n\
1271supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001272In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001273
1274
1275static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001276builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001277{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001278 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001279
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001280 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001281 if (res < 0 && PyErr_Occurred())
1282 return NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001283 return PyInt_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001284}
1285
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001286PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001287"len(object) -> integer\n\
1288\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001289Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001290
1291
Guido van Rossum79f25d91997-04-29 20:08:16 +00001292static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001293builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001294{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001295 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001296
Guido van Rossum79f25d91997-04-29 20:08:16 +00001297 d = PyEval_GetLocals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00001298 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001299 return d;
1300}
1301
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001302PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001303"locals() -> dictionary\n\
1304\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001305Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001306
1307
Guido van Rossum79f25d91997-04-29 20:08:16 +00001308static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001309min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001310{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001311 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001312 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001313
Guido van Rossum79f25d91997-04-29 20:08:16 +00001314 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001315 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001316 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001317 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001318
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001319 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1320 keyfunc = PyDict_GetItemString(kwds, "key");
1321 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001322 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001323 "%s() got an unexpected keyword argument", name);
1324 return NULL;
1325 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001326 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001327
Tim Petersc3074532001-05-03 07:00:32 +00001328 it = PyObject_GetIter(v);
1329 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001330 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001331
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001332 maxitem = NULL; /* the result */
1333 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001334 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001335 /* get the value from the key function */
1336 if (keyfunc != NULL) {
1337 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1338 if (val == NULL)
1339 goto Fail_it_item;
1340 }
1341 /* no key function; the value is the item */
1342 else {
1343 val = item;
1344 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001345 }
Tim Petersc3074532001-05-03 07:00:32 +00001346
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001347 /* maximum value and item are unset; set them */
1348 if (maxval == NULL) {
1349 maxitem = item;
1350 maxval = val;
1351 }
1352 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001353 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001354 int cmp = PyObject_RichCompareBool(val, maxval, op);
1355 if (cmp < 0)
1356 goto Fail_it_item_and_val;
1357 else if (cmp > 0) {
1358 Py_DECREF(maxval);
1359 Py_DECREF(maxitem);
1360 maxval = val;
1361 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001362 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001363 else {
1364 Py_DECREF(item);
1365 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001366 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001367 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001368 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001369 if (PyErr_Occurred())
1370 goto Fail_it;
1371 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001372 PyErr_Format(PyExc_ValueError,
1373 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001374 assert(maxitem == NULL);
1375 }
1376 else
1377 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001378 Py_DECREF(it);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001379 return maxitem;
1380
1381Fail_it_item_and_val:
1382 Py_DECREF(val);
1383Fail_it_item:
1384 Py_DECREF(item);
1385Fail_it:
1386 Py_XDECREF(maxval);
1387 Py_XDECREF(maxitem);
1388 Py_DECREF(it);
1389 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001390}
1391
Guido van Rossum79f25d91997-04-29 20:08:16 +00001392static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001393builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001394{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001395 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001396}
1397
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001398PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001399"min(iterable[, key=func]) -> value\n\
1400min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001401\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001402With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001403With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001404
1405
Guido van Rossum79f25d91997-04-29 20:08:16 +00001406static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001407builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001408{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001409 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001410}
1411
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001412PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001413"max(iterable[, key=func]) -> value\n\
1414max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001415\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001416With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001417With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001418
1419
Guido van Rossum79f25d91997-04-29 20:08:16 +00001420static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001421builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001422{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001423 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001424 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001425
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001426 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1427 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001428 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001429 "oct() argument can't be converted to oct");
1430 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001431 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001432 res = (*nb->nb_oct)(v);
1433 if (res && !PyString_Check(res)) {
1434 PyErr_Format(PyExc_TypeError,
1435 "__oct__ returned non-string (type %.200s)",
1436 res->ob_type->tp_name);
1437 Py_DECREF(res);
1438 return NULL;
1439 }
1440 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001441}
1442
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001443PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001444"oct(number) -> string\n\
1445\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001446Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001447
1448
Guido van Rossum79f25d91997-04-29 20:08:16 +00001449static PyObject *
Thomas Wouters477c8d52006-05-27 19:21:47 +00001450builtin_open(PyObject *self, PyObject *args, PyObject *kwds)
1451{
1452 return PyObject_Call((PyObject*)&PyFile_Type, args, kwds);
1453}
1454
1455PyDoc_STRVAR(open_doc,
1456"open(name[, mode[, buffering]]) -> file object\n\
1457\n\
1458Open a file using the file() type, returns a file object.");
1459
1460
1461static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001462builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001463{
Guido van Rossum09095f32000-03-10 23:00:52 +00001464 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001465 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001466
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001467 if (PyString_Check(obj)) {
1468 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001469 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001470 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001471 return PyInt_FromLong(ord);
1472 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001473 }
1474 else if (PyUnicode_Check(obj)) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001475 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001476 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001477 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001478 return PyInt_FromLong(ord);
1479 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001480 }
1481 else if (PyBytes_Check(obj)) {
1482 /* XXX Hopefully this is temporary */
1483 size = PyBytes_GET_SIZE(obj);
1484 if (size == 1) {
1485 ord = (long)*PyBytes_AS_STRING(obj);
1486 return PyInt_FromLong(ord);
1487 }
1488 }
1489 else {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001490 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001491 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001492 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001493 return NULL;
1494 }
1495
Guido van Rossumad991772001-01-12 16:03:05 +00001496 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001497 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001498 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001499 size);
1500 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001501}
1502
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001503PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001504"ord(c) -> integer\n\
1505\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001506Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001507
1508
Guido van Rossum79f25d91997-04-29 20:08:16 +00001509static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001510builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001511{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001512 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001513
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001514 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001515 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001516 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001517}
1518
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001519PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001520"pow(x, y[, z]) -> number\n\
1521\n\
1522With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001523equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001524
1525
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001526
Guido van Rossum34343512006-11-30 22:13:52 +00001527static PyObject *
1528builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1529{
1530 static char *kwlist[] = {"sep", "end", "file", 0};
Georg Brandl257d3d92007-02-26 10:35:10 +00001531 static PyObject *dummy_args;
Guido van Rossum34343512006-11-30 22:13:52 +00001532 PyObject *sep = NULL, *end = NULL, *file = NULL;
1533 int i, err;
1534
Georg Brandl257d3d92007-02-26 10:35:10 +00001535 if (dummy_args == NULL) {
1536 if (!(dummy_args = PyTuple_New(0)))
1537 return NULL;
1538 }
Georg Brandl88fc6642007-02-09 21:28:07 +00001539 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
Guido van Rossum34343512006-11-30 22:13:52 +00001540 kwlist, &sep, &end, &file))
1541 return NULL;
1542 if (file == NULL || file == Py_None)
1543 file = PySys_GetObject("stdout");
1544
Georg Brandl16f3e032006-11-30 22:46:03 +00001545 if (sep && sep != Py_None && !PyString_Check(sep) &&
1546 !PyUnicode_Check(sep)) {
1547 PyErr_Format(PyExc_TypeError,
1548 "sep must be None, str or unicode, not %.200s",
1549 sep->ob_type->tp_name);
1550 return NULL;
1551 }
1552 if (end && end != Py_None && !PyString_Check(end) &&
1553 !PyUnicode_Check(end)) {
1554 PyErr_Format(PyExc_TypeError,
1555 "end must be None, str or unicode, not %.200s",
1556 end->ob_type->tp_name);
1557 return NULL;
1558 }
Guido van Rossum34343512006-11-30 22:13:52 +00001559
1560 for (i = 0; i < PyTuple_Size(args); i++) {
1561 if (i > 0) {
1562 if (sep == NULL || sep == Py_None)
1563 err = PyFile_WriteString(" ", file);
1564 else
1565 err = PyFile_WriteObject(sep, file,
1566 Py_PRINT_RAW);
1567 if (err)
1568 return NULL;
1569 }
1570 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1571 Py_PRINT_RAW);
1572 if (err)
1573 return NULL;
1574 }
1575
1576 if (end == NULL || end == Py_None)
1577 err = PyFile_WriteString("\n", file);
1578 else
1579 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1580 if (err)
1581 return NULL;
1582
1583 Py_RETURN_NONE;
1584}
1585
1586PyDoc_STRVAR(print_doc,
Guido van Rossum452bf512007-02-09 05:32:43 +00001587"print(value, ..., file=None, sep=' ', end='\\n')\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001588\n\
1589Prints the values to a stream, or to sys.stdout by default.\n\
1590Optional keyword arguments:\n\
1591file: a file-like object (stream); defaults to the current sys.stdout.\n\
1592sep: string inserted between values, default a space.\n\
1593end: string appended after the last value, default a newline.");
1594
1595
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001596/* Return number of items in range (lo, hi, step), when arguments are
1597 * PyInt or PyLong objects. step > 0 required. Return a value < 0 if
1598 * & only if the true value is too large to fit in a signed long.
1599 * Arguments MUST return 1 with either PyInt_Check() or
1600 * PyLong_Check(). Return -1 when there is an error.
1601 */
1602static long
1603get_len_of_range_longs(PyObject *lo, PyObject *hi, PyObject *step)
1604{
1605 /* -------------------------------------------------------------
1606 Algorithm is equal to that of get_len_of_range(), but it operates
1607 on PyObjects (which are assumed to be PyLong or PyInt objects).
1608 ---------------------------------------------------------------*/
1609 long n;
1610 PyObject *diff = NULL;
1611 PyObject *one = NULL;
1612 PyObject *tmp1 = NULL, *tmp2 = NULL, *tmp3 = NULL;
1613 /* holds sub-expression evaluations */
1614
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001615 /* If (lo >= hi), return length of 0 (or error). */
1616 n = PyObject_RichCompareBool(lo, hi, Py_LT);
1617 if (n <= 0)
1618 return n;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001619
1620 if ((one = PyLong_FromLong(1L)) == NULL)
1621 goto Fail;
1622
1623 if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL)
1624 goto Fail;
1625
1626 if ((diff = PyNumber_Subtract(tmp1, one)) == NULL)
1627 goto Fail;
1628
1629 if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL)
1630 goto Fail;
1631
1632 if ((tmp3 = PyNumber_Add(tmp2, one)) == NULL)
1633 goto Fail;
1634
1635 n = PyLong_AsLong(tmp3);
1636 if (PyErr_Occurred()) { /* Check for Overflow */
1637 PyErr_Clear();
1638 goto Fail;
1639 }
1640
1641 Py_DECREF(tmp3);
1642 Py_DECREF(tmp2);
1643 Py_DECREF(diff);
1644 Py_DECREF(tmp1);
1645 Py_DECREF(one);
1646 return n;
1647
1648 Fail:
1649 Py_XDECREF(tmp3);
1650 Py_XDECREF(tmp2);
1651 Py_XDECREF(diff);
1652 Py_XDECREF(tmp1);
1653 Py_XDECREF(one);
1654 return -1;
1655}
1656
1657/* An extension of builtin_range() that handles the case when PyLong
1658 * arguments are given. */
1659static PyObject *
1660handle_range_longs(PyObject *self, PyObject *args)
1661{
1662 PyObject *ilow;
Tim Peters874e1f72003-04-13 22:13:08 +00001663 PyObject *ihigh = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001664 PyObject *istep = NULL;
Tim Peters874e1f72003-04-13 22:13:08 +00001665
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001666 PyObject *curnum = NULL;
1667 PyObject *v = NULL;
1668 long bign;
1669 int i, n;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001670 int step_pos;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001671
Tim Peters874e1f72003-04-13 22:13:08 +00001672 PyObject *zero = PyLong_FromLong(0);
1673
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001674 if (zero == NULL)
1675 return NULL;
1676
Tim Peters874e1f72003-04-13 22:13:08 +00001677 if (!PyArg_UnpackTuple(args, "range", 1, 3, &ilow, &ihigh, &istep)) {
1678 Py_DECREF(zero);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001679 return NULL;
1680 }
1681
Tim Peters874e1f72003-04-13 22:13:08 +00001682 /* Figure out which way we were called, supply defaults, and be
1683 * sure to incref everything so that the decrefs at the end
1684 * are correct.
1685 */
1686 assert(ilow != NULL);
1687 if (ihigh == NULL) {
1688 /* only 1 arg -- it's the upper limit */
1689 ihigh = ilow;
1690 ilow = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001691 }
Tim Peters874e1f72003-04-13 22:13:08 +00001692 assert(ihigh != NULL);
1693 Py_INCREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001694
Tim Peters874e1f72003-04-13 22:13:08 +00001695 /* ihigh correct now; do ilow */
1696 if (ilow == NULL)
1697 ilow = zero;
1698 Py_INCREF(ilow);
1699
1700 /* ilow and ihigh correct now; do istep */
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001701 if (istep == NULL) {
1702 istep = PyLong_FromLong(1L);
1703 if (istep == NULL)
1704 goto Fail;
1705 }
1706 else {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001707 Py_INCREF(istep);
1708 }
1709
Tim Peters874e1f72003-04-13 22:13:08 +00001710 if (!PyInt_Check(ilow) && !PyLong_Check(ilow)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001711 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001712 "range() integer start argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001713 ilow->ob_type->tp_name);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001714 goto Fail;
1715 }
1716
Tim Peters874e1f72003-04-13 22:13:08 +00001717 if (!PyInt_Check(ihigh) && !PyLong_Check(ihigh)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001718 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001719 "range() integer end argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001720 ihigh->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001721 goto Fail;
1722 }
1723
1724 if (!PyInt_Check(istep) && !PyLong_Check(istep)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001725 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001726 "range() integer step argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001727 istep->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001728 goto Fail;
1729 }
1730
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001731 step_pos = PyObject_RichCompareBool(istep, zero, Py_GT);
1732 if (step_pos < 0)
Tim Peters874e1f72003-04-13 22:13:08 +00001733 goto Fail;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001734 if (step_pos)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001735 bign = get_len_of_range_longs(ilow, ihigh, istep);
1736 else {
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001737 int step_zero = PyObject_RichCompareBool(istep, zero, Py_EQ);
Guido van Rossum93a66922006-08-24 02:10:21 +00001738 PyObject *neg_istep;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001739 if (step_zero < 0)
1740 goto Fail;
1741 if (step_zero) {
1742 PyErr_SetString(PyExc_ValueError,
1743 "range() step argument must not be zero");
1744 goto Fail;
1745 }
Guido van Rossum93a66922006-08-24 02:10:21 +00001746 neg_istep = PyNumber_Negative(istep);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001747 if (neg_istep == NULL)
1748 goto Fail;
1749 bign = get_len_of_range_longs(ihigh, ilow, neg_istep);
1750 Py_DECREF(neg_istep);
1751 }
1752
1753 n = (int)bign;
1754 if (bign < 0 || (long)n != bign) {
1755 PyErr_SetString(PyExc_OverflowError,
1756 "range() result has too many items");
1757 goto Fail;
1758 }
1759
1760 v = PyList_New(n);
1761 if (v == NULL)
1762 goto Fail;
1763
1764 curnum = ilow;
1765 Py_INCREF(curnum);
1766
1767 for (i = 0; i < n; i++) {
1768 PyObject *w = PyNumber_Long(curnum);
1769 PyObject *tmp_num;
1770 if (w == NULL)
1771 goto Fail;
1772
1773 PyList_SET_ITEM(v, i, w);
1774
1775 tmp_num = PyNumber_Add(curnum, istep);
1776 if (tmp_num == NULL)
1777 goto Fail;
1778
1779 Py_DECREF(curnum);
1780 curnum = tmp_num;
1781 }
Tim Peters874e1f72003-04-13 22:13:08 +00001782 Py_DECREF(ilow);
1783 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001784 Py_DECREF(istep);
1785 Py_DECREF(zero);
Tim Peters874e1f72003-04-13 22:13:08 +00001786 Py_DECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001787 return v;
1788
1789 Fail:
Tim Peters874e1f72003-04-13 22:13:08 +00001790 Py_DECREF(ilow);
1791 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001792 Py_XDECREF(istep);
Tim Peters874e1f72003-04-13 22:13:08 +00001793 Py_DECREF(zero);
1794 Py_XDECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001795 Py_XDECREF(v);
1796 return NULL;
1797}
1798
Guido van Rossum124eff01999-02-23 16:11:01 +00001799/* Return number of items in range/xrange (lo, hi, step). step > 0
1800 * required. Return a value < 0 if & only if the true value is too
1801 * large to fit in a signed long.
1802 */
1803static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001804get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001805{
1806 /* -------------------------------------------------------------
1807 If lo >= hi, the range is empty.
1808 Else if n values are in the range, the last one is
1809 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1810 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1811 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1812 the RHS is non-negative and so truncation is the same as the
1813 floor. Letting M be the largest positive long, the worst case
1814 for the RHS numerator is hi=M, lo=-M-1, and then
1815 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1816 precision to compute the RHS exactly.
1817 ---------------------------------------------------------------*/
1818 long n = 0;
1819 if (lo < hi) {
1820 unsigned long uhi = (unsigned long)hi;
1821 unsigned long ulo = (unsigned long)lo;
1822 unsigned long diff = uhi - ulo - 1;
1823 n = (long)(diff / (unsigned long)step + 1);
1824 }
1825 return n;
1826}
1827
Guido van Rossum79f25d91997-04-29 20:08:16 +00001828static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001829builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001830{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001831 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001832 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001833 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001834
Guido van Rossum79f25d91997-04-29 20:08:16 +00001835 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001836
Guido van Rossum79f25d91997-04-29 20:08:16 +00001837 if (PyTuple_Size(args) <= 1) {
1838 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001839 "l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001840 &ihigh)) {
1841 PyErr_Clear();
1842 return handle_range_longs(self, args);
1843 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001844 }
1845 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001846 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001847 "ll|l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001848 &ilow, &ihigh, &istep)) {
1849 PyErr_Clear();
1850 return handle_range_longs(self, args);
1851 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001852 }
1853 if (istep == 0) {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001854 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001855 "range() step argument must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001856 return NULL;
1857 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001858 if (istep > 0)
1859 bign = get_len_of_range(ilow, ihigh, istep);
1860 else
1861 bign = get_len_of_range(ihigh, ilow, -istep);
1862 n = (int)bign;
1863 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001864 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001865 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001866 return NULL;
1867 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001868 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001869 if (v == NULL)
1870 return NULL;
1871 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001872 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001873 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001874 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001875 return NULL;
1876 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001877 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001878 ilow += istep;
1879 }
1880 return v;
1881}
1882
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001883PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001884"range([start,] stop[, step]) -> list of integers\n\
1885\n\
1886Return a list containing an arithmetic progression of integers.\n\
1887range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1888When step is given, it specifies the increment (or decrement).\n\
1889For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001890These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001891
Guido van Rossuma88a0332007-02-26 16:59:55 +00001892static PyObject *
1893builtin_input(PyObject *self, PyObject *args)
1894{
1895 PyObject *v = NULL;
1896 PyObject *fin = PySys_GetObject("stdin");
1897 PyObject *fout = PySys_GetObject("stdout");
1898
1899 if (!PyArg_UnpackTuple(args, "input", 0, 1, &v))
1900 return NULL;
1901
1902 if (fin == NULL) {
1903 PyErr_SetString(PyExc_RuntimeError, "input: lost sys.stdin");
1904 return NULL;
1905 }
1906 if (fout == NULL) {
1907 PyErr_SetString(PyExc_RuntimeError, "input: lost sys.stdout");
1908 return NULL;
1909 }
1910 if (PyFile_AsFile(fin) && PyFile_AsFile(fout)
1911 && isatty(fileno(PyFile_AsFile(fin)))
1912 && isatty(fileno(PyFile_AsFile(fout)))) {
1913 PyObject *po;
1914 char *prompt;
1915 char *s;
1916 PyObject *result;
1917 if (v != NULL) {
1918 po = PyObject_Str(v);
1919 if (po == NULL)
1920 return NULL;
1921 prompt = PyString_AsString(po);
1922 if (prompt == NULL)
1923 return NULL;
1924 }
1925 else {
1926 po = NULL;
1927 prompt = "";
1928 }
1929 s = PyOS_Readline(PyFile_AsFile(fin), PyFile_AsFile(fout),
1930 prompt);
1931 Py_XDECREF(po);
1932 if (s == NULL) {
1933 if (!PyErr_Occurred())
1934 PyErr_SetNone(PyExc_KeyboardInterrupt);
1935 return NULL;
1936 }
1937 if (*s == '\0') {
1938 PyErr_SetNone(PyExc_EOFError);
1939 result = NULL;
1940 }
1941 else { /* strip trailing '\n' */
1942 size_t len = strlen(s);
1943 if (len > PY_SSIZE_T_MAX) {
1944 PyErr_SetString(PyExc_OverflowError,
1945 "input: input too long");
1946 result = NULL;
1947 }
1948 else {
1949 result = PyString_FromStringAndSize(s, len-1);
1950 }
1951 }
1952 PyMem_FREE(s);
1953 return result;
1954 }
1955 if (v != NULL) {
1956 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
1957 return NULL;
1958 }
1959 return PyFile_GetLine(fin, -1);
1960}
1961
1962PyDoc_STRVAR(input_doc,
1963"input([prompt]) -> string\n\
1964\n\
1965Read a string from standard input. The trailing newline is stripped.\n\
1966If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1967On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1968is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001969
Guido van Rossum79f25d91997-04-29 20:08:16 +00001970static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001971builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001972{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001973 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001974}
1975
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001976PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001977"reload(module) -> module\n\
1978\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001979Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001980
1981
Guido van Rossum79f25d91997-04-29 20:08:16 +00001982static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001983builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001984{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001985 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001986}
1987
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001988PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001989"repr(object) -> string\n\
1990\n\
1991Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001992For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001993
1994
Guido van Rossum79f25d91997-04-29 20:08:16 +00001995static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001996builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001997{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001998 double number;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001999 double f;
2000 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002001 int i;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002002 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002003
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002004 if (!PyArg_ParseTupleAndKeywords(args, kwds, "d|i:round",
2005 kwlist, &number, &ndigits))
2006 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002007 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00002008 i = abs(ndigits);
2009 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002010 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00002011 if (ndigits < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002012 number /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002013 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002014 number *= f;
2015 if (number >= 0.0)
2016 number = floor(number + 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00002017 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002018 number = ceil(number - 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00002019 if (ndigits < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002020 number *= f;
Guido van Rossum1e162d31998-05-09 14:42:25 +00002021 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002022 number /= f;
2023 return PyFloat_FromDouble(number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002024}
2025
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002026PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002027"round(number[, ndigits]) -> floating point number\n\
2028\n\
2029Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002030This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002031
Raymond Hettinger64958a12003-12-17 20:43:33 +00002032static PyObject *
2033builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
2034{
2035 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
2036 PyObject *callable;
Martin v. Löwis15e62742006-02-27 16:46:16 +00002037 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00002038 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002039
Neal Norwitz6f0d4792005-12-15 06:40:36 +00002040 /* args 1-4 should match listsort in Objects/listobject.c */
Armin Rigo71d7e702005-09-20 18:13:03 +00002041 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
2042 kwlist, &seq, &compare, &keyfunc, &reverse))
2043 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002044
2045 newlist = PySequence_List(seq);
2046 if (newlist == NULL)
2047 return NULL;
2048
2049 callable = PyObject_GetAttrString(newlist, "sort");
2050 if (callable == NULL) {
2051 Py_DECREF(newlist);
2052 return NULL;
2053 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002054
Raymond Hettinger64958a12003-12-17 20:43:33 +00002055 newargs = PyTuple_GetSlice(args, 1, 4);
2056 if (newargs == NULL) {
2057 Py_DECREF(newlist);
2058 Py_DECREF(callable);
2059 return NULL;
2060 }
2061
2062 v = PyObject_Call(callable, newargs, kwds);
2063 Py_DECREF(newargs);
2064 Py_DECREF(callable);
2065 if (v == NULL) {
2066 Py_DECREF(newlist);
2067 return NULL;
2068 }
2069 Py_DECREF(v);
2070 return newlist;
2071}
2072
2073PyDoc_STRVAR(sorted_doc,
2074"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002075
Guido van Rossum79f25d91997-04-29 20:08:16 +00002076static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002077builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002078{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002079 PyObject *v = NULL;
2080 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002081
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002082 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002083 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00002084 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002085 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002086 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002087 if (!PyErr_Occurred())
2088 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002089 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002090 }
2091 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00002092 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00002093 }
2094 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002095 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00002096 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002097 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00002098 "vars() argument must have __dict__ attribute");
2099 return NULL;
2100 }
2101 }
2102 return d;
2103}
2104
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002105PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002106"vars([object]) -> dictionary\n\
2107\n\
2108Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002109With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002110
Alex Martellia70b1912003-04-22 08:12:33 +00002111
2112static PyObject*
2113builtin_sum(PyObject *self, PyObject *args)
2114{
2115 PyObject *seq;
2116 PyObject *result = NULL;
2117 PyObject *temp, *item, *iter;
2118
Raymond Hettinger5cf63942003-10-25 06:41:37 +00002119 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00002120 return NULL;
2121
2122 iter = PyObject_GetIter(seq);
2123 if (iter == NULL)
2124 return NULL;
2125
2126 if (result == NULL) {
2127 result = PyInt_FromLong(0);
2128 if (result == NULL) {
2129 Py_DECREF(iter);
2130 return NULL;
2131 }
2132 } else {
2133 /* reject string values for 'start' parameter */
2134 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
2135 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002136 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00002137 Py_DECREF(iter);
2138 return NULL;
2139 }
Alex Martelli41c9f882003-04-22 09:24:48 +00002140 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00002141 }
2142
2143 for(;;) {
2144 item = PyIter_Next(iter);
2145 if (item == NULL) {
2146 /* error, or end-of-sequence */
2147 if (PyErr_Occurred()) {
2148 Py_DECREF(result);
2149 result = NULL;
2150 }
2151 break;
2152 }
Alex Martellia253e182003-10-25 23:24:14 +00002153 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00002154 Py_DECREF(result);
2155 Py_DECREF(item);
2156 result = temp;
2157 if (result == NULL)
2158 break;
2159 }
2160 Py_DECREF(iter);
2161 return result;
2162}
2163
2164PyDoc_STRVAR(sum_doc,
Thomas Wouters89f507f2006-12-13 04:49:30 +00002165"sum(sequence[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00002166\n\
2167Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00002168of parameter 'start' (which defaults to 0). When the sequence is\n\
2169empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00002170
2171
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002172static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002173builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002174{
2175 PyObject *inst;
2176 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00002177 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002178
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002179 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002180 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002181
Guido van Rossum823649d2001-03-21 18:40:58 +00002182 retval = PyObject_IsInstance(inst, cls);
2183 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00002184 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002185 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002186}
2187
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002188PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002189"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002190\n\
2191Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002192With a type as second argument, return whether that is the object's type.\n\
2193The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002194isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002195
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002196
2197static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002198builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002199{
2200 PyObject *derived;
2201 PyObject *cls;
2202 int retval;
2203
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002204 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002205 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002206
Guido van Rossum823649d2001-03-21 18:40:58 +00002207 retval = PyObject_IsSubclass(derived, cls);
2208 if (retval < 0)
2209 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002210 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002211}
2212
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002213PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002214"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002215\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002216Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2217When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2218is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002219
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002220
Barry Warsawbd599b52000-08-03 15:45:29 +00002221static PyObject*
2222builtin_zip(PyObject *self, PyObject *args)
2223{
Guido van Rossumb65fb332006-08-25 23:26:40 +00002224 /* args must be a tuple */
2225 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00002226
Guido van Rossumb65fb332006-08-25 23:26:40 +00002227 return _PyZip_CreateIter(args);
Barry Warsawbd599b52000-08-03 15:45:29 +00002228}
2229
2230
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002231PyDoc_STRVAR(zip_doc,
Guido van Rossum801f0d72006-08-24 19:48:10 +00002232"zip(it1 [, it2 [...]]) -> iter([(it1[0], it2[0] ...), ...])\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002233\n\
Guido van Rossum801f0d72006-08-24 19:48:10 +00002234Return an iterator yielding tuples, where each tuple contains the\n\
2235corresponding element from each of the argument iterables.\n\
2236The returned iterator ends when the shortest argument iterable is exhausted.\n\
2237NOTE: This is implemented using itertools.izip().");
Barry Warsawbd599b52000-08-03 15:45:29 +00002238
2239
Guido van Rossum79f25d91997-04-29 20:08:16 +00002240static PyMethodDef builtin_methods[] = {
Guido van Rossum52cc1d82007-03-18 15:41:51 +00002241 {"__build_class__", (PyCFunction)builtin___build_class__,
2242 METH_VARARGS | METH_KEYWORDS, build_class_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002243 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002244 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002245 {"all", builtin_all, METH_O, all_doc},
2246 {"any", builtin_any, METH_O, any_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002247 {"callable", builtin_callable, METH_O, callable_doc},
Guido van Rossum84fc66d2007-05-03 17:18:26 +00002248 {"chr", builtin_unichr, METH_VARARGS, unichr_doc},
Guido van Rossum7fcf2242007-05-04 17:43:11 +00002249 {"chr8", builtin_chr, METH_VARARGS, chr_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002250 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
Guido van Rossumd8faa362007-04-27 19:54:29 +00002251 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002252 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2253 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2254 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2255 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00002256 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002257 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
2258 {"filter", builtin_filter, METH_VARARGS, filter_doc},
2259 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2260 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2261 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2262 {"hash", builtin_hash, METH_O, hash_doc},
2263 {"hex", builtin_hex, METH_O, hex_doc},
2264 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00002265 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002266 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2267 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2268 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2269 {"len", builtin_len, METH_O, len_doc},
2270 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2271 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002272 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2273 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandla18af4e2007-04-21 15:47:16 +00002274 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002275 {"oct", builtin_oct, METH_O, oct_doc},
Thomas Wouters477c8d52006-05-27 19:21:47 +00002276 {"open", (PyCFunction)builtin_open, METH_VARARGS | METH_KEYWORDS, open_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002277 {"ord", builtin_ord, METH_O, ord_doc},
2278 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00002279 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002280 {"range", builtin_range, METH_VARARGS, range_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002281 {"reload", builtin_reload, METH_O, reload_doc},
2282 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002283 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002284 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002285 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002286 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002287 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002288 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002289 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002290};
2291
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002292PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002293"Built-in functions, exceptions, and other objects.\n\
2294\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002295Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002296
Guido van Rossum25ce5661997-08-02 03:10:38 +00002297PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002298_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002299{
Fred Drake5550de32000-06-20 04:54:19 +00002300 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002301 mod = Py_InitModule4("__builtin__", builtin_methods,
2302 builtin_doc, (PyObject *)NULL,
2303 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002304 if (mod == NULL)
2305 return NULL;
2306 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002307
Tim Peters7571a0f2003-03-23 17:52:28 +00002308#ifdef Py_TRACE_REFS
2309 /* __builtin__ exposes a number of statically allocated objects
2310 * that, before this code was added in 2.3, never showed up in
2311 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2312 * result, programs leaking references to None and False (etc)
2313 * couldn't be diagnosed by examining sys.getobjects(0).
2314 */
2315#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2316#else
2317#define ADD_TO_ALL(OBJECT) (void)0
2318#endif
2319
Tim Peters4b7625e2001-09-13 21:37:17 +00002320#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002321 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2322 return NULL; \
2323 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002324
2325 SETBUILTIN("None", Py_None);
2326 SETBUILTIN("Ellipsis", Py_Ellipsis);
2327 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002328 SETBUILTIN("False", Py_False);
2329 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00002330 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002331 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002332 SETBUILTIN("buffer", &PyBuffer_Type);
Guido van Rossum4dfe8a12006-04-22 23:28:04 +00002333 SETBUILTIN("bytes", &PyBytes_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002334 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002335#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002336 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002337#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002338 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002339 SETBUILTIN("enumerate", &PyEnum_Type);
Thomas Wouters477c8d52006-05-27 19:21:47 +00002340 SETBUILTIN("file", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002341 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002342 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002343 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00002344 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002345 SETBUILTIN("list", &PyList_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002346 SETBUILTIN("object", &PyBaseObject_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002347 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002348 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002349 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002350 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Guido van Rossum572dbf82007-04-27 23:53:51 +00002351 SETBUILTIN("str", &PyUnicode_Type);
Guido van Rossum84fc66d2007-05-03 17:18:26 +00002352 SETBUILTIN("str8", &PyString_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002353 SETBUILTIN("super", &PySuper_Type);
2354 SETBUILTIN("tuple", &PyTuple_Type);
2355 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00002356 SETBUILTIN("xrange", &PyRange_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002357 SETBUILTIN("unicode", &PyUnicode_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002358 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002359 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2360 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002361 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002362 }
2363 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002364
Guido van Rossum25ce5661997-08-02 03:10:38 +00002365 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002366#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002367#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002368}
2369
Guido van Rossume77a7571993-11-03 15:01:26 +00002370/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002371
Guido van Rossum79f25d91997-04-29 20:08:16 +00002372static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002373filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002374{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002375 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002376 Py_ssize_t i, j;
2377 Py_ssize_t len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002378
Guido van Rossumb7b45621995-08-04 04:07:45 +00002379 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002380 if (PyTuple_CheckExact(tuple))
2381 Py_INCREF(tuple);
2382 else
2383 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002384 return tuple;
2385 }
2386
Guido van Rossum79f25d91997-04-29 20:08:16 +00002387 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002388 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002389
Guido van Rossum12d12c51993-10-26 17:58:25 +00002390 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002391 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002392 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002393
Walter Dörwald8dd19322003-02-10 17:36:40 +00002394 if (tuple->ob_type->tp_as_sequence &&
2395 tuple->ob_type->tp_as_sequence->sq_item) {
2396 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002397 if (item == NULL)
2398 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002399 } else {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002400 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002401 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002402 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002403 if (func == Py_None) {
2404 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002405 good = item;
2406 }
2407 else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002408 PyObject *arg = PyTuple_Pack(1, item);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002409 if (arg == NULL) {
2410 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002411 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002412 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002413 good = PyEval_CallObject(func, arg);
2414 Py_DECREF(arg);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002415 if (good == NULL) {
2416 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002417 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002418 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002419 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002420 ok = PyObject_IsTrue(good);
2421 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002422 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002423 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002424 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002425 }
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002426 else
2427 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002428 }
2429
Tim Peters4324aa32001-05-28 22:30:08 +00002430 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002431 return NULL;
2432
Guido van Rossum12d12c51993-10-26 17:58:25 +00002433 return result;
2434
Guido van Rossum12d12c51993-10-26 17:58:25 +00002435Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002436 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002437 return NULL;
2438}
2439
2440
Guido van Rossume77a7571993-11-03 15:01:26 +00002441/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002442
Guido van Rossum79f25d91997-04-29 20:08:16 +00002443static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002444filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002445{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002446 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002447 Py_ssize_t i, j;
2448 Py_ssize_t len = PyString_Size(strobj);
2449 Py_ssize_t outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002450
Guido van Rossum79f25d91997-04-29 20:08:16 +00002451 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002452 /* If it's a real string we can return the original,
2453 * as no character is ever false and __getitem__
2454 * does return this character. If it's a subclass
2455 * we must go through the __getitem__ loop */
2456 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002457 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002458 return strobj;
2459 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002460 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002461 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002462 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002463
Guido van Rossum12d12c51993-10-26 17:58:25 +00002464 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002465 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002466 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002467
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002468 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2469 if (item == NULL)
2470 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002471 if (func==Py_None) {
2472 ok = 1;
2473 } else {
2474 PyObject *arg, *good;
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002475 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002476 if (arg == NULL) {
2477 Py_DECREF(item);
2478 goto Fail_1;
2479 }
2480 good = PyEval_CallObject(func, arg);
2481 Py_DECREF(arg);
2482 if (good == NULL) {
2483 Py_DECREF(item);
2484 goto Fail_1;
2485 }
2486 ok = PyObject_IsTrue(good);
2487 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00002488 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002489 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002490 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002491 if (!PyString_Check(item)) {
2492 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2493 " __getitem__ returned different type");
2494 Py_DECREF(item);
2495 goto Fail_1;
2496 }
2497 reslen = PyString_GET_SIZE(item);
2498 if (reslen == 1) {
2499 PyString_AS_STRING(result)[j++] =
2500 PyString_AS_STRING(item)[0];
2501 } else {
2502 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002503 Py_ssize_t need = j + reslen + len-i-1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002504 if (need > outlen) {
2505 /* overallocate, to avoid reallocations */
2506 if (need<2*outlen)
2507 need = 2*outlen;
2508 if (_PyString_Resize(&result, need)) {
2509 Py_DECREF(item);
2510 return NULL;
2511 }
2512 outlen = need;
2513 }
2514 memcpy(
2515 PyString_AS_STRING(result) + j,
2516 PyString_AS_STRING(item),
2517 reslen
2518 );
2519 j += reslen;
2520 }
2521 }
Tim Peters388ed082001-04-07 20:34:48 +00002522 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002523 }
2524
Walter Dörwald903f1e02003-02-04 16:28:00 +00002525 if (j < outlen)
Tim Peters5de98422002-04-27 18:44:32 +00002526 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002527
Guido van Rossum12d12c51993-10-26 17:58:25 +00002528 return result;
2529
Guido van Rossum12d12c51993-10-26 17:58:25 +00002530Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002531 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002532 return NULL;
2533}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002534
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002535/* Helper for filter(): filter a Unicode object through a function */
2536
2537static PyObject *
2538filterunicode(PyObject *func, PyObject *strobj)
2539{
2540 PyObject *result;
Martin v. Löwis725507b2006-03-07 12:08:51 +00002541 register Py_ssize_t i, j;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002542 Py_ssize_t len = PyUnicode_GetSize(strobj);
2543 Py_ssize_t outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002544
2545 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002546 /* If it's a real string we can return the original,
2547 * as no character is ever false and __getitem__
2548 * does return this character. If it's a subclass
2549 * we must go through the __getitem__ loop */
2550 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002551 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002552 return strobj;
2553 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002554 }
2555 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2556 return NULL;
2557
2558 for (i = j = 0; i < len; ++i) {
2559 PyObject *item, *arg, *good;
2560 int ok;
2561
2562 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2563 if (item == NULL)
2564 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002565 if (func == Py_None) {
2566 ok = 1;
2567 } else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002568 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002569 if (arg == NULL) {
2570 Py_DECREF(item);
2571 goto Fail_1;
2572 }
2573 good = PyEval_CallObject(func, arg);
2574 Py_DECREF(arg);
2575 if (good == NULL) {
2576 Py_DECREF(item);
2577 goto Fail_1;
2578 }
2579 ok = PyObject_IsTrue(good);
2580 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002581 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002582 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002583 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002584 if (!PyUnicode_Check(item)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002585 PyErr_SetString(PyExc_TypeError,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002586 "can't filter unicode to unicode:"
2587 " __getitem__ returned different type");
Walter Dörwald903f1e02003-02-04 16:28:00 +00002588 Py_DECREF(item);
2589 goto Fail_1;
2590 }
2591 reslen = PyUnicode_GET_SIZE(item);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002592 if (reslen == 1)
Walter Dörwald903f1e02003-02-04 16:28:00 +00002593 PyUnicode_AS_UNICODE(result)[j++] =
2594 PyUnicode_AS_UNICODE(item)[0];
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002595 else {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002596 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002597 Py_ssize_t need = j + reslen + len - i - 1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002598 if (need > outlen) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002599 /* overallocate,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002600 to avoid reallocations */
2601 if (need < 2 * outlen)
2602 need = 2 * outlen;
Jeremy Hylton364f6be2003-09-16 03:17:16 +00002603 if (PyUnicode_Resize(
2604 &result, need) < 0) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002605 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002606 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002607 }
2608 outlen = need;
2609 }
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002610 memcpy(PyUnicode_AS_UNICODE(result) + j,
2611 PyUnicode_AS_UNICODE(item),
2612 reslen*sizeof(Py_UNICODE));
Walter Dörwald903f1e02003-02-04 16:28:00 +00002613 j += reslen;
2614 }
2615 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002616 Py_DECREF(item);
2617 }
2618
Walter Dörwald903f1e02003-02-04 16:28:00 +00002619 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002620 PyUnicode_Resize(&result, j);
2621
2622 return result;
2623
2624Fail_1:
2625 Py_DECREF(result);
2626 return NULL;
2627}