blob: 29e11e5aca887473b430eea5c4c195dcb9d491c2 [file] [log] [blame]
Andrew M. Kuchling9bcc68c2000-12-20 15:07:34 +00001
Guido van Rossum3f5da241990-12-20 15:06:42 +00002/* Built-in functions */
3
Guido van Rossum79f25d91997-04-29 20:08:16 +00004#include "Python.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00005
6#include "node.h"
Guido van Rossum5b722181993-03-30 17:46:03 +00007#include "compile.h"
8#include "eval.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00009
Guido van Rossum6bf62da1997-04-11 20:37:35 +000010#include <ctype.h>
11
Guido van Rossume2ae77b2001-10-24 20:42:55 +000012#ifdef RISCOS
13#include "unixstuff.h"
14#endif
15
Mark Hammond26cffde42001-05-14 12:17:34 +000016/* The default encoding used by the platform file system APIs
17 Can remain NULL for all platforms that don't have such a concept
18*/
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000019#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
Mark Hammond26cffde42001-05-14 12:17:34 +000020const char *Py_FileSystemDefaultEncoding = "mbcs";
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000021#elif defined(__APPLE__)
22const char *Py_FileSystemDefaultEncoding = "utf-8";
Mark Hammond26cffde42001-05-14 12:17:34 +000023#else
24const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
25#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000026
Guido van Rossum12d12c51993-10-26 17:58:25 +000027/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000028static PyObject *filterstring(PyObject *, PyObject *);
Martin v. Löwis8afd7572003-01-25 22:46:11 +000029#ifdef Py_USING_UNICODE
30static PyObject *filterunicode(PyObject *, PyObject *);
31#endif
Tim Petersdbd9ba62000-07-09 03:09:57 +000032static PyObject *filtertuple (PyObject *, PyObject *);
Guido van Rossum12d12c51993-10-26 17:58:25 +000033
Guido van Rossum79f25d91997-04-29 20:08:16 +000034static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000035builtin___import__(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +000036{
Guido van Rossum1ae940a1995-01-02 19:04:15 +000037 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +000038 PyObject *globals = NULL;
39 PyObject *locals = NULL;
40 PyObject *fromlist = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000041
Guido van Rossum79f25d91997-04-29 20:08:16 +000042 if (!PyArg_ParseTuple(args, "s|OOO:__import__",
Guido van Rossum24c13741995-02-14 09:42:43 +000043 &name, &globals, &locals, &fromlist))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000044 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +000045 return PyImport_ImportModuleEx(name, globals, locals, fromlist);
Guido van Rossum1ae940a1995-01-02 19:04:15 +000046}
47
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000048PyDoc_STRVAR(import_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000049"__import__(name, globals, locals, fromlist) -> module\n\
50\n\
51Import a module. The globals are only used to determine the context;\n\
52they are not modified. The locals are currently unused. The fromlist\n\
53should be a list of names to emulate ``from name import ...'', or an\n\
54empty list to emulate ``import name''.\n\
55When importing a module from a package, note that __import__('A.B', ...)\n\
56returns package A when fromlist is empty, but its submodule B when\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000057fromlist is not empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000058
Guido van Rossum1ae940a1995-01-02 19:04:15 +000059
Guido van Rossum79f25d91997-04-29 20:08:16 +000060static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +000061builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +000062{
Guido van Rossum09df08a1998-05-22 00:51:39 +000063 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +000064}
65
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000066PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000067"abs(number) -> number\n\
68\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000069Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000070
71
Guido van Rossum79f25d91997-04-29 20:08:16 +000072static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000073builtin_apply(PyObject *self, PyObject *args)
Guido van Rossumc02e15c1991-12-16 13:03:00 +000074{
Guido van Rossum79f25d91997-04-29 20:08:16 +000075 PyObject *func, *alist = NULL, *kwdict = NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +000076 PyObject *t = NULL, *retval = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000077
Neal Norwitz3e590762003-02-23 21:45:43 +000078 if (PyErr_Warn(PyExc_PendingDeprecationWarning,
79 "use func(*args, **kwargs) instead of "
80 "apply(func, args, kwargs)") < 0)
81 return NULL;
Raymond Hettingerea3fdf42002-12-29 16:33:45 +000082 if (!PyArg_UnpackTuple(args, "apply", 1, 3, &func, &alist, &kwdict))
Guido van Rossumc02e15c1991-12-16 13:03:00 +000083 return NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +000084 if (alist != NULL) {
85 if (!PyTuple_Check(alist)) {
86 if (!PySequence_Check(alist)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +000087 PyErr_Format(PyExc_TypeError,
88 "apply() arg 2 expect sequence, found %s",
89 alist->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +000090 return NULL;
91 }
92 t = PySequence_Tuple(alist);
93 if (t == NULL)
94 return NULL;
95 alist = t;
96 }
Guido van Rossum2d951851994-08-29 12:52:16 +000097 }
Guido van Rossum79f25d91997-04-29 20:08:16 +000098 if (kwdict != NULL && !PyDict_Check(kwdict)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +000099 PyErr_Format(PyExc_TypeError,
100 "apply() arg 3 expected dictionary, found %s",
101 kwdict->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000102 goto finally;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000103 }
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000104 retval = PyEval_CallObjectWithKeywords(func, alist, kwdict);
105 finally:
106 Py_XDECREF(t);
107 return retval;
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000108}
109
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000110PyDoc_STRVAR(apply_doc,
Fred Drakef1fbc622001-01-12 17:05:05 +0000111"apply(object[, args[, kwargs]]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000112\n\
Fred Drake7b912121999-12-23 14:16:55 +0000113Call a callable object with positional arguments taken from the tuple args,\n\
114and keyword arguments taken from the optional dictionary kwargs.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000115Note that classes are callable, as are instances with a __call__() method.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000116
117
Guido van Rossum79f25d91997-04-29 20:08:16 +0000118static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000119builtin_callable(PyObject *self, PyObject *v)
Guido van Rossum2d951851994-08-29 12:52:16 +0000120{
Guido van Rossum77f6a652002-04-03 22:41:51 +0000121 return PyBool_FromLong((long)PyCallable_Check(v));
Guido van Rossum2d951851994-08-29 12:52:16 +0000122}
123
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000124PyDoc_STRVAR(callable_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000125"callable(object) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000126\n\
127Return whether the object is callable (i.e., some kind of function).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000128Note that classes are callable, as are instances with a __call__() method.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000129
130
Guido van Rossum79f25d91997-04-29 20:08:16 +0000131static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000132builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000133{
Guido van Rossumc7903a12002-08-16 07:04:56 +0000134 PyObject *func, *seq, *result, *it, *arg;
Tim Peters0e57abf2001-05-02 07:39:38 +0000135 int len; /* guess for result list size */
Tim Petersf4848da2001-05-05 00:14:56 +0000136 register int j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000137
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000138 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000139 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000140
Tim Peters0e57abf2001-05-02 07:39:38 +0000141 /* Strings and tuples return a result of the same type. */
142 if (PyString_Check(seq))
143 return filterstring(func, seq);
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000144#ifdef Py_USING_UNICODE
145 if (PyUnicode_Check(seq))
146 return filterunicode(func, seq);
147#endif
Tim Peters0e57abf2001-05-02 07:39:38 +0000148 if (PyTuple_Check(seq))
149 return filtertuple(func, seq);
150
151 /* Get iterator. */
152 it = PyObject_GetIter(seq);
153 if (it == NULL)
154 return NULL;
155
156 /* Guess a result list size. */
157 len = -1; /* unknown */
158 if (PySequence_Check(seq) &&
159 seq->ob_type->tp_as_sequence->sq_length) {
160 len = PySequence_Size(seq);
161 if (len < 0)
162 PyErr_Clear();
Guido van Rossum12d12c51993-10-26 17:58:25 +0000163 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000164 if (len < 0)
165 len = 8; /* arbitrary */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000166
Guido van Rossumc7903a12002-08-16 07:04:56 +0000167 /* Pre-allocate argument list tuple. */
168 arg = PyTuple_New(1);
169 if (arg == NULL)
170 goto Fail_arg;
171
Tim Peters0e57abf2001-05-02 07:39:38 +0000172 /* Get a result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000173 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000174 /* Eww - can modify the list in-place. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000175 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000176 result = seq;
177 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000178 else {
Tim Peters0e57abf2001-05-02 07:39:38 +0000179 result = PyList_New(len);
180 if (result == NULL)
181 goto Fail_it;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000182 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000183
Tim Peters0e57abf2001-05-02 07:39:38 +0000184 /* Build the result list. */
Tim Petersf4848da2001-05-05 00:14:56 +0000185 j = 0;
186 for (;;) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000187 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000188 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000189
Tim Peters0e57abf2001-05-02 07:39:38 +0000190 item = PyIter_Next(it);
191 if (item == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +0000192 if (PyErr_Occurred())
193 goto Fail_result_it;
Tim Peters0e57abf2001-05-02 07:39:38 +0000194 break;
Guido van Rossum2d951851994-08-29 12:52:16 +0000195 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000196
Guido van Rossum79f25d91997-04-29 20:08:16 +0000197 if (func == Py_None) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000198 ok = PyObject_IsTrue(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000199 }
200 else {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000201 PyObject *good;
202 PyTuple_SET_ITEM(arg, 0, item);
203 good = PyObject_Call(func, arg, NULL);
204 PyTuple_SET_ITEM(arg, 0, NULL);
Guido van Rossum58b68731995-01-10 17:40:55 +0000205 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000206 Py_DECREF(item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000207 goto Fail_result_it;
Guido van Rossum58b68731995-01-10 17:40:55 +0000208 }
Guido van Rossumc7903a12002-08-16 07:04:56 +0000209 ok = PyObject_IsTrue(good);
210 Py_DECREF(good);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000211 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000212 if (ok) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000213 if (j < len)
214 PyList_SET_ITEM(result, j, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000215 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000216 int status = PyList_Append(result, item);
Barry Warsawfa77e091999-01-28 18:49:12 +0000217 Py_DECREF(item);
218 if (status < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000219 goto Fail_result_it;
Guido van Rossum2d951851994-08-29 12:52:16 +0000220 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000221 ++j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000222 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000223 else
224 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000225 }
226
Guido van Rossum12d12c51993-10-26 17:58:25 +0000227
Tim Peters0e57abf2001-05-02 07:39:38 +0000228 /* Cut back result list if len is too big. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000229 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000230 goto Fail_result_it;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000231
Tim Peters3c6b1482001-05-21 08:07:05 +0000232 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000233 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000234 return result;
235
Tim Peters0e57abf2001-05-02 07:39:38 +0000236Fail_result_it:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000237 Py_DECREF(result);
Tim Peters0e57abf2001-05-02 07:39:38 +0000238Fail_it:
239 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000240Fail_arg:
241 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000242 return NULL;
243}
244
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000245PyDoc_STRVAR(filter_doc,
Tim Petersd50e5442002-03-09 00:06:26 +0000246"filter(function or None, sequence) -> list, tuple, or string\n"
247"\n"
248"Return those items of sequence for which function(item) is true. If\n"
249"function is None, return the items that are true. If sequence is a tuple\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000250"or string, return the same type, else return a list.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000251
Guido van Rossum79f25d91997-04-29 20:08:16 +0000252static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000253builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000254{
255 long x;
256 char s[1];
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000257
Guido van Rossum79f25d91997-04-29 20:08:16 +0000258 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000259 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000260 if (x < 0 || x >= 256) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000261 PyErr_SetString(PyExc_ValueError,
262 "chr() arg not in range(256)");
Guido van Rossum3f5da241990-12-20 15:06:42 +0000263 return NULL;
264 }
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000265 s[0] = (char)x;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000266 return PyString_FromStringAndSize(s, 1);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000267}
268
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000269PyDoc_STRVAR(chr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000270"chr(i) -> character\n\
271\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000272Return a string of one character with ordinal i; 0 <= i < 256.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000273
274
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000275#ifdef Py_USING_UNICODE
Guido van Rossum79f25d91997-04-29 20:08:16 +0000276static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000277builtin_unichr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000278{
279 long x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000280
281 if (!PyArg_ParseTuple(args, "l:unichr", &x))
282 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000283
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000284 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000285}
286
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000287PyDoc_STRVAR(unichr_doc,
Fred Drake078b24f2000-04-13 02:42:50 +0000288"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000289\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000290Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.");
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000291#endif
Guido van Rossum09095f32000-03-10 23:00:52 +0000292
293
294static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000295builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000296{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000297 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000298 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000299
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000300 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000301 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000302 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000303 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000304 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000305}
306
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000307PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000308"cmp(x, y) -> integer\n\
309\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000310Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000311
312
Guido van Rossum79f25d91997-04-29 20:08:16 +0000313static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000314builtin_coerce(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000315{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000316 PyObject *v, *w;
317 PyObject *res;
Guido van Rossum5524a591995-01-10 15:26:20 +0000318
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000319 if (!PyArg_UnpackTuple(args, "coerce", 2, 2, &v, &w))
Guido van Rossum5524a591995-01-10 15:26:20 +0000320 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000321 if (PyNumber_Coerce(&v, &w) < 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +0000322 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000323 res = Py_BuildValue("(OO)", v, w);
324 Py_DECREF(v);
325 Py_DECREF(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +0000326 return res;
327}
328
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000329PyDoc_STRVAR(coerce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000330"coerce(x, y) -> None or (x1, y1)\n\
331\n\
332When x and y can be coerced to values of the same type, return a tuple\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000333containing the coerced values. When they can't be coerced, return None.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000334
335
Guido van Rossum79f25d91997-04-29 20:08:16 +0000336static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000337builtin_compile(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000338{
339 char *str;
340 char *filename;
341 char *startstr;
342 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000343 int dont_inherit = 0;
344 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000345 PyCompilerFlags cf;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000346 PyObject *result, *cmd, *tmp = NULL;
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000347 int length;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000348
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000349 if (!PyArg_ParseTuple(args, "Oss|ii:compile", &cmd, &filename,
Tim Peters6cd6a822001-08-17 22:11:27 +0000350 &startstr, &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000351 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000352
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000353 cf.cf_flags = supplied_flags;
354
355#ifdef Py_USING_UNICODE
356 if (PyUnicode_Check(cmd)) {
357 tmp = PyUnicode_AsUTF8String(cmd);
358 if (tmp == NULL)
359 return NULL;
360 cmd = tmp;
361 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
362 }
363#endif
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000364 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &length))
365 return NULL;
Tim Peters2c646c92003-02-10 14:48:29 +0000366 if ((size_t)length != strlen(str)) {
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000367 PyErr_SetString(PyExc_TypeError,
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000368 "expected string without null bytes");
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000369 return NULL;
370 }
371
Guido van Rossum5b722181993-03-30 17:46:03 +0000372 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000373 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000374 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000375 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000376 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000377 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000378 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000379 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000380 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossum5b722181993-03-30 17:46:03 +0000381 return NULL;
382 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000383
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000384 if (supplied_flags &
385 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT))
386 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000387 PyErr_SetString(PyExc_ValueError,
388 "compile(): unrecognised flags");
389 return NULL;
390 }
391 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
392
Tim Peters6cd6a822001-08-17 22:11:27 +0000393 if (!dont_inherit) {
394 PyEval_MergeCompilerFlags(&cf);
395 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000396 result = Py_CompileStringFlags(str, filename, start, &cf);
397 Py_XDECREF(tmp);
398 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000399}
400
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000401PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000402"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000403\n\
404Compile the source string (a Python module, statement or expression)\n\
405into a code object that can be executed by the exec statement or eval().\n\
406The filename will be used for run-time error messages.\n\
407The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000408single (interactive) statement, or 'eval' to compile an expression.\n\
409The flags argument, if present, controls which future statements influence\n\
410the compilation of the code.\n\
411The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
412the effects of any future statements in effect in the code calling\n\
413compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000414in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000415
Guido van Rossum79f25d91997-04-29 20:08:16 +0000416static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000417builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000418{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000419 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000420
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000421 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000422 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000423 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000424}
425
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000426PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000427"dir([object]) -> list of strings\n"
428"\n"
429"Return an alphabetized list of names comprising (some of) the attributes\n"
430"of the given object, and of attributes reachable from it:\n"
431"\n"
432"No argument: the names in the current scope.\n"
433"Module object: the module attributes.\n"
Tim Peters37a309d2001-09-04 01:20:04 +0000434"Type or class object: its attributes, and recursively the attributes of\n"
435" its bases.\n"
Tim Peters5d2b77c2001-09-03 05:47:38 +0000436"Otherwise: its attributes, its class's attributes, and recursively the\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000437" attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000438
Guido van Rossum79f25d91997-04-29 20:08:16 +0000439static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000440builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000441{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000442 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000443
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000444 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000445 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000446 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000447}
448
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000449PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000450"divmod(x, y) -> (div, mod)\n\
451\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000452Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000453
454
Guido van Rossum79f25d91997-04-29 20:08:16 +0000455static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000456builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000457{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000458 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000459 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000460 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000461 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000462
Guido van Rossum79f25d91997-04-29 20:08:16 +0000463 if (!PyArg_ParseTuple(args, "O|O!O!:eval",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000464 &cmd,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000465 &PyDict_Type, &globals,
466 &PyDict_Type, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000467 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000468 if (globals == Py_None) {
469 globals = PyEval_GetGlobals();
470 if (locals == Py_None)
471 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000472 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000473 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000474 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000475
Guido van Rossum79f25d91997-04-29 20:08:16 +0000476 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
477 if (PyDict_SetItemString(globals, "__builtins__",
478 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000479 return NULL;
480 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000481
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000482 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000483 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000484 PyErr_SetString(PyExc_TypeError,
485 "code object passed to eval() may not contain free variables");
486 return NULL;
487 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000488 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000489 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000490
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000491 if (!PyString_Check(cmd) &&
492 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000493 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000494 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000495 return NULL;
496 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000497 cf.cf_flags = 0;
498
499#ifdef Py_USING_UNICODE
500 if (PyUnicode_Check(cmd)) {
501 tmp = PyUnicode_AsUTF8String(cmd);
502 if (tmp == NULL)
503 return NULL;
504 cmd = tmp;
505 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
506 }
507#endif
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000508 if (PyString_AsStringAndSize(cmd, &str, NULL))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000509 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000510 while (*str == ' ' || *str == '\t')
511 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000512
Tim Peters9fa96be2001-08-17 23:04:59 +0000513 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000514 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
515 Py_XDECREF(tmp);
516 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000517}
518
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000519PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000520"eval(source[, globals[, locals]]) -> value\n\
521\n\
522Evaluate the source in the context of globals and locals.\n\
523The source may be a string representing a Python expression\n\
524or a code object as returned by compile().\n\
525The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000526globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000527
528
Guido van Rossum79f25d91997-04-29 20:08:16 +0000529static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000530builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000531{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000532 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000533 PyObject *globals = Py_None, *locals = Py_None;
534 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000535 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000536 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000537 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000538
Guido van Rossum79f25d91997-04-29 20:08:16 +0000539 if (!PyArg_ParseTuple(args, "s|O!O!:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000540 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000541 &PyDict_Type, &globals,
542 &PyDict_Type, &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000543 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000544 if (globals == Py_None) {
545 globals = PyEval_GetGlobals();
546 if (locals == Py_None)
547 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000548 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000549 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000550 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000551 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
552 if (PyDict_SetItemString(globals, "__builtins__",
553 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000554 return NULL;
555 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000556
557 exists = 0;
558 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000559#if defined(PLAN9)
560 {
561 Dir *d;
562
563 if ((d = dirstat(filename))!=nil) {
564 if(d->mode & DMDIR)
565 werrstr("is a directory");
566 else
567 exists = 1;
568 free(d);
569 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000570 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000571#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000572 if (object_exists(filename)) {
573 if (isdir(filename))
574 errno = EISDIR;
575 else
576 exists = 1;
577 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000578#else /* standard Posix */
579 {
580 struct stat s;
581 if (stat(filename, &s) == 0) {
582 if (S_ISDIR(s.st_mode))
583# if defined(PY_OS2) && defined(PYCC_VACPP)
584 errno = EOS2ERR;
585# else
586 errno = EISDIR;
587# endif
588 else
589 exists = 1;
590 }
591 }
592#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000593
594 if (exists) {
595 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000596 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000597 Py_END_ALLOW_THREADS
598
599 if (fp == NULL) {
600 exists = 0;
601 }
602 }
603
604 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000605 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000606 return NULL;
607 }
Tim Peters5ba58662001-07-16 02:29:45 +0000608 cf.cf_flags = 0;
609 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000610 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000611 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000612 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000613 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000614 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000615 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000616}
617
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000618PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000619"execfile(filename[, globals[, locals]])\n\
620\n\
621Read and execute a Python script from a file.\n\
622The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000623globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000624
625
Guido van Rossum79f25d91997-04-29 20:08:16 +0000626static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000627builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000628{
Guido van Rossum950ff291998-06-29 13:38:57 +0000629 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000630 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000631
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000632 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000633 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000634#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000635 if (PyUnicode_Check(name)) {
636 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
637 if (name == NULL)
638 return NULL;
639 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000640#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000641
642 if (!PyString_Check(name)) {
643 PyErr_SetString(PyExc_TypeError,
644 "attribute name must be string");
645 return NULL;
646 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000647 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000648 if (result == NULL && dflt != NULL &&
649 PyErr_ExceptionMatches(PyExc_AttributeError))
650 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000651 PyErr_Clear();
652 Py_INCREF(dflt);
653 result = dflt;
654 }
655 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000656}
657
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000658PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000659"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000660\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000661Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
662When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000663exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000664
665
Guido van Rossum79f25d91997-04-29 20:08:16 +0000666static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000667builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000668{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000669 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000670
Guido van Rossum79f25d91997-04-29 20:08:16 +0000671 d = PyEval_GetGlobals();
672 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000673 return d;
674}
675
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000676PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000677"globals() -> dictionary\n\
678\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000679Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000680
681
Guido van Rossum79f25d91997-04-29 20:08:16 +0000682static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000683builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000684{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000685 PyObject *v;
686 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000687
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000688 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000689 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000690#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000691 if (PyUnicode_Check(name)) {
692 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
693 if (name == NULL)
694 return NULL;
695 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000696#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000697
698 if (!PyString_Check(name)) {
699 PyErr_SetString(PyExc_TypeError,
700 "attribute name must be string");
701 return NULL;
702 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000703 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000704 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000705 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000706 Py_INCREF(Py_False);
707 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000708 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000709 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000710 Py_INCREF(Py_True);
711 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000712}
713
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000714PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000715"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000716\n\
717Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000718(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000719
720
Guido van Rossum79f25d91997-04-29 20:08:16 +0000721static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000722builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000723{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000724 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000725}
726
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000727PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000728"id(object) -> integer\n\
729\n\
730Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000731simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000732
733
Guido van Rossum79f25d91997-04-29 20:08:16 +0000734static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000735builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000736{
737 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000738 PyObject *it; /* the iterator object */
739 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000740 } sequence;
741
Guido van Rossum79f25d91997-04-29 20:08:16 +0000742 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000743 sequence *seqs = NULL, *sqp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000744 int n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000745 register int i, j;
746
Guido van Rossum79f25d91997-04-29 20:08:16 +0000747 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000748 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000749 PyErr_SetString(PyExc_TypeError,
750 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000751 return NULL;
752 }
753
Guido van Rossum79f25d91997-04-29 20:08:16 +0000754 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000755 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000756
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000757 if (func == Py_None && n == 1) {
758 /* map(None, S) is the same as list(S). */
759 return PySequence_List(PyTuple_GetItem(args, 1));
760 }
761
Tim Peters4e9afdc2001-05-03 23:54:49 +0000762 /* Get space for sequence descriptors. Must NULL out the iterator
763 * pointers so that jumping to Fail_2 later doesn't see trash.
764 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000765 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
766 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000767 return NULL;
768 }
769 for (i = 0; i < n; ++i) {
770 seqs[i].it = (PyObject*)NULL;
771 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000772 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000773
Tim Peters4e9afdc2001-05-03 23:54:49 +0000774 /* Do a first pass to obtain iterators for the arguments, and set len
775 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000776 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000777 len = 0;
778 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
779 PyObject *curseq;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000780 int curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000781
Tim Peters4e9afdc2001-05-03 23:54:49 +0000782 /* Get iterator. */
783 curseq = PyTuple_GetItem(args, i+1);
784 sqp->it = PyObject_GetIter(curseq);
785 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000786 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000787 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000788 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +0000789 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000790 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000791 goto Fail_2;
792 }
793
Tim Peters4e9afdc2001-05-03 23:54:49 +0000794 /* Update len. */
795 curlen = -1; /* unknown */
796 if (PySequence_Check(curseq) &&
797 curseq->ob_type->tp_as_sequence->sq_length) {
798 curlen = PySequence_Size(curseq);
799 if (curlen < 0)
800 PyErr_Clear();
801 }
Tim Peters748b8bb2001-04-28 08:20:22 +0000802 if (curlen < 0)
Tim Peters4e9afdc2001-05-03 23:54:49 +0000803 curlen = 8; /* arbitrary */
Tim Peters6d6c1a32001-08-02 04:15:00 +0000804 if (curlen > len)
805 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000806 }
807
Tim Peters4e9afdc2001-05-03 23:54:49 +0000808 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000809 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000810 goto Fail_2;
811
Tim Peters4e9afdc2001-05-03 23:54:49 +0000812 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +0000813 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000814 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000815 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000816
Guido van Rossum79f25d91997-04-29 20:08:16 +0000817 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +0000818 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000819 else if ((alist = PyTuple_New(n)) == NULL)
820 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000821
822 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000823 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000824 Py_INCREF(Py_None);
825 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000826 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000827 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000828 item = PyIter_Next(sqp->it);
829 if (item)
830 ++numactive;
831 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000832 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +0000833 Py_XDECREF(alist);
834 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000835 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000836 Py_INCREF(Py_None);
837 item = Py_None;
838 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000839 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000840 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000841 if (alist)
842 PyTuple_SET_ITEM(alist, j, item);
843 else
Guido van Rossum2d951851994-08-29 12:52:16 +0000844 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000845 }
846
Guido van Rossum32120311995-07-10 13:52:21 +0000847 if (!alist)
848 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +0000849
Tim Peters4e9afdc2001-05-03 23:54:49 +0000850 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000851 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +0000852 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000853 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000854
Guido van Rossum79f25d91997-04-29 20:08:16 +0000855 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +0000856 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000857 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000858 value = PyEval_CallObject(func, alist);
859 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000860 if (value == NULL)
861 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000862 }
863 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +0000864 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +0000865 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +0000866 if (status < 0)
867 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000868 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000869 else if (PyList_SetItem(result, i, value) < 0)
870 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000871 }
872
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000873 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
874 goto Fail_1;
875
Tim Peters4e9afdc2001-05-03 23:54:49 +0000876 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000877
Guido van Rossum12d12c51993-10-26 17:58:25 +0000878Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000879 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000880Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +0000881 result = NULL;
882Succeed:
883 assert(seqs);
884 for (i = 0; i < n; ++i)
885 Py_XDECREF(seqs[i].it);
886 PyMem_DEL(seqs);
887 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000888}
889
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000890PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000891"map(function, sequence[, sequence, ...]) -> list\n\
892\n\
893Return a list of the results of applying the function to the items of\n\
894the argument sequence(s). If more than one sequence is given, the\n\
895function is called with an argument list consisting of the corresponding\n\
896item of each sequence, substituting None for missing values when not all\n\
897sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000898the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000899
900
Guido van Rossum79f25d91997-04-29 20:08:16 +0000901static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000902builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000903{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000904 PyObject *v;
905 PyObject *name;
906 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000907
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000908 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000909 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000910 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000911 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000912 Py_INCREF(Py_None);
913 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000914}
915
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000916PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000917"setattr(object, name, value)\n\
918\n\
919Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000920``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000921
922
Guido van Rossum79f25d91997-04-29 20:08:16 +0000923static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000924builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000925{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000926 PyObject *v;
927 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000928
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000929 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +0000930 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000931 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000932 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000933 Py_INCREF(Py_None);
934 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +0000935}
936
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000937PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +0000938"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000939\n\
940Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000941``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000942
943
Guido van Rossum79f25d91997-04-29 20:08:16 +0000944static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000945builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000946{
Guido van Rossum9bfef441993-03-29 10:43:31 +0000947 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000948
Guido van Rossum79f25d91997-04-29 20:08:16 +0000949 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000950 if (x == -1)
951 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000952 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000953}
954
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000955PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000956"hash(object) -> integer\n\
957\n\
958Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000959the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000960
961
Guido van Rossum79f25d91997-04-29 20:08:16 +0000962static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000963builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +0000964{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000965 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000966
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000967 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000968 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000969 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000970 "hex() argument can't be converted to hex");
971 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +0000972 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000973 return (*nb->nb_hex)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +0000974}
975
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000976PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000977"hex(number) -> string\n\
978\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000979Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000980
981
Tim Petersdbd9ba62000-07-09 03:09:57 +0000982static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000983
Guido van Rossum79f25d91997-04-29 20:08:16 +0000984static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000985builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000986{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000987 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000988 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000989 PyObject *res;
990 PyObject *globals, *locals;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000991
992 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000993 if (line == NULL)
994 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000995 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000996 return NULL;
997 while (*str == ' ' || *str == '\t')
998 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000999 globals = PyEval_GetGlobals();
1000 locals = PyEval_GetLocals();
1001 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
1002 if (PyDict_SetItemString(globals, "__builtins__",
1003 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +00001004 return NULL;
1005 }
Guido van Rossumb05a5c71997-05-07 17:46:13 +00001006 res = PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001007 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001008 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001009}
1010
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001011PyDoc_STRVAR(input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001012"input([prompt]) -> value\n\
1013\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001014Equivalent to eval(raw_input(prompt)).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001015
1016
Guido van Rossume8811f81997-02-14 15:48:05 +00001017static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001018builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001019{
1020 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001021 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001022 return NULL;
1023 Py_INCREF(s);
1024 PyString_InternInPlace(&s);
1025 return s;
1026}
1027
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001028PyDoc_STRVAR(intern_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001029"intern(string) -> string\n\
1030\n\
1031``Intern'' the given string. This enters the string in the (global)\n\
1032table of interned strings whose purpose is to speed up dictionary lookups.\n\
1033Return the string itself or the previously interned string object with the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001034same value.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001035
1036
Guido van Rossum79f25d91997-04-29 20:08:16 +00001037static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001038builtin_iter(PyObject *self, PyObject *args)
1039{
1040 PyObject *v, *w = NULL;
1041
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001042 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001043 return NULL;
1044 if (w == NULL)
1045 return PyObject_GetIter(v);
1046 if (!PyCallable_Check(v)) {
1047 PyErr_SetString(PyExc_TypeError,
1048 "iter(v, w): v must be callable");
1049 return NULL;
1050 }
1051 return PyCallIter_New(v, w);
1052}
1053
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001054PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001055"iter(collection) -> iterator\n\
1056iter(callable, sentinel) -> iterator\n\
1057\n\
1058Get an iterator from an object. In the first form, the argument must\n\
1059supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001060In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001061
1062
1063static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001064builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001065{
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001066 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001067
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001068 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001069 if (res < 0 && PyErr_Occurred())
1070 return NULL;
1071 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001072}
1073
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001074PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001075"len(object) -> integer\n\
1076\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001077Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001078
1079
Guido van Rossum79f25d91997-04-29 20:08:16 +00001080static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001081builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001082{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001083 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001084
Guido van Rossum79f25d91997-04-29 20:08:16 +00001085 d = PyEval_GetLocals();
1086 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001087 return d;
1088}
1089
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001090PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001091"locals() -> dictionary\n\
1092\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001093Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001094
1095
Guido van Rossum79f25d91997-04-29 20:08:16 +00001096static PyObject *
Guido van Rossum53451b32001-01-17 15:47:24 +00001097min_max(PyObject *args, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001098{
Tim Petersc3074532001-05-03 07:00:32 +00001099 PyObject *v, *w, *x, *it;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001100
Guido van Rossum79f25d91997-04-29 20:08:16 +00001101 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001102 v = args;
Raymond Hettingerbbfb9102002-12-29 18:31:19 +00001103 else if (!PyArg_UnpackTuple(args, (op==Py_LT) ? "min" : "max", 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001104 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001105
Tim Petersc3074532001-05-03 07:00:32 +00001106 it = PyObject_GetIter(v);
1107 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001108 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001109
1110 w = NULL; /* the result */
Tim Petersf4848da2001-05-05 00:14:56 +00001111 for (;;) {
Tim Petersc3074532001-05-03 07:00:32 +00001112 x = PyIter_Next(it);
Guido van Rossum2d951851994-08-29 12:52:16 +00001113 if (x == NULL) {
Tim Petersc3074532001-05-03 07:00:32 +00001114 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001115 Py_XDECREF(w);
1116 Py_DECREF(it);
1117 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001118 }
Tim Petersc3074532001-05-03 07:00:32 +00001119 break;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001120 }
Tim Petersc3074532001-05-03 07:00:32 +00001121
Guido van Rossum2d951851994-08-29 12:52:16 +00001122 if (w == NULL)
1123 w = x;
1124 else {
Guido van Rossum53451b32001-01-17 15:47:24 +00001125 int cmp = PyObject_RichCompareBool(x, w, op);
1126 if (cmp > 0) {
1127 Py_DECREF(w);
1128 w = x;
1129 }
1130 else if (cmp < 0) {
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001131 Py_DECREF(x);
Tim Petersc3074532001-05-03 07:00:32 +00001132 Py_DECREF(w);
1133 Py_DECREF(it);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001134 return NULL;
1135 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001136 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001137 Py_DECREF(x);
Guido van Rossum2d951851994-08-29 12:52:16 +00001138 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001139 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001140 if (w == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001141 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +00001142 "min() or max() arg is an empty sequence");
Tim Petersc3074532001-05-03 07:00:32 +00001143 Py_DECREF(it);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001144 return w;
1145}
1146
Guido van Rossum79f25d91997-04-29 20:08:16 +00001147static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001148builtin_min(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001149{
Guido van Rossum53451b32001-01-17 15:47:24 +00001150 return min_max(v, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001151}
1152
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001153PyDoc_STRVAR(min_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001154"min(sequence) -> value\n\
1155min(a, b, c, ...) -> value\n\
1156\n\
1157With a single sequence argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001158With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001159
1160
Guido van Rossum79f25d91997-04-29 20:08:16 +00001161static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001162builtin_max(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001163{
Guido van Rossum53451b32001-01-17 15:47:24 +00001164 return min_max(v, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001165}
1166
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001167PyDoc_STRVAR(max_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001168"max(sequence) -> value\n\
1169max(a, b, c, ...) -> value\n\
1170\n\
1171With a single sequence argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001172With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001173
1174
Guido van Rossum79f25d91997-04-29 20:08:16 +00001175static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001176builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001177{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001178 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001179
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001180 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1181 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001182 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001183 "oct() argument can't be converted to oct");
1184 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001185 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001186 return (*nb->nb_oct)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001187}
1188
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001189PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001190"oct(number) -> string\n\
1191\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001192Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001193
1194
Guido van Rossum79f25d91997-04-29 20:08:16 +00001195static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001196builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001197{
Guido van Rossum09095f32000-03-10 23:00:52 +00001198 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001199 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001200
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001201 if (PyString_Check(obj)) {
1202 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001203 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001204 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001205 return PyInt_FromLong(ord);
1206 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001207#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001208 } else if (PyUnicode_Check(obj)) {
1209 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001210 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001211 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001212 return PyInt_FromLong(ord);
1213 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001214#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001215 } else {
1216 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001217 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001218 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001219 return NULL;
1220 }
1221
Guido van Rossumad991772001-01-12 16:03:05 +00001222 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001223 "ord() expected a character, "
1224 "but string of length %d found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001225 size);
1226 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001227}
1228
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001229PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001230"ord(c) -> integer\n\
1231\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001232Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001233
1234
Guido van Rossum79f25d91997-04-29 20:08:16 +00001235static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001236builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001237{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001238 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001239
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001240 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001241 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001242 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001243}
1244
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001245PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001246"pow(x, y[, z]) -> number\n\
1247\n\
1248With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001249equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001250
1251
Guido van Rossum124eff01999-02-23 16:11:01 +00001252/* Return number of items in range/xrange (lo, hi, step). step > 0
1253 * required. Return a value < 0 if & only if the true value is too
1254 * large to fit in a signed long.
1255 */
1256static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001257get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001258{
1259 /* -------------------------------------------------------------
1260 If lo >= hi, the range is empty.
1261 Else if n values are in the range, the last one is
1262 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1263 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1264 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1265 the RHS is non-negative and so truncation is the same as the
1266 floor. Letting M be the largest positive long, the worst case
1267 for the RHS numerator is hi=M, lo=-M-1, and then
1268 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1269 precision to compute the RHS exactly.
1270 ---------------------------------------------------------------*/
1271 long n = 0;
1272 if (lo < hi) {
1273 unsigned long uhi = (unsigned long)hi;
1274 unsigned long ulo = (unsigned long)lo;
1275 unsigned long diff = uhi - ulo - 1;
1276 n = (long)(diff / (unsigned long)step + 1);
1277 }
1278 return n;
1279}
1280
Guido van Rossum79f25d91997-04-29 20:08:16 +00001281static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001282builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001283{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001284 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001285 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001286 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001287
Guido van Rossum79f25d91997-04-29 20:08:16 +00001288 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001289
Guido van Rossum79f25d91997-04-29 20:08:16 +00001290 if (PyTuple_Size(args) <= 1) {
1291 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001292 "l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001293 &ihigh))
1294 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001295 }
1296 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001297 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001298 "ll|l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001299 &ilow, &ihigh, &istep))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001300 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001301 }
1302 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001303 PyErr_SetString(PyExc_ValueError, "range() arg 3 must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001304 return NULL;
1305 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001306 if (istep > 0)
1307 bign = get_len_of_range(ilow, ihigh, istep);
1308 else
1309 bign = get_len_of_range(ihigh, ilow, -istep);
1310 n = (int)bign;
1311 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001312 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001313 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001314 return NULL;
1315 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001316 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001317 if (v == NULL)
1318 return NULL;
1319 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001320 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001321 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001322 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001323 return NULL;
1324 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001325 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001326 ilow += istep;
1327 }
1328 return v;
1329}
1330
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001331PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001332"range([start,] stop[, step]) -> list of integers\n\
1333\n\
1334Return a list containing an arithmetic progression of integers.\n\
1335range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1336When step is given, it specifies the increment (or decrement).\n\
1337For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001338These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001339
1340
Guido van Rossum79f25d91997-04-29 20:08:16 +00001341static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001342builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001343{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001344 PyObject *v = NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001345 PyObject *fin = PySys_GetObject("stdin");
1346 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001347
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001348 if (!PyArg_UnpackTuple(args, "[raw_]input", 0, 1, &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001349 return NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001350
1351 if (fin == NULL) {
1352 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdin");
1353 return NULL;
1354 }
1355 if (fout == NULL) {
1356 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
1357 return NULL;
1358 }
1359 if (PyFile_SoftSpace(fout, 0)) {
1360 if (PyFile_WriteString(" ", fout) != 0)
1361 return NULL;
1362 }
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001363 if (PyFile_Check (fin) && PyFile_Check (fout)
1364 && isatty(fileno(PyFile_AsFile(fin)))
1365 && isatty(fileno(PyFile_AsFile(fout)))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001366 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001367 char *prompt;
1368 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001369 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001370 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001371 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001372 if (po == NULL)
1373 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001374 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001375 if (prompt == NULL)
1376 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001377 }
1378 else {
1379 po = NULL;
1380 prompt = "";
1381 }
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001382 s = PyOS_Readline(PyFile_AsFile (fin), PyFile_AsFile (fout),
1383 prompt);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001384 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001385 if (s == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001386 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001387 return NULL;
1388 }
1389 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001390 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001391 result = NULL;
1392 }
1393 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001394 size_t len = strlen(s);
1395 if (len > INT_MAX) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001396 PyErr_SetString(PyExc_OverflowError,
1397 "input too long");
Guido van Rossum106f2da2000-06-28 21:12:25 +00001398 result = NULL;
1399 }
1400 else {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001401 result = PyString_FromStringAndSize(s,
1402 (int)(len-1));
Guido van Rossum106f2da2000-06-28 21:12:25 +00001403 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001404 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001405 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001406 return result;
1407 }
Guido van Rossum90933611991-06-07 16:10:43 +00001408 if (v != NULL) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001409 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001410 return NULL;
1411 }
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001412 return PyFile_GetLine(fin, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001413}
1414
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001415PyDoc_STRVAR(raw_input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001416"raw_input([prompt]) -> string\n\
1417\n\
1418Read a string from standard input. The trailing newline is stripped.\n\
1419If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1420On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001421is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001422
1423
Guido van Rossum79f25d91997-04-29 20:08:16 +00001424static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001425builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001426{
Tim Peters15d81ef2001-05-04 04:39:21 +00001427 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001428
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001429 if (!PyArg_UnpackTuple(args, "reduce", 2, 3, &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001430 return NULL;
1431 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001432 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001433
Tim Peters15d81ef2001-05-04 04:39:21 +00001434 it = PyObject_GetIter(seq);
1435 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001436 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001437 "reduce() arg 2 must support iteration");
1438 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001439 return NULL;
1440 }
1441
Guido van Rossum79f25d91997-04-29 20:08:16 +00001442 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001443 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001444
Tim Peters15d81ef2001-05-04 04:39:21 +00001445 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001446 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001447
1448 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001449 Py_DECREF(args);
1450 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001451 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001452 }
1453
Tim Peters15d81ef2001-05-04 04:39:21 +00001454 op2 = PyIter_Next(it);
1455 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001456 if (PyErr_Occurred())
1457 goto Fail;
1458 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001459 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001460
Guido van Rossum2d951851994-08-29 12:52:16 +00001461 if (result == NULL)
1462 result = op2;
1463 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001464 PyTuple_SetItem(args, 0, result);
1465 PyTuple_SetItem(args, 1, op2);
1466 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001467 goto Fail;
1468 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001469 }
1470
Guido van Rossum79f25d91997-04-29 20:08:16 +00001471 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001472
Guido van Rossum2d951851994-08-29 12:52:16 +00001473 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001474 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001475 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001476
Tim Peters15d81ef2001-05-04 04:39:21 +00001477 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001478 return result;
1479
Guido van Rossum2d951851994-08-29 12:52:16 +00001480Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001481 Py_XDECREF(args);
1482 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001483 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001484 return NULL;
1485}
1486
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001487PyDoc_STRVAR(reduce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001488"reduce(function, sequence[, initial]) -> value\n\
1489\n\
1490Apply a function of two arguments cumulatively to the items of a sequence,\n\
1491from left to right, so as to reduce the sequence to a single value.\n\
1492For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1493((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1494of the sequence in the calculation, and serves as a default when the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001495sequence is empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001496
1497
Guido van Rossum79f25d91997-04-29 20:08:16 +00001498static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001499builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001500{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001501 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001502}
1503
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001504PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001505"reload(module) -> module\n\
1506\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001507Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001508
1509
Guido van Rossum79f25d91997-04-29 20:08:16 +00001510static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001511builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001512{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001513 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001514}
1515
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001516PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001517"repr(object) -> string\n\
1518\n\
1519Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001520For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001521
1522
Guido van Rossum79f25d91997-04-29 20:08:16 +00001523static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001524builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001525{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001526 double x;
1527 double f;
1528 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001529 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001530
Guido van Rossum79f25d91997-04-29 20:08:16 +00001531 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001532 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001533 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001534 i = abs(ndigits);
1535 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001536 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001537 if (ndigits < 0)
1538 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001539 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00001540 x *= f;
1541 if (x >= 0.0)
1542 x = floor(x + 0.5);
1543 else
1544 x = ceil(x - 0.5);
1545 if (ndigits < 0)
1546 x *= f;
1547 else
1548 x /= f;
1549 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001550}
1551
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001552PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001553"round(number[, ndigits]) -> floating point number\n\
1554\n\
1555Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001556This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001557
1558
Guido van Rossum79f25d91997-04-29 20:08:16 +00001559static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001560builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001561{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001562 PyObject *v = NULL;
1563 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001564
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001565 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001566 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001567 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001568 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001569 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001570 if (!PyErr_Occurred())
1571 PyErr_SetString(PyExc_SystemError,
1572 "no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001573 }
1574 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001575 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001576 }
1577 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001578 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001579 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001580 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001581 "vars() argument must have __dict__ attribute");
1582 return NULL;
1583 }
1584 }
1585 return d;
1586}
1587
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001588PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001589"vars([object]) -> dictionary\n\
1590\n\
1591Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001592With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001593
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001594static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001595builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001596{
1597 PyObject *inst;
1598 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001599 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001600
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001601 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001602 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001603
Guido van Rossum823649d2001-03-21 18:40:58 +00001604 retval = PyObject_IsInstance(inst, cls);
1605 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001606 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001607 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001608}
1609
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001610PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001611"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001612\n\
1613Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001614With a type as second argument, return whether that is the object's type.\n\
1615The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001616isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001617
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001618
1619static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001620builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001621{
1622 PyObject *derived;
1623 PyObject *cls;
1624 int retval;
1625
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001626 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001627 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001628
Guido van Rossum823649d2001-03-21 18:40:58 +00001629 retval = PyObject_IsSubclass(derived, cls);
1630 if (retval < 0)
1631 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001632 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001633}
1634
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001635PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001636"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001637\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00001638Return whether class C is a subclass (i.e., a derived class) of class B.\n\
1639When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
1640is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001641
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001642
Barry Warsawbd599b52000-08-03 15:45:29 +00001643static PyObject*
1644builtin_zip(PyObject *self, PyObject *args)
1645{
1646 PyObject *ret;
Tim Peters67d687a2002-04-29 21:27:32 +00001647 const int itemsize = PySequence_Length(args);
Tim Peters8572b4f2001-05-06 01:05:02 +00001648 int i;
1649 PyObject *itlist; /* tuple of iterators */
Tim Peters67d687a2002-04-29 21:27:32 +00001650 int len; /* guess at result length */
Barry Warsawbd599b52000-08-03 15:45:29 +00001651
1652 if (itemsize < 1) {
1653 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001654 "zip() requires at least one sequence");
Barry Warsawbd599b52000-08-03 15:45:29 +00001655 return NULL;
1656 }
1657 /* args must be a tuple */
1658 assert(PyTuple_Check(args));
1659
Tim Peters39a86c22002-05-12 07:19:38 +00001660 /* Guess at result length: the shortest of the input lengths.
1661 If some argument refuses to say, we refuse to guess too, lest
1662 an argument like xrange(sys.maxint) lead us astray.*/
Tim Peters67d687a2002-04-29 21:27:32 +00001663 len = -1; /* unknown */
1664 for (i = 0; i < itemsize; ++i) {
1665 PyObject *item = PyTuple_GET_ITEM(args, i);
1666 int thislen = PySequence_Length(item);
Tim Peters39a86c22002-05-12 07:19:38 +00001667 if (thislen < 0) {
Tim Peters67d687a2002-04-29 21:27:32 +00001668 PyErr_Clear();
Tim Peters39a86c22002-05-12 07:19:38 +00001669 len = -1;
1670 break;
1671 }
Tim Peters67d687a2002-04-29 21:27:32 +00001672 else if (len < 0 || thislen < len)
1673 len = thislen;
1674 }
1675
Tim Peters8572b4f2001-05-06 01:05:02 +00001676 /* allocate result list */
Tim Peters67d687a2002-04-29 21:27:32 +00001677 if (len < 0)
1678 len = 10; /* arbitrary */
1679 if ((ret = PyList_New(len)) == NULL)
Barry Warsawbd599b52000-08-03 15:45:29 +00001680 return NULL;
1681
Tim Peters8572b4f2001-05-06 01:05:02 +00001682 /* obtain iterators */
1683 itlist = PyTuple_New(itemsize);
1684 if (itlist == NULL)
1685 goto Fail_ret;
1686 for (i = 0; i < itemsize; ++i) {
1687 PyObject *item = PyTuple_GET_ITEM(args, i);
1688 PyObject *it = PyObject_GetIter(item);
1689 if (it == NULL) {
1690 if (PyErr_ExceptionMatches(PyExc_TypeError))
1691 PyErr_Format(PyExc_TypeError,
1692 "zip argument #%d must support iteration",
1693 i+1);
1694 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00001695 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001696 PyTuple_SET_ITEM(itlist, i, it);
1697 }
Barry Warsawbd599b52000-08-03 15:45:29 +00001698
Tim Peters8572b4f2001-05-06 01:05:02 +00001699 /* build result into ret list */
Tim Peters67d687a2002-04-29 21:27:32 +00001700 for (i = 0; ; ++i) {
1701 int j;
Tim Peters8572b4f2001-05-06 01:05:02 +00001702 PyObject *next = PyTuple_New(itemsize);
1703 if (!next)
1704 goto Fail_ret_itlist;
1705
Tim Peters67d687a2002-04-29 21:27:32 +00001706 for (j = 0; j < itemsize; j++) {
1707 PyObject *it = PyTuple_GET_ITEM(itlist, j);
Tim Peters8572b4f2001-05-06 01:05:02 +00001708 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00001709 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00001710 if (PyErr_Occurred()) {
1711 Py_DECREF(ret);
1712 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00001713 }
1714 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00001715 Py_DECREF(itlist);
Tim Peters67d687a2002-04-29 21:27:32 +00001716 goto Done;
Barry Warsawbd599b52000-08-03 15:45:29 +00001717 }
Tim Peters67d687a2002-04-29 21:27:32 +00001718 PyTuple_SET_ITEM(next, j, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00001719 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001720
Tim Peters67d687a2002-04-29 21:27:32 +00001721 if (i < len)
1722 PyList_SET_ITEM(ret, i, next);
1723 else {
1724 int status = PyList_Append(ret, next);
1725 Py_DECREF(next);
1726 ++len;
1727 if (status < 0)
1728 goto Fail_ret_itlist;
1729 }
Barry Warsawbd599b52000-08-03 15:45:29 +00001730 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001731
Tim Peters67d687a2002-04-29 21:27:32 +00001732Done:
1733 if (ret != NULL && i < len) {
1734 /* The list is too big. */
1735 if (PyList_SetSlice(ret, i, len, NULL) < 0)
1736 return NULL;
1737 }
1738 return ret;
1739
Tim Peters8572b4f2001-05-06 01:05:02 +00001740Fail_ret_itlist:
1741 Py_DECREF(itlist);
1742Fail_ret:
1743 Py_DECREF(ret);
1744 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00001745}
1746
1747
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001748PyDoc_STRVAR(zip_doc,
Barry Warsawbd599b52000-08-03 15:45:29 +00001749"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
1750\n\
1751Return a list of tuples, where each tuple contains the i-th element\n\
1752from each of the argument sequences. The returned list is truncated\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001753in length to the length of the shortest argument sequence.");
Barry Warsawbd599b52000-08-03 15:45:29 +00001754
1755
Guido van Rossum79f25d91997-04-29 20:08:16 +00001756static PyMethodDef builtin_methods[] = {
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001757 {"__import__", builtin___import__, METH_VARARGS, import_doc},
1758 {"abs", builtin_abs, METH_O, abs_doc},
1759 {"apply", builtin_apply, METH_VARARGS, apply_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001760 {"callable", builtin_callable, METH_O, callable_doc},
1761 {"chr", builtin_chr, METH_VARARGS, chr_doc},
1762 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
1763 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
1764 {"compile", builtin_compile, METH_VARARGS, compile_doc},
1765 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
1766 {"dir", builtin_dir, METH_VARARGS, dir_doc},
1767 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
1768 {"eval", builtin_eval, METH_VARARGS, eval_doc},
1769 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
1770 {"filter", builtin_filter, METH_VARARGS, filter_doc},
1771 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
1772 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
1773 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
1774 {"hash", builtin_hash, METH_O, hash_doc},
1775 {"hex", builtin_hex, METH_O, hex_doc},
1776 {"id", builtin_id, METH_O, id_doc},
1777 {"input", builtin_input, METH_VARARGS, input_doc},
1778 {"intern", builtin_intern, METH_VARARGS, intern_doc},
1779 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
1780 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
1781 {"iter", builtin_iter, METH_VARARGS, iter_doc},
1782 {"len", builtin_len, METH_O, len_doc},
1783 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
1784 {"map", builtin_map, METH_VARARGS, map_doc},
1785 {"max", builtin_max, METH_VARARGS, max_doc},
1786 {"min", builtin_min, METH_VARARGS, min_doc},
1787 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001788 {"ord", builtin_ord, METH_O, ord_doc},
1789 {"pow", builtin_pow, METH_VARARGS, pow_doc},
1790 {"range", builtin_range, METH_VARARGS, range_doc},
1791 {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc},
1792 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
1793 {"reload", builtin_reload, METH_O, reload_doc},
1794 {"repr", builtin_repr, METH_O, repr_doc},
1795 {"round", builtin_round, METH_VARARGS, round_doc},
1796 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001797#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001798 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001799#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001800 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001801 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00001802 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00001803};
1804
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001805PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001806"Built-in functions, exceptions, and other objects.\n\
1807\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001808Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001809
Guido van Rossum25ce5661997-08-02 03:10:38 +00001810PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001811_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001812{
Fred Drake5550de32000-06-20 04:54:19 +00001813 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001814 mod = Py_InitModule4("__builtin__", builtin_methods,
1815 builtin_doc, (PyObject *)NULL,
1816 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001817 if (mod == NULL)
1818 return NULL;
1819 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00001820
Tim Peters7571a0f2003-03-23 17:52:28 +00001821#ifdef Py_TRACE_REFS
1822 /* __builtin__ exposes a number of statically allocated objects
1823 * that, before this code was added in 2.3, never showed up in
1824 * the list of "all objects" maintained by Py_TRACE_REFS. As a
1825 * result, programs leaking references to None and False (etc)
1826 * couldn't be diagnosed by examining sys.getobjects(0).
1827 */
1828#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
1829#else
1830#define ADD_TO_ALL(OBJECT) (void)0
1831#endif
1832
Tim Peters4b7625e2001-09-13 21:37:17 +00001833#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00001834 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
1835 return NULL; \
1836 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00001837
1838 SETBUILTIN("None", Py_None);
1839 SETBUILTIN("Ellipsis", Py_Ellipsis);
1840 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001841 SETBUILTIN("False", Py_False);
1842 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00001843 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001844 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001845 SETBUILTIN("buffer", &PyBuffer_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001846 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001847#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00001848 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001849#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00001850 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00001851 SETBUILTIN("enumerate", &PyEnum_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001852 SETBUILTIN("float", &PyFloat_Type);
1853 SETBUILTIN("property", &PyProperty_Type);
1854 SETBUILTIN("int", &PyInt_Type);
1855 SETBUILTIN("list", &PyList_Type);
1856 SETBUILTIN("long", &PyLong_Type);
1857 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001858 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001859 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
1860 SETBUILTIN("str", &PyString_Type);
1861 SETBUILTIN("super", &PySuper_Type);
1862 SETBUILTIN("tuple", &PyTuple_Type);
1863 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00001864 SETBUILTIN("xrange", &PyRange_Type);
Tim Peters742dfd62001-09-13 21:49:44 +00001865
1866 /* Note that open() is just an alias of file(). */
1867 SETBUILTIN("open", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001868 SETBUILTIN("file", &PyFile_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001869#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00001870 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001871#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00001872 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00001873 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
1874 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001875 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00001876 }
1877 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00001878
Guido van Rossum25ce5661997-08-02 03:10:38 +00001879 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00001880#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00001881#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00001882}
1883
Guido van Rossume77a7571993-11-03 15:01:26 +00001884/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00001885
Guido van Rossum79f25d91997-04-29 20:08:16 +00001886static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001887filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001888{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001889 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001890 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001891 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001892
Guido van Rossumb7b45621995-08-04 04:07:45 +00001893 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00001894 if (PyTuple_CheckExact(tuple))
1895 Py_INCREF(tuple);
1896 else
1897 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00001898 return tuple;
1899 }
1900
Guido van Rossum79f25d91997-04-29 20:08:16 +00001901 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00001902 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001903
Guido van Rossum12d12c51993-10-26 17:58:25 +00001904 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001905 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001906 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001907
Walter Dörwald8dd19322003-02-10 17:36:40 +00001908 if (tuple->ob_type->tp_as_sequence &&
1909 tuple->ob_type->tp_as_sequence->sq_item) {
1910 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
1911 } else {
1912 PyErr_SetString(PyExc_TypeError, "unsubscriptable object");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001913 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00001914 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001915 if (func == Py_None) {
1916 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001917 good = item;
1918 }
1919 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001920 PyObject *arg = Py_BuildValue("(O)", item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001921 if (arg == NULL)
1922 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001923 good = PyEval_CallObject(func, arg);
1924 Py_DECREF(arg);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001925 if (good == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001926 goto Fail_1;
1927 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001928 ok = PyObject_IsTrue(good);
1929 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001930 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001931 Py_INCREF(item);
1932 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001933 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001934 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001935 }
1936
Tim Peters4324aa32001-05-28 22:30:08 +00001937 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001938 return NULL;
1939
Guido van Rossum12d12c51993-10-26 17:58:25 +00001940 return result;
1941
Guido van Rossum12d12c51993-10-26 17:58:25 +00001942Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001943 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001944 return NULL;
1945}
1946
1947
Guido van Rossume77a7571993-11-03 15:01:26 +00001948/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00001949
Guido van Rossum79f25d91997-04-29 20:08:16 +00001950static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001951filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001952{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001953 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001954 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001955 int len = PyString_Size(strobj);
Walter Dörwald903f1e02003-02-04 16:28:00 +00001956 int outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001957
Guido van Rossum79f25d91997-04-29 20:08:16 +00001958 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00001959 /* If it's a real string we can return the original,
1960 * as no character is ever false and __getitem__
1961 * does return this character. If it's a subclass
1962 * we must go through the __getitem__ loop */
1963 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00001964 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00001965 return strobj;
1966 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001967 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001968 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00001969 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001970
Guido van Rossum12d12c51993-10-26 17:58:25 +00001971 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00001972 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001973 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001974
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001975 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
1976 if (item == NULL)
1977 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00001978 if (func==Py_None) {
1979 ok = 1;
1980 } else {
1981 PyObject *arg, *good;
1982 arg = Py_BuildValue("(O)", item);
1983 if (arg == NULL) {
1984 Py_DECREF(item);
1985 goto Fail_1;
1986 }
1987 good = PyEval_CallObject(func, arg);
1988 Py_DECREF(arg);
1989 if (good == NULL) {
1990 Py_DECREF(item);
1991 goto Fail_1;
1992 }
1993 ok = PyObject_IsTrue(good);
1994 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00001995 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00001996 if (ok) {
1997 int reslen;
1998 if (!PyString_Check(item)) {
1999 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2000 " __getitem__ returned different type");
2001 Py_DECREF(item);
2002 goto Fail_1;
2003 }
2004 reslen = PyString_GET_SIZE(item);
2005 if (reslen == 1) {
2006 PyString_AS_STRING(result)[j++] =
2007 PyString_AS_STRING(item)[0];
2008 } else {
2009 /* do we need more space? */
2010 int need = j + reslen + len-i-1;
2011 if (need > outlen) {
2012 /* overallocate, to avoid reallocations */
2013 if (need<2*outlen)
2014 need = 2*outlen;
2015 if (_PyString_Resize(&result, need)) {
2016 Py_DECREF(item);
2017 return NULL;
2018 }
2019 outlen = need;
2020 }
2021 memcpy(
2022 PyString_AS_STRING(result) + j,
2023 PyString_AS_STRING(item),
2024 reslen
2025 );
2026 j += reslen;
2027 }
2028 }
Tim Peters388ed082001-04-07 20:34:48 +00002029 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002030 }
2031
Walter Dörwald903f1e02003-02-04 16:28:00 +00002032 if (j < outlen)
Tim Peters5de98422002-04-27 18:44:32 +00002033 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002034
Guido van Rossum12d12c51993-10-26 17:58:25 +00002035 return result;
2036
Guido van Rossum12d12c51993-10-26 17:58:25 +00002037Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002038 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002039 return NULL;
2040}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002041
2042#ifdef Py_USING_UNICODE
2043/* Helper for filter(): filter a Unicode object through a function */
2044
2045static PyObject *
2046filterunicode(PyObject *func, PyObject *strobj)
2047{
2048 PyObject *result;
2049 register int i, j;
2050 int len = PyUnicode_GetSize(strobj);
Walter Dörwald903f1e02003-02-04 16:28:00 +00002051 int outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002052
2053 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002054 /* If it's a real string we can return the original,
2055 * as no character is ever false and __getitem__
2056 * does return this character. If it's a subclass
2057 * we must go through the __getitem__ loop */
2058 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002059 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002060 return strobj;
2061 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002062 }
2063 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2064 return NULL;
2065
2066 for (i = j = 0; i < len; ++i) {
2067 PyObject *item, *arg, *good;
2068 int ok;
2069
2070 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2071 if (item == NULL)
2072 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002073 if (func == Py_None) {
2074 ok = 1;
2075 } else {
2076 arg = Py_BuildValue("(O)", item);
2077 if (arg == NULL) {
2078 Py_DECREF(item);
2079 goto Fail_1;
2080 }
2081 good = PyEval_CallObject(func, arg);
2082 Py_DECREF(arg);
2083 if (good == NULL) {
2084 Py_DECREF(item);
2085 goto Fail_1;
2086 }
2087 ok = PyObject_IsTrue(good);
2088 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002089 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002090 if (ok) {
2091 int reslen;
2092 if (!PyUnicode_Check(item)) {
2093 PyErr_SetString(PyExc_TypeError, "can't filter unicode to unicode:"
2094 " __getitem__ returned different type");
2095 Py_DECREF(item);
2096 goto Fail_1;
2097 }
2098 reslen = PyUnicode_GET_SIZE(item);
2099 if (reslen == 1) {
2100 PyUnicode_AS_UNICODE(result)[j++] =
2101 PyUnicode_AS_UNICODE(item)[0];
2102 } else {
2103 /* do we need more space? */
2104 int need = j + reslen + len-i-1;
2105 if (need > outlen) {
2106 /* overallocate, to avoid reallocations */
2107 if (need<2*outlen)
2108 need = 2*outlen;
2109 if (PyUnicode_Resize(&result, need)) {
2110 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002111 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002112 }
2113 outlen = need;
2114 }
2115 memcpy(
2116 PyUnicode_AS_UNICODE(result) + j,
2117 PyUnicode_AS_UNICODE(item),
2118 reslen*sizeof(Py_UNICODE)
2119 );
2120 j += reslen;
2121 }
2122 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002123 Py_DECREF(item);
2124 }
2125
Walter Dörwald903f1e02003-02-04 16:28:00 +00002126 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002127 PyUnicode_Resize(&result, j);
2128
2129 return result;
2130
2131Fail_1:
2132 Py_DECREF(result);
2133 return NULL;
2134}
2135#endif