blob: 62aa5121f5bbb04eef6141a07d799ac6006feb07 [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 Norwitz94c30c02003-02-03 20:23:33 +000078 PyErr_Warn(PyExc_PendingDeprecationWarning,
79 "use func(*args, **kwargs) instead of "
80 "apply(func, args, kwargs)");
Raymond Hettingerea3fdf42002-12-29 16:33:45 +000081 if (!PyArg_UnpackTuple(args, "apply", 1, 3, &func, &alist, &kwdict))
Guido van Rossumc02e15c1991-12-16 13:03:00 +000082 return NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +000083 if (alist != NULL) {
84 if (!PyTuple_Check(alist)) {
85 if (!PySequence_Check(alist)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +000086 PyErr_Format(PyExc_TypeError,
87 "apply() arg 2 expect sequence, found %s",
88 alist->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +000089 return NULL;
90 }
91 t = PySequence_Tuple(alist);
92 if (t == NULL)
93 return NULL;
94 alist = t;
95 }
Guido van Rossum2d951851994-08-29 12:52:16 +000096 }
Guido van Rossum79f25d91997-04-29 20:08:16 +000097 if (kwdict != NULL && !PyDict_Check(kwdict)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +000098 PyErr_Format(PyExc_TypeError,
99 "apply() arg 3 expected dictionary, found %s",
100 kwdict->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000101 goto finally;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000102 }
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000103 retval = PyEval_CallObjectWithKeywords(func, alist, kwdict);
104 finally:
105 Py_XDECREF(t);
106 return retval;
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000107}
108
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000109PyDoc_STRVAR(apply_doc,
Fred Drakef1fbc622001-01-12 17:05:05 +0000110"apply(object[, args[, kwargs]]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000111\n\
Fred Drake7b912121999-12-23 14:16:55 +0000112Call a callable object with positional arguments taken from the tuple args,\n\
113and keyword arguments taken from the optional dictionary kwargs.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000114Note that classes are callable, as are instances with a __call__() method.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000115
116
Guido van Rossum79f25d91997-04-29 20:08:16 +0000117static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000118builtin_callable(PyObject *self, PyObject *v)
Guido van Rossum2d951851994-08-29 12:52:16 +0000119{
Guido van Rossum77f6a652002-04-03 22:41:51 +0000120 return PyBool_FromLong((long)PyCallable_Check(v));
Guido van Rossum2d951851994-08-29 12:52:16 +0000121}
122
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000123PyDoc_STRVAR(callable_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000124"callable(object) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000125\n\
126Return whether the object is callable (i.e., some kind of function).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000127Note that classes are callable, as are instances with a __call__() method.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000128
129
Guido van Rossum79f25d91997-04-29 20:08:16 +0000130static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000131builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000132{
Guido van Rossumc7903a12002-08-16 07:04:56 +0000133 PyObject *func, *seq, *result, *it, *arg;
Tim Peters0e57abf2001-05-02 07:39:38 +0000134 int len; /* guess for result list size */
Tim Petersf4848da2001-05-05 00:14:56 +0000135 register int j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000136
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000137 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000138 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000139
Tim Peters0e57abf2001-05-02 07:39:38 +0000140 /* Strings and tuples return a result of the same type. */
141 if (PyString_Check(seq))
142 return filterstring(func, seq);
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000143#ifdef Py_USING_UNICODE
144 if (PyUnicode_Check(seq))
145 return filterunicode(func, seq);
146#endif
Tim Peters0e57abf2001-05-02 07:39:38 +0000147 if (PyTuple_Check(seq))
148 return filtertuple(func, seq);
149
150 /* Get iterator. */
151 it = PyObject_GetIter(seq);
152 if (it == NULL)
153 return NULL;
154
155 /* Guess a result list size. */
156 len = -1; /* unknown */
157 if (PySequence_Check(seq) &&
158 seq->ob_type->tp_as_sequence->sq_length) {
159 len = PySequence_Size(seq);
160 if (len < 0)
161 PyErr_Clear();
Guido van Rossum12d12c51993-10-26 17:58:25 +0000162 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000163 if (len < 0)
164 len = 8; /* arbitrary */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000165
Guido van Rossumc7903a12002-08-16 07:04:56 +0000166 /* Pre-allocate argument list tuple. */
167 arg = PyTuple_New(1);
168 if (arg == NULL)
169 goto Fail_arg;
170
Tim Peters0e57abf2001-05-02 07:39:38 +0000171 /* Get a result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000172 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000173 /* Eww - can modify the list in-place. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000174 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000175 result = seq;
176 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000177 else {
Tim Peters0e57abf2001-05-02 07:39:38 +0000178 result = PyList_New(len);
179 if (result == NULL)
180 goto Fail_it;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000181 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000182
Tim Peters0e57abf2001-05-02 07:39:38 +0000183 /* Build the result list. */
Tim Petersf4848da2001-05-05 00:14:56 +0000184 j = 0;
185 for (;;) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000186 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000187 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000188
Tim Peters0e57abf2001-05-02 07:39:38 +0000189 item = PyIter_Next(it);
190 if (item == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +0000191 if (PyErr_Occurred())
192 goto Fail_result_it;
Tim Peters0e57abf2001-05-02 07:39:38 +0000193 break;
Guido van Rossum2d951851994-08-29 12:52:16 +0000194 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000195
Guido van Rossum79f25d91997-04-29 20:08:16 +0000196 if (func == Py_None) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000197 ok = PyObject_IsTrue(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000198 }
199 else {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000200 PyObject *good;
201 PyTuple_SET_ITEM(arg, 0, item);
202 good = PyObject_Call(func, arg, NULL);
203 PyTuple_SET_ITEM(arg, 0, NULL);
Guido van Rossum58b68731995-01-10 17:40:55 +0000204 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000205 Py_DECREF(item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000206 goto Fail_result_it;
Guido van Rossum58b68731995-01-10 17:40:55 +0000207 }
Guido van Rossumc7903a12002-08-16 07:04:56 +0000208 ok = PyObject_IsTrue(good);
209 Py_DECREF(good);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000210 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000211 if (ok) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000212 if (j < len)
213 PyList_SET_ITEM(result, j, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000214 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000215 int status = PyList_Append(result, item);
Barry Warsawfa77e091999-01-28 18:49:12 +0000216 Py_DECREF(item);
217 if (status < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000218 goto Fail_result_it;
Guido van Rossum2d951851994-08-29 12:52:16 +0000219 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000220 ++j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000221 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000222 else
223 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000224 }
225
Guido van Rossum12d12c51993-10-26 17:58:25 +0000226
Tim Peters0e57abf2001-05-02 07:39:38 +0000227 /* Cut back result list if len is too big. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000228 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000229 goto Fail_result_it;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000230
Tim Peters3c6b1482001-05-21 08:07:05 +0000231 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000232 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000233 return result;
234
Tim Peters0e57abf2001-05-02 07:39:38 +0000235Fail_result_it:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000236 Py_DECREF(result);
Tim Peters0e57abf2001-05-02 07:39:38 +0000237Fail_it:
238 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000239Fail_arg:
240 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000241 return NULL;
242}
243
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000244PyDoc_STRVAR(filter_doc,
Tim Petersd50e5442002-03-09 00:06:26 +0000245"filter(function or None, sequence) -> list, tuple, or string\n"
246"\n"
247"Return those items of sequence for which function(item) is true. If\n"
248"function is None, return the items that are true. If sequence is a tuple\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000249"or string, return the same type, else return a list.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000250
Guido van Rossum79f25d91997-04-29 20:08:16 +0000251static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000252builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000253{
254 long x;
255 char s[1];
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000256
Guido van Rossum79f25d91997-04-29 20:08:16 +0000257 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000258 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000259 if (x < 0 || x >= 256) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000260 PyErr_SetString(PyExc_ValueError,
261 "chr() arg not in range(256)");
Guido van Rossum3f5da241990-12-20 15:06:42 +0000262 return NULL;
263 }
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000264 s[0] = (char)x;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000265 return PyString_FromStringAndSize(s, 1);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000266}
267
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000268PyDoc_STRVAR(chr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000269"chr(i) -> character\n\
270\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000271Return a string of one character with ordinal i; 0 <= i < 256.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000272
273
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000274#ifdef Py_USING_UNICODE
Guido van Rossum79f25d91997-04-29 20:08:16 +0000275static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000276builtin_unichr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000277{
278 long x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000279
280 if (!PyArg_ParseTuple(args, "l:unichr", &x))
281 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000282
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000283 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000284}
285
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000286PyDoc_STRVAR(unichr_doc,
Fred Drake078b24f2000-04-13 02:42:50 +0000287"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000288\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000289Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.");
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000290#endif
Guido van Rossum09095f32000-03-10 23:00:52 +0000291
292
293static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000294builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000295{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000296 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000297 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000298
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000299 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000300 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000301 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000302 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000303 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000304}
305
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000306PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000307"cmp(x, y) -> integer\n\
308\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000309Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000310
311
Guido van Rossum79f25d91997-04-29 20:08:16 +0000312static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000313builtin_coerce(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000314{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000315 PyObject *v, *w;
316 PyObject *res;
Guido van Rossum5524a591995-01-10 15:26:20 +0000317
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000318 if (!PyArg_UnpackTuple(args, "coerce", 2, 2, &v, &w))
Guido van Rossum5524a591995-01-10 15:26:20 +0000319 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000320 if (PyNumber_Coerce(&v, &w) < 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +0000321 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000322 res = Py_BuildValue("(OO)", v, w);
323 Py_DECREF(v);
324 Py_DECREF(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +0000325 return res;
326}
327
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000328PyDoc_STRVAR(coerce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000329"coerce(x, y) -> None or (x1, y1)\n\
330\n\
331When 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 +0000332containing the coerced values. When they can't be coerced, return None.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000333
334
Guido van Rossum79f25d91997-04-29 20:08:16 +0000335static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000336builtin_compile(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000337{
338 char *str;
339 char *filename;
340 char *startstr;
341 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000342 int dont_inherit = 0;
343 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000344 PyCompilerFlags cf;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000345 PyObject *result, *cmd, *tmp = NULL;
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000346 int length;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000347
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000348 if (!PyArg_ParseTuple(args, "Oss|ii:compile", &cmd, &filename,
Tim Peters6cd6a822001-08-17 22:11:27 +0000349 &startstr, &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000350 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000351
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000352 cf.cf_flags = supplied_flags;
353
354#ifdef Py_USING_UNICODE
355 if (PyUnicode_Check(cmd)) {
356 tmp = PyUnicode_AsUTF8String(cmd);
357 if (tmp == NULL)
358 return NULL;
359 cmd = tmp;
360 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
361 }
362#endif
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000363 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &length))
364 return NULL;
Tim Peters2c646c92003-02-10 14:48:29 +0000365 if ((size_t)length != strlen(str)) {
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000366 PyErr_SetString(PyExc_TypeError,
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000367 "expected string without null bytes");
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000368 return NULL;
369 }
370
Guido van Rossum5b722181993-03-30 17:46:03 +0000371 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000372 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000373 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000374 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000375 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000376 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000377 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000378 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000379 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossum5b722181993-03-30 17:46:03 +0000380 return NULL;
381 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000382
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000383 if (supplied_flags &
384 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT))
385 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000386 PyErr_SetString(PyExc_ValueError,
387 "compile(): unrecognised flags");
388 return NULL;
389 }
390 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
391
Tim Peters6cd6a822001-08-17 22:11:27 +0000392 if (!dont_inherit) {
393 PyEval_MergeCompilerFlags(&cf);
394 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000395 result = Py_CompileStringFlags(str, filename, start, &cf);
396 Py_XDECREF(tmp);
397 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000398}
399
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000400PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000401"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000402\n\
403Compile the source string (a Python module, statement or expression)\n\
404into a code object that can be executed by the exec statement or eval().\n\
405The filename will be used for run-time error messages.\n\
406The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000407single (interactive) statement, or 'eval' to compile an expression.\n\
408The flags argument, if present, controls which future statements influence\n\
409the compilation of the code.\n\
410The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
411the effects of any future statements in effect in the code calling\n\
412compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000413in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000414
Guido van Rossum79f25d91997-04-29 20:08:16 +0000415static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000416builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000417{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000418 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000419
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000420 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000421 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000422 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000423}
424
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000425PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000426"dir([object]) -> list of strings\n"
427"\n"
428"Return an alphabetized list of names comprising (some of) the attributes\n"
429"of the given object, and of attributes reachable from it:\n"
430"\n"
431"No argument: the names in the current scope.\n"
432"Module object: the module attributes.\n"
Tim Peters37a309d2001-09-04 01:20:04 +0000433"Type or class object: its attributes, and recursively the attributes of\n"
434" its bases.\n"
Tim Peters5d2b77c2001-09-03 05:47:38 +0000435"Otherwise: its attributes, its class's attributes, and recursively the\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000436" attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000437
Guido van Rossum79f25d91997-04-29 20:08:16 +0000438static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000439builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000440{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000441 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000442
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000443 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000444 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000445 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000446}
447
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000448PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000449"divmod(x, y) -> (div, mod)\n\
450\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000451Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000452
453
Guido van Rossum79f25d91997-04-29 20:08:16 +0000454static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000455builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000456{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000457 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000458 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000459 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000460 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000461
Guido van Rossum79f25d91997-04-29 20:08:16 +0000462 if (!PyArg_ParseTuple(args, "O|O!O!:eval",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000463 &cmd,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000464 &PyDict_Type, &globals,
465 &PyDict_Type, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000466 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000467 if (globals == Py_None) {
468 globals = PyEval_GetGlobals();
469 if (locals == Py_None)
470 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000471 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000472 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000473 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000474
Guido van Rossum79f25d91997-04-29 20:08:16 +0000475 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
476 if (PyDict_SetItemString(globals, "__builtins__",
477 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000478 return NULL;
479 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000480
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000481 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000482 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000483 PyErr_SetString(PyExc_TypeError,
484 "code object passed to eval() may not contain free variables");
485 return NULL;
486 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000487 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000488 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000489
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000490 if (!PyString_Check(cmd) &&
491 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000492 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000493 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000494 return NULL;
495 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000496 cf.cf_flags = 0;
497
498#ifdef Py_USING_UNICODE
499 if (PyUnicode_Check(cmd)) {
500 tmp = PyUnicode_AsUTF8String(cmd);
501 if (tmp == NULL)
502 return NULL;
503 cmd = tmp;
504 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
505 }
506#endif
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000507 if (PyString_AsStringAndSize(cmd, &str, NULL))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000508 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000509 while (*str == ' ' || *str == '\t')
510 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000511
Tim Peters9fa96be2001-08-17 23:04:59 +0000512 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000513 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
514 Py_XDECREF(tmp);
515 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000516}
517
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000518PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000519"eval(source[, globals[, locals]]) -> value\n\
520\n\
521Evaluate the source in the context of globals and locals.\n\
522The source may be a string representing a Python expression\n\
523or a code object as returned by compile().\n\
524The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000525globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000526
527
Guido van Rossum79f25d91997-04-29 20:08:16 +0000528static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000529builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000530{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000531 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000532 PyObject *globals = Py_None, *locals = Py_None;
533 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000534 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000535 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000536 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000537
Guido van Rossum79f25d91997-04-29 20:08:16 +0000538 if (!PyArg_ParseTuple(args, "s|O!O!:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000539 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000540 &PyDict_Type, &globals,
541 &PyDict_Type, &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000542 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000543 if (globals == Py_None) {
544 globals = PyEval_GetGlobals();
545 if (locals == Py_None)
546 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000547 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000548 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000549 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000550 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
551 if (PyDict_SetItemString(globals, "__builtins__",
552 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000553 return NULL;
554 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000555
556 exists = 0;
557 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000558#if defined(PLAN9)
559 {
560 Dir *d;
561
562 if ((d = dirstat(filename))!=nil) {
563 if(d->mode & DMDIR)
564 werrstr("is a directory");
565 else
566 exists = 1;
567 free(d);
568 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000569 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000570#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000571 if (object_exists(filename)) {
572 if (isdir(filename))
573 errno = EISDIR;
574 else
575 exists = 1;
576 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000577#else /* standard Posix */
578 {
579 struct stat s;
580 if (stat(filename, &s) == 0) {
581 if (S_ISDIR(s.st_mode))
582# if defined(PY_OS2) && defined(PYCC_VACPP)
583 errno = EOS2ERR;
584# else
585 errno = EISDIR;
586# endif
587 else
588 exists = 1;
589 }
590 }
591#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000592
593 if (exists) {
594 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000595 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000596 Py_END_ALLOW_THREADS
597
598 if (fp == NULL) {
599 exists = 0;
600 }
601 }
602
603 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000604 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000605 return NULL;
606 }
Tim Peters5ba58662001-07-16 02:29:45 +0000607 cf.cf_flags = 0;
608 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000609 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000610 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000611 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000612 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000613 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000614 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000615}
616
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000617PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000618"execfile(filename[, globals[, locals]])\n\
619\n\
620Read and execute a Python script from a file.\n\
621The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000622globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000623
624
Guido van Rossum79f25d91997-04-29 20:08:16 +0000625static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000626builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000627{
Guido van Rossum950ff291998-06-29 13:38:57 +0000628 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000629 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000630
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000631 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000632 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000633#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000634 if (PyUnicode_Check(name)) {
635 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
636 if (name == NULL)
637 return NULL;
638 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000639#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000640
641 if (!PyString_Check(name)) {
642 PyErr_SetString(PyExc_TypeError,
643 "attribute name must be string");
644 return NULL;
645 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000646 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000647 if (result == NULL && dflt != NULL &&
648 PyErr_ExceptionMatches(PyExc_AttributeError))
649 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000650 PyErr_Clear();
651 Py_INCREF(dflt);
652 result = dflt;
653 }
654 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000655}
656
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000657PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000658"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000659\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000660Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
661When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000662exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000663
664
Guido van Rossum79f25d91997-04-29 20:08:16 +0000665static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000666builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000667{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000668 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000669
Guido van Rossum79f25d91997-04-29 20:08:16 +0000670 d = PyEval_GetGlobals();
671 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000672 return d;
673}
674
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000675PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000676"globals() -> dictionary\n\
677\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000678Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000679
680
Guido van Rossum79f25d91997-04-29 20:08:16 +0000681static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000682builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000683{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000684 PyObject *v;
685 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000686
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000687 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000688 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000689#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000690 if (PyUnicode_Check(name)) {
691 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
692 if (name == NULL)
693 return NULL;
694 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000695#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000696
697 if (!PyString_Check(name)) {
698 PyErr_SetString(PyExc_TypeError,
699 "attribute name must be string");
700 return NULL;
701 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000702 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000703 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000704 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000705 Py_INCREF(Py_False);
706 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000707 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000708 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000709 Py_INCREF(Py_True);
710 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000711}
712
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000713PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000714"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000715\n\
716Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000717(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000718
719
Guido van Rossum79f25d91997-04-29 20:08:16 +0000720static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000721builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000722{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000723 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000724}
725
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000726PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000727"id(object) -> integer\n\
728\n\
729Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000730simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000731
732
Guido van Rossum79f25d91997-04-29 20:08:16 +0000733static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000734builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000735{
736 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000737 PyObject *it; /* the iterator object */
738 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000739 } sequence;
740
Guido van Rossum79f25d91997-04-29 20:08:16 +0000741 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000742 sequence *seqs = NULL, *sqp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000743 int n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000744 register int i, j;
745
Guido van Rossum79f25d91997-04-29 20:08:16 +0000746 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000747 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000748 PyErr_SetString(PyExc_TypeError,
749 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000750 return NULL;
751 }
752
Guido van Rossum79f25d91997-04-29 20:08:16 +0000753 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000754 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000755
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000756 if (func == Py_None && n == 1) {
757 /* map(None, S) is the same as list(S). */
758 return PySequence_List(PyTuple_GetItem(args, 1));
759 }
760
Tim Peters4e9afdc2001-05-03 23:54:49 +0000761 /* Get space for sequence descriptors. Must NULL out the iterator
762 * pointers so that jumping to Fail_2 later doesn't see trash.
763 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000764 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
765 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000766 return NULL;
767 }
768 for (i = 0; i < n; ++i) {
769 seqs[i].it = (PyObject*)NULL;
770 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000771 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000772
Tim Peters4e9afdc2001-05-03 23:54:49 +0000773 /* Do a first pass to obtain iterators for the arguments, and set len
774 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000775 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000776 len = 0;
777 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
778 PyObject *curseq;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000779 int curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000780
Tim Peters4e9afdc2001-05-03 23:54:49 +0000781 /* Get iterator. */
782 curseq = PyTuple_GetItem(args, i+1);
783 sqp->it = PyObject_GetIter(curseq);
784 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000785 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000786 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000787 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +0000788 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000789 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000790 goto Fail_2;
791 }
792
Tim Peters4e9afdc2001-05-03 23:54:49 +0000793 /* Update len. */
794 curlen = -1; /* unknown */
795 if (PySequence_Check(curseq) &&
796 curseq->ob_type->tp_as_sequence->sq_length) {
797 curlen = PySequence_Size(curseq);
798 if (curlen < 0)
799 PyErr_Clear();
800 }
Tim Peters748b8bb2001-04-28 08:20:22 +0000801 if (curlen < 0)
Tim Peters4e9afdc2001-05-03 23:54:49 +0000802 curlen = 8; /* arbitrary */
Tim Peters6d6c1a32001-08-02 04:15:00 +0000803 if (curlen > len)
804 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000805 }
806
Tim Peters4e9afdc2001-05-03 23:54:49 +0000807 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000808 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000809 goto Fail_2;
810
Tim Peters4e9afdc2001-05-03 23:54:49 +0000811 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +0000812 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000813 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000814 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000815
Guido van Rossum79f25d91997-04-29 20:08:16 +0000816 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +0000817 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000818 else if ((alist = PyTuple_New(n)) == NULL)
819 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000820
821 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000822 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000823 Py_INCREF(Py_None);
824 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000825 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000826 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000827 item = PyIter_Next(sqp->it);
828 if (item)
829 ++numactive;
830 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000831 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +0000832 Py_XDECREF(alist);
833 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000834 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000835 Py_INCREF(Py_None);
836 item = Py_None;
837 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000838 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000839 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000840 if (alist)
841 PyTuple_SET_ITEM(alist, j, item);
842 else
Guido van Rossum2d951851994-08-29 12:52:16 +0000843 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000844 }
845
Guido van Rossum32120311995-07-10 13:52:21 +0000846 if (!alist)
847 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +0000848
Tim Peters4e9afdc2001-05-03 23:54:49 +0000849 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000850 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +0000851 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000852 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000853
Guido van Rossum79f25d91997-04-29 20:08:16 +0000854 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +0000855 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000856 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000857 value = PyEval_CallObject(func, alist);
858 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000859 if (value == NULL)
860 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000861 }
862 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +0000863 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +0000864 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +0000865 if (status < 0)
866 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000867 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000868 else if (PyList_SetItem(result, i, value) < 0)
869 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000870 }
871
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000872 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
873 goto Fail_1;
874
Tim Peters4e9afdc2001-05-03 23:54:49 +0000875 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000876
Guido van Rossum12d12c51993-10-26 17:58:25 +0000877Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000878 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000879Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +0000880 result = NULL;
881Succeed:
882 assert(seqs);
883 for (i = 0; i < n; ++i)
884 Py_XDECREF(seqs[i].it);
885 PyMem_DEL(seqs);
886 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000887}
888
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000889PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000890"map(function, sequence[, sequence, ...]) -> list\n\
891\n\
892Return a list of the results of applying the function to the items of\n\
893the argument sequence(s). If more than one sequence is given, the\n\
894function is called with an argument list consisting of the corresponding\n\
895item of each sequence, substituting None for missing values when not all\n\
896sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000897the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000898
899
Guido van Rossum79f25d91997-04-29 20:08:16 +0000900static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000901builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000902{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000903 PyObject *v;
904 PyObject *name;
905 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000906
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000907 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000908 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000909 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000910 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000911 Py_INCREF(Py_None);
912 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000913}
914
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000915PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000916"setattr(object, name, value)\n\
917\n\
918Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000919``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000920
921
Guido van Rossum79f25d91997-04-29 20:08:16 +0000922static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000923builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000924{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000925 PyObject *v;
926 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000927
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000928 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +0000929 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000930 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000931 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000932 Py_INCREF(Py_None);
933 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +0000934}
935
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000936PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +0000937"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000938\n\
939Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000940``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000941
942
Guido van Rossum79f25d91997-04-29 20:08:16 +0000943static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000944builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000945{
Guido van Rossum9bfef441993-03-29 10:43:31 +0000946 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000947
Guido van Rossum79f25d91997-04-29 20:08:16 +0000948 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000949 if (x == -1)
950 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000951 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000952}
953
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000954PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000955"hash(object) -> integer\n\
956\n\
957Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000958the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000959
960
Guido van Rossum79f25d91997-04-29 20:08:16 +0000961static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000962builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +0000963{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000964 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000965
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000966 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000967 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000968 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000969 "hex() argument can't be converted to hex");
970 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +0000971 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000972 return (*nb->nb_hex)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +0000973}
974
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000975PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000976"hex(number) -> string\n\
977\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000978Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000979
980
Tim Petersdbd9ba62000-07-09 03:09:57 +0000981static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000982
Guido van Rossum79f25d91997-04-29 20:08:16 +0000983static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000984builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000985{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000986 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000987 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000988 PyObject *res;
989 PyObject *globals, *locals;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000990
991 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000992 if (line == NULL)
993 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000994 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000995 return NULL;
996 while (*str == ' ' || *str == '\t')
997 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000998 globals = PyEval_GetGlobals();
999 locals = PyEval_GetLocals();
1000 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
1001 if (PyDict_SetItemString(globals, "__builtins__",
1002 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +00001003 return NULL;
1004 }
Guido van Rossumb05a5c71997-05-07 17:46:13 +00001005 res = PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001006 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001007 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001008}
1009
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001010PyDoc_STRVAR(input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001011"input([prompt]) -> value\n\
1012\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001013Equivalent to eval(raw_input(prompt)).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001014
1015
Guido van Rossume8811f81997-02-14 15:48:05 +00001016static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001017builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001018{
1019 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001020 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001021 return NULL;
1022 Py_INCREF(s);
1023 PyString_InternInPlace(&s);
1024 return s;
1025}
1026
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001027PyDoc_STRVAR(intern_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001028"intern(string) -> string\n\
1029\n\
1030``Intern'' the given string. This enters the string in the (global)\n\
1031table of interned strings whose purpose is to speed up dictionary lookups.\n\
1032Return the string itself or the previously interned string object with the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001033same value.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001034
1035
Guido van Rossum79f25d91997-04-29 20:08:16 +00001036static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001037builtin_iter(PyObject *self, PyObject *args)
1038{
1039 PyObject *v, *w = NULL;
1040
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001041 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001042 return NULL;
1043 if (w == NULL)
1044 return PyObject_GetIter(v);
1045 if (!PyCallable_Check(v)) {
1046 PyErr_SetString(PyExc_TypeError,
1047 "iter(v, w): v must be callable");
1048 return NULL;
1049 }
1050 return PyCallIter_New(v, w);
1051}
1052
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001053PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001054"iter(collection) -> iterator\n\
1055iter(callable, sentinel) -> iterator\n\
1056\n\
1057Get an iterator from an object. In the first form, the argument must\n\
1058supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001059In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001060
1061
1062static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001063builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001064{
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001065 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001066
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001067 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001068 if (res < 0 && PyErr_Occurred())
1069 return NULL;
1070 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001071}
1072
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001073PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001074"len(object) -> integer\n\
1075\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001076Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001077
1078
Guido van Rossum79f25d91997-04-29 20:08:16 +00001079static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001080builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001081{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001082 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001083
Guido van Rossum79f25d91997-04-29 20:08:16 +00001084 d = PyEval_GetLocals();
1085 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001086 return d;
1087}
1088
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001089PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001090"locals() -> dictionary\n\
1091\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001092Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001093
1094
Guido van Rossum79f25d91997-04-29 20:08:16 +00001095static PyObject *
Guido van Rossum53451b32001-01-17 15:47:24 +00001096min_max(PyObject *args, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001097{
Tim Petersc3074532001-05-03 07:00:32 +00001098 PyObject *v, *w, *x, *it;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001099
Guido van Rossum79f25d91997-04-29 20:08:16 +00001100 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001101 v = args;
Raymond Hettingerbbfb9102002-12-29 18:31:19 +00001102 else if (!PyArg_UnpackTuple(args, (op==Py_LT) ? "min" : "max", 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001103 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001104
Tim Petersc3074532001-05-03 07:00:32 +00001105 it = PyObject_GetIter(v);
1106 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001107 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001108
1109 w = NULL; /* the result */
Tim Petersf4848da2001-05-05 00:14:56 +00001110 for (;;) {
Tim Petersc3074532001-05-03 07:00:32 +00001111 x = PyIter_Next(it);
Guido van Rossum2d951851994-08-29 12:52:16 +00001112 if (x == NULL) {
Tim Petersc3074532001-05-03 07:00:32 +00001113 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001114 Py_XDECREF(w);
1115 Py_DECREF(it);
1116 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001117 }
Tim Petersc3074532001-05-03 07:00:32 +00001118 break;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001119 }
Tim Petersc3074532001-05-03 07:00:32 +00001120
Guido van Rossum2d951851994-08-29 12:52:16 +00001121 if (w == NULL)
1122 w = x;
1123 else {
Guido van Rossum53451b32001-01-17 15:47:24 +00001124 int cmp = PyObject_RichCompareBool(x, w, op);
1125 if (cmp > 0) {
1126 Py_DECREF(w);
1127 w = x;
1128 }
1129 else if (cmp < 0) {
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001130 Py_DECREF(x);
Tim Petersc3074532001-05-03 07:00:32 +00001131 Py_DECREF(w);
1132 Py_DECREF(it);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001133 return NULL;
1134 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001135 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001136 Py_DECREF(x);
Guido van Rossum2d951851994-08-29 12:52:16 +00001137 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001138 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001139 if (w == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001140 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +00001141 "min() or max() arg is an empty sequence");
Tim Petersc3074532001-05-03 07:00:32 +00001142 Py_DECREF(it);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001143 return w;
1144}
1145
Guido van Rossum79f25d91997-04-29 20:08:16 +00001146static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001147builtin_min(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001148{
Guido van Rossum53451b32001-01-17 15:47:24 +00001149 return min_max(v, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001150}
1151
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001152PyDoc_STRVAR(min_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001153"min(sequence) -> value\n\
1154min(a, b, c, ...) -> value\n\
1155\n\
1156With a single sequence argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001157With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001158
1159
Guido van Rossum79f25d91997-04-29 20:08:16 +00001160static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001161builtin_max(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001162{
Guido van Rossum53451b32001-01-17 15:47:24 +00001163 return min_max(v, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001164}
1165
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001166PyDoc_STRVAR(max_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001167"max(sequence) -> value\n\
1168max(a, b, c, ...) -> value\n\
1169\n\
1170With a single sequence argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001171With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001172
1173
Guido van Rossum79f25d91997-04-29 20:08:16 +00001174static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001175builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001176{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001177 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001178
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001179 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1180 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001181 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001182 "oct() argument can't be converted to oct");
1183 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001184 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001185 return (*nb->nb_oct)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001186}
1187
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001188PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001189"oct(number) -> string\n\
1190\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001191Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001192
1193
Guido van Rossum79f25d91997-04-29 20:08:16 +00001194static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001195builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001196{
Guido van Rossum09095f32000-03-10 23:00:52 +00001197 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001198 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001199
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001200 if (PyString_Check(obj)) {
1201 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001202 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001203 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001204 return PyInt_FromLong(ord);
1205 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001206#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001207 } else if (PyUnicode_Check(obj)) {
1208 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001209 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001210 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001211 return PyInt_FromLong(ord);
1212 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001213#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001214 } else {
1215 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001216 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001217 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001218 return NULL;
1219 }
1220
Guido van Rossumad991772001-01-12 16:03:05 +00001221 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001222 "ord() expected a character, "
1223 "but string of length %d found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001224 size);
1225 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001226}
1227
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001228PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001229"ord(c) -> integer\n\
1230\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001231Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001232
1233
Guido van Rossum79f25d91997-04-29 20:08:16 +00001234static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001235builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001236{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001237 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001238
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001239 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001240 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001241 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001242}
1243
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001244PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001245"pow(x, y[, z]) -> number\n\
1246\n\
1247With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001248equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001249
1250
Guido van Rossum124eff01999-02-23 16:11:01 +00001251/* Return number of items in range/xrange (lo, hi, step). step > 0
1252 * required. Return a value < 0 if & only if the true value is too
1253 * large to fit in a signed long.
1254 */
1255static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001256get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001257{
1258 /* -------------------------------------------------------------
1259 If lo >= hi, the range is empty.
1260 Else if n values are in the range, the last one is
1261 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1262 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1263 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1264 the RHS is non-negative and so truncation is the same as the
1265 floor. Letting M be the largest positive long, the worst case
1266 for the RHS numerator is hi=M, lo=-M-1, and then
1267 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1268 precision to compute the RHS exactly.
1269 ---------------------------------------------------------------*/
1270 long n = 0;
1271 if (lo < hi) {
1272 unsigned long uhi = (unsigned long)hi;
1273 unsigned long ulo = (unsigned long)lo;
1274 unsigned long diff = uhi - ulo - 1;
1275 n = (long)(diff / (unsigned long)step + 1);
1276 }
1277 return n;
1278}
1279
Guido van Rossum79f25d91997-04-29 20:08:16 +00001280static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001281builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001282{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001283 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001284 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001285 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001286
Guido van Rossum79f25d91997-04-29 20:08:16 +00001287 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001288
Guido van Rossum79f25d91997-04-29 20:08:16 +00001289 if (PyTuple_Size(args) <= 1) {
1290 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001291 "l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001292 &ihigh))
1293 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001294 }
1295 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001296 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001297 "ll|l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001298 &ilow, &ihigh, &istep))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001299 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001300 }
1301 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001302 PyErr_SetString(PyExc_ValueError, "range() arg 3 must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001303 return NULL;
1304 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001305 if (istep > 0)
1306 bign = get_len_of_range(ilow, ihigh, istep);
1307 else
1308 bign = get_len_of_range(ihigh, ilow, -istep);
1309 n = (int)bign;
1310 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001311 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001312 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001313 return NULL;
1314 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001315 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001316 if (v == NULL)
1317 return NULL;
1318 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001319 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001320 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001321 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001322 return NULL;
1323 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001324 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001325 ilow += istep;
1326 }
1327 return v;
1328}
1329
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001330PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001331"range([start,] stop[, step]) -> list of integers\n\
1332\n\
1333Return a list containing an arithmetic progression of integers.\n\
1334range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1335When step is given, it specifies the increment (or decrement).\n\
1336For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001337These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001338
1339
Guido van Rossum79f25d91997-04-29 20:08:16 +00001340static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001341builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001342{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001343 PyObject *v = NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001344 PyObject *fin = PySys_GetObject("stdin");
1345 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001346
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001347 if (!PyArg_UnpackTuple(args, "[raw_]input", 0, 1, &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001348 return NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001349
1350 if (fin == NULL) {
1351 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdin");
1352 return NULL;
1353 }
1354 if (fout == NULL) {
1355 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
1356 return NULL;
1357 }
1358 if (PyFile_SoftSpace(fout, 0)) {
1359 if (PyFile_WriteString(" ", fout) != 0)
1360 return NULL;
1361 }
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001362 if (PyFile_Check (fin) && PyFile_Check (fout)
1363 && isatty(fileno(PyFile_AsFile(fin)))
1364 && isatty(fileno(PyFile_AsFile(fout)))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001365 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001366 char *prompt;
1367 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001368 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001369 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001370 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001371 if (po == NULL)
1372 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001373 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001374 if (prompt == NULL)
1375 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001376 }
1377 else {
1378 po = NULL;
1379 prompt = "";
1380 }
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001381 s = PyOS_Readline(PyFile_AsFile (fin), PyFile_AsFile (fout),
1382 prompt);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001383 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001384 if (s == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001385 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001386 return NULL;
1387 }
1388 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001389 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001390 result = NULL;
1391 }
1392 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001393 size_t len = strlen(s);
1394 if (len > INT_MAX) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001395 PyErr_SetString(PyExc_OverflowError,
1396 "input too long");
Guido van Rossum106f2da2000-06-28 21:12:25 +00001397 result = NULL;
1398 }
1399 else {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001400 result = PyString_FromStringAndSize(s,
1401 (int)(len-1));
Guido van Rossum106f2da2000-06-28 21:12:25 +00001402 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001403 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001404 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001405 return result;
1406 }
Guido van Rossum90933611991-06-07 16:10:43 +00001407 if (v != NULL) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001408 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001409 return NULL;
1410 }
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001411 return PyFile_GetLine(fin, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001412}
1413
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001414PyDoc_STRVAR(raw_input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001415"raw_input([prompt]) -> string\n\
1416\n\
1417Read a string from standard input. The trailing newline is stripped.\n\
1418If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1419On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001420is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001421
1422
Guido van Rossum79f25d91997-04-29 20:08:16 +00001423static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001424builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001425{
Tim Peters15d81ef2001-05-04 04:39:21 +00001426 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001427
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001428 if (!PyArg_UnpackTuple(args, "reduce", 2, 3, &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001429 return NULL;
1430 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001431 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001432
Tim Peters15d81ef2001-05-04 04:39:21 +00001433 it = PyObject_GetIter(seq);
1434 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001435 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001436 "reduce() arg 2 must support iteration");
1437 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001438 return NULL;
1439 }
1440
Guido van Rossum79f25d91997-04-29 20:08:16 +00001441 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001442 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001443
Tim Peters15d81ef2001-05-04 04:39:21 +00001444 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001445 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001446
1447 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001448 Py_DECREF(args);
1449 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001450 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001451 }
1452
Tim Peters15d81ef2001-05-04 04:39:21 +00001453 op2 = PyIter_Next(it);
1454 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001455 if (PyErr_Occurred())
1456 goto Fail;
1457 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001458 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001459
Guido van Rossum2d951851994-08-29 12:52:16 +00001460 if (result == NULL)
1461 result = op2;
1462 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001463 PyTuple_SetItem(args, 0, result);
1464 PyTuple_SetItem(args, 1, op2);
1465 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001466 goto Fail;
1467 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001468 }
1469
Guido van Rossum79f25d91997-04-29 20:08:16 +00001470 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001471
Guido van Rossum2d951851994-08-29 12:52:16 +00001472 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001473 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001474 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001475
Tim Peters15d81ef2001-05-04 04:39:21 +00001476 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001477 return result;
1478
Guido van Rossum2d951851994-08-29 12:52:16 +00001479Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001480 Py_XDECREF(args);
1481 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001482 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001483 return NULL;
1484}
1485
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001486PyDoc_STRVAR(reduce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001487"reduce(function, sequence[, initial]) -> value\n\
1488\n\
1489Apply a function of two arguments cumulatively to the items of a sequence,\n\
1490from left to right, so as to reduce the sequence to a single value.\n\
1491For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1492((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1493of the sequence in the calculation, and serves as a default when the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001494sequence is empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001495
1496
Guido van Rossum79f25d91997-04-29 20:08:16 +00001497static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001498builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001499{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001500 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001501}
1502
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001503PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001504"reload(module) -> module\n\
1505\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001506Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001507
1508
Guido van Rossum79f25d91997-04-29 20:08:16 +00001509static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001510builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001511{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001512 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001513}
1514
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001515PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001516"repr(object) -> string\n\
1517\n\
1518Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001519For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001520
1521
Guido van Rossum79f25d91997-04-29 20:08:16 +00001522static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001523builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001524{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001525 double x;
1526 double f;
1527 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001528 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001529
Guido van Rossum79f25d91997-04-29 20:08:16 +00001530 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001531 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001532 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001533 i = abs(ndigits);
1534 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001535 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001536 if (ndigits < 0)
1537 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001538 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00001539 x *= f;
1540 if (x >= 0.0)
1541 x = floor(x + 0.5);
1542 else
1543 x = ceil(x - 0.5);
1544 if (ndigits < 0)
1545 x *= f;
1546 else
1547 x /= f;
1548 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001549}
1550
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001551PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001552"round(number[, ndigits]) -> floating point number\n\
1553\n\
1554Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001555This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001556
1557
Guido van Rossum79f25d91997-04-29 20:08:16 +00001558static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001559builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001560{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001561 PyObject *v = NULL;
1562 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001563
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001564 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001565 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001566 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001567 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001568 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001569 if (!PyErr_Occurred())
1570 PyErr_SetString(PyExc_SystemError,
1571 "no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001572 }
1573 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001574 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001575 }
1576 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001577 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001578 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001579 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001580 "vars() argument must have __dict__ attribute");
1581 return NULL;
1582 }
1583 }
1584 return d;
1585}
1586
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001587PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001588"vars([object]) -> dictionary\n\
1589\n\
1590Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001591With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001592
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001593static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001594builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001595{
1596 PyObject *inst;
1597 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001598 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001599
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001600 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001601 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001602
Guido van Rossum823649d2001-03-21 18:40:58 +00001603 retval = PyObject_IsInstance(inst, cls);
1604 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001605 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001606 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001607}
1608
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001609PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001610"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001611\n\
1612Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001613With a type as second argument, return whether that is the object's type.\n\
1614The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001615isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001616
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001617
1618static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001619builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001620{
1621 PyObject *derived;
1622 PyObject *cls;
1623 int retval;
1624
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001625 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001626 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001627
Guido van Rossum823649d2001-03-21 18:40:58 +00001628 retval = PyObject_IsSubclass(derived, cls);
1629 if (retval < 0)
1630 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001631 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001632}
1633
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001634PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001635"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001636\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00001637Return whether class C is a subclass (i.e., a derived class) of class B.\n\
1638When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
1639is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001640
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001641
Barry Warsawbd599b52000-08-03 15:45:29 +00001642static PyObject*
1643builtin_zip(PyObject *self, PyObject *args)
1644{
1645 PyObject *ret;
Tim Peters67d687a2002-04-29 21:27:32 +00001646 const int itemsize = PySequence_Length(args);
Tim Peters8572b4f2001-05-06 01:05:02 +00001647 int i;
1648 PyObject *itlist; /* tuple of iterators */
Tim Peters67d687a2002-04-29 21:27:32 +00001649 int len; /* guess at result length */
Barry Warsawbd599b52000-08-03 15:45:29 +00001650
1651 if (itemsize < 1) {
1652 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001653 "zip() requires at least one sequence");
Barry Warsawbd599b52000-08-03 15:45:29 +00001654 return NULL;
1655 }
1656 /* args must be a tuple */
1657 assert(PyTuple_Check(args));
1658
Tim Peters39a86c22002-05-12 07:19:38 +00001659 /* Guess at result length: the shortest of the input lengths.
1660 If some argument refuses to say, we refuse to guess too, lest
1661 an argument like xrange(sys.maxint) lead us astray.*/
Tim Peters67d687a2002-04-29 21:27:32 +00001662 len = -1; /* unknown */
1663 for (i = 0; i < itemsize; ++i) {
1664 PyObject *item = PyTuple_GET_ITEM(args, i);
1665 int thislen = PySequence_Length(item);
Tim Peters39a86c22002-05-12 07:19:38 +00001666 if (thislen < 0) {
Tim Peters67d687a2002-04-29 21:27:32 +00001667 PyErr_Clear();
Tim Peters39a86c22002-05-12 07:19:38 +00001668 len = -1;
1669 break;
1670 }
Tim Peters67d687a2002-04-29 21:27:32 +00001671 else if (len < 0 || thislen < len)
1672 len = thislen;
1673 }
1674
Tim Peters8572b4f2001-05-06 01:05:02 +00001675 /* allocate result list */
Tim Peters67d687a2002-04-29 21:27:32 +00001676 if (len < 0)
1677 len = 10; /* arbitrary */
1678 if ((ret = PyList_New(len)) == NULL)
Barry Warsawbd599b52000-08-03 15:45:29 +00001679 return NULL;
1680
Tim Peters8572b4f2001-05-06 01:05:02 +00001681 /* obtain iterators */
1682 itlist = PyTuple_New(itemsize);
1683 if (itlist == NULL)
1684 goto Fail_ret;
1685 for (i = 0; i < itemsize; ++i) {
1686 PyObject *item = PyTuple_GET_ITEM(args, i);
1687 PyObject *it = PyObject_GetIter(item);
1688 if (it == NULL) {
1689 if (PyErr_ExceptionMatches(PyExc_TypeError))
1690 PyErr_Format(PyExc_TypeError,
1691 "zip argument #%d must support iteration",
1692 i+1);
1693 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00001694 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001695 PyTuple_SET_ITEM(itlist, i, it);
1696 }
Barry Warsawbd599b52000-08-03 15:45:29 +00001697
Tim Peters8572b4f2001-05-06 01:05:02 +00001698 /* build result into ret list */
Tim Peters67d687a2002-04-29 21:27:32 +00001699 for (i = 0; ; ++i) {
1700 int j;
Tim Peters8572b4f2001-05-06 01:05:02 +00001701 PyObject *next = PyTuple_New(itemsize);
1702 if (!next)
1703 goto Fail_ret_itlist;
1704
Tim Peters67d687a2002-04-29 21:27:32 +00001705 for (j = 0; j < itemsize; j++) {
1706 PyObject *it = PyTuple_GET_ITEM(itlist, j);
Tim Peters8572b4f2001-05-06 01:05:02 +00001707 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00001708 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00001709 if (PyErr_Occurred()) {
1710 Py_DECREF(ret);
1711 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00001712 }
1713 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00001714 Py_DECREF(itlist);
Tim Peters67d687a2002-04-29 21:27:32 +00001715 goto Done;
Barry Warsawbd599b52000-08-03 15:45:29 +00001716 }
Tim Peters67d687a2002-04-29 21:27:32 +00001717 PyTuple_SET_ITEM(next, j, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00001718 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001719
Tim Peters67d687a2002-04-29 21:27:32 +00001720 if (i < len)
1721 PyList_SET_ITEM(ret, i, next);
1722 else {
1723 int status = PyList_Append(ret, next);
1724 Py_DECREF(next);
1725 ++len;
1726 if (status < 0)
1727 goto Fail_ret_itlist;
1728 }
Barry Warsawbd599b52000-08-03 15:45:29 +00001729 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001730
Tim Peters67d687a2002-04-29 21:27:32 +00001731Done:
1732 if (ret != NULL && i < len) {
1733 /* The list is too big. */
1734 if (PyList_SetSlice(ret, i, len, NULL) < 0)
1735 return NULL;
1736 }
1737 return ret;
1738
Tim Peters8572b4f2001-05-06 01:05:02 +00001739Fail_ret_itlist:
1740 Py_DECREF(itlist);
1741Fail_ret:
1742 Py_DECREF(ret);
1743 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00001744}
1745
1746
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001747PyDoc_STRVAR(zip_doc,
Barry Warsawbd599b52000-08-03 15:45:29 +00001748"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
1749\n\
1750Return a list of tuples, where each tuple contains the i-th element\n\
1751from each of the argument sequences. The returned list is truncated\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001752in length to the length of the shortest argument sequence.");
Barry Warsawbd599b52000-08-03 15:45:29 +00001753
1754
Guido van Rossum79f25d91997-04-29 20:08:16 +00001755static PyMethodDef builtin_methods[] = {
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001756 {"__import__", builtin___import__, METH_VARARGS, import_doc},
1757 {"abs", builtin_abs, METH_O, abs_doc},
1758 {"apply", builtin_apply, METH_VARARGS, apply_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001759 {"callable", builtin_callable, METH_O, callable_doc},
1760 {"chr", builtin_chr, METH_VARARGS, chr_doc},
1761 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
1762 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
1763 {"compile", builtin_compile, METH_VARARGS, compile_doc},
1764 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
1765 {"dir", builtin_dir, METH_VARARGS, dir_doc},
1766 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
1767 {"eval", builtin_eval, METH_VARARGS, eval_doc},
1768 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
1769 {"filter", builtin_filter, METH_VARARGS, filter_doc},
1770 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
1771 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
1772 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
1773 {"hash", builtin_hash, METH_O, hash_doc},
1774 {"hex", builtin_hex, METH_O, hex_doc},
1775 {"id", builtin_id, METH_O, id_doc},
1776 {"input", builtin_input, METH_VARARGS, input_doc},
1777 {"intern", builtin_intern, METH_VARARGS, intern_doc},
1778 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
1779 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
1780 {"iter", builtin_iter, METH_VARARGS, iter_doc},
1781 {"len", builtin_len, METH_O, len_doc},
1782 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
1783 {"map", builtin_map, METH_VARARGS, map_doc},
1784 {"max", builtin_max, METH_VARARGS, max_doc},
1785 {"min", builtin_min, METH_VARARGS, min_doc},
1786 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001787 {"ord", builtin_ord, METH_O, ord_doc},
1788 {"pow", builtin_pow, METH_VARARGS, pow_doc},
1789 {"range", builtin_range, METH_VARARGS, range_doc},
1790 {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc},
1791 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
1792 {"reload", builtin_reload, METH_O, reload_doc},
1793 {"repr", builtin_repr, METH_O, repr_doc},
1794 {"round", builtin_round, METH_VARARGS, round_doc},
1795 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001796#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001797 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001798#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001799 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001800 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00001801 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00001802};
1803
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001804PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001805"Built-in functions, exceptions, and other objects.\n\
1806\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001807Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001808
Guido van Rossum25ce5661997-08-02 03:10:38 +00001809PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001810_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001811{
Fred Drake5550de32000-06-20 04:54:19 +00001812 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001813 mod = Py_InitModule4("__builtin__", builtin_methods,
1814 builtin_doc, (PyObject *)NULL,
1815 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001816 if (mod == NULL)
1817 return NULL;
1818 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00001819
1820#define SETBUILTIN(NAME, OBJECT) \
1821 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
1822 return NULL
1823
1824 SETBUILTIN("None", Py_None);
1825 SETBUILTIN("Ellipsis", Py_Ellipsis);
1826 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001827 SETBUILTIN("False", Py_False);
1828 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00001829 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001830 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001831 SETBUILTIN("buffer", &PyBuffer_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001832 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001833#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00001834 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001835#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00001836 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00001837 SETBUILTIN("enumerate", &PyEnum_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001838 SETBUILTIN("float", &PyFloat_Type);
1839 SETBUILTIN("property", &PyProperty_Type);
1840 SETBUILTIN("int", &PyInt_Type);
1841 SETBUILTIN("list", &PyList_Type);
1842 SETBUILTIN("long", &PyLong_Type);
1843 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001844 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001845 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
1846 SETBUILTIN("str", &PyString_Type);
1847 SETBUILTIN("super", &PySuper_Type);
1848 SETBUILTIN("tuple", &PyTuple_Type);
1849 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00001850 SETBUILTIN("xrange", &PyRange_Type);
Tim Peters742dfd62001-09-13 21:49:44 +00001851
1852 /* Note that open() is just an alias of file(). */
1853 SETBUILTIN("open", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001854 SETBUILTIN("file", &PyFile_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001855#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00001856 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001857#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00001858 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00001859 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
1860 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001861 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00001862 }
1863 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00001864
Guido van Rossum25ce5661997-08-02 03:10:38 +00001865 return mod;
Tim Peters4b7625e2001-09-13 21:37:17 +00001866#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00001867}
1868
Guido van Rossume77a7571993-11-03 15:01:26 +00001869/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00001870
Guido van Rossum79f25d91997-04-29 20:08:16 +00001871static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001872filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001873{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001874 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001875 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001876 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001877
Guido van Rossumb7b45621995-08-04 04:07:45 +00001878 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00001879 if (PyTuple_CheckExact(tuple))
1880 Py_INCREF(tuple);
1881 else
1882 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00001883 return tuple;
1884 }
1885
Guido van Rossum79f25d91997-04-29 20:08:16 +00001886 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00001887 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001888
Guido van Rossum12d12c51993-10-26 17:58:25 +00001889 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001890 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001891 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001892
Walter Dörwald8dd19322003-02-10 17:36:40 +00001893 if (tuple->ob_type->tp_as_sequence &&
1894 tuple->ob_type->tp_as_sequence->sq_item) {
1895 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
1896 } else {
1897 PyErr_SetString(PyExc_TypeError, "unsubscriptable object");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001898 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00001899 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001900 if (func == Py_None) {
1901 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001902 good = item;
1903 }
1904 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001905 PyObject *arg = Py_BuildValue("(O)", item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001906 if (arg == NULL)
1907 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001908 good = PyEval_CallObject(func, arg);
1909 Py_DECREF(arg);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001910 if (good == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001911 goto Fail_1;
1912 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001913 ok = PyObject_IsTrue(good);
1914 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001915 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001916 Py_INCREF(item);
1917 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001918 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001919 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001920 }
1921
Tim Peters4324aa32001-05-28 22:30:08 +00001922 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001923 return NULL;
1924
Guido van Rossum12d12c51993-10-26 17:58:25 +00001925 return result;
1926
Guido van Rossum12d12c51993-10-26 17:58:25 +00001927Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001928 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001929 return NULL;
1930}
1931
1932
Guido van Rossume77a7571993-11-03 15:01:26 +00001933/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00001934
Guido van Rossum79f25d91997-04-29 20:08:16 +00001935static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001936filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001937{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001938 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001939 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001940 int len = PyString_Size(strobj);
Walter Dörwald903f1e02003-02-04 16:28:00 +00001941 int outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001942
Guido van Rossum79f25d91997-04-29 20:08:16 +00001943 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00001944 /* If it's a real string we can return the original,
1945 * as no character is ever false and __getitem__
1946 * does return this character. If it's a subclass
1947 * we must go through the __getitem__ loop */
1948 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00001949 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00001950 return strobj;
1951 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001952 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001953 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00001954 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001955
Guido van Rossum12d12c51993-10-26 17:58:25 +00001956 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00001957 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001958 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001959
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001960 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
1961 if (item == NULL)
1962 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00001963 if (func==Py_None) {
1964 ok = 1;
1965 } else {
1966 PyObject *arg, *good;
1967 arg = Py_BuildValue("(O)", item);
1968 if (arg == NULL) {
1969 Py_DECREF(item);
1970 goto Fail_1;
1971 }
1972 good = PyEval_CallObject(func, arg);
1973 Py_DECREF(arg);
1974 if (good == NULL) {
1975 Py_DECREF(item);
1976 goto Fail_1;
1977 }
1978 ok = PyObject_IsTrue(good);
1979 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00001980 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00001981 if (ok) {
1982 int reslen;
1983 if (!PyString_Check(item)) {
1984 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
1985 " __getitem__ returned different type");
1986 Py_DECREF(item);
1987 goto Fail_1;
1988 }
1989 reslen = PyString_GET_SIZE(item);
1990 if (reslen == 1) {
1991 PyString_AS_STRING(result)[j++] =
1992 PyString_AS_STRING(item)[0];
1993 } else {
1994 /* do we need more space? */
1995 int need = j + reslen + len-i-1;
1996 if (need > outlen) {
1997 /* overallocate, to avoid reallocations */
1998 if (need<2*outlen)
1999 need = 2*outlen;
2000 if (_PyString_Resize(&result, need)) {
2001 Py_DECREF(item);
2002 return NULL;
2003 }
2004 outlen = need;
2005 }
2006 memcpy(
2007 PyString_AS_STRING(result) + j,
2008 PyString_AS_STRING(item),
2009 reslen
2010 );
2011 j += reslen;
2012 }
2013 }
Tim Peters388ed082001-04-07 20:34:48 +00002014 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002015 }
2016
Walter Dörwald903f1e02003-02-04 16:28:00 +00002017 if (j < outlen)
Tim Peters5de98422002-04-27 18:44:32 +00002018 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002019
Guido van Rossum12d12c51993-10-26 17:58:25 +00002020 return result;
2021
Guido van Rossum12d12c51993-10-26 17:58:25 +00002022Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002023 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002024 return NULL;
2025}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002026
2027#ifdef Py_USING_UNICODE
2028/* Helper for filter(): filter a Unicode object through a function */
2029
2030static PyObject *
2031filterunicode(PyObject *func, PyObject *strobj)
2032{
2033 PyObject *result;
2034 register int i, j;
2035 int len = PyUnicode_GetSize(strobj);
Walter Dörwald903f1e02003-02-04 16:28:00 +00002036 int outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002037
2038 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002039 /* If it's a real string we can return the original,
2040 * as no character is ever false and __getitem__
2041 * does return this character. If it's a subclass
2042 * we must go through the __getitem__ loop */
2043 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002044 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002045 return strobj;
2046 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002047 }
2048 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2049 return NULL;
2050
2051 for (i = j = 0; i < len; ++i) {
2052 PyObject *item, *arg, *good;
2053 int ok;
2054
2055 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2056 if (item == NULL)
2057 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002058 if (func == Py_None) {
2059 ok = 1;
2060 } else {
2061 arg = Py_BuildValue("(O)", item);
2062 if (arg == NULL) {
2063 Py_DECREF(item);
2064 goto Fail_1;
2065 }
2066 good = PyEval_CallObject(func, arg);
2067 Py_DECREF(arg);
2068 if (good == NULL) {
2069 Py_DECREF(item);
2070 goto Fail_1;
2071 }
2072 ok = PyObject_IsTrue(good);
2073 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002074 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002075 if (ok) {
2076 int reslen;
2077 if (!PyUnicode_Check(item)) {
2078 PyErr_SetString(PyExc_TypeError, "can't filter unicode to unicode:"
2079 " __getitem__ returned different type");
2080 Py_DECREF(item);
2081 goto Fail_1;
2082 }
2083 reslen = PyUnicode_GET_SIZE(item);
2084 if (reslen == 1) {
2085 PyUnicode_AS_UNICODE(result)[j++] =
2086 PyUnicode_AS_UNICODE(item)[0];
2087 } else {
2088 /* do we need more space? */
2089 int need = j + reslen + len-i-1;
2090 if (need > outlen) {
2091 /* overallocate, to avoid reallocations */
2092 if (need<2*outlen)
2093 need = 2*outlen;
2094 if (PyUnicode_Resize(&result, need)) {
2095 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002096 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002097 }
2098 outlen = need;
2099 }
2100 memcpy(
2101 PyUnicode_AS_UNICODE(result) + j,
2102 PyUnicode_AS_UNICODE(item),
2103 reslen*sizeof(Py_UNICODE)
2104 );
2105 j += reslen;
2106 }
2107 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002108 Py_DECREF(item);
2109 }
2110
Walter Dörwald903f1e02003-02-04 16:28:00 +00002111 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002112 PyUnicode_Resize(&result, j);
2113
2114 return result;
2115
2116Fail_1:
2117 Py_DECREF(result);
2118 return NULL;
2119}
2120#endif