blob: 71beeba32141734633498a644606b9ab38d53eb0 [file] [log] [blame]
Guido van Rossum3f5da241990-12-20 15:06:42 +00001/* Built-in functions */
2
Guido van Rossum79f25d91997-04-29 20:08:16 +00003#include "Python.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00004
5#include "node.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00006#include "code.h"
Guido van Rossum5b722181993-03-30 17:46:03 +00007#include "eval.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00008
Guido van Rossum6bf62da1997-04-11 20:37:35 +00009#include <ctype.h>
10
Guido van Rossume2ae77b2001-10-24 20:42:55 +000011#ifdef RISCOS
12#include "unixstuff.h"
13#endif
14
Mark Hammond26cffde42001-05-14 12:17:34 +000015/* The default encoding used by the platform file system APIs
16 Can remain NULL for all platforms that don't have such a concept
17*/
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000018#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
Mark Hammond26cffde42001-05-14 12:17:34 +000019const char *Py_FileSystemDefaultEncoding = "mbcs";
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000020#elif defined(__APPLE__)
21const char *Py_FileSystemDefaultEncoding = "utf-8";
Mark Hammond26cffde42001-05-14 12:17:34 +000022#else
23const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
24#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000025
Guido van Rossum12d12c51993-10-26 17:58:25 +000026/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000027static PyObject *filterstring(PyObject *, PyObject *);
Martin v. Löwis8afd7572003-01-25 22:46:11 +000028#ifdef Py_USING_UNICODE
29static PyObject *filterunicode(PyObject *, PyObject *);
30#endif
Tim Petersdbd9ba62000-07-09 03:09:57 +000031static PyObject *filtertuple (PyObject *, PyObject *);
Guido van Rossum12d12c51993-10-26 17:58:25 +000032
Guido van Rossum79f25d91997-04-29 20:08:16 +000033static PyObject *
Neal Norwitz92e212f2006-04-03 04:48:37 +000034builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +000035{
Neal Norwitz92e212f2006-04-03 04:48:37 +000036 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
37 "level", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +000038 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +000039 PyObject *globals = NULL;
40 PyObject *locals = NULL;
41 PyObject *fromlist = NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +000042 int level = -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000043
Neal Norwitz92e212f2006-04-03 04:48:37 +000044 if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|OOOi:__import__",
45 kwlist, &name, &globals, &locals, &fromlist, &level))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000046 return NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +000047 return PyImport_ImportModuleLevel(name, globals, locals,
48 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +000049}
50
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000051PyDoc_STRVAR(import_doc,
Neal Norwitz92e212f2006-04-03 04:48:37 +000052"__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000053\n\
54Import a module. The globals are only used to determine the context;\n\
55they are not modified. The locals are currently unused. The fromlist\n\
56should be a list of names to emulate ``from name import ...'', or an\n\
57empty list to emulate ``import name''.\n\
58When importing a module from a package, note that __import__('A.B', ...)\n\
59returns package A when fromlist is empty, but its submodule B when\n\
Neal Norwitz92e212f2006-04-03 04:48:37 +000060fromlist is not empty. Level is used to determine whether to perform \n\
61absolute or relative imports. -1 is the original strategy of attempting\n\
62both absolute and relative imports, 0 is absolute, a positive number\n\
63is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000064
Guido van Rossum1ae940a1995-01-02 19:04:15 +000065
Guido van Rossum79f25d91997-04-29 20:08:16 +000066static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +000067builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +000068{
Guido van Rossum09df08a1998-05-22 00:51:39 +000069 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +000070}
71
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000072PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000073"abs(number) -> number\n\
74\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000075Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000076
Raymond Hettinger96229b12005-03-11 06:49:40 +000077static PyObject *
78builtin_all(PyObject *self, PyObject *v)
79{
80 PyObject *it, *item;
Guido van Rossum01dbc102007-12-20 23:48:28 +000081 PyObject *(*iternext)(PyObject *);
82 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +000083
84 it = PyObject_GetIter(v);
85 if (it == NULL)
86 return NULL;
Guido van Rossum01dbc102007-12-20 23:48:28 +000087 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +000088
Guido van Rossum01dbc102007-12-20 23:48:28 +000089 for (;;) {
90 item = iternext(it);
91 if (item == NULL)
92 break;
93 cmp = PyObject_IsTrue(item);
Raymond Hettinger96229b12005-03-11 06:49:40 +000094 Py_DECREF(item);
95 if (cmp < 0) {
96 Py_DECREF(it);
97 return NULL;
98 }
99 if (cmp == 0) {
100 Py_DECREF(it);
101 Py_RETURN_FALSE;
102 }
103 }
104 Py_DECREF(it);
Guido van Rossum01dbc102007-12-20 23:48:28 +0000105 if (PyErr_Occurred()) {
106 if (PyErr_ExceptionMatches(PyExc_StopIteration))
107 PyErr_Clear();
108 else
109 return NULL;
110 }
Raymond Hettinger96229b12005-03-11 06:49:40 +0000111 Py_RETURN_TRUE;
112}
113
114PyDoc_STRVAR(all_doc,
115"all(iterable) -> bool\n\
116\n\
117Return True if bool(x) is True for all values x in the iterable.");
118
119static PyObject *
120builtin_any(PyObject *self, PyObject *v)
121{
122 PyObject *it, *item;
Guido van Rossum01dbc102007-12-20 23:48:28 +0000123 PyObject *(*iternext)(PyObject *);
124 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000125
126 it = PyObject_GetIter(v);
127 if (it == NULL)
128 return NULL;
Guido van Rossum01dbc102007-12-20 23:48:28 +0000129 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000130
Guido van Rossum01dbc102007-12-20 23:48:28 +0000131 for (;;) {
132 item = iternext(it);
133 if (item == NULL)
134 break;
135 cmp = PyObject_IsTrue(item);
Raymond Hettinger96229b12005-03-11 06:49:40 +0000136 Py_DECREF(item);
137 if (cmp < 0) {
138 Py_DECREF(it);
139 return NULL;
140 }
141 if (cmp == 1) {
142 Py_DECREF(it);
143 Py_RETURN_TRUE;
144 }
145 }
146 Py_DECREF(it);
Guido van Rossum01dbc102007-12-20 23:48:28 +0000147 if (PyErr_Occurred()) {
148 if (PyErr_ExceptionMatches(PyExc_StopIteration))
149 PyErr_Clear();
150 else
151 return NULL;
152 }
Raymond Hettinger96229b12005-03-11 06:49:40 +0000153 Py_RETURN_FALSE;
154}
155
156PyDoc_STRVAR(any_doc,
157"any(iterable) -> bool\n\
158\n\
159Return True if bool(x) is True for any x in the iterable.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000160
Guido van Rossum79f25d91997-04-29 20:08:16 +0000161static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000162builtin_apply(PyObject *self, PyObject *args)
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000163{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000164 PyObject *func, *alist = NULL, *kwdict = NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000165 PyObject *t = NULL, *retval = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000166
Neal Norwitz8b2bfbc2007-05-23 06:35:32 +0000167 if (Py_Py3kWarningFlag &&
168 PyErr_Warn(PyExc_DeprecationWarning,
169 "apply() not supported in 3.x") < 0)
170 return NULL;
171
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000172 if (!PyArg_UnpackTuple(args, "apply", 1, 3, &func, &alist, &kwdict))
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000173 return NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000174 if (alist != NULL) {
175 if (!PyTuple_Check(alist)) {
176 if (!PySequence_Check(alist)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +0000177 PyErr_Format(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000178 "apply() arg 2 expected sequence, found %s",
Jeremy Hyltonc862cf42001-01-19 03:25:05 +0000179 alist->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000180 return NULL;
181 }
182 t = PySequence_Tuple(alist);
183 if (t == NULL)
184 return NULL;
185 alist = t;
186 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000187 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000188 if (kwdict != NULL && !PyDict_Check(kwdict)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +0000189 PyErr_Format(PyExc_TypeError,
190 "apply() arg 3 expected dictionary, found %s",
191 kwdict->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000192 goto finally;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000193 }
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000194 retval = PyEval_CallObjectWithKeywords(func, alist, kwdict);
195 finally:
196 Py_XDECREF(t);
197 return retval;
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000198}
199
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000200PyDoc_STRVAR(apply_doc,
Fred Drakef1fbc622001-01-12 17:05:05 +0000201"apply(object[, args[, kwargs]]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000202\n\
Fred Drake7b912121999-12-23 14:16:55 +0000203Call a callable object with positional arguments taken from the tuple args,\n\
204and keyword arguments taken from the optional dictionary kwargs.\n\
Raymond Hettingerff41c482003-04-06 09:01:11 +0000205Note that classes are callable, as are instances with a __call__() method.\n\
206\n\
207Deprecated since release 2.3. Instead, use the extended call syntax:\n\
208 function(*args, **keywords).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000209
210
Guido van Rossum79f25d91997-04-29 20:08:16 +0000211static PyObject *
Eric Smith3cd81942008-02-22 16:30:22 +0000212builtin_bin(PyObject *self, PyObject *v)
213{
214 return PyNumber_ToBase(v, 2);
215}
216
217PyDoc_STRVAR(bin_doc,
218"bin(number) -> string\n\
219\n\
220Return the binary representation of an integer or long integer.");
221
222
223static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000224builtin_callable(PyObject *self, PyObject *v)
Guido van Rossum2d951851994-08-29 12:52:16 +0000225{
Neal Norwitzdf25efe2007-05-23 06:58:36 +0000226 if (Py_Py3kWarningFlag &&
227 PyErr_Warn(PyExc_DeprecationWarning,
228 "callable() not supported in 3.x") < 0)
229 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +0000230 return PyBool_FromLong((long)PyCallable_Check(v));
Guido van Rossum2d951851994-08-29 12:52:16 +0000231}
232
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000233PyDoc_STRVAR(callable_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000234"callable(object) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000235\n\
236Return whether the object is callable (i.e., some kind of function).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000237Note that classes are callable, as are instances with a __call__() method.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000238
239
Guido van Rossum79f25d91997-04-29 20:08:16 +0000240static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000241builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000242{
Guido van Rossumc7903a12002-08-16 07:04:56 +0000243 PyObject *func, *seq, *result, *it, *arg;
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000244 Py_ssize_t len; /* guess for result list size */
245 register Py_ssize_t j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000246
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000247 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000248 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000249
Tim Peters0e57abf2001-05-02 07:39:38 +0000250 /* Strings and tuples return a result of the same type. */
251 if (PyString_Check(seq))
252 return filterstring(func, seq);
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000253#ifdef Py_USING_UNICODE
254 if (PyUnicode_Check(seq))
255 return filterunicode(func, seq);
256#endif
Tim Peters0e57abf2001-05-02 07:39:38 +0000257 if (PyTuple_Check(seq))
258 return filtertuple(func, seq);
259
Georg Brandle35b6572005-07-19 22:20:20 +0000260 /* Pre-allocate argument list tuple. */
261 arg = PyTuple_New(1);
262 if (arg == NULL)
263 return NULL;
264
Tim Peters0e57abf2001-05-02 07:39:38 +0000265 /* Get iterator. */
266 it = PyObject_GetIter(seq);
267 if (it == NULL)
Georg Brandle35b6572005-07-19 22:20:20 +0000268 goto Fail_arg;
Tim Peters0e57abf2001-05-02 07:39:38 +0000269
270 /* Guess a result list size. */
Raymond Hettinger4e2f7142007-12-06 00:56:53 +0000271 len = _PyObject_LengthHint(seq, 8);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000272
Tim Peters0e57abf2001-05-02 07:39:38 +0000273 /* Get a result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000274 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000275 /* Eww - can modify the list in-place. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000276 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000277 result = seq;
278 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000279 else {
Tim Peters0e57abf2001-05-02 07:39:38 +0000280 result = PyList_New(len);
281 if (result == NULL)
282 goto Fail_it;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000283 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000284
Tim Peters0e57abf2001-05-02 07:39:38 +0000285 /* Build the result list. */
Tim Petersf4848da2001-05-05 00:14:56 +0000286 j = 0;
287 for (;;) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000288 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000289 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000290
Tim Peters0e57abf2001-05-02 07:39:38 +0000291 item = PyIter_Next(it);
292 if (item == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +0000293 if (PyErr_Occurred())
294 goto Fail_result_it;
Tim Peters0e57abf2001-05-02 07:39:38 +0000295 break;
Guido van Rossum2d951851994-08-29 12:52:16 +0000296 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000297
Neil Schemenauer68973552003-08-14 20:37:34 +0000298 if (func == (PyObject *)&PyBool_Type || func == Py_None) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000299 ok = PyObject_IsTrue(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000300 }
301 else {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000302 PyObject *good;
303 PyTuple_SET_ITEM(arg, 0, item);
304 good = PyObject_Call(func, arg, NULL);
305 PyTuple_SET_ITEM(arg, 0, NULL);
Guido van Rossum58b68731995-01-10 17:40:55 +0000306 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000307 Py_DECREF(item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000308 goto Fail_result_it;
Guido van Rossum58b68731995-01-10 17:40:55 +0000309 }
Guido van Rossumc7903a12002-08-16 07:04:56 +0000310 ok = PyObject_IsTrue(good);
311 Py_DECREF(good);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000312 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000313 if (ok) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000314 if (j < len)
315 PyList_SET_ITEM(result, j, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000316 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000317 int status = PyList_Append(result, item);
Barry Warsawfa77e091999-01-28 18:49:12 +0000318 Py_DECREF(item);
319 if (status < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000320 goto Fail_result_it;
Guido van Rossum2d951851994-08-29 12:52:16 +0000321 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000322 ++j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000323 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000324 else
325 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000326 }
327
Guido van Rossum12d12c51993-10-26 17:58:25 +0000328
Tim Peters0e57abf2001-05-02 07:39:38 +0000329 /* Cut back result list if len is too big. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000330 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000331 goto Fail_result_it;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000332
Tim Peters3c6b1482001-05-21 08:07:05 +0000333 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000334 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000335 return result;
336
Tim Peters0e57abf2001-05-02 07:39:38 +0000337Fail_result_it:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000338 Py_DECREF(result);
Tim Peters0e57abf2001-05-02 07:39:38 +0000339Fail_it:
340 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000341Fail_arg:
342 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000343 return NULL;
344}
345
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000346PyDoc_STRVAR(filter_doc,
Tim Petersd50e5442002-03-09 00:06:26 +0000347"filter(function or None, sequence) -> list, tuple, or string\n"
348"\n"
349"Return those items of sequence for which function(item) is true. If\n"
350"function is None, return the items that are true. If sequence is a tuple\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000351"or string, return the same type, else return a list.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000352
Guido van Rossum79f25d91997-04-29 20:08:16 +0000353static PyObject *
Eric Smitha9f7d622008-02-17 19:46:49 +0000354builtin_format(PyObject *self, PyObject *args)
355{
356 PyObject *value;
357 PyObject *format_spec = NULL;
358
359 if (!PyArg_ParseTuple(args, "O|O:format", &value, &format_spec))
360 return NULL;
361
362 return PyObject_Format(value, format_spec);
363}
364
365PyDoc_STRVAR(format_doc,
366"format(value[, format_spec]) -> string\n\
367\n\
368Returns value.__format__(format_spec)\n\
369format_spec defaults to \"\"");
370
371static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000372builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000373{
374 long x;
375 char s[1];
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000376
Guido van Rossum79f25d91997-04-29 20:08:16 +0000377 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000378 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000379 if (x < 0 || x >= 256) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000380 PyErr_SetString(PyExc_ValueError,
381 "chr() arg not in range(256)");
Guido van Rossum3f5da241990-12-20 15:06:42 +0000382 return NULL;
383 }
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000384 s[0] = (char)x;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000385 return PyString_FromStringAndSize(s, 1);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000386}
387
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000388PyDoc_STRVAR(chr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000389"chr(i) -> character\n\
390\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000391Return a string of one character with ordinal i; 0 <= i < 256.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000392
393
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000394#ifdef Py_USING_UNICODE
Guido van Rossum79f25d91997-04-29 20:08:16 +0000395static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000396builtin_unichr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000397{
398 long x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000399
400 if (!PyArg_ParseTuple(args, "l:unichr", &x))
401 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000402
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000403 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000404}
405
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000406PyDoc_STRVAR(unichr_doc,
Fred Drake078b24f2000-04-13 02:42:50 +0000407"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000408\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000409Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.");
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000410#endif
Guido van Rossum09095f32000-03-10 23:00:52 +0000411
412
413static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000414builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000415{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000416 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000417 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000418
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000419 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000420 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000421 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000422 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000423 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000424}
425
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000426PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000427"cmp(x, y) -> integer\n\
428\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000429Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000430
431
Guido van Rossum79f25d91997-04-29 20:08:16 +0000432static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000433builtin_coerce(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000434{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000435 PyObject *v, *w;
436 PyObject *res;
Guido van Rossum5524a591995-01-10 15:26:20 +0000437
Neal Norwitzdf25efe2007-05-23 06:58:36 +0000438 if (Py_Py3kWarningFlag &&
439 PyErr_Warn(PyExc_DeprecationWarning,
440 "coerce() not supported in 3.x") < 0)
441 return NULL;
442
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000443 if (!PyArg_UnpackTuple(args, "coerce", 2, 2, &v, &w))
Guido van Rossum5524a591995-01-10 15:26:20 +0000444 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000445 if (PyNumber_Coerce(&v, &w) < 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +0000446 return NULL;
Raymond Hettinger8ae46892003-10-12 19:09:37 +0000447 res = PyTuple_Pack(2, v, w);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000448 Py_DECREF(v);
449 Py_DECREF(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +0000450 return res;
451}
452
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000453PyDoc_STRVAR(coerce_doc,
Martin v. Löwis8d494f32004-08-25 10:42:41 +0000454"coerce(x, y) -> (x1, y1)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000455\n\
Martin v. Löwis8d494f32004-08-25 10:42:41 +0000456Return a tuple consisting of the two numeric arguments converted to\n\
457a common type, using the same rules as used by arithmetic operations.\n\
458If coercion is not possible, raise TypeError.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000459
Guido van Rossum79f25d91997-04-29 20:08:16 +0000460static PyObject *
Georg Brandl5240d742007-03-13 20:46:32 +0000461builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000462{
463 char *str;
464 char *filename;
465 char *startstr;
466 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000467 int dont_inherit = 0;
468 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000469 PyCompilerFlags cf;
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000470 PyObject *result = NULL, *cmd, *tmp = NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000471 Py_ssize_t length;
Georg Brandl5240d742007-03-13 20:46:32 +0000472 static char *kwlist[] = {"source", "filename", "mode", "flags",
473 "dont_inherit", NULL};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000474
Georg Brandl5240d742007-03-13 20:46:32 +0000475 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
476 kwlist, &cmd, &filename, &startstr,
477 &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000478 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000479
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000480 cf.cf_flags = supplied_flags;
481
482#ifdef Py_USING_UNICODE
483 if (PyUnicode_Check(cmd)) {
484 tmp = PyUnicode_AsUTF8String(cmd);
485 if (tmp == NULL)
486 return NULL;
487 cmd = tmp;
488 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
489 }
490#endif
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000491 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &length))
492 return NULL;
Tim Peters2c646c92003-02-10 14:48:29 +0000493 if ((size_t)length != strlen(str)) {
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000494 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000495 "compile() expected string without null bytes");
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000496 goto cleanup;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000497 }
498
Guido van Rossum5b722181993-03-30 17:46:03 +0000499 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000500 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000501 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000502 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000503 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000504 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000505 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000506 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000507 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000508 goto cleanup;
Guido van Rossum5b722181993-03-30 17:46:03 +0000509 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000510
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000511 if (supplied_flags &
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000512 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000513 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000514 PyErr_SetString(PyExc_ValueError,
515 "compile(): unrecognised flags");
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000516 goto cleanup;
Tim Peters6cd6a822001-08-17 22:11:27 +0000517 }
518 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
519
Tim Peters6cd6a822001-08-17 22:11:27 +0000520 if (!dont_inherit) {
521 PyEval_MergeCompilerFlags(&cf);
522 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000523 result = Py_CompileStringFlags(str, filename, start, &cf);
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000524cleanup:
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000525 Py_XDECREF(tmp);
526 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000527}
528
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000529PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000530"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000531\n\
532Compile the source string (a Python module, statement or expression)\n\
533into a code object that can be executed by the exec statement or eval().\n\
534The filename will be used for run-time error messages.\n\
535The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000536single (interactive) statement, or 'eval' to compile an expression.\n\
537The flags argument, if present, controls which future statements influence\n\
538the compilation of the code.\n\
539The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
540the effects of any future statements in effect in the code calling\n\
541compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000542in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000543
Guido van Rossum79f25d91997-04-29 20:08:16 +0000544static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000545builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000546{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000547 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000548
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000549 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000550 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000551 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000552}
553
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000554PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000555"dir([object]) -> list of strings\n"
556"\n"
Georg Brandl871f1bc2007-03-12 13:17:36 +0000557"If called without an argument, return the names in the current scope.\n"
558"Else, return an alphabetized list of names comprising (some of) the attributes\n"
559"of the given object, and of attributes reachable from it.\n"
560"If the object supplies a method named __dir__, it will be used; otherwise\n"
561"the default dir() logic is used and returns:\n"
562" for a module object: the module's attributes.\n"
563" for a class object: its attributes, and recursively the attributes\n"
564" of its bases.\n"
Georg Brandl3bb15672007-03-13 07:23:16 +0000565" for any other object: its attributes, its class's attributes, and\n"
Georg Brandl871f1bc2007-03-12 13:17:36 +0000566" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000567
Guido van Rossum79f25d91997-04-29 20:08:16 +0000568static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000569builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000570{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000571 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000572
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000573 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000574 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000575 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000576}
577
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000578PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000579"divmod(x, y) -> (div, mod)\n\
580\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000581Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000582
583
Guido van Rossum79f25d91997-04-29 20:08:16 +0000584static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000585builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000586{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000587 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000588 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000589 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000590 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000591
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000592 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000593 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000594 if (locals != Py_None && !PyMapping_Check(locals)) {
595 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000596 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000597 }
598 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000599 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000600 "globals must be a real dict; try eval(expr, {}, mapping)"
601 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000602 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000603 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000604 if (globals == Py_None) {
605 globals = PyEval_GetGlobals();
606 if (locals == Py_None)
607 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000608 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000609 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000610 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000611
Georg Brandl77c85e62005-09-15 10:46:13 +0000612 if (globals == NULL || locals == NULL) {
613 PyErr_SetString(PyExc_TypeError,
614 "eval must be given globals and locals "
615 "when called without a frame");
616 return NULL;
617 }
618
Guido van Rossum79f25d91997-04-29 20:08:16 +0000619 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
620 if (PyDict_SetItemString(globals, "__builtins__",
621 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000622 return NULL;
623 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000624
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000625 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000626 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000627 PyErr_SetString(PyExc_TypeError,
628 "code object passed to eval() may not contain free variables");
629 return NULL;
630 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000631 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000632 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000633
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000634 if (!PyString_Check(cmd) &&
635 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000636 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000637 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000638 return NULL;
639 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000640 cf.cf_flags = 0;
641
642#ifdef Py_USING_UNICODE
643 if (PyUnicode_Check(cmd)) {
644 tmp = PyUnicode_AsUTF8String(cmd);
645 if (tmp == NULL)
646 return NULL;
647 cmd = tmp;
648 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
649 }
650#endif
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000651 if (PyString_AsStringAndSize(cmd, &str, NULL)) {
652 Py_XDECREF(tmp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000653 return NULL;
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000654 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000655 while (*str == ' ' || *str == '\t')
656 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000657
Tim Peters9fa96be2001-08-17 23:04:59 +0000658 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000659 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
660 Py_XDECREF(tmp);
661 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000662}
663
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000664PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000665"eval(source[, globals[, locals]]) -> value\n\
666\n\
667Evaluate the source in the context of globals and locals.\n\
668The source may be a string representing a Python expression\n\
669or a code object as returned by compile().\n\
Neal Norwitz477ca1c2006-09-05 02:25:41 +0000670The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000671defaulting to the current globals and locals.\n\
672If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000673
674
Guido van Rossum79f25d91997-04-29 20:08:16 +0000675static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000676builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000677{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000678 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000679 PyObject *globals = Py_None, *locals = Py_None;
680 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000681 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000682 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000683 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000684
Neal Norwitzdf25efe2007-05-23 06:58:36 +0000685 if (Py_Py3kWarningFlag &&
686 PyErr_Warn(PyExc_DeprecationWarning,
687 "execfile() not supported in 3.x") < 0)
688 return NULL;
689
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000690 if (!PyArg_ParseTuple(args, "s|O!O:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000691 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000692 &PyDict_Type, &globals,
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000693 &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000694 return NULL;
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000695 if (locals != Py_None && !PyMapping_Check(locals)) {
696 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
697 return NULL;
698 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000699 if (globals == Py_None) {
700 globals = PyEval_GetGlobals();
701 if (locals == Py_None)
702 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000703 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000704 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000705 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000706 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
707 if (PyDict_SetItemString(globals, "__builtins__",
708 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000709 return NULL;
710 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000711
712 exists = 0;
713 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000714#if defined(PLAN9)
715 {
716 Dir *d;
717
718 if ((d = dirstat(filename))!=nil) {
719 if(d->mode & DMDIR)
720 werrstr("is a directory");
721 else
722 exists = 1;
723 free(d);
724 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000725 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000726#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000727 if (object_exists(filename)) {
728 if (isdir(filename))
729 errno = EISDIR;
730 else
731 exists = 1;
732 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000733#else /* standard Posix */
734 {
735 struct stat s;
736 if (stat(filename, &s) == 0) {
737 if (S_ISDIR(s.st_mode))
Andrew MacIntyreda4d6cb2004-03-29 11:53:38 +0000738# if defined(PYOS_OS2) && defined(PYCC_VACPP)
Martin v. Löwis3484a182002-03-09 12:07:51 +0000739 errno = EOS2ERR;
740# else
741 errno = EISDIR;
742# endif
743 else
744 exists = 1;
745 }
746 }
747#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000748
749 if (exists) {
750 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000751 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000752 Py_END_ALLOW_THREADS
753
754 if (fp == NULL) {
755 exists = 0;
756 }
757 }
758
759 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000760 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000761 return NULL;
762 }
Tim Peters5ba58662001-07-16 02:29:45 +0000763 cf.cf_flags = 0;
764 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000765 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000766 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000767 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000768 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000769 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000770 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000771}
772
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000773PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000774"execfile(filename[, globals[, locals]])\n\
775\n\
776Read and execute a Python script from a file.\n\
777The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000778globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000779
780
Guido van Rossum79f25d91997-04-29 20:08:16 +0000781static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000782builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000783{
Guido van Rossum950ff291998-06-29 13:38:57 +0000784 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000785 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000786
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000787 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000788 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000789#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000790 if (PyUnicode_Check(name)) {
791 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
792 if (name == NULL)
793 return NULL;
794 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000795#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000796
797 if (!PyString_Check(name)) {
798 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000799 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000800 return NULL;
801 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000802 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000803 if (result == NULL && dflt != NULL &&
804 PyErr_ExceptionMatches(PyExc_AttributeError))
805 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000806 PyErr_Clear();
807 Py_INCREF(dflt);
808 result = dflt;
809 }
810 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000811}
812
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000813PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000814"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000815\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000816Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
817When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000818exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000819
820
Guido van Rossum79f25d91997-04-29 20:08:16 +0000821static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000822builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000823{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000824 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000825
Guido van Rossum79f25d91997-04-29 20:08:16 +0000826 d = PyEval_GetGlobals();
Neal Norwitz43bd4db2006-08-12 01:46:42 +0000827 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000828 return d;
829}
830
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000831PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000832"globals() -> dictionary\n\
833\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000834Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000835
836
Guido van Rossum79f25d91997-04-29 20:08:16 +0000837static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000838builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000839{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000840 PyObject *v;
841 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000842
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000843 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000844 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000845#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000846 if (PyUnicode_Check(name)) {
847 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
848 if (name == NULL)
849 return NULL;
850 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000851#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000852
853 if (!PyString_Check(name)) {
854 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000855 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000856 return NULL;
857 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000858 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000859 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000860 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000861 Py_INCREF(Py_False);
862 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000863 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000864 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000865 Py_INCREF(Py_True);
866 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000867}
868
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000869PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000870"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000871\n\
872Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000873(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000874
875
Guido van Rossum79f25d91997-04-29 20:08:16 +0000876static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000877builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000878{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000879 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000880}
881
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000882PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000883"id(object) -> integer\n\
884\n\
885Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000886simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000887
888
Guido van Rossum79f25d91997-04-29 20:08:16 +0000889static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000890builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000891{
892 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000893 PyObject *it; /* the iterator object */
894 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000895 } sequence;
896
Guido van Rossum79f25d91997-04-29 20:08:16 +0000897 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000898 sequence *seqs = NULL, *sqp;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000899 Py_ssize_t n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000900 register int i, j;
901
Guido van Rossum79f25d91997-04-29 20:08:16 +0000902 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000903 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000904 PyErr_SetString(PyExc_TypeError,
905 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000906 return NULL;
907 }
908
Guido van Rossum79f25d91997-04-29 20:08:16 +0000909 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000910 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000911
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000912 if (func == Py_None && n == 1) {
913 /* map(None, S) is the same as list(S). */
914 return PySequence_List(PyTuple_GetItem(args, 1));
915 }
916
Tim Peters4e9afdc2001-05-03 23:54:49 +0000917 /* Get space for sequence descriptors. Must NULL out the iterator
918 * pointers so that jumping to Fail_2 later doesn't see trash.
919 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000920 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
921 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000922 return NULL;
923 }
924 for (i = 0; i < n; ++i) {
925 seqs[i].it = (PyObject*)NULL;
926 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000927 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000928
Tim Peters4e9afdc2001-05-03 23:54:49 +0000929 /* Do a first pass to obtain iterators for the arguments, and set len
930 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000931 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000932 len = 0;
933 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
934 PyObject *curseq;
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000935 Py_ssize_t curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000936
Tim Peters4e9afdc2001-05-03 23:54:49 +0000937 /* Get iterator. */
938 curseq = PyTuple_GetItem(args, i+1);
939 sqp->it = PyObject_GetIter(curseq);
940 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000941 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000942 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000943 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +0000944 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000945 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000946 goto Fail_2;
947 }
948
Tim Peters4e9afdc2001-05-03 23:54:49 +0000949 /* Update len. */
Raymond Hettinger4e2f7142007-12-06 00:56:53 +0000950 curlen = _PyObject_LengthHint(curseq, 8);
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000951 if (curlen > len)
952 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000953 }
954
Tim Peters4e9afdc2001-05-03 23:54:49 +0000955 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000956 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000957 goto Fail_2;
958
Tim Peters4e9afdc2001-05-03 23:54:49 +0000959 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +0000960 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000961 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000962 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000963
Guido van Rossum79f25d91997-04-29 20:08:16 +0000964 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +0000965 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000966 else if ((alist = PyTuple_New(n)) == NULL)
967 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000968
969 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000970 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000971 Py_INCREF(Py_None);
972 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000973 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000974 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000975 item = PyIter_Next(sqp->it);
976 if (item)
977 ++numactive;
978 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000979 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +0000980 Py_XDECREF(alist);
981 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000982 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000983 Py_INCREF(Py_None);
984 item = Py_None;
985 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000986 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000987 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000988 if (alist)
989 PyTuple_SET_ITEM(alist, j, item);
990 else
Guido van Rossum2d951851994-08-29 12:52:16 +0000991 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000992 }
993
Guido van Rossum32120311995-07-10 13:52:21 +0000994 if (!alist)
995 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +0000996
Tim Peters4e9afdc2001-05-03 23:54:49 +0000997 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000998 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +0000999 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001000 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001001
Guido van Rossum79f25d91997-04-29 20:08:16 +00001002 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +00001003 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001004 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001005 value = PyEval_CallObject(func, alist);
1006 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001007 if (value == NULL)
1008 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001009 }
1010 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +00001011 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +00001012 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +00001013 if (status < 0)
1014 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001015 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001016 else if (PyList_SetItem(result, i, value) < 0)
1017 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001018 }
1019
Guido van Rossumfa4ac711998-07-10 17:37:30 +00001020 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
1021 goto Fail_1;
1022
Tim Peters4e9afdc2001-05-03 23:54:49 +00001023 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001024
Guido van Rossum12d12c51993-10-26 17:58:25 +00001025Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001026 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001027Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +00001028 result = NULL;
1029Succeed:
1030 assert(seqs);
1031 for (i = 0; i < n; ++i)
1032 Py_XDECREF(seqs[i].it);
1033 PyMem_DEL(seqs);
1034 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001035}
1036
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001037PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001038"map(function, sequence[, sequence, ...]) -> list\n\
1039\n\
1040Return a list of the results of applying the function to the items of\n\
1041the argument sequence(s). If more than one sequence is given, the\n\
1042function is called with an argument list consisting of the corresponding\n\
1043item of each sequence, substituting None for missing values when not all\n\
1044sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001045the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001046
1047
Guido van Rossum79f25d91997-04-29 20:08:16 +00001048static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001049builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001050{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001051 PyObject *v;
1052 PyObject *name;
1053 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001054
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001055 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001056 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001057 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001058 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001059 Py_INCREF(Py_None);
1060 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001061}
1062
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001063PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001064"setattr(object, name, value)\n\
1065\n\
1066Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001067``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001068
1069
Guido van Rossum79f25d91997-04-29 20:08:16 +00001070static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001071builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001072{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001073 PyObject *v;
1074 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001075
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001076 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001077 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001078 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001079 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001080 Py_INCREF(Py_None);
1081 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001082}
1083
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001084PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001085"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001086\n\
1087Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001088``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001089
1090
Guido van Rossum79f25d91997-04-29 20:08:16 +00001091static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001092builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001093{
Guido van Rossum9bfef441993-03-29 10:43:31 +00001094 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001095
Guido van Rossum79f25d91997-04-29 20:08:16 +00001096 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001097 if (x == -1)
1098 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001099 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001100}
1101
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001102PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001103"hash(object) -> integer\n\
1104\n\
1105Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001106the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001107
1108
Guido van Rossum79f25d91997-04-29 20:08:16 +00001109static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001110builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001111{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001112 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001113 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001114
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001115 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001116 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001117 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001118 "hex() argument can't be converted to hex");
1119 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001120 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001121 res = (*nb->nb_hex)(v);
1122 if (res && !PyString_Check(res)) {
1123 PyErr_Format(PyExc_TypeError,
1124 "__hex__ returned non-string (type %.200s)",
1125 res->ob_type->tp_name);
1126 Py_DECREF(res);
1127 return NULL;
1128 }
1129 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001130}
1131
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001132PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001133"hex(number) -> string\n\
1134\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001135Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001136
1137
Tim Petersdbd9ba62000-07-09 03:09:57 +00001138static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001139
Guido van Rossum79f25d91997-04-29 20:08:16 +00001140static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001141builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001142{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001143 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001144 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001145 PyObject *res;
1146 PyObject *globals, *locals;
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001147 PyCompilerFlags cf;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001148
1149 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001150 if (line == NULL)
1151 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001152 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001153 return NULL;
1154 while (*str == ' ' || *str == '\t')
1155 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001156 globals = PyEval_GetGlobals();
1157 locals = PyEval_GetLocals();
1158 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
1159 if (PyDict_SetItemString(globals, "__builtins__",
1160 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +00001161 return NULL;
1162 }
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001163 cf.cf_flags = 0;
1164 PyEval_MergeCompilerFlags(&cf);
1165 res = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001166 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001167 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001168}
1169
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001170PyDoc_STRVAR(input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001171"input([prompt]) -> value\n\
1172\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001173Equivalent to eval(raw_input(prompt)).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001174
1175
Guido van Rossume8811f81997-02-14 15:48:05 +00001176static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001177builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001178{
1179 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001180 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001181 return NULL;
Jeremy Hylton4c989dd2004-08-07 19:20:05 +00001182 if (!PyString_CheckExact(s)) {
1183 PyErr_SetString(PyExc_TypeError,
1184 "can't intern subclass of string");
1185 return NULL;
1186 }
Guido van Rossume8811f81997-02-14 15:48:05 +00001187 Py_INCREF(s);
1188 PyString_InternInPlace(&s);
1189 return s;
1190}
1191
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001192PyDoc_STRVAR(intern_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001193"intern(string) -> string\n\
1194\n\
1195``Intern'' the given string. This enters the string in the (global)\n\
1196table of interned strings whose purpose is to speed up dictionary lookups.\n\
1197Return the string itself or the previously interned string object with the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001198same value.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001199
1200
Guido van Rossum79f25d91997-04-29 20:08:16 +00001201static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001202builtin_iter(PyObject *self, PyObject *args)
1203{
1204 PyObject *v, *w = NULL;
1205
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001206 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001207 return NULL;
1208 if (w == NULL)
1209 return PyObject_GetIter(v);
1210 if (!PyCallable_Check(v)) {
1211 PyErr_SetString(PyExc_TypeError,
1212 "iter(v, w): v must be callable");
1213 return NULL;
1214 }
1215 return PyCallIter_New(v, w);
1216}
1217
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001218PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001219"iter(collection) -> iterator\n\
1220iter(callable, sentinel) -> iterator\n\
1221\n\
1222Get an iterator from an object. In the first form, the argument must\n\
1223supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001224In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001225
1226
1227static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001228builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001229{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001230 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001231
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001232 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001233 if (res < 0 && PyErr_Occurred())
1234 return NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001235 return PyInt_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001236}
1237
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001238PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001239"len(object) -> integer\n\
1240\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001241Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001242
1243
Guido van Rossum79f25d91997-04-29 20:08:16 +00001244static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001245builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001246{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001247 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001248
Guido van Rossum79f25d91997-04-29 20:08:16 +00001249 d = PyEval_GetLocals();
Neal Norwitz43bd4db2006-08-12 01:46:42 +00001250 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001251 return d;
1252}
1253
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001254PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001255"locals() -> dictionary\n\
1256\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001257Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001258
1259
Guido van Rossum79f25d91997-04-29 20:08:16 +00001260static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001261min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001262{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001263 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001264 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001265
Guido van Rossum79f25d91997-04-29 20:08:16 +00001266 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001267 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001268 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001269 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001270
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001271 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1272 keyfunc = PyDict_GetItemString(kwds, "key");
1273 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001274 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001275 "%s() got an unexpected keyword argument", name);
1276 return NULL;
1277 }
Guido van Rossum1d9a9ea2008-01-23 20:19:01 +00001278 Py_INCREF(keyfunc);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001279 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001280
Tim Petersc3074532001-05-03 07:00:32 +00001281 it = PyObject_GetIter(v);
Guido van Rossum1d9a9ea2008-01-23 20:19:01 +00001282 if (it == NULL) {
1283 Py_XDECREF(keyfunc);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001284 return NULL;
Guido van Rossum1d9a9ea2008-01-23 20:19:01 +00001285 }
Tim Petersc3074532001-05-03 07:00:32 +00001286
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001287 maxitem = NULL; /* the result */
1288 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001289 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001290 /* get the value from the key function */
1291 if (keyfunc != NULL) {
1292 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1293 if (val == NULL)
1294 goto Fail_it_item;
1295 }
1296 /* no key function; the value is the item */
1297 else {
1298 val = item;
1299 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001300 }
Tim Petersc3074532001-05-03 07:00:32 +00001301
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001302 /* maximum value and item are unset; set them */
1303 if (maxval == NULL) {
1304 maxitem = item;
1305 maxval = val;
1306 }
1307 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001308 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001309 int cmp = PyObject_RichCompareBool(val, maxval, op);
1310 if (cmp < 0)
1311 goto Fail_it_item_and_val;
1312 else if (cmp > 0) {
1313 Py_DECREF(maxval);
1314 Py_DECREF(maxitem);
1315 maxval = val;
1316 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001317 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001318 else {
1319 Py_DECREF(item);
1320 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001321 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001322 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001323 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001324 if (PyErr_Occurred())
1325 goto Fail_it;
1326 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001327 PyErr_Format(PyExc_ValueError,
1328 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001329 assert(maxitem == NULL);
1330 }
1331 else
1332 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001333 Py_DECREF(it);
Guido van Rossum1d9a9ea2008-01-23 20:19:01 +00001334 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001335 return maxitem;
1336
1337Fail_it_item_and_val:
1338 Py_DECREF(val);
1339Fail_it_item:
1340 Py_DECREF(item);
1341Fail_it:
1342 Py_XDECREF(maxval);
1343 Py_XDECREF(maxitem);
1344 Py_DECREF(it);
Guido van Rossum1d9a9ea2008-01-23 20:19:01 +00001345 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001346 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001347}
1348
Guido van Rossum79f25d91997-04-29 20:08:16 +00001349static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001350builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001351{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001352 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001353}
1354
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001355PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001356"min(iterable[, key=func]) -> value\n\
1357min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001358\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001359With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001360With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001361
1362
Guido van Rossum79f25d91997-04-29 20:08:16 +00001363static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001364builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001365{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001366 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001367}
1368
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001369PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001370"max(iterable[, key=func]) -> value\n\
1371max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001372\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001373With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001374With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001375
1376
Guido van Rossum79f25d91997-04-29 20:08:16 +00001377static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001378builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001379{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001380 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001381 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001382
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001383 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1384 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001385 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001386 "oct() argument can't be converted to oct");
1387 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001388 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001389 res = (*nb->nb_oct)(v);
1390 if (res && !PyString_Check(res)) {
1391 PyErr_Format(PyExc_TypeError,
1392 "__oct__ returned non-string (type %.200s)",
1393 res->ob_type->tp_name);
1394 Py_DECREF(res);
1395 return NULL;
1396 }
1397 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001398}
1399
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001400PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001401"oct(number) -> string\n\
1402\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001403Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001404
1405
Guido van Rossum79f25d91997-04-29 20:08:16 +00001406static PyObject *
Neal Norwitzc4edb0e2006-05-02 04:43:14 +00001407builtin_open(PyObject *self, PyObject *args, PyObject *kwds)
1408{
1409 return PyObject_Call((PyObject*)&PyFile_Type, args, kwds);
1410}
1411
1412PyDoc_STRVAR(open_doc,
1413"open(name[, mode[, buffering]]) -> file object\n\
1414\n\
Skip Montanaro4e3ebe02007-12-08 14:37:43 +00001415Open a file using the file() type, returns a file object. This is the\n\
1416preferred way to open a file.");
Neal Norwitzc4edb0e2006-05-02 04:43:14 +00001417
1418
1419static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001420builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001421{
Guido van Rossum09095f32000-03-10 23:00:52 +00001422 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001423 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001424
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001425 if (PyString_Check(obj)) {
1426 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001427 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001428 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001429 return PyInt_FromLong(ord);
1430 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001431#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001432 } else if (PyUnicode_Check(obj)) {
1433 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001434 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001435 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001436 return PyInt_FromLong(ord);
1437 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001438#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001439 } else {
1440 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001441 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001442 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001443 return NULL;
1444 }
1445
Guido van Rossumad991772001-01-12 16:03:05 +00001446 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001447 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001448 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001449 size);
1450 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001451}
1452
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001453PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001454"ord(c) -> integer\n\
1455\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001456Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001457
1458
Guido van Rossum79f25d91997-04-29 20:08:16 +00001459static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001460builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001461{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001462 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001463
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001464 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001465 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001466 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001467}
1468
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001469PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001470"pow(x, y[, z]) -> number\n\
1471\n\
1472With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001473equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001474
1475
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001476
1477/* Return number of items in range (lo, hi, step), when arguments are
1478 * PyInt or PyLong objects. step > 0 required. Return a value < 0 if
1479 * & only if the true value is too large to fit in a signed long.
1480 * Arguments MUST return 1 with either PyInt_Check() or
1481 * PyLong_Check(). Return -1 when there is an error.
1482 */
1483static long
1484get_len_of_range_longs(PyObject *lo, PyObject *hi, PyObject *step)
1485{
1486 /* -------------------------------------------------------------
1487 Algorithm is equal to that of get_len_of_range(), but it operates
1488 on PyObjects (which are assumed to be PyLong or PyInt objects).
1489 ---------------------------------------------------------------*/
1490 long n;
1491 PyObject *diff = NULL;
1492 PyObject *one = NULL;
1493 PyObject *tmp1 = NULL, *tmp2 = NULL, *tmp3 = NULL;
1494 /* holds sub-expression evaluations */
1495
1496 /* if (lo >= hi), return length of 0. */
1497 if (PyObject_Compare(lo, hi) >= 0)
1498 return 0;
1499
1500 if ((one = PyLong_FromLong(1L)) == NULL)
1501 goto Fail;
1502
1503 if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL)
1504 goto Fail;
1505
1506 if ((diff = PyNumber_Subtract(tmp1, one)) == NULL)
1507 goto Fail;
1508
1509 if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL)
1510 goto Fail;
1511
1512 if ((tmp3 = PyNumber_Add(tmp2, one)) == NULL)
1513 goto Fail;
1514
1515 n = PyLong_AsLong(tmp3);
1516 if (PyErr_Occurred()) { /* Check for Overflow */
1517 PyErr_Clear();
1518 goto Fail;
1519 }
1520
1521 Py_DECREF(tmp3);
1522 Py_DECREF(tmp2);
1523 Py_DECREF(diff);
1524 Py_DECREF(tmp1);
1525 Py_DECREF(one);
1526 return n;
1527
1528 Fail:
1529 Py_XDECREF(tmp3);
1530 Py_XDECREF(tmp2);
1531 Py_XDECREF(diff);
1532 Py_XDECREF(tmp1);
1533 Py_XDECREF(one);
1534 return -1;
1535}
1536
1537/* An extension of builtin_range() that handles the case when PyLong
1538 * arguments are given. */
1539static PyObject *
1540handle_range_longs(PyObject *self, PyObject *args)
1541{
1542 PyObject *ilow;
Tim Peters874e1f72003-04-13 22:13:08 +00001543 PyObject *ihigh = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001544 PyObject *istep = NULL;
Tim Peters874e1f72003-04-13 22:13:08 +00001545
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001546 PyObject *curnum = NULL;
1547 PyObject *v = NULL;
1548 long bign;
1549 int i, n;
1550 int cmp_result;
1551
Tim Peters874e1f72003-04-13 22:13:08 +00001552 PyObject *zero = PyLong_FromLong(0);
1553
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001554 if (zero == NULL)
1555 return NULL;
1556
Tim Peters874e1f72003-04-13 22:13:08 +00001557 if (!PyArg_UnpackTuple(args, "range", 1, 3, &ilow, &ihigh, &istep)) {
1558 Py_DECREF(zero);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001559 return NULL;
1560 }
1561
Tim Peters874e1f72003-04-13 22:13:08 +00001562 /* Figure out which way we were called, supply defaults, and be
1563 * sure to incref everything so that the decrefs at the end
1564 * are correct.
1565 */
1566 assert(ilow != NULL);
1567 if (ihigh == NULL) {
1568 /* only 1 arg -- it's the upper limit */
1569 ihigh = ilow;
1570 ilow = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001571 }
Tim Peters874e1f72003-04-13 22:13:08 +00001572 assert(ihigh != NULL);
1573 Py_INCREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001574
Tim Peters874e1f72003-04-13 22:13:08 +00001575 /* ihigh correct now; do ilow */
1576 if (ilow == NULL)
1577 ilow = zero;
1578 Py_INCREF(ilow);
1579
1580 /* ilow and ihigh correct now; do istep */
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001581 if (istep == NULL) {
1582 istep = PyLong_FromLong(1L);
1583 if (istep == NULL)
1584 goto Fail;
1585 }
1586 else {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001587 Py_INCREF(istep);
1588 }
1589
Tim Peters874e1f72003-04-13 22:13:08 +00001590 if (!PyInt_Check(ilow) && !PyLong_Check(ilow)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001591 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001592 "range() integer start argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001593 ilow->ob_type->tp_name);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001594 goto Fail;
1595 }
1596
Tim Peters874e1f72003-04-13 22:13:08 +00001597 if (!PyInt_Check(ihigh) && !PyLong_Check(ihigh)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001598 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001599 "range() integer end argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001600 ihigh->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001601 goto Fail;
1602 }
1603
1604 if (!PyInt_Check(istep) && !PyLong_Check(istep)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001605 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001606 "range() integer step argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001607 istep->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001608 goto Fail;
1609 }
1610
1611 if (PyObject_Cmp(istep, zero, &cmp_result) == -1)
1612 goto Fail;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001613 if (cmp_result == 0) {
1614 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001615 "range() step argument must not be zero");
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001616 goto Fail;
1617 }
1618
1619 if (cmp_result > 0)
1620 bign = get_len_of_range_longs(ilow, ihigh, istep);
1621 else {
1622 PyObject *neg_istep = PyNumber_Negative(istep);
1623 if (neg_istep == NULL)
1624 goto Fail;
1625 bign = get_len_of_range_longs(ihigh, ilow, neg_istep);
1626 Py_DECREF(neg_istep);
1627 }
1628
1629 n = (int)bign;
1630 if (bign < 0 || (long)n != bign) {
1631 PyErr_SetString(PyExc_OverflowError,
1632 "range() result has too many items");
1633 goto Fail;
1634 }
1635
1636 v = PyList_New(n);
1637 if (v == NULL)
1638 goto Fail;
1639
1640 curnum = ilow;
1641 Py_INCREF(curnum);
1642
1643 for (i = 0; i < n; i++) {
1644 PyObject *w = PyNumber_Long(curnum);
1645 PyObject *tmp_num;
1646 if (w == NULL)
1647 goto Fail;
1648
1649 PyList_SET_ITEM(v, i, w);
1650
1651 tmp_num = PyNumber_Add(curnum, istep);
1652 if (tmp_num == NULL)
1653 goto Fail;
1654
1655 Py_DECREF(curnum);
1656 curnum = tmp_num;
1657 }
Tim Peters874e1f72003-04-13 22:13:08 +00001658 Py_DECREF(ilow);
1659 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001660 Py_DECREF(istep);
1661 Py_DECREF(zero);
Tim Peters874e1f72003-04-13 22:13:08 +00001662 Py_DECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001663 return v;
1664
1665 Fail:
Tim Peters874e1f72003-04-13 22:13:08 +00001666 Py_DECREF(ilow);
1667 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001668 Py_XDECREF(istep);
Tim Peters874e1f72003-04-13 22:13:08 +00001669 Py_DECREF(zero);
1670 Py_XDECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001671 Py_XDECREF(v);
1672 return NULL;
1673}
1674
Guido van Rossum124eff01999-02-23 16:11:01 +00001675/* Return number of items in range/xrange (lo, hi, step). step > 0
1676 * required. Return a value < 0 if & only if the true value is too
1677 * large to fit in a signed long.
1678 */
1679static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001680get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001681{
1682 /* -------------------------------------------------------------
1683 If lo >= hi, the range is empty.
1684 Else if n values are in the range, the last one is
1685 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1686 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1687 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1688 the RHS is non-negative and so truncation is the same as the
1689 floor. Letting M be the largest positive long, the worst case
1690 for the RHS numerator is hi=M, lo=-M-1, and then
1691 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1692 precision to compute the RHS exactly.
1693 ---------------------------------------------------------------*/
1694 long n = 0;
1695 if (lo < hi) {
1696 unsigned long uhi = (unsigned long)hi;
1697 unsigned long ulo = (unsigned long)lo;
1698 unsigned long diff = uhi - ulo - 1;
1699 n = (long)(diff / (unsigned long)step + 1);
1700 }
1701 return n;
1702}
1703
Guido van Rossum79f25d91997-04-29 20:08:16 +00001704static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001705builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001706{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001707 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001708 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001709 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001710
Guido van Rossum79f25d91997-04-29 20:08:16 +00001711 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001712
Guido van Rossum79f25d91997-04-29 20:08:16 +00001713 if (PyTuple_Size(args) <= 1) {
1714 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001715 "l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001716 &ihigh)) {
1717 PyErr_Clear();
1718 return handle_range_longs(self, args);
1719 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001720 }
1721 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001722 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001723 "ll|l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001724 &ilow, &ihigh, &istep)) {
1725 PyErr_Clear();
1726 return handle_range_longs(self, args);
1727 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001728 }
1729 if (istep == 0) {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001730 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001731 "range() step argument must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001732 return NULL;
1733 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001734 if (istep > 0)
1735 bign = get_len_of_range(ilow, ihigh, istep);
1736 else
1737 bign = get_len_of_range(ihigh, ilow, -istep);
1738 n = (int)bign;
1739 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001740 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001741 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001742 return NULL;
1743 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001744 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001745 if (v == NULL)
1746 return NULL;
1747 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001748 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001749 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001750 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001751 return NULL;
1752 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001753 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001754 ilow += istep;
1755 }
1756 return v;
1757}
1758
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001759PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001760"range([start,] stop[, step]) -> list of integers\n\
1761\n\
1762Return a list containing an arithmetic progression of integers.\n\
1763range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1764When step is given, it specifies the increment (or decrement).\n\
1765For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001766These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001767
1768
Guido van Rossum79f25d91997-04-29 20:08:16 +00001769static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001770builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001771{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001772 PyObject *v = NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001773 PyObject *fin = PySys_GetObject("stdin");
1774 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001775
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001776 if (!PyArg_UnpackTuple(args, "[raw_]input", 0, 1, &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001777 return NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001778
1779 if (fin == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001780 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdin");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001781 return NULL;
1782 }
1783 if (fout == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001784 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdout");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001785 return NULL;
1786 }
1787 if (PyFile_SoftSpace(fout, 0)) {
1788 if (PyFile_WriteString(" ", fout) != 0)
1789 return NULL;
1790 }
Georg Brandl7e3ba2a2006-08-06 08:23:54 +00001791 if (PyFile_AsFile(fin) && PyFile_AsFile(fout)
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001792 && isatty(fileno(PyFile_AsFile(fin)))
1793 && isatty(fileno(PyFile_AsFile(fout)))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001794 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001795 char *prompt;
1796 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001797 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001798 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001799 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001800 if (po == NULL)
1801 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001802 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001803 if (prompt == NULL)
1804 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001805 }
1806 else {
1807 po = NULL;
1808 prompt = "";
1809 }
Michael W. Hudson52db5192004-08-02 13:21:09 +00001810 s = PyOS_Readline(PyFile_AsFile(fin), PyFile_AsFile(fout),
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001811 prompt);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001812 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001813 if (s == NULL) {
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001814 if (!PyErr_Occurred())
1815 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001816 return NULL;
1817 }
1818 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001819 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001820 result = NULL;
1821 }
1822 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001823 size_t len = strlen(s);
Martin v. Löwisb1ed7fa2006-04-13 07:52:27 +00001824 if (len > PY_SSIZE_T_MAX) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001825 PyErr_SetString(PyExc_OverflowError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001826 "[raw_]input: input too long");
Guido van Rossum106f2da2000-06-28 21:12:25 +00001827 result = NULL;
1828 }
1829 else {
Martin v. Löwisb1ed7fa2006-04-13 07:52:27 +00001830 result = PyString_FromStringAndSize(s, len-1);
Guido van Rossum106f2da2000-06-28 21:12:25 +00001831 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001832 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001833 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001834 return result;
1835 }
Guido van Rossum90933611991-06-07 16:10:43 +00001836 if (v != NULL) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001837 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001838 return NULL;
1839 }
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001840 return PyFile_GetLine(fin, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001841}
1842
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001843PyDoc_STRVAR(raw_input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001844"raw_input([prompt]) -> string\n\
1845\n\
1846Read a string from standard input. The trailing newline is stripped.\n\
1847If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1848On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001849is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001850
1851
Guido van Rossum79f25d91997-04-29 20:08:16 +00001852static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001853builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001854{
Tim Peters15d81ef2001-05-04 04:39:21 +00001855 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001856
Neal Norwitzdf25efe2007-05-23 06:58:36 +00001857 if (Py_Py3kWarningFlag &&
1858 PyErr_Warn(PyExc_DeprecationWarning,
1859 "reduce() not supported in 3.x") < 0)
1860 return NULL;
1861
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001862 if (!PyArg_UnpackTuple(args, "reduce", 2, 3, &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001863 return NULL;
1864 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001865 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001866
Tim Peters15d81ef2001-05-04 04:39:21 +00001867 it = PyObject_GetIter(seq);
1868 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001869 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001870 "reduce() arg 2 must support iteration");
1871 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001872 return NULL;
1873 }
1874
Guido van Rossum79f25d91997-04-29 20:08:16 +00001875 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001876 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001877
Tim Peters15d81ef2001-05-04 04:39:21 +00001878 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001879 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001880
1881 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001882 Py_DECREF(args);
1883 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001884 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001885 }
1886
Tim Peters15d81ef2001-05-04 04:39:21 +00001887 op2 = PyIter_Next(it);
1888 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001889 if (PyErr_Occurred())
1890 goto Fail;
1891 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001892 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001893
Guido van Rossum2d951851994-08-29 12:52:16 +00001894 if (result == NULL)
1895 result = op2;
1896 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001897 PyTuple_SetItem(args, 0, result);
1898 PyTuple_SetItem(args, 1, op2);
1899 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001900 goto Fail;
1901 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001902 }
1903
Guido van Rossum79f25d91997-04-29 20:08:16 +00001904 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001905
Guido van Rossum2d951851994-08-29 12:52:16 +00001906 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001907 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001908 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001909
Tim Peters15d81ef2001-05-04 04:39:21 +00001910 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001911 return result;
1912
Guido van Rossum2d951851994-08-29 12:52:16 +00001913Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001914 Py_XDECREF(args);
1915 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001916 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001917 return NULL;
1918}
1919
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001920PyDoc_STRVAR(reduce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001921"reduce(function, sequence[, initial]) -> value\n\
1922\n\
1923Apply a function of two arguments cumulatively to the items of a sequence,\n\
1924from left to right, so as to reduce the sequence to a single value.\n\
1925For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1926((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1927of the sequence in the calculation, and serves as a default when the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001928sequence is empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001929
1930
Guido van Rossum79f25d91997-04-29 20:08:16 +00001931static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001932builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001933{
Neal Norwitzdf25efe2007-05-23 06:58:36 +00001934 if (Py_Py3kWarningFlag &&
1935 PyErr_Warn(PyExc_DeprecationWarning,
1936 "reload() not supported in 3.x") < 0)
1937 return NULL;
1938
Guido van Rossum79f25d91997-04-29 20:08:16 +00001939 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001940}
1941
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001942PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001943"reload(module) -> module\n\
1944\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001945Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001946
1947
Guido van Rossum79f25d91997-04-29 20:08:16 +00001948static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001949builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001950{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001951 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001952}
1953
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001954PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001955"repr(object) -> string\n\
1956\n\
1957Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001958For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001959
1960
Guido van Rossum79f25d91997-04-29 20:08:16 +00001961static PyObject *
Georg Brandlccadf842006-03-31 18:54:53 +00001962builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001963{
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001964 double number;
1965 double f;
1966 int ndigits = 0;
1967 int i;
Georg Brandlccadf842006-03-31 18:54:53 +00001968 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001969
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001970 if (!PyArg_ParseTupleAndKeywords(args, kwds, "d|i:round",
1971 kwlist, &number, &ndigits))
1972 return NULL;
1973 f = 1.0;
1974 i = abs(ndigits);
1975 while (--i >= 0)
1976 f = f*10.0;
1977 if (ndigits < 0)
1978 number /= f;
1979 else
1980 number *= f;
1981 if (number >= 0.0)
1982 number = floor(number + 0.5);
1983 else
1984 number = ceil(number - 0.5);
1985 if (ndigits < 0)
1986 number *= f;
1987 else
1988 number /= f;
1989 return PyFloat_FromDouble(number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001990}
1991
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001992PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001993"round(number[, ndigits]) -> floating point number\n\
1994\n\
1995Round a number to a given precision in decimal digits (default 0 digits).\n\
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001996This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001997
Raymond Hettinger64958a12003-12-17 20:43:33 +00001998static PyObject *
1999builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
2000{
2001 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
2002 PyObject *callable;
Martin v. Löwis15e62742006-02-27 16:46:16 +00002003 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00002004 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002005
Neal Norwitz6f0d4792005-12-15 06:40:36 +00002006 /* args 1-4 should match listsort in Objects/listobject.c */
Armin Rigo71d7e702005-09-20 18:13:03 +00002007 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
2008 kwlist, &seq, &compare, &keyfunc, &reverse))
2009 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002010
2011 newlist = PySequence_List(seq);
2012 if (newlist == NULL)
2013 return NULL;
2014
2015 callable = PyObject_GetAttrString(newlist, "sort");
2016 if (callable == NULL) {
2017 Py_DECREF(newlist);
2018 return NULL;
2019 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002020
Raymond Hettinger64958a12003-12-17 20:43:33 +00002021 newargs = PyTuple_GetSlice(args, 1, 4);
2022 if (newargs == NULL) {
2023 Py_DECREF(newlist);
2024 Py_DECREF(callable);
2025 return NULL;
2026 }
2027
2028 v = PyObject_Call(callable, newargs, kwds);
2029 Py_DECREF(newargs);
2030 Py_DECREF(callable);
2031 if (v == NULL) {
2032 Py_DECREF(newlist);
2033 return NULL;
2034 }
2035 Py_DECREF(v);
2036 return newlist;
2037}
2038
2039PyDoc_STRVAR(sorted_doc,
2040"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002041
Guido van Rossum79f25d91997-04-29 20:08:16 +00002042static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002043builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002044{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002045 PyObject *v = NULL;
2046 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002047
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002048 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002049 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00002050 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002051 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002052 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002053 if (!PyErr_Occurred())
2054 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002055 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002056 }
2057 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00002058 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00002059 }
2060 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002061 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00002062 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002063 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00002064 "vars() argument must have __dict__ attribute");
2065 return NULL;
2066 }
2067 }
2068 return d;
2069}
2070
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002071PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002072"vars([object]) -> dictionary\n\
2073\n\
2074Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002075With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002076
Alex Martellia70b1912003-04-22 08:12:33 +00002077
2078static PyObject*
2079builtin_sum(PyObject *self, PyObject *args)
2080{
2081 PyObject *seq;
2082 PyObject *result = NULL;
2083 PyObject *temp, *item, *iter;
2084
Raymond Hettinger5cf63942003-10-25 06:41:37 +00002085 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00002086 return NULL;
2087
2088 iter = PyObject_GetIter(seq);
2089 if (iter == NULL)
2090 return NULL;
2091
2092 if (result == NULL) {
2093 result = PyInt_FromLong(0);
2094 if (result == NULL) {
2095 Py_DECREF(iter);
2096 return NULL;
2097 }
2098 } else {
2099 /* reject string values for 'start' parameter */
2100 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
2101 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002102 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00002103 Py_DECREF(iter);
2104 return NULL;
2105 }
Alex Martelli41c9f882003-04-22 09:24:48 +00002106 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00002107 }
2108
Raymond Hettinger3f8caa32007-10-24 01:28:33 +00002109#ifndef SLOW_SUM
2110 /* Fast addition by keeping temporary sums in C instead of new Python objects.
2111 Assumes all inputs are the same type. If the assumption fails, default
2112 to the more general routine.
2113 */
2114 if (PyInt_CheckExact(result)) {
2115 long i_result = PyInt_AS_LONG(result);
2116 Py_DECREF(result);
2117 result = NULL;
2118 while(result == NULL) {
2119 item = PyIter_Next(iter);
2120 if (item == NULL) {
2121 Py_DECREF(iter);
2122 if (PyErr_Occurred())
2123 return NULL;
2124 return PyInt_FromLong(i_result);
2125 }
2126 if (PyInt_CheckExact(item)) {
2127 long b = PyInt_AS_LONG(item);
2128 long x = i_result + b;
2129 if ((x^i_result) >= 0 || (x^b) >= 0) {
2130 i_result = x;
2131 Py_DECREF(item);
2132 continue;
2133 }
2134 }
2135 /* Either overflowed or is not an int. Restore real objects and process normally */
2136 result = PyInt_FromLong(i_result);
2137 temp = PyNumber_Add(result, item);
2138 Py_DECREF(result);
2139 Py_DECREF(item);
2140 result = temp;
2141 if (result == NULL) {
2142 Py_DECREF(iter);
2143 return NULL;
2144 }
2145 }
2146 }
2147
2148 if (PyFloat_CheckExact(result)) {
2149 double f_result = PyFloat_AS_DOUBLE(result);
2150 Py_DECREF(result);
2151 result = NULL;
2152 while(result == NULL) {
2153 item = PyIter_Next(iter);
2154 if (item == NULL) {
2155 Py_DECREF(iter);
2156 if (PyErr_Occurred())
2157 return NULL;
2158 return PyFloat_FromDouble(f_result);
2159 }
2160 if (PyFloat_CheckExact(item)) {
2161 PyFPE_START_PROTECT("add", return 0)
2162 f_result += PyFloat_AS_DOUBLE(item);
Raymond Hettinger3a8daf52007-10-24 02:05:51 +00002163 PyFPE_END_PROTECT(f_result)
Raymond Hettingera45c4872007-10-25 02:26:58 +00002164 Py_DECREF(item);
Raymond Hettinger3a8daf52007-10-24 02:05:51 +00002165 continue;
2166 }
2167 if (PyInt_CheckExact(item)) {
2168 PyFPE_START_PROTECT("add", return 0)
2169 f_result += (double)PyInt_AS_LONG(item);
2170 PyFPE_END_PROTECT(f_result)
Raymond Hettingera45c4872007-10-25 02:26:58 +00002171 Py_DECREF(item);
Raymond Hettinger3f8caa32007-10-24 01:28:33 +00002172 continue;
2173 }
2174 result = PyFloat_FromDouble(f_result);
2175 temp = PyNumber_Add(result, item);
2176 Py_DECREF(result);
2177 Py_DECREF(item);
2178 result = temp;
2179 if (result == NULL) {
2180 Py_DECREF(iter);
2181 return NULL;
2182 }
2183 }
2184 }
2185#endif
2186
Alex Martellia70b1912003-04-22 08:12:33 +00002187 for(;;) {
2188 item = PyIter_Next(iter);
2189 if (item == NULL) {
2190 /* error, or end-of-sequence */
2191 if (PyErr_Occurred()) {
2192 Py_DECREF(result);
2193 result = NULL;
2194 }
2195 break;
2196 }
Alex Martellia253e182003-10-25 23:24:14 +00002197 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00002198 Py_DECREF(result);
2199 Py_DECREF(item);
2200 result = temp;
2201 if (result == NULL)
2202 break;
2203 }
2204 Py_DECREF(iter);
2205 return result;
2206}
2207
2208PyDoc_STRVAR(sum_doc,
Georg Brandl8134d062006-10-12 12:33:07 +00002209"sum(sequence[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00002210\n\
2211Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
Georg Brandl8134d062006-10-12 12:33:07 +00002212of parameter 'start' (which defaults to 0). When the sequence is\n\
2213empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00002214
2215
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002216static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002217builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002218{
2219 PyObject *inst;
2220 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00002221 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002222
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002223 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002224 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002225
Guido van Rossum823649d2001-03-21 18:40:58 +00002226 retval = PyObject_IsInstance(inst, cls);
2227 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00002228 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002229 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002230}
2231
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002232PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002233"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002234\n\
2235Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002236With a type as second argument, return whether that is the object's type.\n\
2237The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002238isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002239
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002240
2241static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002242builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002243{
2244 PyObject *derived;
2245 PyObject *cls;
2246 int retval;
2247
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002248 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002249 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002250
Guido van Rossum823649d2001-03-21 18:40:58 +00002251 retval = PyObject_IsSubclass(derived, cls);
2252 if (retval < 0)
2253 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002254 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002255}
2256
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002257PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002258"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002259\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002260Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2261When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2262is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002263
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002264
Barry Warsawbd599b52000-08-03 15:45:29 +00002265static PyObject*
2266builtin_zip(PyObject *self, PyObject *args)
2267{
2268 PyObject *ret;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002269 const Py_ssize_t itemsize = PySequence_Length(args);
2270 Py_ssize_t i;
Tim Peters8572b4f2001-05-06 01:05:02 +00002271 PyObject *itlist; /* tuple of iterators */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002272 Py_ssize_t len; /* guess at result length */
Barry Warsawbd599b52000-08-03 15:45:29 +00002273
Raymond Hettingereaef6152003-08-02 07:42:57 +00002274 if (itemsize == 0)
2275 return PyList_New(0);
2276
Barry Warsawbd599b52000-08-03 15:45:29 +00002277 /* args must be a tuple */
2278 assert(PyTuple_Check(args));
2279
Tim Peters39a86c22002-05-12 07:19:38 +00002280 /* Guess at result length: the shortest of the input lengths.
2281 If some argument refuses to say, we refuse to guess too, lest
2282 an argument like xrange(sys.maxint) lead us astray.*/
Tim Peters67d687a2002-04-29 21:27:32 +00002283 len = -1; /* unknown */
2284 for (i = 0; i < itemsize; ++i) {
2285 PyObject *item = PyTuple_GET_ITEM(args, i);
Raymond Hettinger4e2f7142007-12-06 00:56:53 +00002286 Py_ssize_t thislen = _PyObject_LengthHint(item, -1);
Tim Peters39a86c22002-05-12 07:19:38 +00002287 if (thislen < 0) {
Tim Peters39a86c22002-05-12 07:19:38 +00002288 len = -1;
2289 break;
2290 }
Tim Peters67d687a2002-04-29 21:27:32 +00002291 else if (len < 0 || thislen < len)
2292 len = thislen;
2293 }
2294
Tim Peters8572b4f2001-05-06 01:05:02 +00002295 /* allocate result list */
Tim Peters67d687a2002-04-29 21:27:32 +00002296 if (len < 0)
2297 len = 10; /* arbitrary */
2298 if ((ret = PyList_New(len)) == NULL)
Barry Warsawbd599b52000-08-03 15:45:29 +00002299 return NULL;
2300
Tim Peters8572b4f2001-05-06 01:05:02 +00002301 /* obtain iterators */
2302 itlist = PyTuple_New(itemsize);
2303 if (itlist == NULL)
2304 goto Fail_ret;
2305 for (i = 0; i < itemsize; ++i) {
2306 PyObject *item = PyTuple_GET_ITEM(args, i);
2307 PyObject *it = PyObject_GetIter(item);
2308 if (it == NULL) {
2309 if (PyErr_ExceptionMatches(PyExc_TypeError))
2310 PyErr_Format(PyExc_TypeError,
Neal Norwitza361bd82006-02-19 19:31:50 +00002311 "zip argument #%zd must support iteration",
Tim Peters8572b4f2001-05-06 01:05:02 +00002312 i+1);
2313 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00002314 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002315 PyTuple_SET_ITEM(itlist, i, it);
2316 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002317
Tim Peters8572b4f2001-05-06 01:05:02 +00002318 /* build result into ret list */
Tim Peters67d687a2002-04-29 21:27:32 +00002319 for (i = 0; ; ++i) {
2320 int j;
Tim Peters8572b4f2001-05-06 01:05:02 +00002321 PyObject *next = PyTuple_New(itemsize);
2322 if (!next)
2323 goto Fail_ret_itlist;
2324
Tim Peters67d687a2002-04-29 21:27:32 +00002325 for (j = 0; j < itemsize; j++) {
2326 PyObject *it = PyTuple_GET_ITEM(itlist, j);
Tim Peters8572b4f2001-05-06 01:05:02 +00002327 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00002328 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00002329 if (PyErr_Occurred()) {
2330 Py_DECREF(ret);
2331 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002332 }
2333 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00002334 Py_DECREF(itlist);
Tim Peters67d687a2002-04-29 21:27:32 +00002335 goto Done;
Barry Warsawbd599b52000-08-03 15:45:29 +00002336 }
Tim Peters67d687a2002-04-29 21:27:32 +00002337 PyTuple_SET_ITEM(next, j, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00002338 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002339
Tim Peters67d687a2002-04-29 21:27:32 +00002340 if (i < len)
2341 PyList_SET_ITEM(ret, i, next);
2342 else {
2343 int status = PyList_Append(ret, next);
2344 Py_DECREF(next);
2345 ++len;
2346 if (status < 0)
2347 goto Fail_ret_itlist;
2348 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002349 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002350
Tim Peters67d687a2002-04-29 21:27:32 +00002351Done:
2352 if (ret != NULL && i < len) {
2353 /* The list is too big. */
2354 if (PyList_SetSlice(ret, i, len, NULL) < 0)
2355 return NULL;
2356 }
2357 return ret;
2358
Tim Peters8572b4f2001-05-06 01:05:02 +00002359Fail_ret_itlist:
2360 Py_DECREF(itlist);
2361Fail_ret:
2362 Py_DECREF(ret);
2363 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002364}
2365
2366
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002367PyDoc_STRVAR(zip_doc,
Barry Warsawbd599b52000-08-03 15:45:29 +00002368"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
2369\n\
2370Return a list of tuples, where each tuple contains the i-th element\n\
2371from each of the argument sequences. The returned list is truncated\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002372in length to the length of the shortest argument sequence.");
Barry Warsawbd599b52000-08-03 15:45:29 +00002373
2374
Guido van Rossum79f25d91997-04-29 20:08:16 +00002375static PyMethodDef builtin_methods[] = {
Neal Norwitz92e212f2006-04-03 04:48:37 +00002376 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002377 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002378 {"all", builtin_all, METH_O, all_doc},
2379 {"any", builtin_any, METH_O, any_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002380 {"apply", builtin_apply, METH_VARARGS, apply_doc},
Eric Smith3cd81942008-02-22 16:30:22 +00002381 {"bin", builtin_bin, METH_O, bin_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002382 {"callable", builtin_callable, METH_O, callable_doc},
2383 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2384 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
2385 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
Georg Brandl5240d742007-03-13 20:46:32 +00002386 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002387 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2388 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2389 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2390 {"eval", builtin_eval, METH_VARARGS, eval_doc},
2391 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
2392 {"filter", builtin_filter, METH_VARARGS, filter_doc},
Eric Smitha9f7d622008-02-17 19:46:49 +00002393 {"format", builtin_format, METH_VARARGS, format_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002394 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2395 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2396 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2397 {"hash", builtin_hash, METH_O, hash_doc},
2398 {"hex", builtin_hex, METH_O, hex_doc},
2399 {"id", builtin_id, METH_O, id_doc},
2400 {"input", builtin_input, METH_VARARGS, input_doc},
2401 {"intern", builtin_intern, METH_VARARGS, intern_doc},
2402 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2403 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2404 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2405 {"len", builtin_len, METH_O, len_doc},
2406 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2407 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002408 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2409 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002410 {"oct", builtin_oct, METH_O, oct_doc},
Neal Norwitzc4edb0e2006-05-02 04:43:14 +00002411 {"open", (PyCFunction)builtin_open, METH_VARARGS | METH_KEYWORDS, open_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002412 {"ord", builtin_ord, METH_O, ord_doc},
2413 {"pow", builtin_pow, METH_VARARGS, pow_doc},
2414 {"range", builtin_range, METH_VARARGS, range_doc},
2415 {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc},
2416 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
2417 {"reload", builtin_reload, METH_O, reload_doc},
2418 {"repr", builtin_repr, METH_O, repr_doc},
Georg Brandlccadf842006-03-31 18:54:53 +00002419 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002420 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002421 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002422 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002423#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002424 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002425#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002426 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002427 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002428 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002429};
2430
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002431PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002432"Built-in functions, exceptions, and other objects.\n\
2433\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002434Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002435
Guido van Rossum25ce5661997-08-02 03:10:38 +00002436PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002437_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002438{
Fred Drake5550de32000-06-20 04:54:19 +00002439 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002440 mod = Py_InitModule4("__builtin__", builtin_methods,
2441 builtin_doc, (PyObject *)NULL,
2442 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002443 if (mod == NULL)
2444 return NULL;
2445 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002446
Tim Peters7571a0f2003-03-23 17:52:28 +00002447#ifdef Py_TRACE_REFS
2448 /* __builtin__ exposes a number of statically allocated objects
2449 * that, before this code was added in 2.3, never showed up in
2450 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2451 * result, programs leaking references to None and False (etc)
2452 * couldn't be diagnosed by examining sys.getobjects(0).
2453 */
2454#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2455#else
2456#define ADD_TO_ALL(OBJECT) (void)0
2457#endif
2458
Tim Peters4b7625e2001-09-13 21:37:17 +00002459#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002460 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2461 return NULL; \
2462 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002463
2464 SETBUILTIN("None", Py_None);
2465 SETBUILTIN("Ellipsis", Py_Ellipsis);
2466 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002467 SETBUILTIN("False", Py_False);
2468 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00002469 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002470 SETBUILTIN("bool", &PyBool_Type);
Christian Heimes288e89a2008-01-18 18:24:07 +00002471 SETBUILTIN("bytes", &PyString_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002472 SETBUILTIN("buffer", &PyBuffer_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002473 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002474#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002475 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002476#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002477 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002478 SETBUILTIN("enumerate", &PyEnum_Type);
Neal Norwitzc4edb0e2006-05-02 04:43:14 +00002479 SETBUILTIN("file", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002480 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002481 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002482 SETBUILTIN("property", &PyProperty_Type);
2483 SETBUILTIN("int", &PyInt_Type);
2484 SETBUILTIN("list", &PyList_Type);
2485 SETBUILTIN("long", &PyLong_Type);
2486 SETBUILTIN("object", &PyBaseObject_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002487 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002488 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002489 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002490 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2491 SETBUILTIN("str", &PyString_Type);
2492 SETBUILTIN("super", &PySuper_Type);
2493 SETBUILTIN("tuple", &PyTuple_Type);
2494 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00002495 SETBUILTIN("xrange", &PyRange_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002496#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00002497 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002498#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00002499 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002500 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2501 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002502 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002503 }
2504 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002505
Guido van Rossum25ce5661997-08-02 03:10:38 +00002506 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002507#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002508#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002509}
2510
Guido van Rossume77a7571993-11-03 15:01:26 +00002511/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002512
Guido van Rossum79f25d91997-04-29 20:08:16 +00002513static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002514filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002515{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002516 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002517 Py_ssize_t i, j;
2518 Py_ssize_t len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002519
Guido van Rossumb7b45621995-08-04 04:07:45 +00002520 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002521 if (PyTuple_CheckExact(tuple))
2522 Py_INCREF(tuple);
2523 else
2524 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002525 return tuple;
2526 }
2527
Guido van Rossum79f25d91997-04-29 20:08:16 +00002528 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002529 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002530
Guido van Rossum12d12c51993-10-26 17:58:25 +00002531 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002532 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002533 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002534
Walter Dörwald8dd19322003-02-10 17:36:40 +00002535 if (tuple->ob_type->tp_as_sequence &&
2536 tuple->ob_type->tp_as_sequence->sq_item) {
2537 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002538 if (item == NULL)
2539 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002540 } else {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002541 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002542 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002543 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002544 if (func == Py_None) {
2545 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002546 good = item;
2547 }
2548 else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002549 PyObject *arg = PyTuple_Pack(1, item);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002550 if (arg == NULL) {
2551 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002552 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002553 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002554 good = PyEval_CallObject(func, arg);
2555 Py_DECREF(arg);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002556 if (good == NULL) {
2557 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002558 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002559 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002560 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002561 ok = PyObject_IsTrue(good);
2562 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002563 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002564 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002565 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002566 }
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002567 else
2568 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002569 }
2570
Tim Peters4324aa32001-05-28 22:30:08 +00002571 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002572 return NULL;
2573
Guido van Rossum12d12c51993-10-26 17:58:25 +00002574 return result;
2575
Guido van Rossum12d12c51993-10-26 17:58:25 +00002576Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002577 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002578 return NULL;
2579}
2580
2581
Guido van Rossume77a7571993-11-03 15:01:26 +00002582/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002583
Guido van Rossum79f25d91997-04-29 20:08:16 +00002584static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002585filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002586{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002587 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002588 Py_ssize_t i, j;
2589 Py_ssize_t len = PyString_Size(strobj);
2590 Py_ssize_t outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002591
Guido van Rossum79f25d91997-04-29 20:08:16 +00002592 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002593 /* If it's a real string we can return the original,
2594 * as no character is ever false and __getitem__
2595 * does return this character. If it's a subclass
2596 * we must go through the __getitem__ loop */
2597 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002598 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002599 return strobj;
2600 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002601 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002602 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002603 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002604
Guido van Rossum12d12c51993-10-26 17:58:25 +00002605 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002606 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002607 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002608
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002609 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2610 if (item == NULL)
2611 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002612 if (func==Py_None) {
2613 ok = 1;
2614 } else {
2615 PyObject *arg, *good;
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002616 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002617 if (arg == NULL) {
2618 Py_DECREF(item);
2619 goto Fail_1;
2620 }
2621 good = PyEval_CallObject(func, arg);
2622 Py_DECREF(arg);
2623 if (good == NULL) {
2624 Py_DECREF(item);
2625 goto Fail_1;
2626 }
2627 ok = PyObject_IsTrue(good);
2628 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00002629 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002630 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002631 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002632 if (!PyString_Check(item)) {
2633 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2634 " __getitem__ returned different type");
2635 Py_DECREF(item);
2636 goto Fail_1;
2637 }
2638 reslen = PyString_GET_SIZE(item);
2639 if (reslen == 1) {
2640 PyString_AS_STRING(result)[j++] =
2641 PyString_AS_STRING(item)[0];
2642 } else {
2643 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002644 Py_ssize_t need = j + reslen + len-i-1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002645 if (need > outlen) {
2646 /* overallocate, to avoid reallocations */
2647 if (need<2*outlen)
2648 need = 2*outlen;
2649 if (_PyString_Resize(&result, need)) {
2650 Py_DECREF(item);
2651 return NULL;
2652 }
2653 outlen = need;
2654 }
2655 memcpy(
2656 PyString_AS_STRING(result) + j,
2657 PyString_AS_STRING(item),
2658 reslen
2659 );
2660 j += reslen;
2661 }
2662 }
Tim Peters388ed082001-04-07 20:34:48 +00002663 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002664 }
2665
Walter Dörwald903f1e02003-02-04 16:28:00 +00002666 if (j < outlen)
Tim Peters5de98422002-04-27 18:44:32 +00002667 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002668
Guido van Rossum12d12c51993-10-26 17:58:25 +00002669 return result;
2670
Guido van Rossum12d12c51993-10-26 17:58:25 +00002671Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002672 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002673 return NULL;
2674}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002675
2676#ifdef Py_USING_UNICODE
2677/* Helper for filter(): filter a Unicode object through a function */
2678
2679static PyObject *
2680filterunicode(PyObject *func, PyObject *strobj)
2681{
2682 PyObject *result;
Martin v. Löwis725507b2006-03-07 12:08:51 +00002683 register Py_ssize_t i, j;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002684 Py_ssize_t len = PyUnicode_GetSize(strobj);
2685 Py_ssize_t outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002686
2687 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002688 /* If it's a real string we can return the original,
2689 * as no character is ever false and __getitem__
2690 * does return this character. If it's a subclass
2691 * we must go through the __getitem__ loop */
2692 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002693 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002694 return strobj;
2695 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002696 }
2697 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2698 return NULL;
2699
2700 for (i = j = 0; i < len; ++i) {
2701 PyObject *item, *arg, *good;
2702 int ok;
2703
2704 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2705 if (item == NULL)
2706 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002707 if (func == Py_None) {
2708 ok = 1;
2709 } else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002710 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002711 if (arg == NULL) {
2712 Py_DECREF(item);
2713 goto Fail_1;
2714 }
2715 good = PyEval_CallObject(func, arg);
2716 Py_DECREF(arg);
2717 if (good == NULL) {
2718 Py_DECREF(item);
2719 goto Fail_1;
2720 }
2721 ok = PyObject_IsTrue(good);
2722 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002723 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002724 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002725 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002726 if (!PyUnicode_Check(item)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002727 PyErr_SetString(PyExc_TypeError,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002728 "can't filter unicode to unicode:"
2729 " __getitem__ returned different type");
Walter Dörwald903f1e02003-02-04 16:28:00 +00002730 Py_DECREF(item);
2731 goto Fail_1;
2732 }
2733 reslen = PyUnicode_GET_SIZE(item);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002734 if (reslen == 1)
Walter Dörwald903f1e02003-02-04 16:28:00 +00002735 PyUnicode_AS_UNICODE(result)[j++] =
2736 PyUnicode_AS_UNICODE(item)[0];
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002737 else {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002738 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002739 Py_ssize_t need = j + reslen + len - i - 1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002740 if (need > outlen) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002741 /* overallocate,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002742 to avoid reallocations */
2743 if (need < 2 * outlen)
2744 need = 2 * outlen;
Jeremy Hylton364f6be2003-09-16 03:17:16 +00002745 if (PyUnicode_Resize(
2746 &result, need) < 0) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002747 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002748 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002749 }
2750 outlen = need;
2751 }
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002752 memcpy(PyUnicode_AS_UNICODE(result) + j,
2753 PyUnicode_AS_UNICODE(item),
2754 reslen*sizeof(Py_UNICODE));
Walter Dörwald903f1e02003-02-04 16:28:00 +00002755 j += reslen;
2756 }
2757 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002758 Py_DECREF(item);
2759 }
2760
Walter Dörwald903f1e02003-02-04 16:28:00 +00002761 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002762 PyUnicode_Resize(&result, j);
2763
2764 return result;
2765
2766Fail_1:
2767 Py_DECREF(result);
2768 return NULL;
2769}
2770#endif