blob: 338e38d70a7b17739de0328dae5464b62ada2e2f [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 Hammond26cffde2001-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 Hammond26cffde2001-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 Hammond26cffde2001-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
383 if (supplied_flags & ~(PyCF_MASK | PyCF_MASK_OBSOLETE)) {
384 PyErr_SetString(PyExc_ValueError,
385 "compile(): unrecognised flags");
386 return NULL;
387 }
388 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
389
Tim Peters6cd6a822001-08-17 22:11:27 +0000390 if (!dont_inherit) {
391 PyEval_MergeCompilerFlags(&cf);
392 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000393 result = Py_CompileStringFlags(str, filename, start, &cf);
394 Py_XDECREF(tmp);
395 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000396}
397
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000398PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000399"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000400\n\
401Compile the source string (a Python module, statement or expression)\n\
402into a code object that can be executed by the exec statement or eval().\n\
403The filename will be used for run-time error messages.\n\
404The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000405single (interactive) statement, or 'eval' to compile an expression.\n\
406The flags argument, if present, controls which future statements influence\n\
407the compilation of the code.\n\
408The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
409the effects of any future statements in effect in the code calling\n\
410compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000411in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000412
Guido van Rossum79f25d91997-04-29 20:08:16 +0000413static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000414builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000415{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000416 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000417
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000418 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000419 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000420 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000421}
422
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000423PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000424"dir([object]) -> list of strings\n"
425"\n"
426"Return an alphabetized list of names comprising (some of) the attributes\n"
427"of the given object, and of attributes reachable from it:\n"
428"\n"
429"No argument: the names in the current scope.\n"
430"Module object: the module attributes.\n"
Tim Peters37a309d2001-09-04 01:20:04 +0000431"Type or class object: its attributes, and recursively the attributes of\n"
432" its bases.\n"
Tim Peters5d2b77c2001-09-03 05:47:38 +0000433"Otherwise: its attributes, its class's attributes, and recursively the\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000434" attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000435
Guido van Rossum79f25d91997-04-29 20:08:16 +0000436static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000437builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000438{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000439 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000440
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000441 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000442 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000443 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000444}
445
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000446PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000447"divmod(x, y) -> (div, mod)\n\
448\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000449Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000450
451
Guido van Rossum79f25d91997-04-29 20:08:16 +0000452static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000453builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000454{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000455 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000456 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000457 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000458 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000459
Guido van Rossum79f25d91997-04-29 20:08:16 +0000460 if (!PyArg_ParseTuple(args, "O|O!O!:eval",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000461 &cmd,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000462 &PyDict_Type, &globals,
463 &PyDict_Type, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000464 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000465 if (globals == Py_None) {
466 globals = PyEval_GetGlobals();
467 if (locals == Py_None)
468 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000469 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000470 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000471 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000472
Guido van Rossum79f25d91997-04-29 20:08:16 +0000473 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
474 if (PyDict_SetItemString(globals, "__builtins__",
475 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000476 return NULL;
477 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000478
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000479 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000480 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000481 PyErr_SetString(PyExc_TypeError,
482 "code object passed to eval() may not contain free variables");
483 return NULL;
484 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000485 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000486 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000487
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000488 if (!PyString_Check(cmd) &&
489 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000490 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000491 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000492 return NULL;
493 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000494 cf.cf_flags = 0;
495
496#ifdef Py_USING_UNICODE
497 if (PyUnicode_Check(cmd)) {
498 tmp = PyUnicode_AsUTF8String(cmd);
499 if (tmp == NULL)
500 return NULL;
501 cmd = tmp;
502 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
503 }
504#endif
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000505 if (PyString_AsStringAndSize(cmd, &str, NULL))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000506 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000507 while (*str == ' ' || *str == '\t')
508 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000509
Tim Peters9fa96be2001-08-17 23:04:59 +0000510 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000511 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
512 Py_XDECREF(tmp);
513 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000514}
515
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000516PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000517"eval(source[, globals[, locals]]) -> value\n\
518\n\
519Evaluate the source in the context of globals and locals.\n\
520The source may be a string representing a Python expression\n\
521or a code object as returned by compile().\n\
522The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000523globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000524
525
Guido van Rossum79f25d91997-04-29 20:08:16 +0000526static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000527builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000528{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000529 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000530 PyObject *globals = Py_None, *locals = Py_None;
531 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000532 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000533 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000534 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000535
Guido van Rossum79f25d91997-04-29 20:08:16 +0000536 if (!PyArg_ParseTuple(args, "s|O!O!:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000537 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000538 &PyDict_Type, &globals,
539 &PyDict_Type, &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000540 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000541 if (globals == Py_None) {
542 globals = PyEval_GetGlobals();
543 if (locals == Py_None)
544 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000545 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000546 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000547 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000548 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
549 if (PyDict_SetItemString(globals, "__builtins__",
550 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000551 return NULL;
552 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000553
554 exists = 0;
555 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000556#if defined(PLAN9)
557 {
558 Dir *d;
559
560 if ((d = dirstat(filename))!=nil) {
561 if(d->mode & DMDIR)
562 werrstr("is a directory");
563 else
564 exists = 1;
565 free(d);
566 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000567 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000568#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000569 if (object_exists(filename)) {
570 if (isdir(filename))
571 errno = EISDIR;
572 else
573 exists = 1;
574 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000575#else /* standard Posix */
576 {
577 struct stat s;
578 if (stat(filename, &s) == 0) {
579 if (S_ISDIR(s.st_mode))
580# if defined(PY_OS2) && defined(PYCC_VACPP)
581 errno = EOS2ERR;
582# else
583 errno = EISDIR;
584# endif
585 else
586 exists = 1;
587 }
588 }
589#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000590
591 if (exists) {
592 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000593 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000594 Py_END_ALLOW_THREADS
595
596 if (fp == NULL) {
597 exists = 0;
598 }
599 }
600
601 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000602 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000603 return NULL;
604 }
Tim Peters5ba58662001-07-16 02:29:45 +0000605 cf.cf_flags = 0;
606 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000607 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000608 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000609 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000610 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000611 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000612 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000613}
614
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000615PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000616"execfile(filename[, globals[, locals]])\n\
617\n\
618Read and execute a Python script from a file.\n\
619The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000620globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000621
622
Guido van Rossum79f25d91997-04-29 20:08:16 +0000623static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000624builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000625{
Guido van Rossum950ff291998-06-29 13:38:57 +0000626 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000627 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000628
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000629 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000630 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000631#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000632 if (PyUnicode_Check(name)) {
633 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
634 if (name == NULL)
635 return NULL;
636 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000637#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000638
639 if (!PyString_Check(name)) {
640 PyErr_SetString(PyExc_TypeError,
641 "attribute name must be string");
642 return NULL;
643 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000644 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000645 if (result == NULL && dflt != NULL &&
646 PyErr_ExceptionMatches(PyExc_AttributeError))
647 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000648 PyErr_Clear();
649 Py_INCREF(dflt);
650 result = dflt;
651 }
652 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000653}
654
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000655PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000656"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000657\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000658Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
659When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000660exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000661
662
Guido van Rossum79f25d91997-04-29 20:08:16 +0000663static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000664builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000665{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000666 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000667
Guido van Rossum79f25d91997-04-29 20:08:16 +0000668 d = PyEval_GetGlobals();
669 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000670 return d;
671}
672
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000673PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000674"globals() -> dictionary\n\
675\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000676Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000677
678
Guido van Rossum79f25d91997-04-29 20:08:16 +0000679static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000680builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000681{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000682 PyObject *v;
683 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000684
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000685 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000686 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000687#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000688 if (PyUnicode_Check(name)) {
689 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
690 if (name == NULL)
691 return NULL;
692 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000693#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000694
695 if (!PyString_Check(name)) {
696 PyErr_SetString(PyExc_TypeError,
697 "attribute name must be string");
698 return NULL;
699 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000700 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000701 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000702 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000703 Py_INCREF(Py_False);
704 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000705 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000706 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000707 Py_INCREF(Py_True);
708 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000709}
710
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000711PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000712"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000713\n\
714Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000715(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000716
717
Guido van Rossum79f25d91997-04-29 20:08:16 +0000718static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000719builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000720{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000721 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000722}
723
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000724PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000725"id(object) -> integer\n\
726\n\
727Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000728simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000729
730
Guido van Rossum79f25d91997-04-29 20:08:16 +0000731static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000732builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000733{
734 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000735 PyObject *it; /* the iterator object */
736 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000737 } sequence;
738
Guido van Rossum79f25d91997-04-29 20:08:16 +0000739 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000740 sequence *seqs = NULL, *sqp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000741 int n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000742 register int i, j;
743
Guido van Rossum79f25d91997-04-29 20:08:16 +0000744 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000745 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000746 PyErr_SetString(PyExc_TypeError,
747 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000748 return NULL;
749 }
750
Guido van Rossum79f25d91997-04-29 20:08:16 +0000751 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000752 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000753
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000754 if (func == Py_None && n == 1) {
755 /* map(None, S) is the same as list(S). */
756 return PySequence_List(PyTuple_GetItem(args, 1));
757 }
758
Tim Peters4e9afdc2001-05-03 23:54:49 +0000759 /* Get space for sequence descriptors. Must NULL out the iterator
760 * pointers so that jumping to Fail_2 later doesn't see trash.
761 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000762 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
763 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000764 return NULL;
765 }
766 for (i = 0; i < n; ++i) {
767 seqs[i].it = (PyObject*)NULL;
768 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000769 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000770
Tim Peters4e9afdc2001-05-03 23:54:49 +0000771 /* Do a first pass to obtain iterators for the arguments, and set len
772 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000773 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000774 len = 0;
775 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
776 PyObject *curseq;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000777 int curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000778
Tim Peters4e9afdc2001-05-03 23:54:49 +0000779 /* Get iterator. */
780 curseq = PyTuple_GetItem(args, i+1);
781 sqp->it = PyObject_GetIter(curseq);
782 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000783 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000784 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000785 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +0000786 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000787 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000788 goto Fail_2;
789 }
790
Tim Peters4e9afdc2001-05-03 23:54:49 +0000791 /* Update len. */
792 curlen = -1; /* unknown */
793 if (PySequence_Check(curseq) &&
794 curseq->ob_type->tp_as_sequence->sq_length) {
795 curlen = PySequence_Size(curseq);
796 if (curlen < 0)
797 PyErr_Clear();
798 }
Tim Peters748b8bb2001-04-28 08:20:22 +0000799 if (curlen < 0)
Tim Peters4e9afdc2001-05-03 23:54:49 +0000800 curlen = 8; /* arbitrary */
Tim Peters6d6c1a32001-08-02 04:15:00 +0000801 if (curlen > len)
802 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000803 }
804
Tim Peters4e9afdc2001-05-03 23:54:49 +0000805 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000806 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000807 goto Fail_2;
808
Tim Peters4e9afdc2001-05-03 23:54:49 +0000809 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +0000810 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000811 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000812 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000813
Guido van Rossum79f25d91997-04-29 20:08:16 +0000814 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +0000815 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000816 else if ((alist = PyTuple_New(n)) == NULL)
817 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000818
819 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000820 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000821 Py_INCREF(Py_None);
822 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000823 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000824 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000825 item = PyIter_Next(sqp->it);
826 if (item)
827 ++numactive;
828 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000829 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +0000830 Py_XDECREF(alist);
831 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000832 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000833 Py_INCREF(Py_None);
834 item = Py_None;
835 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000836 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000837 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000838 if (alist)
839 PyTuple_SET_ITEM(alist, j, item);
840 else
Guido van Rossum2d951851994-08-29 12:52:16 +0000841 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000842 }
843
Guido van Rossum32120311995-07-10 13:52:21 +0000844 if (!alist)
845 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +0000846
Tim Peters4e9afdc2001-05-03 23:54:49 +0000847 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000848 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +0000849 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000850 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000851
Guido van Rossum79f25d91997-04-29 20:08:16 +0000852 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +0000853 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000854 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000855 value = PyEval_CallObject(func, alist);
856 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000857 if (value == NULL)
858 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000859 }
860 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +0000861 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +0000862 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +0000863 if (status < 0)
864 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000865 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000866 else if (PyList_SetItem(result, i, value) < 0)
867 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000868 }
869
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000870 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
871 goto Fail_1;
872
Tim Peters4e9afdc2001-05-03 23:54:49 +0000873 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000874
Guido van Rossum12d12c51993-10-26 17:58:25 +0000875Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000876 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000877Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +0000878 result = NULL;
879Succeed:
880 assert(seqs);
881 for (i = 0; i < n; ++i)
882 Py_XDECREF(seqs[i].it);
883 PyMem_DEL(seqs);
884 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000885}
886
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000887PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000888"map(function, sequence[, sequence, ...]) -> list\n\
889\n\
890Return a list of the results of applying the function to the items of\n\
891the argument sequence(s). If more than one sequence is given, the\n\
892function is called with an argument list consisting of the corresponding\n\
893item of each sequence, substituting None for missing values when not all\n\
894sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000895the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000896
897
Guido van Rossum79f25d91997-04-29 20:08:16 +0000898static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000899builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000900{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000901 PyObject *v;
902 PyObject *name;
903 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000904
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000905 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000906 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000907 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000908 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000909 Py_INCREF(Py_None);
910 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000911}
912
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000913PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000914"setattr(object, name, value)\n\
915\n\
916Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000917``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000918
919
Guido van Rossum79f25d91997-04-29 20:08:16 +0000920static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000921builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000922{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000923 PyObject *v;
924 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000925
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000926 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +0000927 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000928 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000929 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000930 Py_INCREF(Py_None);
931 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +0000932}
933
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000934PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +0000935"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000936\n\
937Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000938``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000939
940
Guido van Rossum79f25d91997-04-29 20:08:16 +0000941static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000942builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000943{
Guido van Rossum9bfef441993-03-29 10:43:31 +0000944 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000945
Guido van Rossum79f25d91997-04-29 20:08:16 +0000946 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000947 if (x == -1)
948 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000949 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000950}
951
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000952PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000953"hash(object) -> integer\n\
954\n\
955Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000956the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000957
958
Guido van Rossum79f25d91997-04-29 20:08:16 +0000959static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000960builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +0000961{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000962 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000963
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000964 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000965 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000966 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000967 "hex() argument can't be converted to hex");
968 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +0000969 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000970 return (*nb->nb_hex)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +0000971}
972
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000973PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000974"hex(number) -> string\n\
975\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000976Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000977
978
Tim Petersdbd9ba62000-07-09 03:09:57 +0000979static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000980
Guido van Rossum79f25d91997-04-29 20:08:16 +0000981static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000982builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000983{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000984 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000985 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000986 PyObject *res;
987 PyObject *globals, *locals;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000988
989 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000990 if (line == NULL)
991 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000992 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000993 return NULL;
994 while (*str == ' ' || *str == '\t')
995 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000996 globals = PyEval_GetGlobals();
997 locals = PyEval_GetLocals();
998 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
999 if (PyDict_SetItemString(globals, "__builtins__",
1000 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +00001001 return NULL;
1002 }
Guido van Rossumb05a5c71997-05-07 17:46:13 +00001003 res = PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001004 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001005 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001006}
1007
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001008PyDoc_STRVAR(input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001009"input([prompt]) -> value\n\
1010\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001011Equivalent to eval(raw_input(prompt)).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001012
1013
Guido van Rossume8811f81997-02-14 15:48:05 +00001014static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001015builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001016{
1017 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001018 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001019 return NULL;
1020 Py_INCREF(s);
1021 PyString_InternInPlace(&s);
1022 return s;
1023}
1024
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001025PyDoc_STRVAR(intern_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001026"intern(string) -> string\n\
1027\n\
1028``Intern'' the given string. This enters the string in the (global)\n\
1029table of interned strings whose purpose is to speed up dictionary lookups.\n\
1030Return the string itself or the previously interned string object with the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001031same value.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001032
1033
Guido van Rossum79f25d91997-04-29 20:08:16 +00001034static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001035builtin_iter(PyObject *self, PyObject *args)
1036{
1037 PyObject *v, *w = NULL;
1038
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001039 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001040 return NULL;
1041 if (w == NULL)
1042 return PyObject_GetIter(v);
1043 if (!PyCallable_Check(v)) {
1044 PyErr_SetString(PyExc_TypeError,
1045 "iter(v, w): v must be callable");
1046 return NULL;
1047 }
1048 return PyCallIter_New(v, w);
1049}
1050
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001051PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001052"iter(collection) -> iterator\n\
1053iter(callable, sentinel) -> iterator\n\
1054\n\
1055Get an iterator from an object. In the first form, the argument must\n\
1056supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001057In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001058
1059
1060static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001061builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001062{
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001063 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001064
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001065 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001066 if (res < 0 && PyErr_Occurred())
1067 return NULL;
1068 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001069}
1070
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001071PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001072"len(object) -> integer\n\
1073\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001074Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001075
1076
Guido van Rossum79f25d91997-04-29 20:08:16 +00001077static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001078builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001079{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001080 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001081
Guido van Rossum79f25d91997-04-29 20:08:16 +00001082 d = PyEval_GetLocals();
1083 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001084 return d;
1085}
1086
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001087PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001088"locals() -> dictionary\n\
1089\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001090Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001091
1092
Guido van Rossum79f25d91997-04-29 20:08:16 +00001093static PyObject *
Guido van Rossum53451b32001-01-17 15:47:24 +00001094min_max(PyObject *args, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001095{
Tim Petersc3074532001-05-03 07:00:32 +00001096 PyObject *v, *w, *x, *it;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001097
Guido van Rossum79f25d91997-04-29 20:08:16 +00001098 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001099 v = args;
Raymond Hettingerbbfb9102002-12-29 18:31:19 +00001100 else if (!PyArg_UnpackTuple(args, (op==Py_LT) ? "min" : "max", 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001101 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001102
Tim Petersc3074532001-05-03 07:00:32 +00001103 it = PyObject_GetIter(v);
1104 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001105 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001106
1107 w = NULL; /* the result */
Tim Petersf4848da2001-05-05 00:14:56 +00001108 for (;;) {
Tim Petersc3074532001-05-03 07:00:32 +00001109 x = PyIter_Next(it);
Guido van Rossum2d951851994-08-29 12:52:16 +00001110 if (x == NULL) {
Tim Petersc3074532001-05-03 07:00:32 +00001111 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001112 Py_XDECREF(w);
1113 Py_DECREF(it);
1114 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001115 }
Tim Petersc3074532001-05-03 07:00:32 +00001116 break;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001117 }
Tim Petersc3074532001-05-03 07:00:32 +00001118
Guido van Rossum2d951851994-08-29 12:52:16 +00001119 if (w == NULL)
1120 w = x;
1121 else {
Guido van Rossum53451b32001-01-17 15:47:24 +00001122 int cmp = PyObject_RichCompareBool(x, w, op);
1123 if (cmp > 0) {
1124 Py_DECREF(w);
1125 w = x;
1126 }
1127 else if (cmp < 0) {
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001128 Py_DECREF(x);
Tim Petersc3074532001-05-03 07:00:32 +00001129 Py_DECREF(w);
1130 Py_DECREF(it);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001131 return NULL;
1132 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001133 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001134 Py_DECREF(x);
Guido van Rossum2d951851994-08-29 12:52:16 +00001135 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001136 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001137 if (w == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001138 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +00001139 "min() or max() arg is an empty sequence");
Tim Petersc3074532001-05-03 07:00:32 +00001140 Py_DECREF(it);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001141 return w;
1142}
1143
Guido van Rossum79f25d91997-04-29 20:08:16 +00001144static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001145builtin_min(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001146{
Guido van Rossum53451b32001-01-17 15:47:24 +00001147 return min_max(v, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001148}
1149
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001150PyDoc_STRVAR(min_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001151"min(sequence) -> value\n\
1152min(a, b, c, ...) -> value\n\
1153\n\
1154With a single sequence argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001155With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001156
1157
Guido van Rossum79f25d91997-04-29 20:08:16 +00001158static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001159builtin_max(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001160{
Guido van Rossum53451b32001-01-17 15:47:24 +00001161 return min_max(v, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001162}
1163
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001164PyDoc_STRVAR(max_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001165"max(sequence) -> value\n\
1166max(a, b, c, ...) -> value\n\
1167\n\
1168With a single sequence argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001169With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001170
1171
Guido van Rossum79f25d91997-04-29 20:08:16 +00001172static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001173builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001174{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001175 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001176
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001177 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1178 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001179 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001180 "oct() argument can't be converted to oct");
1181 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001182 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001183 return (*nb->nb_oct)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001184}
1185
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001186PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001187"oct(number) -> string\n\
1188\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001189Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001190
1191
Guido van Rossum79f25d91997-04-29 20:08:16 +00001192static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001193builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001194{
Guido van Rossum09095f32000-03-10 23:00:52 +00001195 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001196 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001197
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001198 if (PyString_Check(obj)) {
1199 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001200 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001201 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001202 return PyInt_FromLong(ord);
1203 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001204#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001205 } else if (PyUnicode_Check(obj)) {
1206 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001207 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001208 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001209 return PyInt_FromLong(ord);
1210 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001211#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001212 } else {
1213 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001214 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001215 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001216 return NULL;
1217 }
1218
Guido van Rossumad991772001-01-12 16:03:05 +00001219 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001220 "ord() expected a character, "
1221 "but string of length %d found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001222 size);
1223 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001224}
1225
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001226PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001227"ord(c) -> integer\n\
1228\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001229Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001230
1231
Guido van Rossum79f25d91997-04-29 20:08:16 +00001232static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001233builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001234{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001235 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001236
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001237 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001238 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001239 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001240}
1241
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001242PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001243"pow(x, y[, z]) -> number\n\
1244\n\
1245With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001246equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001247
1248
Guido van Rossum124eff01999-02-23 16:11:01 +00001249/* Return number of items in range/xrange (lo, hi, step). step > 0
1250 * required. Return a value < 0 if & only if the true value is too
1251 * large to fit in a signed long.
1252 */
1253static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001254get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001255{
1256 /* -------------------------------------------------------------
1257 If lo >= hi, the range is empty.
1258 Else if n values are in the range, the last one is
1259 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1260 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1261 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1262 the RHS is non-negative and so truncation is the same as the
1263 floor. Letting M be the largest positive long, the worst case
1264 for the RHS numerator is hi=M, lo=-M-1, and then
1265 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1266 precision to compute the RHS exactly.
1267 ---------------------------------------------------------------*/
1268 long n = 0;
1269 if (lo < hi) {
1270 unsigned long uhi = (unsigned long)hi;
1271 unsigned long ulo = (unsigned long)lo;
1272 unsigned long diff = uhi - ulo - 1;
1273 n = (long)(diff / (unsigned long)step + 1);
1274 }
1275 return n;
1276}
1277
Guido van Rossum79f25d91997-04-29 20:08:16 +00001278static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001279builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001280{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001281 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001282 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001283 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001284
Guido van Rossum79f25d91997-04-29 20:08:16 +00001285 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001286
Guido van Rossum79f25d91997-04-29 20:08:16 +00001287 if (PyTuple_Size(args) <= 1) {
1288 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001289 "l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001290 &ihigh))
1291 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001292 }
1293 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001294 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001295 "ll|l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001296 &ilow, &ihigh, &istep))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001297 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001298 }
1299 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001300 PyErr_SetString(PyExc_ValueError, "range() arg 3 must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001301 return NULL;
1302 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001303 if (istep > 0)
1304 bign = get_len_of_range(ilow, ihigh, istep);
1305 else
1306 bign = get_len_of_range(ihigh, ilow, -istep);
1307 n = (int)bign;
1308 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001309 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001310 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001311 return NULL;
1312 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001313 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001314 if (v == NULL)
1315 return NULL;
1316 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001317 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001318 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001319 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001320 return NULL;
1321 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001322 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001323 ilow += istep;
1324 }
1325 return v;
1326}
1327
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001328PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001329"range([start,] stop[, step]) -> list of integers\n\
1330\n\
1331Return a list containing an arithmetic progression of integers.\n\
1332range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1333When step is given, it specifies the increment (or decrement).\n\
1334For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001335These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001336
1337
Guido van Rossum79f25d91997-04-29 20:08:16 +00001338static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001339builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001340{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001341 PyObject *v = NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001342 PyObject *fin = PySys_GetObject("stdin");
1343 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001344
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001345 if (!PyArg_UnpackTuple(args, "[raw_]input", 0, 1, &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001346 return NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001347
1348 if (fin == NULL) {
1349 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdin");
1350 return NULL;
1351 }
1352 if (fout == NULL) {
1353 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
1354 return NULL;
1355 }
1356 if (PyFile_SoftSpace(fout, 0)) {
1357 if (PyFile_WriteString(" ", fout) != 0)
1358 return NULL;
1359 }
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001360 if (PyFile_Check (fin) && PyFile_Check (fout)
1361 && isatty(fileno(PyFile_AsFile(fin)))
1362 && isatty(fileno(PyFile_AsFile(fout)))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001363 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001364 char *prompt;
1365 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001366 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001367 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001368 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001369 if (po == NULL)
1370 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001371 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001372 if (prompt == NULL)
1373 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001374 }
1375 else {
1376 po = NULL;
1377 prompt = "";
1378 }
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001379 s = PyOS_Readline(PyFile_AsFile (fin), PyFile_AsFile (fout),
1380 prompt);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001381 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001382 if (s == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001383 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001384 return NULL;
1385 }
1386 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001387 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001388 result = NULL;
1389 }
1390 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001391 size_t len = strlen(s);
1392 if (len > INT_MAX) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001393 PyErr_SetString(PyExc_OverflowError,
1394 "input too long");
Guido van Rossum106f2da2000-06-28 21:12:25 +00001395 result = NULL;
1396 }
1397 else {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001398 result = PyString_FromStringAndSize(s,
1399 (int)(len-1));
Guido van Rossum106f2da2000-06-28 21:12:25 +00001400 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001401 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001402 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001403 return result;
1404 }
Guido van Rossum90933611991-06-07 16:10:43 +00001405 if (v != NULL) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001406 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001407 return NULL;
1408 }
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001409 return PyFile_GetLine(fin, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001410}
1411
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001412PyDoc_STRVAR(raw_input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001413"raw_input([prompt]) -> string\n\
1414\n\
1415Read a string from standard input. The trailing newline is stripped.\n\
1416If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1417On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001418is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001419
1420
Guido van Rossum79f25d91997-04-29 20:08:16 +00001421static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001422builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001423{
Tim Peters15d81ef2001-05-04 04:39:21 +00001424 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001425
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001426 if (!PyArg_UnpackTuple(args, "reduce", 2, 3, &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001427 return NULL;
1428 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001429 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001430
Tim Peters15d81ef2001-05-04 04:39:21 +00001431 it = PyObject_GetIter(seq);
1432 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001433 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001434 "reduce() arg 2 must support iteration");
1435 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001436 return NULL;
1437 }
1438
Guido van Rossum79f25d91997-04-29 20:08:16 +00001439 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001440 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001441
Tim Peters15d81ef2001-05-04 04:39:21 +00001442 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001443 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001444
1445 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001446 Py_DECREF(args);
1447 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001448 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001449 }
1450
Tim Peters15d81ef2001-05-04 04:39:21 +00001451 op2 = PyIter_Next(it);
1452 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001453 if (PyErr_Occurred())
1454 goto Fail;
1455 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001456 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001457
Guido van Rossum2d951851994-08-29 12:52:16 +00001458 if (result == NULL)
1459 result = op2;
1460 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001461 PyTuple_SetItem(args, 0, result);
1462 PyTuple_SetItem(args, 1, op2);
1463 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001464 goto Fail;
1465 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001466 }
1467
Guido van Rossum79f25d91997-04-29 20:08:16 +00001468 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001469
Guido van Rossum2d951851994-08-29 12:52:16 +00001470 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001471 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001472 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001473
Tim Peters15d81ef2001-05-04 04:39:21 +00001474 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001475 return result;
1476
Guido van Rossum2d951851994-08-29 12:52:16 +00001477Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001478 Py_XDECREF(args);
1479 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001480 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001481 return NULL;
1482}
1483
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001484PyDoc_STRVAR(reduce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001485"reduce(function, sequence[, initial]) -> value\n\
1486\n\
1487Apply a function of two arguments cumulatively to the items of a sequence,\n\
1488from left to right, so as to reduce the sequence to a single value.\n\
1489For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1490((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1491of the sequence in the calculation, and serves as a default when the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001492sequence is empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001493
1494
Guido van Rossum79f25d91997-04-29 20:08:16 +00001495static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001496builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001497{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001498 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001499}
1500
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001501PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001502"reload(module) -> module\n\
1503\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001504Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001505
1506
Guido van Rossum79f25d91997-04-29 20:08:16 +00001507static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001508builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001509{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001510 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001511}
1512
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001513PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001514"repr(object) -> string\n\
1515\n\
1516Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001517For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001518
1519
Guido van Rossum79f25d91997-04-29 20:08:16 +00001520static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001521builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001522{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001523 double x;
1524 double f;
1525 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001526 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001527
Guido van Rossum79f25d91997-04-29 20:08:16 +00001528 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001529 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001530 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001531 i = abs(ndigits);
1532 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001533 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001534 if (ndigits < 0)
1535 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001536 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00001537 x *= f;
1538 if (x >= 0.0)
1539 x = floor(x + 0.5);
1540 else
1541 x = ceil(x - 0.5);
1542 if (ndigits < 0)
1543 x *= f;
1544 else
1545 x /= f;
1546 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001547}
1548
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001549PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001550"round(number[, ndigits]) -> floating point number\n\
1551\n\
1552Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001553This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001554
1555
Guido van Rossum79f25d91997-04-29 20:08:16 +00001556static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001557builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001558{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001559 PyObject *v = NULL;
1560 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001561
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001562 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001563 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001564 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001565 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001566 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001567 if (!PyErr_Occurred())
1568 PyErr_SetString(PyExc_SystemError,
1569 "no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001570 }
1571 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001572 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001573 }
1574 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001575 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001576 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001577 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001578 "vars() argument must have __dict__ attribute");
1579 return NULL;
1580 }
1581 }
1582 return d;
1583}
1584
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001585PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001586"vars([object]) -> dictionary\n\
1587\n\
1588Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001589With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001590
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001591static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001592builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001593{
1594 PyObject *inst;
1595 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001596 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001597
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001598 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001599 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001600
Guido van Rossum823649d2001-03-21 18:40:58 +00001601 retval = PyObject_IsInstance(inst, cls);
1602 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001603 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001604 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001605}
1606
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001607PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001608"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001609\n\
1610Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001611With a type as second argument, return whether that is the object's type.\n\
1612The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001613isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001614
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001615
1616static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001617builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001618{
1619 PyObject *derived;
1620 PyObject *cls;
1621 int retval;
1622
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001623 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001624 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001625
Guido van Rossum823649d2001-03-21 18:40:58 +00001626 retval = PyObject_IsSubclass(derived, cls);
1627 if (retval < 0)
1628 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001629 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001630}
1631
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001632PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001633"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001634\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00001635Return whether class C is a subclass (i.e., a derived class) of class B.\n\
1636When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
1637is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001638
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001639
Barry Warsawbd599b52000-08-03 15:45:29 +00001640static PyObject*
1641builtin_zip(PyObject *self, PyObject *args)
1642{
1643 PyObject *ret;
Tim Peters67d687a2002-04-29 21:27:32 +00001644 const int itemsize = PySequence_Length(args);
Tim Peters8572b4f2001-05-06 01:05:02 +00001645 int i;
1646 PyObject *itlist; /* tuple of iterators */
Tim Peters67d687a2002-04-29 21:27:32 +00001647 int len; /* guess at result length */
Barry Warsawbd599b52000-08-03 15:45:29 +00001648
1649 if (itemsize < 1) {
1650 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001651 "zip() requires at least one sequence");
Barry Warsawbd599b52000-08-03 15:45:29 +00001652 return NULL;
1653 }
1654 /* args must be a tuple */
1655 assert(PyTuple_Check(args));
1656
Tim Peters39a86c22002-05-12 07:19:38 +00001657 /* Guess at result length: the shortest of the input lengths.
1658 If some argument refuses to say, we refuse to guess too, lest
1659 an argument like xrange(sys.maxint) lead us astray.*/
Tim Peters67d687a2002-04-29 21:27:32 +00001660 len = -1; /* unknown */
1661 for (i = 0; i < itemsize; ++i) {
1662 PyObject *item = PyTuple_GET_ITEM(args, i);
1663 int thislen = PySequence_Length(item);
Tim Peters39a86c22002-05-12 07:19:38 +00001664 if (thislen < 0) {
Tim Peters67d687a2002-04-29 21:27:32 +00001665 PyErr_Clear();
Tim Peters39a86c22002-05-12 07:19:38 +00001666 len = -1;
1667 break;
1668 }
Tim Peters67d687a2002-04-29 21:27:32 +00001669 else if (len < 0 || thislen < len)
1670 len = thislen;
1671 }
1672
Tim Peters8572b4f2001-05-06 01:05:02 +00001673 /* allocate result list */
Tim Peters67d687a2002-04-29 21:27:32 +00001674 if (len < 0)
1675 len = 10; /* arbitrary */
1676 if ((ret = PyList_New(len)) == NULL)
Barry Warsawbd599b52000-08-03 15:45:29 +00001677 return NULL;
1678
Tim Peters8572b4f2001-05-06 01:05:02 +00001679 /* obtain iterators */
1680 itlist = PyTuple_New(itemsize);
1681 if (itlist == NULL)
1682 goto Fail_ret;
1683 for (i = 0; i < itemsize; ++i) {
1684 PyObject *item = PyTuple_GET_ITEM(args, i);
1685 PyObject *it = PyObject_GetIter(item);
1686 if (it == NULL) {
1687 if (PyErr_ExceptionMatches(PyExc_TypeError))
1688 PyErr_Format(PyExc_TypeError,
1689 "zip argument #%d must support iteration",
1690 i+1);
1691 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00001692 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001693 PyTuple_SET_ITEM(itlist, i, it);
1694 }
Barry Warsawbd599b52000-08-03 15:45:29 +00001695
Tim Peters8572b4f2001-05-06 01:05:02 +00001696 /* build result into ret list */
Tim Peters67d687a2002-04-29 21:27:32 +00001697 for (i = 0; ; ++i) {
1698 int j;
Tim Peters8572b4f2001-05-06 01:05:02 +00001699 PyObject *next = PyTuple_New(itemsize);
1700 if (!next)
1701 goto Fail_ret_itlist;
1702
Tim Peters67d687a2002-04-29 21:27:32 +00001703 for (j = 0; j < itemsize; j++) {
1704 PyObject *it = PyTuple_GET_ITEM(itlist, j);
Tim Peters8572b4f2001-05-06 01:05:02 +00001705 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00001706 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00001707 if (PyErr_Occurred()) {
1708 Py_DECREF(ret);
1709 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00001710 }
1711 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00001712 Py_DECREF(itlist);
Tim Peters67d687a2002-04-29 21:27:32 +00001713 goto Done;
Barry Warsawbd599b52000-08-03 15:45:29 +00001714 }
Tim Peters67d687a2002-04-29 21:27:32 +00001715 PyTuple_SET_ITEM(next, j, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00001716 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001717
Tim Peters67d687a2002-04-29 21:27:32 +00001718 if (i < len)
1719 PyList_SET_ITEM(ret, i, next);
1720 else {
1721 int status = PyList_Append(ret, next);
1722 Py_DECREF(next);
1723 ++len;
1724 if (status < 0)
1725 goto Fail_ret_itlist;
1726 }
Barry Warsawbd599b52000-08-03 15:45:29 +00001727 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001728
Tim Peters67d687a2002-04-29 21:27:32 +00001729Done:
1730 if (ret != NULL && i < len) {
1731 /* The list is too big. */
1732 if (PyList_SetSlice(ret, i, len, NULL) < 0)
1733 return NULL;
1734 }
1735 return ret;
1736
Tim Peters8572b4f2001-05-06 01:05:02 +00001737Fail_ret_itlist:
1738 Py_DECREF(itlist);
1739Fail_ret:
1740 Py_DECREF(ret);
1741 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00001742}
1743
1744
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001745PyDoc_STRVAR(zip_doc,
Barry Warsawbd599b52000-08-03 15:45:29 +00001746"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
1747\n\
1748Return a list of tuples, where each tuple contains the i-th element\n\
1749from each of the argument sequences. The returned list is truncated\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001750in length to the length of the shortest argument sequence.");
Barry Warsawbd599b52000-08-03 15:45:29 +00001751
1752
Guido van Rossum79f25d91997-04-29 20:08:16 +00001753static PyMethodDef builtin_methods[] = {
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001754 {"__import__", builtin___import__, METH_VARARGS, import_doc},
1755 {"abs", builtin_abs, METH_O, abs_doc},
1756 {"apply", builtin_apply, METH_VARARGS, apply_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001757 {"callable", builtin_callable, METH_O, callable_doc},
1758 {"chr", builtin_chr, METH_VARARGS, chr_doc},
1759 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
1760 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
1761 {"compile", builtin_compile, METH_VARARGS, compile_doc},
1762 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
1763 {"dir", builtin_dir, METH_VARARGS, dir_doc},
1764 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
1765 {"eval", builtin_eval, METH_VARARGS, eval_doc},
1766 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
1767 {"filter", builtin_filter, METH_VARARGS, filter_doc},
1768 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
1769 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
1770 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
1771 {"hash", builtin_hash, METH_O, hash_doc},
1772 {"hex", builtin_hex, METH_O, hex_doc},
1773 {"id", builtin_id, METH_O, id_doc},
1774 {"input", builtin_input, METH_VARARGS, input_doc},
1775 {"intern", builtin_intern, METH_VARARGS, intern_doc},
1776 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
1777 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
1778 {"iter", builtin_iter, METH_VARARGS, iter_doc},
1779 {"len", builtin_len, METH_O, len_doc},
1780 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
1781 {"map", builtin_map, METH_VARARGS, map_doc},
1782 {"max", builtin_max, METH_VARARGS, max_doc},
1783 {"min", builtin_min, METH_VARARGS, min_doc},
1784 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001785 {"ord", builtin_ord, METH_O, ord_doc},
1786 {"pow", builtin_pow, METH_VARARGS, pow_doc},
1787 {"range", builtin_range, METH_VARARGS, range_doc},
1788 {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc},
1789 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
1790 {"reload", builtin_reload, METH_O, reload_doc},
1791 {"repr", builtin_repr, METH_O, repr_doc},
1792 {"round", builtin_round, METH_VARARGS, round_doc},
1793 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001794#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001795 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001796#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001797 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001798 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00001799 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00001800};
1801
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001802PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001803"Built-in functions, exceptions, and other objects.\n\
1804\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001805Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001806
Guido van Rossum25ce5661997-08-02 03:10:38 +00001807PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001808_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001809{
Fred Drake5550de32000-06-20 04:54:19 +00001810 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001811 mod = Py_InitModule4("__builtin__", builtin_methods,
1812 builtin_doc, (PyObject *)NULL,
1813 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001814 if (mod == NULL)
1815 return NULL;
1816 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00001817
1818#define SETBUILTIN(NAME, OBJECT) \
1819 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
1820 return NULL
1821
1822 SETBUILTIN("None", Py_None);
1823 SETBUILTIN("Ellipsis", Py_Ellipsis);
1824 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001825 SETBUILTIN("False", Py_False);
1826 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00001827 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001828 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001829 SETBUILTIN("buffer", &PyBuffer_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001830 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001831#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00001832 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001833#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00001834 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00001835 SETBUILTIN("enumerate", &PyEnum_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001836 SETBUILTIN("float", &PyFloat_Type);
1837 SETBUILTIN("property", &PyProperty_Type);
1838 SETBUILTIN("int", &PyInt_Type);
1839 SETBUILTIN("list", &PyList_Type);
1840 SETBUILTIN("long", &PyLong_Type);
1841 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001842 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001843 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
1844 SETBUILTIN("str", &PyString_Type);
1845 SETBUILTIN("super", &PySuper_Type);
1846 SETBUILTIN("tuple", &PyTuple_Type);
1847 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00001848 SETBUILTIN("xrange", &PyRange_Type);
Tim Peters742dfd62001-09-13 21:49:44 +00001849
1850 /* Note that open() is just an alias of file(). */
1851 SETBUILTIN("open", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001852 SETBUILTIN("file", &PyFile_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001853#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00001854 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001855#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00001856 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00001857 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
1858 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001859 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00001860 }
1861 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00001862
Guido van Rossum25ce5661997-08-02 03:10:38 +00001863 return mod;
Tim Peters4b7625e2001-09-13 21:37:17 +00001864#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00001865}
1866
Guido van Rossume77a7571993-11-03 15:01:26 +00001867/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00001868
Guido van Rossum79f25d91997-04-29 20:08:16 +00001869static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001870filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001871{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001872 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001873 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001874 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001875
Guido van Rossumb7b45621995-08-04 04:07:45 +00001876 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00001877 if (PyTuple_CheckExact(tuple))
1878 Py_INCREF(tuple);
1879 else
1880 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00001881 return tuple;
1882 }
1883
Guido van Rossum79f25d91997-04-29 20:08:16 +00001884 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00001885 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001886
Guido van Rossum12d12c51993-10-26 17:58:25 +00001887 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001888 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001889 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001890
Walter Dörwald8dd19322003-02-10 17:36:40 +00001891 if (tuple->ob_type->tp_as_sequence &&
1892 tuple->ob_type->tp_as_sequence->sq_item) {
1893 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
1894 } else {
1895 PyErr_SetString(PyExc_TypeError, "unsubscriptable object");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001896 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00001897 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001898 if (func == Py_None) {
1899 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001900 good = item;
1901 }
1902 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001903 PyObject *arg = Py_BuildValue("(O)", item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001904 if (arg == NULL)
1905 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001906 good = PyEval_CallObject(func, arg);
1907 Py_DECREF(arg);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001908 if (good == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001909 goto Fail_1;
1910 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001911 ok = PyObject_IsTrue(good);
1912 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001913 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001914 Py_INCREF(item);
1915 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001916 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001917 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001918 }
1919
Tim Peters4324aa32001-05-28 22:30:08 +00001920 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001921 return NULL;
1922
Guido van Rossum12d12c51993-10-26 17:58:25 +00001923 return result;
1924
Guido van Rossum12d12c51993-10-26 17:58:25 +00001925Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001926 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001927 return NULL;
1928}
1929
1930
Guido van Rossume77a7571993-11-03 15:01:26 +00001931/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00001932
Guido van Rossum79f25d91997-04-29 20:08:16 +00001933static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001934filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001935{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001936 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001937 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001938 int len = PyString_Size(strobj);
Walter Dörwald903f1e02003-02-04 16:28:00 +00001939 int outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001940
Guido van Rossum79f25d91997-04-29 20:08:16 +00001941 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00001942 /* If it's a real string we can return the original,
1943 * as no character is ever false and __getitem__
1944 * does return this character. If it's a subclass
1945 * we must go through the __getitem__ loop */
1946 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00001947 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00001948 return strobj;
1949 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001950 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001951 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00001952 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001953
Guido van Rossum12d12c51993-10-26 17:58:25 +00001954 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00001955 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001956 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001957
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001958 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
1959 if (item == NULL)
1960 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00001961 if (func==Py_None) {
1962 ok = 1;
1963 } else {
1964 PyObject *arg, *good;
1965 arg = Py_BuildValue("(O)", item);
1966 if (arg == NULL) {
1967 Py_DECREF(item);
1968 goto Fail_1;
1969 }
1970 good = PyEval_CallObject(func, arg);
1971 Py_DECREF(arg);
1972 if (good == NULL) {
1973 Py_DECREF(item);
1974 goto Fail_1;
1975 }
1976 ok = PyObject_IsTrue(good);
1977 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00001978 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00001979 if (ok) {
1980 int reslen;
1981 if (!PyString_Check(item)) {
1982 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
1983 " __getitem__ returned different type");
1984 Py_DECREF(item);
1985 goto Fail_1;
1986 }
1987 reslen = PyString_GET_SIZE(item);
1988 if (reslen == 1) {
1989 PyString_AS_STRING(result)[j++] =
1990 PyString_AS_STRING(item)[0];
1991 } else {
1992 /* do we need more space? */
1993 int need = j + reslen + len-i-1;
1994 if (need > outlen) {
1995 /* overallocate, to avoid reallocations */
1996 if (need<2*outlen)
1997 need = 2*outlen;
1998 if (_PyString_Resize(&result, need)) {
1999 Py_DECREF(item);
2000 return NULL;
2001 }
2002 outlen = need;
2003 }
2004 memcpy(
2005 PyString_AS_STRING(result) + j,
2006 PyString_AS_STRING(item),
2007 reslen
2008 );
2009 j += reslen;
2010 }
2011 }
Tim Peters388ed082001-04-07 20:34:48 +00002012 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002013 }
2014
Walter Dörwald903f1e02003-02-04 16:28:00 +00002015 if (j < outlen)
Tim Peters5de98422002-04-27 18:44:32 +00002016 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002017
Guido van Rossum12d12c51993-10-26 17:58:25 +00002018 return result;
2019
Guido van Rossum12d12c51993-10-26 17:58:25 +00002020Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002021 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002022 return NULL;
2023}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002024
2025#ifdef Py_USING_UNICODE
2026/* Helper for filter(): filter a Unicode object through a function */
2027
2028static PyObject *
2029filterunicode(PyObject *func, PyObject *strobj)
2030{
2031 PyObject *result;
2032 register int i, j;
2033 int len = PyUnicode_GetSize(strobj);
Walter Dörwald903f1e02003-02-04 16:28:00 +00002034 int outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002035
2036 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002037 /* If it's a real string we can return the original,
2038 * as no character is ever false and __getitem__
2039 * does return this character. If it's a subclass
2040 * we must go through the __getitem__ loop */
2041 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002042 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002043 return strobj;
2044 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002045 }
2046 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2047 return NULL;
2048
2049 for (i = j = 0; i < len; ++i) {
2050 PyObject *item, *arg, *good;
2051 int ok;
2052
2053 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2054 if (item == NULL)
2055 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002056 if (func == Py_None) {
2057 ok = 1;
2058 } else {
2059 arg = Py_BuildValue("(O)", item);
2060 if (arg == NULL) {
2061 Py_DECREF(item);
2062 goto Fail_1;
2063 }
2064 good = PyEval_CallObject(func, arg);
2065 Py_DECREF(arg);
2066 if (good == NULL) {
2067 Py_DECREF(item);
2068 goto Fail_1;
2069 }
2070 ok = PyObject_IsTrue(good);
2071 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002072 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002073 if (ok) {
2074 int reslen;
2075 if (!PyUnicode_Check(item)) {
2076 PyErr_SetString(PyExc_TypeError, "can't filter unicode to unicode:"
2077 " __getitem__ returned different type");
2078 Py_DECREF(item);
2079 goto Fail_1;
2080 }
2081 reslen = PyUnicode_GET_SIZE(item);
2082 if (reslen == 1) {
2083 PyUnicode_AS_UNICODE(result)[j++] =
2084 PyUnicode_AS_UNICODE(item)[0];
2085 } else {
2086 /* do we need more space? */
2087 int need = j + reslen + len-i-1;
2088 if (need > outlen) {
2089 /* overallocate, to avoid reallocations */
2090 if (need<2*outlen)
2091 need = 2*outlen;
2092 if (PyUnicode_Resize(&result, need)) {
2093 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002094 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002095 }
2096 outlen = need;
2097 }
2098 memcpy(
2099 PyUnicode_AS_UNICODE(result) + j,
2100 PyUnicode_AS_UNICODE(item),
2101 reslen*sizeof(Py_UNICODE)
2102 );
2103 j += reslen;
2104 }
2105 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002106 Py_DECREF(item);
2107 }
2108
Walter Dörwald903f1e02003-02-04 16:28:00 +00002109 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002110 PyUnicode_Resize(&result, j);
2111
2112 return result;
2113
2114Fail_1:
2115 Py_DECREF(result);
2116 return NULL;
2117}
2118#endif