blob: c280cb412770cced774b21bc77a9816793e97673 [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\
Raymond Hettingerff41c482003-04-06 09:01:11 +0000115Note that classes are callable, as are instances with a __call__() method.\n\
116\n\
117Deprecated since release 2.3. Instead, use the extended call syntax:\n\
118 function(*args, **keywords).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000119
120
Guido van Rossum79f25d91997-04-29 20:08:16 +0000121static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000122builtin_callable(PyObject *self, PyObject *v)
Guido van Rossum2d951851994-08-29 12:52:16 +0000123{
Guido van Rossum77f6a652002-04-03 22:41:51 +0000124 return PyBool_FromLong((long)PyCallable_Check(v));
Guido van Rossum2d951851994-08-29 12:52:16 +0000125}
126
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000127PyDoc_STRVAR(callable_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000128"callable(object) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000129\n\
130Return whether the object is callable (i.e., some kind of function).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000131Note that classes are callable, as are instances with a __call__() method.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000132
133
Guido van Rossum79f25d91997-04-29 20:08:16 +0000134static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000135builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000136{
Guido van Rossumc7903a12002-08-16 07:04:56 +0000137 PyObject *func, *seq, *result, *it, *arg;
Tim Peters0e57abf2001-05-02 07:39:38 +0000138 int len; /* guess for result list size */
Tim Petersf4848da2001-05-05 00:14:56 +0000139 register int j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000140
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000141 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000142 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000143
Tim Peters0e57abf2001-05-02 07:39:38 +0000144 /* Strings and tuples return a result of the same type. */
145 if (PyString_Check(seq))
146 return filterstring(func, seq);
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000147#ifdef Py_USING_UNICODE
148 if (PyUnicode_Check(seq))
149 return filterunicode(func, seq);
150#endif
Tim Peters0e57abf2001-05-02 07:39:38 +0000151 if (PyTuple_Check(seq))
152 return filtertuple(func, seq);
153
154 /* Get iterator. */
155 it = PyObject_GetIter(seq);
156 if (it == NULL)
157 return NULL;
158
159 /* Guess a result list size. */
160 len = -1; /* unknown */
161 if (PySequence_Check(seq) &&
162 seq->ob_type->tp_as_sequence->sq_length) {
163 len = PySequence_Size(seq);
164 if (len < 0)
165 PyErr_Clear();
Guido van Rossum12d12c51993-10-26 17:58:25 +0000166 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000167 if (len < 0)
168 len = 8; /* arbitrary */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000169
Guido van Rossumc7903a12002-08-16 07:04:56 +0000170 /* Pre-allocate argument list tuple. */
171 arg = PyTuple_New(1);
172 if (arg == NULL)
173 goto Fail_arg;
174
Tim Peters0e57abf2001-05-02 07:39:38 +0000175 /* Get a result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000176 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000177 /* Eww - can modify the list in-place. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000178 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000179 result = seq;
180 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000181 else {
Tim Peters0e57abf2001-05-02 07:39:38 +0000182 result = PyList_New(len);
183 if (result == NULL)
184 goto Fail_it;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000185 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000186
Tim Peters0e57abf2001-05-02 07:39:38 +0000187 /* Build the result list. */
Tim Petersf4848da2001-05-05 00:14:56 +0000188 j = 0;
189 for (;;) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000190 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000191 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000192
Tim Peters0e57abf2001-05-02 07:39:38 +0000193 item = PyIter_Next(it);
194 if (item == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +0000195 if (PyErr_Occurred())
196 goto Fail_result_it;
Tim Peters0e57abf2001-05-02 07:39:38 +0000197 break;
Guido van Rossum2d951851994-08-29 12:52:16 +0000198 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000199
Guido van Rossum79f25d91997-04-29 20:08:16 +0000200 if (func == Py_None) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000201 ok = PyObject_IsTrue(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000202 }
203 else {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000204 PyObject *good;
205 PyTuple_SET_ITEM(arg, 0, item);
206 good = PyObject_Call(func, arg, NULL);
207 PyTuple_SET_ITEM(arg, 0, NULL);
Guido van Rossum58b68731995-01-10 17:40:55 +0000208 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000209 Py_DECREF(item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000210 goto Fail_result_it;
Guido van Rossum58b68731995-01-10 17:40:55 +0000211 }
Guido van Rossumc7903a12002-08-16 07:04:56 +0000212 ok = PyObject_IsTrue(good);
213 Py_DECREF(good);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000214 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000215 if (ok) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000216 if (j < len)
217 PyList_SET_ITEM(result, j, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000218 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000219 int status = PyList_Append(result, item);
Barry Warsawfa77e091999-01-28 18:49:12 +0000220 Py_DECREF(item);
221 if (status < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000222 goto Fail_result_it;
Guido van Rossum2d951851994-08-29 12:52:16 +0000223 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000224 ++j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000225 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000226 else
227 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000228 }
229
Guido van Rossum12d12c51993-10-26 17:58:25 +0000230
Tim Peters0e57abf2001-05-02 07:39:38 +0000231 /* Cut back result list if len is too big. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000232 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000233 goto Fail_result_it;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000234
Tim Peters3c6b1482001-05-21 08:07:05 +0000235 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000236 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000237 return result;
238
Tim Peters0e57abf2001-05-02 07:39:38 +0000239Fail_result_it:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000240 Py_DECREF(result);
Tim Peters0e57abf2001-05-02 07:39:38 +0000241Fail_it:
242 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000243Fail_arg:
244 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000245 return NULL;
246}
247
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000248PyDoc_STRVAR(filter_doc,
Tim Petersd50e5442002-03-09 00:06:26 +0000249"filter(function or None, sequence) -> list, tuple, or string\n"
250"\n"
251"Return those items of sequence for which function(item) is true. If\n"
252"function is None, return the items that are true. If sequence is a tuple\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000253"or string, return the same type, else return a list.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000254
Guido van Rossum79f25d91997-04-29 20:08:16 +0000255static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000256builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000257{
258 long x;
259 char s[1];
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000260
Guido van Rossum79f25d91997-04-29 20:08:16 +0000261 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000262 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000263 if (x < 0 || x >= 256) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000264 PyErr_SetString(PyExc_ValueError,
265 "chr() arg not in range(256)");
Guido van Rossum3f5da241990-12-20 15:06:42 +0000266 return NULL;
267 }
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000268 s[0] = (char)x;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000269 return PyString_FromStringAndSize(s, 1);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000270}
271
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000272PyDoc_STRVAR(chr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000273"chr(i) -> character\n\
274\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000275Return a string of one character with ordinal i; 0 <= i < 256.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000276
277
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000278#ifdef Py_USING_UNICODE
Guido van Rossum79f25d91997-04-29 20:08:16 +0000279static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000280builtin_unichr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000281{
282 long x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000283
284 if (!PyArg_ParseTuple(args, "l:unichr", &x))
285 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000286
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000287 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000288}
289
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000290PyDoc_STRVAR(unichr_doc,
Fred Drake078b24f2000-04-13 02:42:50 +0000291"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000292\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000293Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.");
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000294#endif
Guido van Rossum09095f32000-03-10 23:00:52 +0000295
296
297static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000298builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000299{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000300 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000301 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000302
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000303 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000304 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000305 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000306 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000307 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000308}
309
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000310PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000311"cmp(x, y) -> integer\n\
312\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000313Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000314
315
Guido van Rossum79f25d91997-04-29 20:08:16 +0000316static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000317builtin_coerce(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000318{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000319 PyObject *v, *w;
320 PyObject *res;
Guido van Rossum5524a591995-01-10 15:26:20 +0000321
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000322 if (!PyArg_UnpackTuple(args, "coerce", 2, 2, &v, &w))
Guido van Rossum5524a591995-01-10 15:26:20 +0000323 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000324 if (PyNumber_Coerce(&v, &w) < 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +0000325 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000326 res = Py_BuildValue("(OO)", v, w);
327 Py_DECREF(v);
328 Py_DECREF(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +0000329 return res;
330}
331
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000332PyDoc_STRVAR(coerce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000333"coerce(x, y) -> None or (x1, y1)\n\
334\n\
335When 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 +0000336containing the coerced values. When they can't be coerced, return None.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000337
338
Guido van Rossum79f25d91997-04-29 20:08:16 +0000339static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000340builtin_compile(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000341{
342 char *str;
343 char *filename;
344 char *startstr;
345 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000346 int dont_inherit = 0;
347 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000348 PyCompilerFlags cf;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000349 PyObject *result, *cmd, *tmp = NULL;
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000350 int length;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000351
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000352 if (!PyArg_ParseTuple(args, "Oss|ii:compile", &cmd, &filename,
Tim Peters6cd6a822001-08-17 22:11:27 +0000353 &startstr, &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000354 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000355
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000356 cf.cf_flags = supplied_flags;
357
358#ifdef Py_USING_UNICODE
359 if (PyUnicode_Check(cmd)) {
360 tmp = PyUnicode_AsUTF8String(cmd);
361 if (tmp == NULL)
362 return NULL;
363 cmd = tmp;
364 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
365 }
366#endif
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000367 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &length))
368 return NULL;
Tim Peters2c646c92003-02-10 14:48:29 +0000369 if ((size_t)length != strlen(str)) {
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000370 PyErr_SetString(PyExc_TypeError,
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000371 "expected string without null bytes");
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000372 return NULL;
373 }
374
Guido van Rossum5b722181993-03-30 17:46:03 +0000375 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000376 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000377 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000378 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000379 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000380 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000381 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000382 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000383 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossum5b722181993-03-30 17:46:03 +0000384 return NULL;
385 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000386
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000387 if (supplied_flags &
388 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT))
389 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000390 PyErr_SetString(PyExc_ValueError,
391 "compile(): unrecognised flags");
392 return NULL;
393 }
394 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
395
Tim Peters6cd6a822001-08-17 22:11:27 +0000396 if (!dont_inherit) {
397 PyEval_MergeCompilerFlags(&cf);
398 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000399 result = Py_CompileStringFlags(str, filename, start, &cf);
400 Py_XDECREF(tmp);
401 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000402}
403
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000404PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000405"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000406\n\
407Compile the source string (a Python module, statement or expression)\n\
408into a code object that can be executed by the exec statement or eval().\n\
409The filename will be used for run-time error messages.\n\
410The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000411single (interactive) statement, or 'eval' to compile an expression.\n\
412The flags argument, if present, controls which future statements influence\n\
413the compilation of the code.\n\
414The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
415the effects of any future statements in effect in the code calling\n\
416compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000417in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000418
Guido van Rossum79f25d91997-04-29 20:08:16 +0000419static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000420builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000421{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000422 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000423
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000424 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000425 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000426 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000427}
428
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000429PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000430"dir([object]) -> list of strings\n"
431"\n"
432"Return an alphabetized list of names comprising (some of) the attributes\n"
433"of the given object, and of attributes reachable from it:\n"
434"\n"
435"No argument: the names in the current scope.\n"
436"Module object: the module attributes.\n"
Tim Peters37a309d2001-09-04 01:20:04 +0000437"Type or class object: its attributes, and recursively the attributes of\n"
438" its bases.\n"
Tim Peters5d2b77c2001-09-03 05:47:38 +0000439"Otherwise: its attributes, its class's attributes, and recursively the\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000440" attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000441
Guido van Rossum79f25d91997-04-29 20:08:16 +0000442static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000443builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000444{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000445 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000446
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000447 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000448 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000449 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000450}
451
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000452PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000453"divmod(x, y) -> (div, mod)\n\
454\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000455Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000456
457
Guido van Rossum79f25d91997-04-29 20:08:16 +0000458static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000459builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000460{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000461 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000462 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000463 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000464 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000465
Guido van Rossum79f25d91997-04-29 20:08:16 +0000466 if (!PyArg_ParseTuple(args, "O|O!O!:eval",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000467 &cmd,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000468 &PyDict_Type, &globals,
469 &PyDict_Type, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000470 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000471 if (globals == Py_None) {
472 globals = PyEval_GetGlobals();
473 if (locals == Py_None)
474 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000475 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000476 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000477 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000478
Guido van Rossum79f25d91997-04-29 20:08:16 +0000479 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
480 if (PyDict_SetItemString(globals, "__builtins__",
481 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000482 return NULL;
483 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000484
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000485 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000486 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000487 PyErr_SetString(PyExc_TypeError,
488 "code object passed to eval() may not contain free variables");
489 return NULL;
490 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000491 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000492 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000493
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000494 if (!PyString_Check(cmd) &&
495 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000496 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000497 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000498 return NULL;
499 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000500 cf.cf_flags = 0;
501
502#ifdef Py_USING_UNICODE
503 if (PyUnicode_Check(cmd)) {
504 tmp = PyUnicode_AsUTF8String(cmd);
505 if (tmp == NULL)
506 return NULL;
507 cmd = tmp;
508 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
509 }
510#endif
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000511 if (PyString_AsStringAndSize(cmd, &str, NULL))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000512 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000513 while (*str == ' ' || *str == '\t')
514 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000515
Tim Peters9fa96be2001-08-17 23:04:59 +0000516 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000517 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
518 Py_XDECREF(tmp);
519 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000520}
521
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000522PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000523"eval(source[, globals[, locals]]) -> value\n\
524\n\
525Evaluate the source in the context of globals and locals.\n\
526The source may be a string representing a Python expression\n\
527or a code object as returned by compile().\n\
528The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000529globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000530
531
Guido van Rossum79f25d91997-04-29 20:08:16 +0000532static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000533builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000534{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000535 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000536 PyObject *globals = Py_None, *locals = Py_None;
537 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000538 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000539 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000540 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000541
Guido van Rossum79f25d91997-04-29 20:08:16 +0000542 if (!PyArg_ParseTuple(args, "s|O!O!:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000543 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000544 &PyDict_Type, &globals,
545 &PyDict_Type, &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000546 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000547 if (globals == Py_None) {
548 globals = PyEval_GetGlobals();
549 if (locals == Py_None)
550 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000551 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000552 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000553 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000554 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
555 if (PyDict_SetItemString(globals, "__builtins__",
556 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000557 return NULL;
558 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000559
560 exists = 0;
561 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000562#if defined(PLAN9)
563 {
564 Dir *d;
565
566 if ((d = dirstat(filename))!=nil) {
567 if(d->mode & DMDIR)
568 werrstr("is a directory");
569 else
570 exists = 1;
571 free(d);
572 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000573 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000574#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000575 if (object_exists(filename)) {
576 if (isdir(filename))
577 errno = EISDIR;
578 else
579 exists = 1;
580 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000581#else /* standard Posix */
582 {
583 struct stat s;
584 if (stat(filename, &s) == 0) {
585 if (S_ISDIR(s.st_mode))
586# if defined(PY_OS2) && defined(PYCC_VACPP)
587 errno = EOS2ERR;
588# else
589 errno = EISDIR;
590# endif
591 else
592 exists = 1;
593 }
594 }
595#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000596
597 if (exists) {
598 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000599 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000600 Py_END_ALLOW_THREADS
601
602 if (fp == NULL) {
603 exists = 0;
604 }
605 }
606
607 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000608 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000609 return NULL;
610 }
Tim Peters5ba58662001-07-16 02:29:45 +0000611 cf.cf_flags = 0;
612 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000613 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000614 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000615 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000616 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000617 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000618 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000619}
620
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000621PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000622"execfile(filename[, globals[, locals]])\n\
623\n\
624Read and execute a Python script from a file.\n\
625The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000626globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000627
628
Guido van Rossum79f25d91997-04-29 20:08:16 +0000629static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000630builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000631{
Guido van Rossum950ff291998-06-29 13:38:57 +0000632 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000633 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000634
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000635 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000636 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000637#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000638 if (PyUnicode_Check(name)) {
639 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
640 if (name == NULL)
641 return NULL;
642 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000643#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000644
645 if (!PyString_Check(name)) {
646 PyErr_SetString(PyExc_TypeError,
647 "attribute name must be string");
648 return NULL;
649 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000650 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000651 if (result == NULL && dflt != NULL &&
652 PyErr_ExceptionMatches(PyExc_AttributeError))
653 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000654 PyErr_Clear();
655 Py_INCREF(dflt);
656 result = dflt;
657 }
658 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000659}
660
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000661PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000662"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000663\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000664Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
665When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000666exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000667
668
Guido van Rossum79f25d91997-04-29 20:08:16 +0000669static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000670builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000671{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000672 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000673
Guido van Rossum79f25d91997-04-29 20:08:16 +0000674 d = PyEval_GetGlobals();
675 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000676 return d;
677}
678
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000679PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000680"globals() -> dictionary\n\
681\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000682Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000683
684
Guido van Rossum79f25d91997-04-29 20:08:16 +0000685static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000686builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000687{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000688 PyObject *v;
689 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000690
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000691 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000692 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000693#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000694 if (PyUnicode_Check(name)) {
695 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
696 if (name == NULL)
697 return NULL;
698 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000699#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000700
701 if (!PyString_Check(name)) {
702 PyErr_SetString(PyExc_TypeError,
703 "attribute name must be string");
704 return NULL;
705 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000706 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000707 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000708 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000709 Py_INCREF(Py_False);
710 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000711 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000712 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000713 Py_INCREF(Py_True);
714 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000715}
716
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000717PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000718"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000719\n\
720Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000721(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000722
723
Guido van Rossum79f25d91997-04-29 20:08:16 +0000724static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000725builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000726{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000727 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000728}
729
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000730PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000731"id(object) -> integer\n\
732\n\
733Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000734simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000735
736
Guido van Rossum79f25d91997-04-29 20:08:16 +0000737static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000738builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000739{
740 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000741 PyObject *it; /* the iterator object */
742 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000743 } sequence;
744
Guido van Rossum79f25d91997-04-29 20:08:16 +0000745 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000746 sequence *seqs = NULL, *sqp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000747 int n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000748 register int i, j;
749
Guido van Rossum79f25d91997-04-29 20:08:16 +0000750 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000751 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000752 PyErr_SetString(PyExc_TypeError,
753 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000754 return NULL;
755 }
756
Guido van Rossum79f25d91997-04-29 20:08:16 +0000757 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000758 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000759
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000760 if (func == Py_None && n == 1) {
761 /* map(None, S) is the same as list(S). */
762 return PySequence_List(PyTuple_GetItem(args, 1));
763 }
764
Tim Peters4e9afdc2001-05-03 23:54:49 +0000765 /* Get space for sequence descriptors. Must NULL out the iterator
766 * pointers so that jumping to Fail_2 later doesn't see trash.
767 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000768 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
769 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000770 return NULL;
771 }
772 for (i = 0; i < n; ++i) {
773 seqs[i].it = (PyObject*)NULL;
774 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000775 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000776
Tim Peters4e9afdc2001-05-03 23:54:49 +0000777 /* Do a first pass to obtain iterators for the arguments, and set len
778 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000779 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000780 len = 0;
781 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
782 PyObject *curseq;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000783 int curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000784
Tim Peters4e9afdc2001-05-03 23:54:49 +0000785 /* Get iterator. */
786 curseq = PyTuple_GetItem(args, i+1);
787 sqp->it = PyObject_GetIter(curseq);
788 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000789 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000790 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000791 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +0000792 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000793 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000794 goto Fail_2;
795 }
796
Tim Peters4e9afdc2001-05-03 23:54:49 +0000797 /* Update len. */
798 curlen = -1; /* unknown */
799 if (PySequence_Check(curseq) &&
800 curseq->ob_type->tp_as_sequence->sq_length) {
801 curlen = PySequence_Size(curseq);
802 if (curlen < 0)
803 PyErr_Clear();
804 }
Tim Peters748b8bb2001-04-28 08:20:22 +0000805 if (curlen < 0)
Tim Peters4e9afdc2001-05-03 23:54:49 +0000806 curlen = 8; /* arbitrary */
Tim Peters6d6c1a32001-08-02 04:15:00 +0000807 if (curlen > len)
808 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000809 }
810
Tim Peters4e9afdc2001-05-03 23:54:49 +0000811 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000812 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000813 goto Fail_2;
814
Tim Peters4e9afdc2001-05-03 23:54:49 +0000815 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +0000816 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000817 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000818 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000819
Guido van Rossum79f25d91997-04-29 20:08:16 +0000820 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +0000821 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000822 else if ((alist = PyTuple_New(n)) == NULL)
823 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000824
825 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000826 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000827 Py_INCREF(Py_None);
828 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000829 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000830 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000831 item = PyIter_Next(sqp->it);
832 if (item)
833 ++numactive;
834 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000835 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +0000836 Py_XDECREF(alist);
837 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000838 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000839 Py_INCREF(Py_None);
840 item = Py_None;
841 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000842 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000843 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000844 if (alist)
845 PyTuple_SET_ITEM(alist, j, item);
846 else
Guido van Rossum2d951851994-08-29 12:52:16 +0000847 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000848 }
849
Guido van Rossum32120311995-07-10 13:52:21 +0000850 if (!alist)
851 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +0000852
Tim Peters4e9afdc2001-05-03 23:54:49 +0000853 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000854 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +0000855 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000856 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000857
Guido van Rossum79f25d91997-04-29 20:08:16 +0000858 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +0000859 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000860 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000861 value = PyEval_CallObject(func, alist);
862 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000863 if (value == NULL)
864 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000865 }
866 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +0000867 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +0000868 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +0000869 if (status < 0)
870 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000871 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000872 else if (PyList_SetItem(result, i, value) < 0)
873 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000874 }
875
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000876 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
877 goto Fail_1;
878
Tim Peters4e9afdc2001-05-03 23:54:49 +0000879 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000880
Guido van Rossum12d12c51993-10-26 17:58:25 +0000881Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000882 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000883Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +0000884 result = NULL;
885Succeed:
886 assert(seqs);
887 for (i = 0; i < n; ++i)
888 Py_XDECREF(seqs[i].it);
889 PyMem_DEL(seqs);
890 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000891}
892
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000893PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000894"map(function, sequence[, sequence, ...]) -> list\n\
895\n\
896Return a list of the results of applying the function to the items of\n\
897the argument sequence(s). If more than one sequence is given, the\n\
898function is called with an argument list consisting of the corresponding\n\
899item of each sequence, substituting None for missing values when not all\n\
900sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000901the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000902
903
Guido van Rossum79f25d91997-04-29 20:08:16 +0000904static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000905builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000906{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000907 PyObject *v;
908 PyObject *name;
909 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000910
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000911 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000912 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000913 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000914 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000915 Py_INCREF(Py_None);
916 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000917}
918
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000919PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000920"setattr(object, name, value)\n\
921\n\
922Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000923``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000924
925
Guido van Rossum79f25d91997-04-29 20:08:16 +0000926static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000927builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000928{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000929 PyObject *v;
930 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000931
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000932 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +0000933 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000934 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000935 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000936 Py_INCREF(Py_None);
937 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +0000938}
939
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000940PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +0000941"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000942\n\
943Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000944``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000945
946
Guido van Rossum79f25d91997-04-29 20:08:16 +0000947static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000948builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000949{
Guido van Rossum9bfef441993-03-29 10:43:31 +0000950 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000951
Guido van Rossum79f25d91997-04-29 20:08:16 +0000952 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000953 if (x == -1)
954 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000955 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000956}
957
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000958PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000959"hash(object) -> integer\n\
960\n\
961Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000962the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000963
964
Guido van Rossum79f25d91997-04-29 20:08:16 +0000965static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000966builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +0000967{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000968 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000969
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000970 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000971 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000972 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000973 "hex() argument can't be converted to hex");
974 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +0000975 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000976 return (*nb->nb_hex)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +0000977}
978
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000979PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000980"hex(number) -> string\n\
981\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000982Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000983
984
Tim Petersdbd9ba62000-07-09 03:09:57 +0000985static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000986
Guido van Rossum79f25d91997-04-29 20:08:16 +0000987static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000988builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000989{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000990 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000991 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000992 PyObject *res;
993 PyObject *globals, *locals;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000994
995 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000996 if (line == NULL)
997 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000998 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000999 return NULL;
1000 while (*str == ' ' || *str == '\t')
1001 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001002 globals = PyEval_GetGlobals();
1003 locals = PyEval_GetLocals();
1004 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
1005 if (PyDict_SetItemString(globals, "__builtins__",
1006 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +00001007 return NULL;
1008 }
Guido van Rossumb05a5c71997-05-07 17:46:13 +00001009 res = PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001010 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001011 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001012}
1013
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001014PyDoc_STRVAR(input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001015"input([prompt]) -> value\n\
1016\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001017Equivalent to eval(raw_input(prompt)).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001018
1019
Guido van Rossume8811f81997-02-14 15:48:05 +00001020static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001021builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001022{
1023 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001024 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001025 return NULL;
1026 Py_INCREF(s);
1027 PyString_InternInPlace(&s);
1028 return s;
1029}
1030
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001031PyDoc_STRVAR(intern_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001032"intern(string) -> string\n\
1033\n\
1034``Intern'' the given string. This enters the string in the (global)\n\
1035table of interned strings whose purpose is to speed up dictionary lookups.\n\
1036Return the string itself or the previously interned string object with the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001037same value.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001038
1039
Guido van Rossum79f25d91997-04-29 20:08:16 +00001040static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001041builtin_iter(PyObject *self, PyObject *args)
1042{
1043 PyObject *v, *w = NULL;
1044
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001045 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001046 return NULL;
1047 if (w == NULL)
1048 return PyObject_GetIter(v);
1049 if (!PyCallable_Check(v)) {
1050 PyErr_SetString(PyExc_TypeError,
1051 "iter(v, w): v must be callable");
1052 return NULL;
1053 }
1054 return PyCallIter_New(v, w);
1055}
1056
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001057PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001058"iter(collection) -> iterator\n\
1059iter(callable, sentinel) -> iterator\n\
1060\n\
1061Get an iterator from an object. In the first form, the argument must\n\
1062supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001063In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001064
1065
1066static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001067builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001068{
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001069 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001070
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001071 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001072 if (res < 0 && PyErr_Occurred())
1073 return NULL;
1074 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001075}
1076
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001077PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001078"len(object) -> integer\n\
1079\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001080Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001081
1082
Guido van Rossum79f25d91997-04-29 20:08:16 +00001083static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001084builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001085{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001086 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001087
Guido van Rossum79f25d91997-04-29 20:08:16 +00001088 d = PyEval_GetLocals();
1089 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001090 return d;
1091}
1092
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001093PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001094"locals() -> dictionary\n\
1095\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001096Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001097
1098
Guido van Rossum79f25d91997-04-29 20:08:16 +00001099static PyObject *
Guido van Rossum53451b32001-01-17 15:47:24 +00001100min_max(PyObject *args, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001101{
Tim Petersc3074532001-05-03 07:00:32 +00001102 PyObject *v, *w, *x, *it;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001103
Guido van Rossum79f25d91997-04-29 20:08:16 +00001104 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001105 v = args;
Raymond Hettingerbbfb9102002-12-29 18:31:19 +00001106 else if (!PyArg_UnpackTuple(args, (op==Py_LT) ? "min" : "max", 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001107 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001108
Tim Petersc3074532001-05-03 07:00:32 +00001109 it = PyObject_GetIter(v);
1110 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001111 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001112
1113 w = NULL; /* the result */
Tim Petersf4848da2001-05-05 00:14:56 +00001114 for (;;) {
Tim Petersc3074532001-05-03 07:00:32 +00001115 x = PyIter_Next(it);
Guido van Rossum2d951851994-08-29 12:52:16 +00001116 if (x == NULL) {
Tim Petersc3074532001-05-03 07:00:32 +00001117 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001118 Py_XDECREF(w);
1119 Py_DECREF(it);
1120 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001121 }
Tim Petersc3074532001-05-03 07:00:32 +00001122 break;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001123 }
Tim Petersc3074532001-05-03 07:00:32 +00001124
Guido van Rossum2d951851994-08-29 12:52:16 +00001125 if (w == NULL)
1126 w = x;
1127 else {
Guido van Rossum53451b32001-01-17 15:47:24 +00001128 int cmp = PyObject_RichCompareBool(x, w, op);
1129 if (cmp > 0) {
1130 Py_DECREF(w);
1131 w = x;
1132 }
1133 else if (cmp < 0) {
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001134 Py_DECREF(x);
Tim Petersc3074532001-05-03 07:00:32 +00001135 Py_DECREF(w);
1136 Py_DECREF(it);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001137 return NULL;
1138 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001139 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001140 Py_DECREF(x);
Guido van Rossum2d951851994-08-29 12:52:16 +00001141 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001142 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001143 if (w == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001144 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +00001145 "min() or max() arg is an empty sequence");
Tim Petersc3074532001-05-03 07:00:32 +00001146 Py_DECREF(it);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001147 return w;
1148}
1149
Guido van Rossum79f25d91997-04-29 20:08:16 +00001150static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001151builtin_min(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001152{
Guido van Rossum53451b32001-01-17 15:47:24 +00001153 return min_max(v, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001154}
1155
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001156PyDoc_STRVAR(min_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001157"min(sequence) -> value\n\
1158min(a, b, c, ...) -> value\n\
1159\n\
1160With a single sequence argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001161With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001162
1163
Guido van Rossum79f25d91997-04-29 20:08:16 +00001164static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001165builtin_max(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001166{
Guido van Rossum53451b32001-01-17 15:47:24 +00001167 return min_max(v, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001168}
1169
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001170PyDoc_STRVAR(max_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001171"max(sequence) -> value\n\
1172max(a, b, c, ...) -> value\n\
1173\n\
1174With a single sequence argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001175With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001176
1177
Guido van Rossum79f25d91997-04-29 20:08:16 +00001178static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001179builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001180{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001181 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001182
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001183 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1184 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001185 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001186 "oct() argument can't be converted to oct");
1187 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001188 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001189 return (*nb->nb_oct)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001190}
1191
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001192PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001193"oct(number) -> string\n\
1194\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001195Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001196
1197
Guido van Rossum79f25d91997-04-29 20:08:16 +00001198static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001199builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001200{
Guido van Rossum09095f32000-03-10 23:00:52 +00001201 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001202 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001203
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001204 if (PyString_Check(obj)) {
1205 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001206 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001207 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001208 return PyInt_FromLong(ord);
1209 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001210#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001211 } else if (PyUnicode_Check(obj)) {
1212 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001213 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001214 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001215 return PyInt_FromLong(ord);
1216 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001217#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001218 } else {
1219 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001220 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001221 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001222 return NULL;
1223 }
1224
Guido van Rossumad991772001-01-12 16:03:05 +00001225 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001226 "ord() expected a character, "
1227 "but string of length %d found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001228 size);
1229 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001230}
1231
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001232PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001233"ord(c) -> integer\n\
1234\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001235Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001236
1237
Guido van Rossum79f25d91997-04-29 20:08:16 +00001238static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001239builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001240{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001241 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001242
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001243 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001244 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001245 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001246}
1247
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001248PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001249"pow(x, y[, z]) -> number\n\
1250\n\
1251With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001252equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001253
1254
Guido van Rossum124eff01999-02-23 16:11:01 +00001255/* Return number of items in range/xrange (lo, hi, step). step > 0
1256 * required. Return a value < 0 if & only if the true value is too
1257 * large to fit in a signed long.
1258 */
1259static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001260get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001261{
1262 /* -------------------------------------------------------------
1263 If lo >= hi, the range is empty.
1264 Else if n values are in the range, the last one is
1265 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1266 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1267 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1268 the RHS is non-negative and so truncation is the same as the
1269 floor. Letting M be the largest positive long, the worst case
1270 for the RHS numerator is hi=M, lo=-M-1, and then
1271 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1272 precision to compute the RHS exactly.
1273 ---------------------------------------------------------------*/
1274 long n = 0;
1275 if (lo < hi) {
1276 unsigned long uhi = (unsigned long)hi;
1277 unsigned long ulo = (unsigned long)lo;
1278 unsigned long diff = uhi - ulo - 1;
1279 n = (long)(diff / (unsigned long)step + 1);
1280 }
1281 return n;
1282}
1283
Guido van Rossum79f25d91997-04-29 20:08:16 +00001284static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001285builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001286{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001287 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001288 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001289 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001290
Guido van Rossum79f25d91997-04-29 20:08:16 +00001291 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001292
Guido van Rossum79f25d91997-04-29 20:08:16 +00001293 if (PyTuple_Size(args) <= 1) {
1294 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001295 "l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001296 &ihigh))
1297 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001298 }
1299 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001300 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001301 "ll|l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001302 &ilow, &ihigh, &istep))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001303 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001304 }
1305 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001306 PyErr_SetString(PyExc_ValueError, "range() arg 3 must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001307 return NULL;
1308 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001309 if (istep > 0)
1310 bign = get_len_of_range(ilow, ihigh, istep);
1311 else
1312 bign = get_len_of_range(ihigh, ilow, -istep);
1313 n = (int)bign;
1314 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001315 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001316 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001317 return NULL;
1318 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001319 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001320 if (v == NULL)
1321 return NULL;
1322 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001323 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001324 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001325 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001326 return NULL;
1327 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001328 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001329 ilow += istep;
1330 }
1331 return v;
1332}
1333
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001334PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001335"range([start,] stop[, step]) -> list of integers\n\
1336\n\
1337Return a list containing an arithmetic progression of integers.\n\
1338range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1339When step is given, it specifies the increment (or decrement).\n\
1340For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001341These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001342
1343
Guido van Rossum79f25d91997-04-29 20:08:16 +00001344static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001345builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001346{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001347 PyObject *v = NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001348 PyObject *fin = PySys_GetObject("stdin");
1349 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001350
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001351 if (!PyArg_UnpackTuple(args, "[raw_]input", 0, 1, &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001352 return NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001353
1354 if (fin == NULL) {
1355 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdin");
1356 return NULL;
1357 }
1358 if (fout == NULL) {
1359 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
1360 return NULL;
1361 }
1362 if (PyFile_SoftSpace(fout, 0)) {
1363 if (PyFile_WriteString(" ", fout) != 0)
1364 return NULL;
1365 }
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001366 if (PyFile_Check (fin) && PyFile_Check (fout)
1367 && isatty(fileno(PyFile_AsFile(fin)))
1368 && isatty(fileno(PyFile_AsFile(fout)))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001369 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001370 char *prompt;
1371 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001372 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001373 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001374 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001375 if (po == NULL)
1376 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001377 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001378 if (prompt == NULL)
1379 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001380 }
1381 else {
1382 po = NULL;
1383 prompt = "";
1384 }
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001385 s = PyOS_Readline(PyFile_AsFile (fin), PyFile_AsFile (fout),
1386 prompt);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001387 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001388 if (s == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001389 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001390 return NULL;
1391 }
1392 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001393 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001394 result = NULL;
1395 }
1396 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001397 size_t len = strlen(s);
1398 if (len > INT_MAX) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001399 PyErr_SetString(PyExc_OverflowError,
1400 "input too long");
Guido van Rossum106f2da2000-06-28 21:12:25 +00001401 result = NULL;
1402 }
1403 else {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001404 result = PyString_FromStringAndSize(s,
1405 (int)(len-1));
Guido van Rossum106f2da2000-06-28 21:12:25 +00001406 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001407 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001408 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001409 return result;
1410 }
Guido van Rossum90933611991-06-07 16:10:43 +00001411 if (v != NULL) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001412 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001413 return NULL;
1414 }
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001415 return PyFile_GetLine(fin, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001416}
1417
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001418PyDoc_STRVAR(raw_input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001419"raw_input([prompt]) -> string\n\
1420\n\
1421Read a string from standard input. The trailing newline is stripped.\n\
1422If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1423On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001424is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001425
1426
Guido van Rossum79f25d91997-04-29 20:08:16 +00001427static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001428builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001429{
Tim Peters15d81ef2001-05-04 04:39:21 +00001430 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001431
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001432 if (!PyArg_UnpackTuple(args, "reduce", 2, 3, &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001433 return NULL;
1434 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001435 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001436
Tim Peters15d81ef2001-05-04 04:39:21 +00001437 it = PyObject_GetIter(seq);
1438 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001439 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001440 "reduce() arg 2 must support iteration");
1441 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001442 return NULL;
1443 }
1444
Guido van Rossum79f25d91997-04-29 20:08:16 +00001445 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001446 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001447
Tim Peters15d81ef2001-05-04 04:39:21 +00001448 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001449 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001450
1451 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001452 Py_DECREF(args);
1453 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001454 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001455 }
1456
Tim Peters15d81ef2001-05-04 04:39:21 +00001457 op2 = PyIter_Next(it);
1458 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001459 if (PyErr_Occurred())
1460 goto Fail;
1461 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001462 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001463
Guido van Rossum2d951851994-08-29 12:52:16 +00001464 if (result == NULL)
1465 result = op2;
1466 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001467 PyTuple_SetItem(args, 0, result);
1468 PyTuple_SetItem(args, 1, op2);
1469 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001470 goto Fail;
1471 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001472 }
1473
Guido van Rossum79f25d91997-04-29 20:08:16 +00001474 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001475
Guido van Rossum2d951851994-08-29 12:52:16 +00001476 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001477 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001478 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001479
Tim Peters15d81ef2001-05-04 04:39:21 +00001480 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001481 return result;
1482
Guido van Rossum2d951851994-08-29 12:52:16 +00001483Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001484 Py_XDECREF(args);
1485 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001486 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001487 return NULL;
1488}
1489
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001490PyDoc_STRVAR(reduce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001491"reduce(function, sequence[, initial]) -> value\n\
1492\n\
1493Apply a function of two arguments cumulatively to the items of a sequence,\n\
1494from left to right, so as to reduce the sequence to a single value.\n\
1495For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1496((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1497of the sequence in the calculation, and serves as a default when the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001498sequence is empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001499
1500
Guido van Rossum79f25d91997-04-29 20:08:16 +00001501static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001502builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001503{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001504 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001505}
1506
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001507PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001508"reload(module) -> module\n\
1509\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001510Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001511
1512
Guido van Rossum79f25d91997-04-29 20:08:16 +00001513static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001514builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001515{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001516 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001517}
1518
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001519PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001520"repr(object) -> string\n\
1521\n\
1522Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001523For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001524
1525
Guido van Rossum79f25d91997-04-29 20:08:16 +00001526static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001527builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001528{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001529 double x;
1530 double f;
1531 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001532 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001533
Guido van Rossum79f25d91997-04-29 20:08:16 +00001534 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001535 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001536 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001537 i = abs(ndigits);
1538 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001539 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001540 if (ndigits < 0)
1541 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001542 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00001543 x *= f;
1544 if (x >= 0.0)
1545 x = floor(x + 0.5);
1546 else
1547 x = ceil(x - 0.5);
1548 if (ndigits < 0)
1549 x *= f;
1550 else
1551 x /= f;
1552 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001553}
1554
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001555PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001556"round(number[, ndigits]) -> floating point number\n\
1557\n\
1558Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001559This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001560
1561
Guido van Rossum79f25d91997-04-29 20:08:16 +00001562static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001563builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001564{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001565 PyObject *v = NULL;
1566 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001567
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001568 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001569 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001570 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001571 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001572 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001573 if (!PyErr_Occurred())
1574 PyErr_SetString(PyExc_SystemError,
1575 "no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001576 }
1577 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001578 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001579 }
1580 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001581 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001582 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001583 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001584 "vars() argument must have __dict__ attribute");
1585 return NULL;
1586 }
1587 }
1588 return d;
1589}
1590
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001591PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001592"vars([object]) -> dictionary\n\
1593\n\
1594Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001595With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001596
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001597static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001598builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001599{
1600 PyObject *inst;
1601 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001602 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001603
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001604 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001605 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001606
Guido van Rossum823649d2001-03-21 18:40:58 +00001607 retval = PyObject_IsInstance(inst, cls);
1608 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001609 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001610 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001611}
1612
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001613PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001614"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001615\n\
1616Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001617With a type as second argument, return whether that is the object's type.\n\
1618The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001619isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001620
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001621
1622static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001623builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001624{
1625 PyObject *derived;
1626 PyObject *cls;
1627 int retval;
1628
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001629 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001630 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001631
Guido van Rossum823649d2001-03-21 18:40:58 +00001632 retval = PyObject_IsSubclass(derived, cls);
1633 if (retval < 0)
1634 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001635 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001636}
1637
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001638PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001639"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001640\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00001641Return whether class C is a subclass (i.e., a derived class) of class B.\n\
1642When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
1643is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001644
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001645
Barry Warsawbd599b52000-08-03 15:45:29 +00001646static PyObject*
1647builtin_zip(PyObject *self, PyObject *args)
1648{
1649 PyObject *ret;
Tim Peters67d687a2002-04-29 21:27:32 +00001650 const int itemsize = PySequence_Length(args);
Tim Peters8572b4f2001-05-06 01:05:02 +00001651 int i;
1652 PyObject *itlist; /* tuple of iterators */
Tim Peters67d687a2002-04-29 21:27:32 +00001653 int len; /* guess at result length */
Barry Warsawbd599b52000-08-03 15:45:29 +00001654
1655 if (itemsize < 1) {
1656 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001657 "zip() requires at least one sequence");
Barry Warsawbd599b52000-08-03 15:45:29 +00001658 return NULL;
1659 }
1660 /* args must be a tuple */
1661 assert(PyTuple_Check(args));
1662
Tim Peters39a86c22002-05-12 07:19:38 +00001663 /* Guess at result length: the shortest of the input lengths.
1664 If some argument refuses to say, we refuse to guess too, lest
1665 an argument like xrange(sys.maxint) lead us astray.*/
Tim Peters67d687a2002-04-29 21:27:32 +00001666 len = -1; /* unknown */
1667 for (i = 0; i < itemsize; ++i) {
1668 PyObject *item = PyTuple_GET_ITEM(args, i);
1669 int thislen = PySequence_Length(item);
Tim Peters39a86c22002-05-12 07:19:38 +00001670 if (thislen < 0) {
Tim Peters67d687a2002-04-29 21:27:32 +00001671 PyErr_Clear();
Tim Peters39a86c22002-05-12 07:19:38 +00001672 len = -1;
1673 break;
1674 }
Tim Peters67d687a2002-04-29 21:27:32 +00001675 else if (len < 0 || thislen < len)
1676 len = thislen;
1677 }
1678
Tim Peters8572b4f2001-05-06 01:05:02 +00001679 /* allocate result list */
Tim Peters67d687a2002-04-29 21:27:32 +00001680 if (len < 0)
1681 len = 10; /* arbitrary */
1682 if ((ret = PyList_New(len)) == NULL)
Barry Warsawbd599b52000-08-03 15:45:29 +00001683 return NULL;
1684
Tim Peters8572b4f2001-05-06 01:05:02 +00001685 /* obtain iterators */
1686 itlist = PyTuple_New(itemsize);
1687 if (itlist == NULL)
1688 goto Fail_ret;
1689 for (i = 0; i < itemsize; ++i) {
1690 PyObject *item = PyTuple_GET_ITEM(args, i);
1691 PyObject *it = PyObject_GetIter(item);
1692 if (it == NULL) {
1693 if (PyErr_ExceptionMatches(PyExc_TypeError))
1694 PyErr_Format(PyExc_TypeError,
1695 "zip argument #%d must support iteration",
1696 i+1);
1697 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00001698 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001699 PyTuple_SET_ITEM(itlist, i, it);
1700 }
Barry Warsawbd599b52000-08-03 15:45:29 +00001701
Tim Peters8572b4f2001-05-06 01:05:02 +00001702 /* build result into ret list */
Tim Peters67d687a2002-04-29 21:27:32 +00001703 for (i = 0; ; ++i) {
1704 int j;
Tim Peters8572b4f2001-05-06 01:05:02 +00001705 PyObject *next = PyTuple_New(itemsize);
1706 if (!next)
1707 goto Fail_ret_itlist;
1708
Tim Peters67d687a2002-04-29 21:27:32 +00001709 for (j = 0; j < itemsize; j++) {
1710 PyObject *it = PyTuple_GET_ITEM(itlist, j);
Tim Peters8572b4f2001-05-06 01:05:02 +00001711 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00001712 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00001713 if (PyErr_Occurred()) {
1714 Py_DECREF(ret);
1715 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00001716 }
1717 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00001718 Py_DECREF(itlist);
Tim Peters67d687a2002-04-29 21:27:32 +00001719 goto Done;
Barry Warsawbd599b52000-08-03 15:45:29 +00001720 }
Tim Peters67d687a2002-04-29 21:27:32 +00001721 PyTuple_SET_ITEM(next, j, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00001722 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001723
Tim Peters67d687a2002-04-29 21:27:32 +00001724 if (i < len)
1725 PyList_SET_ITEM(ret, i, next);
1726 else {
1727 int status = PyList_Append(ret, next);
1728 Py_DECREF(next);
1729 ++len;
1730 if (status < 0)
1731 goto Fail_ret_itlist;
1732 }
Barry Warsawbd599b52000-08-03 15:45:29 +00001733 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001734
Tim Peters67d687a2002-04-29 21:27:32 +00001735Done:
1736 if (ret != NULL && i < len) {
1737 /* The list is too big. */
1738 if (PyList_SetSlice(ret, i, len, NULL) < 0)
1739 return NULL;
1740 }
1741 return ret;
1742
Tim Peters8572b4f2001-05-06 01:05:02 +00001743Fail_ret_itlist:
1744 Py_DECREF(itlist);
1745Fail_ret:
1746 Py_DECREF(ret);
1747 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00001748}
1749
1750
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001751PyDoc_STRVAR(zip_doc,
Barry Warsawbd599b52000-08-03 15:45:29 +00001752"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
1753\n\
1754Return a list of tuples, where each tuple contains the i-th element\n\
1755from each of the argument sequences. The returned list is truncated\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001756in length to the length of the shortest argument sequence.");
Barry Warsawbd599b52000-08-03 15:45:29 +00001757
1758
Guido van Rossum79f25d91997-04-29 20:08:16 +00001759static PyMethodDef builtin_methods[] = {
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001760 {"__import__", builtin___import__, METH_VARARGS, import_doc},
1761 {"abs", builtin_abs, METH_O, abs_doc},
1762 {"apply", builtin_apply, METH_VARARGS, apply_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001763 {"callable", builtin_callable, METH_O, callable_doc},
1764 {"chr", builtin_chr, METH_VARARGS, chr_doc},
1765 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
1766 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
1767 {"compile", builtin_compile, METH_VARARGS, compile_doc},
1768 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
1769 {"dir", builtin_dir, METH_VARARGS, dir_doc},
1770 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
1771 {"eval", builtin_eval, METH_VARARGS, eval_doc},
1772 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
1773 {"filter", builtin_filter, METH_VARARGS, filter_doc},
1774 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
1775 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
1776 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
1777 {"hash", builtin_hash, METH_O, hash_doc},
1778 {"hex", builtin_hex, METH_O, hex_doc},
1779 {"id", builtin_id, METH_O, id_doc},
1780 {"input", builtin_input, METH_VARARGS, input_doc},
1781 {"intern", builtin_intern, METH_VARARGS, intern_doc},
1782 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
1783 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
1784 {"iter", builtin_iter, METH_VARARGS, iter_doc},
1785 {"len", builtin_len, METH_O, len_doc},
1786 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
1787 {"map", builtin_map, METH_VARARGS, map_doc},
1788 {"max", builtin_max, METH_VARARGS, max_doc},
1789 {"min", builtin_min, METH_VARARGS, min_doc},
1790 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001791 {"ord", builtin_ord, METH_O, ord_doc},
1792 {"pow", builtin_pow, METH_VARARGS, pow_doc},
1793 {"range", builtin_range, METH_VARARGS, range_doc},
1794 {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc},
1795 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
1796 {"reload", builtin_reload, METH_O, reload_doc},
1797 {"repr", builtin_repr, METH_O, repr_doc},
1798 {"round", builtin_round, METH_VARARGS, round_doc},
1799 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001800#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001801 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001802#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001803 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001804 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00001805 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00001806};
1807
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001808PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001809"Built-in functions, exceptions, and other objects.\n\
1810\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001811Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001812
Guido van Rossum25ce5661997-08-02 03:10:38 +00001813PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001814_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001815{
Fred Drake5550de32000-06-20 04:54:19 +00001816 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001817 mod = Py_InitModule4("__builtin__", builtin_methods,
1818 builtin_doc, (PyObject *)NULL,
1819 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001820 if (mod == NULL)
1821 return NULL;
1822 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00001823
Tim Peters7571a0f2003-03-23 17:52:28 +00001824#ifdef Py_TRACE_REFS
1825 /* __builtin__ exposes a number of statically allocated objects
1826 * that, before this code was added in 2.3, never showed up in
1827 * the list of "all objects" maintained by Py_TRACE_REFS. As a
1828 * result, programs leaking references to None and False (etc)
1829 * couldn't be diagnosed by examining sys.getobjects(0).
1830 */
1831#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
1832#else
1833#define ADD_TO_ALL(OBJECT) (void)0
1834#endif
1835
Tim Peters4b7625e2001-09-13 21:37:17 +00001836#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00001837 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
1838 return NULL; \
1839 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00001840
1841 SETBUILTIN("None", Py_None);
1842 SETBUILTIN("Ellipsis", Py_Ellipsis);
1843 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001844 SETBUILTIN("False", Py_False);
1845 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00001846 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001847 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001848 SETBUILTIN("buffer", &PyBuffer_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001849 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001850#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00001851 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001852#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00001853 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00001854 SETBUILTIN("enumerate", &PyEnum_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001855 SETBUILTIN("float", &PyFloat_Type);
1856 SETBUILTIN("property", &PyProperty_Type);
1857 SETBUILTIN("int", &PyInt_Type);
1858 SETBUILTIN("list", &PyList_Type);
1859 SETBUILTIN("long", &PyLong_Type);
1860 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001861 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001862 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
1863 SETBUILTIN("str", &PyString_Type);
1864 SETBUILTIN("super", &PySuper_Type);
1865 SETBUILTIN("tuple", &PyTuple_Type);
1866 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00001867 SETBUILTIN("xrange", &PyRange_Type);
Tim Peters742dfd62001-09-13 21:49:44 +00001868
1869 /* Note that open() is just an alias of file(). */
1870 SETBUILTIN("open", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001871 SETBUILTIN("file", &PyFile_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001872#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00001873 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001874#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00001875 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00001876 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
1877 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001878 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00001879 }
1880 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00001881
Guido van Rossum25ce5661997-08-02 03:10:38 +00001882 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00001883#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00001884#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00001885}
1886
Guido van Rossume77a7571993-11-03 15:01:26 +00001887/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00001888
Guido van Rossum79f25d91997-04-29 20:08:16 +00001889static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001890filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001891{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001892 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001893 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001894 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001895
Guido van Rossumb7b45621995-08-04 04:07:45 +00001896 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00001897 if (PyTuple_CheckExact(tuple))
1898 Py_INCREF(tuple);
1899 else
1900 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00001901 return tuple;
1902 }
1903
Guido van Rossum79f25d91997-04-29 20:08:16 +00001904 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00001905 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001906
Guido van Rossum12d12c51993-10-26 17:58:25 +00001907 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001908 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001909 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001910
Walter Dörwald8dd19322003-02-10 17:36:40 +00001911 if (tuple->ob_type->tp_as_sequence &&
1912 tuple->ob_type->tp_as_sequence->sq_item) {
1913 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
1914 } else {
1915 PyErr_SetString(PyExc_TypeError, "unsubscriptable object");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001916 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00001917 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001918 if (func == Py_None) {
1919 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001920 good = item;
1921 }
1922 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001923 PyObject *arg = Py_BuildValue("(O)", item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001924 if (arg == NULL)
1925 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001926 good = PyEval_CallObject(func, arg);
1927 Py_DECREF(arg);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001928 if (good == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001929 goto Fail_1;
1930 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001931 ok = PyObject_IsTrue(good);
1932 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001933 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001934 Py_INCREF(item);
1935 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001936 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001937 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001938 }
1939
Tim Peters4324aa32001-05-28 22:30:08 +00001940 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001941 return NULL;
1942
Guido van Rossum12d12c51993-10-26 17:58:25 +00001943 return result;
1944
Guido van Rossum12d12c51993-10-26 17:58:25 +00001945Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001946 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001947 return NULL;
1948}
1949
1950
Guido van Rossume77a7571993-11-03 15:01:26 +00001951/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00001952
Guido van Rossum79f25d91997-04-29 20:08:16 +00001953static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001954filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001955{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001956 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001957 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001958 int len = PyString_Size(strobj);
Walter Dörwald903f1e02003-02-04 16:28:00 +00001959 int outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001960
Guido van Rossum79f25d91997-04-29 20:08:16 +00001961 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00001962 /* If it's a real string we can return the original,
1963 * as no character is ever false and __getitem__
1964 * does return this character. If it's a subclass
1965 * we must go through the __getitem__ loop */
1966 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00001967 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00001968 return strobj;
1969 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001970 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001971 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00001972 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001973
Guido van Rossum12d12c51993-10-26 17:58:25 +00001974 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00001975 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001976 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001977
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001978 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
1979 if (item == NULL)
1980 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00001981 if (func==Py_None) {
1982 ok = 1;
1983 } else {
1984 PyObject *arg, *good;
1985 arg = Py_BuildValue("(O)", item);
1986 if (arg == NULL) {
1987 Py_DECREF(item);
1988 goto Fail_1;
1989 }
1990 good = PyEval_CallObject(func, arg);
1991 Py_DECREF(arg);
1992 if (good == NULL) {
1993 Py_DECREF(item);
1994 goto Fail_1;
1995 }
1996 ok = PyObject_IsTrue(good);
1997 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00001998 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00001999 if (ok) {
2000 int reslen;
2001 if (!PyString_Check(item)) {
2002 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2003 " __getitem__ returned different type");
2004 Py_DECREF(item);
2005 goto Fail_1;
2006 }
2007 reslen = PyString_GET_SIZE(item);
2008 if (reslen == 1) {
2009 PyString_AS_STRING(result)[j++] =
2010 PyString_AS_STRING(item)[0];
2011 } else {
2012 /* do we need more space? */
2013 int need = j + reslen + len-i-1;
2014 if (need > outlen) {
2015 /* overallocate, to avoid reallocations */
2016 if (need<2*outlen)
2017 need = 2*outlen;
2018 if (_PyString_Resize(&result, need)) {
2019 Py_DECREF(item);
2020 return NULL;
2021 }
2022 outlen = need;
2023 }
2024 memcpy(
2025 PyString_AS_STRING(result) + j,
2026 PyString_AS_STRING(item),
2027 reslen
2028 );
2029 j += reslen;
2030 }
2031 }
Tim Peters388ed082001-04-07 20:34:48 +00002032 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002033 }
2034
Walter Dörwald903f1e02003-02-04 16:28:00 +00002035 if (j < outlen)
Tim Peters5de98422002-04-27 18:44:32 +00002036 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002037
Guido van Rossum12d12c51993-10-26 17:58:25 +00002038 return result;
2039
Guido van Rossum12d12c51993-10-26 17:58:25 +00002040Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002041 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002042 return NULL;
2043}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002044
2045#ifdef Py_USING_UNICODE
2046/* Helper for filter(): filter a Unicode object through a function */
2047
2048static PyObject *
2049filterunicode(PyObject *func, PyObject *strobj)
2050{
2051 PyObject *result;
2052 register int i, j;
2053 int len = PyUnicode_GetSize(strobj);
Walter Dörwald903f1e02003-02-04 16:28:00 +00002054 int outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002055
2056 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002057 /* If it's a real string we can return the original,
2058 * as no character is ever false and __getitem__
2059 * does return this character. If it's a subclass
2060 * we must go through the __getitem__ loop */
2061 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002062 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002063 return strobj;
2064 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002065 }
2066 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2067 return NULL;
2068
2069 for (i = j = 0; i < len; ++i) {
2070 PyObject *item, *arg, *good;
2071 int ok;
2072
2073 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2074 if (item == NULL)
2075 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002076 if (func == Py_None) {
2077 ok = 1;
2078 } else {
2079 arg = Py_BuildValue("(O)", item);
2080 if (arg == NULL) {
2081 Py_DECREF(item);
2082 goto Fail_1;
2083 }
2084 good = PyEval_CallObject(func, arg);
2085 Py_DECREF(arg);
2086 if (good == NULL) {
2087 Py_DECREF(item);
2088 goto Fail_1;
2089 }
2090 ok = PyObject_IsTrue(good);
2091 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002092 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002093 if (ok) {
2094 int reslen;
2095 if (!PyUnicode_Check(item)) {
2096 PyErr_SetString(PyExc_TypeError, "can't filter unicode to unicode:"
2097 " __getitem__ returned different type");
2098 Py_DECREF(item);
2099 goto Fail_1;
2100 }
2101 reslen = PyUnicode_GET_SIZE(item);
2102 if (reslen == 1) {
2103 PyUnicode_AS_UNICODE(result)[j++] =
2104 PyUnicode_AS_UNICODE(item)[0];
2105 } else {
2106 /* do we need more space? */
2107 int need = j + reslen + len-i-1;
2108 if (need > outlen) {
2109 /* overallocate, to avoid reallocations */
2110 if (need<2*outlen)
2111 need = 2*outlen;
2112 if (PyUnicode_Resize(&result, need)) {
2113 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002114 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002115 }
2116 outlen = need;
2117 }
2118 memcpy(
2119 PyUnicode_AS_UNICODE(result) + j,
2120 PyUnicode_AS_UNICODE(item),
2121 reslen*sizeof(Py_UNICODE)
2122 );
2123 j += reslen;
2124 }
2125 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002126 Py_DECREF(item);
2127 }
2128
Walter Dörwald903f1e02003-02-04 16:28:00 +00002129 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002130 PyUnicode_Resize(&result, j);
2131
2132 return result;
2133
2134Fail_1:
2135 Py_DECREF(result);
2136 return NULL;
2137}
2138#endif