blob: 7fc6f572f458e6c6488fae9d05d8bcac43b2fc52 [file] [log] [blame]
Andrew M. Kuchling9bcc68c2000-12-20 15:07:34 +00001
Guido van Rossum3f5da241990-12-20 15:06:42 +00002/* Built-in functions */
3
Guido van Rossum79f25d91997-04-29 20:08:16 +00004#include "Python.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00005
6#include "node.h"
Guido van Rossum5b722181993-03-30 17:46:03 +00007#include "compile.h"
8#include "eval.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00009
Guido van Rossum6bf62da1997-04-11 20:37:35 +000010#include <ctype.h>
11
Guido van Rossume2ae77b2001-10-24 20:42:55 +000012#ifdef RISCOS
13#include "unixstuff.h"
14#endif
15
Mark Hammond26cffde42001-05-14 12:17:34 +000016/* The default encoding used by the platform file system APIs
17 Can remain NULL for all platforms that don't have such a concept
18*/
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000019#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
Mark Hammond26cffde42001-05-14 12:17:34 +000020const char *Py_FileSystemDefaultEncoding = "mbcs";
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000021#elif defined(__APPLE__)
22const char *Py_FileSystemDefaultEncoding = "utf-8";
Mark Hammond26cffde42001-05-14 12:17:34 +000023#else
24const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
25#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000026
Guido van Rossum12d12c51993-10-26 17:58:25 +000027/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000028static PyObject *filterstring(PyObject *, PyObject *);
Martin v. Löwis8afd7572003-01-25 22:46:11 +000029#ifdef Py_USING_UNICODE
30static PyObject *filterunicode(PyObject *, PyObject *);
31#endif
Tim Petersdbd9ba62000-07-09 03:09:57 +000032static PyObject *filtertuple (PyObject *, PyObject *);
Guido van Rossum12d12c51993-10-26 17:58:25 +000033
Guido van Rossum79f25d91997-04-29 20:08:16 +000034static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000035builtin___import__(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +000036{
Guido van Rossum1ae940a1995-01-02 19:04:15 +000037 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +000038 PyObject *globals = NULL;
39 PyObject *locals = NULL;
40 PyObject *fromlist = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000041
Guido van Rossum79f25d91997-04-29 20:08:16 +000042 if (!PyArg_ParseTuple(args, "s|OOO:__import__",
Guido van Rossum24c13741995-02-14 09:42:43 +000043 &name, &globals, &locals, &fromlist))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000044 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +000045 return PyImport_ImportModuleEx(name, globals, locals, fromlist);
Guido van Rossum1ae940a1995-01-02 19:04:15 +000046}
47
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000048PyDoc_STRVAR(import_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000049"__import__(name, globals, locals, fromlist) -> module\n\
50\n\
51Import a module. The globals are only used to determine the context;\n\
52they are not modified. The locals are currently unused. The fromlist\n\
53should be a list of names to emulate ``from name import ...'', or an\n\
54empty list to emulate ``import name''.\n\
55When importing a module from a package, note that __import__('A.B', ...)\n\
56returns package A when fromlist is empty, but its submodule B when\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000057fromlist is not empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000058
Guido van Rossum1ae940a1995-01-02 19:04:15 +000059
Guido van Rossum79f25d91997-04-29 20:08:16 +000060static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +000061builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +000062{
Guido van Rossum09df08a1998-05-22 00:51:39 +000063 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +000064}
65
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000066PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000067"abs(number) -> number\n\
68\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000069Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000070
71
Guido van Rossum79f25d91997-04-29 20:08:16 +000072static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000073builtin_apply(PyObject *self, PyObject *args)
Guido van Rossumc02e15c1991-12-16 13:03:00 +000074{
Guido van Rossum79f25d91997-04-29 20:08:16 +000075 PyObject *func, *alist = NULL, *kwdict = NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +000076 PyObject *t = NULL, *retval = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000077
Raymond Hettingerea3fdf42002-12-29 16:33:45 +000078 if (!PyArg_UnpackTuple(args, "apply", 1, 3, &func, &alist, &kwdict))
Guido van Rossumc02e15c1991-12-16 13:03:00 +000079 return NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +000080 if (alist != NULL) {
81 if (!PyTuple_Check(alist)) {
82 if (!PySequence_Check(alist)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +000083 PyErr_Format(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +000084 "apply() arg 2 expected sequence, found %s",
Jeremy Hyltonc862cf42001-01-19 03:25:05 +000085 alist->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +000086 return NULL;
87 }
88 t = PySequence_Tuple(alist);
89 if (t == NULL)
90 return NULL;
91 alist = t;
92 }
Guido van Rossum2d951851994-08-29 12:52:16 +000093 }
Guido van Rossum79f25d91997-04-29 20:08:16 +000094 if (kwdict != NULL && !PyDict_Check(kwdict)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +000095 PyErr_Format(PyExc_TypeError,
96 "apply() arg 3 expected dictionary, found %s",
97 kwdict->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +000098 goto finally;
Guido van Rossum681d79a1995-07-18 14:51:37 +000099 }
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000100 retval = PyEval_CallObjectWithKeywords(func, alist, kwdict);
101 finally:
102 Py_XDECREF(t);
103 return retval;
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000104}
105
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000106PyDoc_STRVAR(apply_doc,
Fred Drakef1fbc622001-01-12 17:05:05 +0000107"apply(object[, args[, kwargs]]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000108\n\
Fred Drake7b912121999-12-23 14:16:55 +0000109Call a callable object with positional arguments taken from the tuple args,\n\
110and keyword arguments taken from the optional dictionary kwargs.\n\
Raymond Hettingerff41c482003-04-06 09:01:11 +0000111Note that classes are callable, as are instances with a __call__() method.\n\
112\n\
113Deprecated since release 2.3. Instead, use the extended call syntax:\n\
114 function(*args, **keywords).");
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
Neil Schemenauer68973552003-08-14 20:37:34 +0000196 if (func == (PyObject *)&PyBool_Type || 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;
Raymond Hettinger8ae46892003-10-12 19:09:37 +0000322 res = PyTuple_Pack(2, v, w);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000323 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,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000367 "compile() expected string without null bytes");
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000368 return NULL;
369 }
370
Guido van Rossum5b722181993-03-30 17:46:03 +0000371 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000372 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000373 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000374 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000375 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000376 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000377 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000378 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000379 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossum5b722181993-03-30 17:46:03 +0000380 return NULL;
381 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000382
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000383 if (supplied_flags &
384 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT))
385 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000386 PyErr_SetString(PyExc_ValueError,
387 "compile(): unrecognised flags");
388 return NULL;
389 }
390 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
391
Tim Peters6cd6a822001-08-17 22:11:27 +0000392 if (!dont_inherit) {
393 PyEval_MergeCompilerFlags(&cf);
394 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000395 result = Py_CompileStringFlags(str, filename, start, &cf);
396 Py_XDECREF(tmp);
397 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000398}
399
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000400PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000401"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000402\n\
403Compile the source string (a Python module, statement or expression)\n\
404into a code object that can be executed by the exec statement or eval().\n\
405The filename will be used for run-time error messages.\n\
406The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000407single (interactive) statement, or 'eval' to compile an expression.\n\
408The flags argument, if present, controls which future statements influence\n\
409the compilation of the code.\n\
410The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
411the effects of any future statements in effect in the code calling\n\
412compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000413in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000414
Guido van Rossum79f25d91997-04-29 20:08:16 +0000415static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000416builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000417{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000418 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000419
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000420 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000421 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000422 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000423}
424
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000425PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000426"dir([object]) -> list of strings\n"
427"\n"
428"Return an alphabetized list of names comprising (some of) the attributes\n"
429"of the given object, and of attributes reachable from it:\n"
430"\n"
431"No argument: the names in the current scope.\n"
432"Module object: the module attributes.\n"
Tim Peters37a309d2001-09-04 01:20:04 +0000433"Type or class object: its attributes, and recursively the attributes of\n"
434" its bases.\n"
Tim Peters5d2b77c2001-09-03 05:47:38 +0000435"Otherwise: its attributes, its class's attributes, and recursively the\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000436" attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000437
Guido van Rossum79f25d91997-04-29 20:08:16 +0000438static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000439builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000440{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000441 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000442
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000443 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000444 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000445 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000446}
447
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000448PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000449"divmod(x, y) -> (div, mod)\n\
450\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000451Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000452
453
Guido van Rossum79f25d91997-04-29 20:08:16 +0000454static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000455builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000456{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000457 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000458 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000459 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000460 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000461
Guido van Rossum79f25d91997-04-29 20:08:16 +0000462 if (!PyArg_ParseTuple(args, "O|O!O!:eval",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000463 &cmd,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000464 &PyDict_Type, &globals,
465 &PyDict_Type, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000466 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000467 if (globals == Py_None) {
468 globals = PyEval_GetGlobals();
469 if (locals == Py_None)
470 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000471 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000472 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000473 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000474
Guido van Rossum79f25d91997-04-29 20:08:16 +0000475 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
476 if (PyDict_SetItemString(globals, "__builtins__",
477 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000478 return NULL;
479 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000480
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000481 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000482 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000483 PyErr_SetString(PyExc_TypeError,
484 "code object passed to eval() may not contain free variables");
485 return NULL;
486 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000487 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000488 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000489
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000490 if (!PyString_Check(cmd) &&
491 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000492 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000493 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000494 return NULL;
495 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000496 cf.cf_flags = 0;
497
498#ifdef Py_USING_UNICODE
499 if (PyUnicode_Check(cmd)) {
500 tmp = PyUnicode_AsUTF8String(cmd);
501 if (tmp == NULL)
502 return NULL;
503 cmd = tmp;
504 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
505 }
506#endif
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000507 if (PyString_AsStringAndSize(cmd, &str, NULL))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000508 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000509 while (*str == ' ' || *str == '\t')
510 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000511
Tim Peters9fa96be2001-08-17 23:04:59 +0000512 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000513 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
514 Py_XDECREF(tmp);
515 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000516}
517
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000518PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000519"eval(source[, globals[, locals]]) -> value\n\
520\n\
521Evaluate the source in the context of globals and locals.\n\
522The source may be a string representing a Python expression\n\
523or a code object as returned by compile().\n\
524The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000525globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000526
527
Guido van Rossum79f25d91997-04-29 20:08:16 +0000528static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000529builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000530{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000531 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000532 PyObject *globals = Py_None, *locals = Py_None;
533 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000534 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000535 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000536 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000537
Guido van Rossum79f25d91997-04-29 20:08:16 +0000538 if (!PyArg_ParseTuple(args, "s|O!O!:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000539 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000540 &PyDict_Type, &globals,
541 &PyDict_Type, &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000542 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000543 if (globals == Py_None) {
544 globals = PyEval_GetGlobals();
545 if (locals == Py_None)
546 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000547 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000548 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000549 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000550 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
551 if (PyDict_SetItemString(globals, "__builtins__",
552 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000553 return NULL;
554 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000555
556 exists = 0;
557 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000558#if defined(PLAN9)
559 {
560 Dir *d;
561
562 if ((d = dirstat(filename))!=nil) {
563 if(d->mode & DMDIR)
564 werrstr("is a directory");
565 else
566 exists = 1;
567 free(d);
568 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000569 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000570#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000571 if (object_exists(filename)) {
572 if (isdir(filename))
573 errno = EISDIR;
574 else
575 exists = 1;
576 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000577#else /* standard Posix */
578 {
579 struct stat s;
580 if (stat(filename, &s) == 0) {
581 if (S_ISDIR(s.st_mode))
582# if defined(PY_OS2) && defined(PYCC_VACPP)
583 errno = EOS2ERR;
584# else
585 errno = EISDIR;
586# endif
587 else
588 exists = 1;
589 }
590 }
591#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000592
593 if (exists) {
594 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000595 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000596 Py_END_ALLOW_THREADS
597
598 if (fp == NULL) {
599 exists = 0;
600 }
601 }
602
603 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000604 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000605 return NULL;
606 }
Tim Peters5ba58662001-07-16 02:29:45 +0000607 cf.cf_flags = 0;
608 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000609 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000610 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000611 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000612 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000613 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000614 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000615}
616
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000617PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000618"execfile(filename[, globals[, locals]])\n\
619\n\
620Read and execute a Python script from a file.\n\
621The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000622globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000623
624
Guido van Rossum79f25d91997-04-29 20:08:16 +0000625static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000626builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000627{
Guido van Rossum950ff291998-06-29 13:38:57 +0000628 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000629 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000630
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000631 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000632 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000633#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000634 if (PyUnicode_Check(name)) {
635 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
636 if (name == NULL)
637 return NULL;
638 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000639#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000640
641 if (!PyString_Check(name)) {
642 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000643 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000644 return NULL;
645 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000646 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000647 if (result == NULL && dflt != NULL &&
648 PyErr_ExceptionMatches(PyExc_AttributeError))
649 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000650 PyErr_Clear();
651 Py_INCREF(dflt);
652 result = dflt;
653 }
654 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000655}
656
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000657PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000658"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000659\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000660Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
661When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000662exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000663
664
Guido van Rossum79f25d91997-04-29 20:08:16 +0000665static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000666builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000667{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000668 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000669
Guido van Rossum79f25d91997-04-29 20:08:16 +0000670 d = PyEval_GetGlobals();
671 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000672 return d;
673}
674
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000675PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000676"globals() -> dictionary\n\
677\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000678Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000679
680
Guido van Rossum79f25d91997-04-29 20:08:16 +0000681static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000682builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000683{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000684 PyObject *v;
685 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000686
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000687 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000688 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000689#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000690 if (PyUnicode_Check(name)) {
691 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
692 if (name == NULL)
693 return NULL;
694 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000695#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000696
697 if (!PyString_Check(name)) {
698 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000699 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000700 return NULL;
701 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000702 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000703 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000704 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000705 Py_INCREF(Py_False);
706 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000707 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000708 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000709 Py_INCREF(Py_True);
710 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000711}
712
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000713PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000714"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000715\n\
716Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000717(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000718
719
Guido van Rossum79f25d91997-04-29 20:08:16 +0000720static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000721builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000722{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000723 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000724}
725
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000726PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000727"id(object) -> integer\n\
728\n\
729Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000730simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000731
732
Guido van Rossum79f25d91997-04-29 20:08:16 +0000733static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000734builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000735{
736 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000737 PyObject *it; /* the iterator object */
738 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000739 } sequence;
740
Guido van Rossum79f25d91997-04-29 20:08:16 +0000741 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000742 sequence *seqs = NULL, *sqp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000743 int n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000744 register int i, j;
745
Guido van Rossum79f25d91997-04-29 20:08:16 +0000746 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000747 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000748 PyErr_SetString(PyExc_TypeError,
749 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000750 return NULL;
751 }
752
Guido van Rossum79f25d91997-04-29 20:08:16 +0000753 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000754 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000755
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000756 if (func == Py_None && n == 1) {
757 /* map(None, S) is the same as list(S). */
758 return PySequence_List(PyTuple_GetItem(args, 1));
759 }
760
Tim Peters4e9afdc2001-05-03 23:54:49 +0000761 /* Get space for sequence descriptors. Must NULL out the iterator
762 * pointers so that jumping to Fail_2 later doesn't see trash.
763 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000764 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
765 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000766 return NULL;
767 }
768 for (i = 0; i < n; ++i) {
769 seqs[i].it = (PyObject*)NULL;
770 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000771 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000772
Tim Peters4e9afdc2001-05-03 23:54:49 +0000773 /* Do a first pass to obtain iterators for the arguments, and set len
774 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000775 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000776 len = 0;
777 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
778 PyObject *curseq;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000779 int curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000780
Tim Peters4e9afdc2001-05-03 23:54:49 +0000781 /* Get iterator. */
782 curseq = PyTuple_GetItem(args, i+1);
783 sqp->it = PyObject_GetIter(curseq);
784 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000785 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000786 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000787 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +0000788 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000789 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000790 goto Fail_2;
791 }
792
Tim Peters4e9afdc2001-05-03 23:54:49 +0000793 /* Update len. */
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000794 curlen = PyObject_Size(curseq);
795 if (curlen < 0) {
796 PyErr_Clear();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000797 curlen = 8; /* arbitrary */
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000798 }
799 if (curlen > len)
800 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000801 }
802
Tim Peters4e9afdc2001-05-03 23:54:49 +0000803 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000804 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000805 goto Fail_2;
806
Tim Peters4e9afdc2001-05-03 23:54:49 +0000807 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +0000808 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000809 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000810 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000811
Guido van Rossum79f25d91997-04-29 20:08:16 +0000812 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +0000813 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000814 else if ((alist = PyTuple_New(n)) == NULL)
815 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000816
817 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000818 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000819 Py_INCREF(Py_None);
820 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000821 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000822 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000823 item = PyIter_Next(sqp->it);
824 if (item)
825 ++numactive;
826 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000827 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +0000828 Py_XDECREF(alist);
829 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000830 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000831 Py_INCREF(Py_None);
832 item = Py_None;
833 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000834 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000835 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000836 if (alist)
837 PyTuple_SET_ITEM(alist, j, item);
838 else
Guido van Rossum2d951851994-08-29 12:52:16 +0000839 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000840 }
841
Guido van Rossum32120311995-07-10 13:52:21 +0000842 if (!alist)
843 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +0000844
Tim Peters4e9afdc2001-05-03 23:54:49 +0000845 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000846 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +0000847 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000848 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000849
Guido van Rossum79f25d91997-04-29 20:08:16 +0000850 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +0000851 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000852 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000853 value = PyEval_CallObject(func, alist);
854 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000855 if (value == NULL)
856 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000857 }
858 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +0000859 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +0000860 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +0000861 if (status < 0)
862 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000863 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000864 else if (PyList_SetItem(result, i, value) < 0)
865 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000866 }
867
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000868 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
869 goto Fail_1;
870
Tim Peters4e9afdc2001-05-03 23:54:49 +0000871 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000872
Guido van Rossum12d12c51993-10-26 17:58:25 +0000873Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000874 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000875Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +0000876 result = NULL;
877Succeed:
878 assert(seqs);
879 for (i = 0; i < n; ++i)
880 Py_XDECREF(seqs[i].it);
881 PyMem_DEL(seqs);
882 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000883}
884
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000885PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000886"map(function, sequence[, sequence, ...]) -> list\n\
887\n\
888Return a list of the results of applying the function to the items of\n\
889the argument sequence(s). If more than one sequence is given, the\n\
890function is called with an argument list consisting of the corresponding\n\
891item of each sequence, substituting None for missing values when not all\n\
892sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000893the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000894
895
Guido van Rossum79f25d91997-04-29 20:08:16 +0000896static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000897builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000898{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000899 PyObject *v;
900 PyObject *name;
901 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000902
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000903 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000904 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000905 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000906 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000907 Py_INCREF(Py_None);
908 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000909}
910
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000911PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000912"setattr(object, name, value)\n\
913\n\
914Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000915``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000916
917
Guido van Rossum79f25d91997-04-29 20:08:16 +0000918static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000919builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000920{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000921 PyObject *v;
922 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000923
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000924 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +0000925 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000926 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000927 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000928 Py_INCREF(Py_None);
929 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +0000930}
931
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000932PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +0000933"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000934\n\
935Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000936``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000937
938
Guido van Rossum79f25d91997-04-29 20:08:16 +0000939static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000940builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000941{
Guido van Rossum9bfef441993-03-29 10:43:31 +0000942 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000943
Guido van Rossum79f25d91997-04-29 20:08:16 +0000944 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000945 if (x == -1)
946 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000947 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000948}
949
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000950PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000951"hash(object) -> integer\n\
952\n\
953Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000954the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000955
956
Guido van Rossum79f25d91997-04-29 20:08:16 +0000957static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000958builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +0000959{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000960 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000961
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000962 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000963 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000964 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000965 "hex() argument can't be converted to hex");
966 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +0000967 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000968 return (*nb->nb_hex)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +0000969}
970
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000971PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000972"hex(number) -> string\n\
973\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000974Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000975
976
Tim Petersdbd9ba62000-07-09 03:09:57 +0000977static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000978
Guido van Rossum79f25d91997-04-29 20:08:16 +0000979static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000980builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000981{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000982 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000983 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000984 PyObject *res;
985 PyObject *globals, *locals;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000986
987 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000988 if (line == NULL)
989 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000990 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000991 return NULL;
992 while (*str == ' ' || *str == '\t')
993 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000994 globals = PyEval_GetGlobals();
995 locals = PyEval_GetLocals();
996 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
997 if (PyDict_SetItemString(globals, "__builtins__",
998 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000999 return NULL;
1000 }
Guido van Rossumb05a5c71997-05-07 17:46:13 +00001001 res = PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001002 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001003 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001004}
1005
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001006PyDoc_STRVAR(input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001007"input([prompt]) -> value\n\
1008\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001009Equivalent to eval(raw_input(prompt)).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001010
1011
Guido van Rossume8811f81997-02-14 15:48:05 +00001012static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001013builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001014{
1015 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001016 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001017 return NULL;
1018 Py_INCREF(s);
1019 PyString_InternInPlace(&s);
1020 return s;
1021}
1022
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001023PyDoc_STRVAR(intern_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001024"intern(string) -> string\n\
1025\n\
1026``Intern'' the given string. This enters the string in the (global)\n\
1027table of interned strings whose purpose is to speed up dictionary lookups.\n\
1028Return the string itself or the previously interned string object with the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001029same value.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001030
1031
Guido van Rossum79f25d91997-04-29 20:08:16 +00001032static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001033builtin_iter(PyObject *self, PyObject *args)
1034{
1035 PyObject *v, *w = NULL;
1036
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001037 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001038 return NULL;
1039 if (w == NULL)
1040 return PyObject_GetIter(v);
1041 if (!PyCallable_Check(v)) {
1042 PyErr_SetString(PyExc_TypeError,
1043 "iter(v, w): v must be callable");
1044 return NULL;
1045 }
1046 return PyCallIter_New(v, w);
1047}
1048
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001049PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001050"iter(collection) -> iterator\n\
1051iter(callable, sentinel) -> iterator\n\
1052\n\
1053Get an iterator from an object. In the first form, the argument must\n\
1054supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001055In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001056
1057
1058static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001059builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001060{
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001061 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001062
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001063 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001064 if (res < 0 && PyErr_Occurred())
1065 return NULL;
1066 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001067}
1068
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001069PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001070"len(object) -> integer\n\
1071\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001072Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001073
1074
Guido van Rossum79f25d91997-04-29 20:08:16 +00001075static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001076builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001077{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001078 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001079
Guido van Rossum79f25d91997-04-29 20:08:16 +00001080 d = PyEval_GetLocals();
1081 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001082 return d;
1083}
1084
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001085PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001086"locals() -> dictionary\n\
1087\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001088Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001089
1090
Guido van Rossum79f25d91997-04-29 20:08:16 +00001091static PyObject *
Guido van Rossum53451b32001-01-17 15:47:24 +00001092min_max(PyObject *args, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001093{
Tim Petersc3074532001-05-03 07:00:32 +00001094 PyObject *v, *w, *x, *it;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001095
Guido van Rossum79f25d91997-04-29 20:08:16 +00001096 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001097 v = args;
Raymond Hettingerbbfb9102002-12-29 18:31:19 +00001098 else if (!PyArg_UnpackTuple(args, (op==Py_LT) ? "min" : "max", 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001099 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001100
Tim Petersc3074532001-05-03 07:00:32 +00001101 it = PyObject_GetIter(v);
1102 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001103 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001104
1105 w = NULL; /* the result */
Tim Petersf4848da2001-05-05 00:14:56 +00001106 for (;;) {
Tim Petersc3074532001-05-03 07:00:32 +00001107 x = PyIter_Next(it);
Guido van Rossum2d951851994-08-29 12:52:16 +00001108 if (x == NULL) {
Tim Petersc3074532001-05-03 07:00:32 +00001109 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001110 Py_XDECREF(w);
1111 Py_DECREF(it);
1112 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001113 }
Tim Petersc3074532001-05-03 07:00:32 +00001114 break;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001115 }
Tim Petersc3074532001-05-03 07:00:32 +00001116
Guido van Rossum2d951851994-08-29 12:52:16 +00001117 if (w == NULL)
1118 w = x;
1119 else {
Guido van Rossum53451b32001-01-17 15:47:24 +00001120 int cmp = PyObject_RichCompareBool(x, w, op);
1121 if (cmp > 0) {
1122 Py_DECREF(w);
1123 w = x;
1124 }
1125 else if (cmp < 0) {
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001126 Py_DECREF(x);
Tim Petersc3074532001-05-03 07:00:32 +00001127 Py_DECREF(w);
1128 Py_DECREF(it);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001129 return NULL;
1130 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001131 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001132 Py_DECREF(x);
Guido van Rossum2d951851994-08-29 12:52:16 +00001133 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001134 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001135 if (w == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001136 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +00001137 "min() or max() arg is an empty sequence");
Tim Petersc3074532001-05-03 07:00:32 +00001138 Py_DECREF(it);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001139 return w;
1140}
1141
Guido van Rossum79f25d91997-04-29 20:08:16 +00001142static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001143builtin_min(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001144{
Guido van Rossum53451b32001-01-17 15:47:24 +00001145 return min_max(v, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001146}
1147
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001148PyDoc_STRVAR(min_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001149"min(sequence) -> value\n\
1150min(a, b, c, ...) -> value\n\
1151\n\
1152With a single sequence argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001153With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001154
1155
Guido van Rossum79f25d91997-04-29 20:08:16 +00001156static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001157builtin_max(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001158{
Guido van Rossum53451b32001-01-17 15:47:24 +00001159 return min_max(v, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001160}
1161
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001162PyDoc_STRVAR(max_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001163"max(sequence) -> value\n\
1164max(a, b, c, ...) -> value\n\
1165\n\
1166With a single sequence argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001167With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001168
1169
Guido van Rossum79f25d91997-04-29 20:08:16 +00001170static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001171builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001172{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001173 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001174
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001175 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1176 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001177 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001178 "oct() argument can't be converted to oct");
1179 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001180 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001181 return (*nb->nb_oct)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001182}
1183
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001184PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001185"oct(number) -> string\n\
1186\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001187Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001188
1189
Guido van Rossum79f25d91997-04-29 20:08:16 +00001190static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001191builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001192{
Guido van Rossum09095f32000-03-10 23:00:52 +00001193 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001194 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001195
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001196 if (PyString_Check(obj)) {
1197 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001198 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001199 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001200 return PyInt_FromLong(ord);
1201 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001202#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001203 } else if (PyUnicode_Check(obj)) {
1204 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001205 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001206 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001207 return PyInt_FromLong(ord);
1208 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001209#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001210 } else {
1211 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001212 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001213 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001214 return NULL;
1215 }
1216
Guido van Rossumad991772001-01-12 16:03:05 +00001217 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001218 "ord() expected a character, "
1219 "but string of length %d found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001220 size);
1221 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001222}
1223
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001224PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001225"ord(c) -> integer\n\
1226\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001227Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001228
1229
Guido van Rossum79f25d91997-04-29 20:08:16 +00001230static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001231builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001232{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001233 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001234
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001235 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001236 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001237 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001238}
1239
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001240PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001241"pow(x, y[, z]) -> number\n\
1242\n\
1243With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001244equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001245
1246
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001247
1248/* Return number of items in range (lo, hi, step), when arguments are
1249 * PyInt or PyLong objects. step > 0 required. Return a value < 0 if
1250 * & only if the true value is too large to fit in a signed long.
1251 * Arguments MUST return 1 with either PyInt_Check() or
1252 * PyLong_Check(). Return -1 when there is an error.
1253 */
1254static long
1255get_len_of_range_longs(PyObject *lo, PyObject *hi, PyObject *step)
1256{
1257 /* -------------------------------------------------------------
1258 Algorithm is equal to that of get_len_of_range(), but it operates
1259 on PyObjects (which are assumed to be PyLong or PyInt objects).
1260 ---------------------------------------------------------------*/
1261 long n;
1262 PyObject *diff = NULL;
1263 PyObject *one = NULL;
1264 PyObject *tmp1 = NULL, *tmp2 = NULL, *tmp3 = NULL;
1265 /* holds sub-expression evaluations */
1266
1267 /* if (lo >= hi), return length of 0. */
1268 if (PyObject_Compare(lo, hi) >= 0)
1269 return 0;
1270
1271 if ((one = PyLong_FromLong(1L)) == NULL)
1272 goto Fail;
1273
1274 if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL)
1275 goto Fail;
1276
1277 if ((diff = PyNumber_Subtract(tmp1, one)) == NULL)
1278 goto Fail;
1279
1280 if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL)
1281 goto Fail;
1282
1283 if ((tmp3 = PyNumber_Add(tmp2, one)) == NULL)
1284 goto Fail;
1285
1286 n = PyLong_AsLong(tmp3);
1287 if (PyErr_Occurred()) { /* Check for Overflow */
1288 PyErr_Clear();
1289 goto Fail;
1290 }
1291
1292 Py_DECREF(tmp3);
1293 Py_DECREF(tmp2);
1294 Py_DECREF(diff);
1295 Py_DECREF(tmp1);
1296 Py_DECREF(one);
1297 return n;
1298
1299 Fail:
1300 Py_XDECREF(tmp3);
1301 Py_XDECREF(tmp2);
1302 Py_XDECREF(diff);
1303 Py_XDECREF(tmp1);
1304 Py_XDECREF(one);
1305 return -1;
1306}
1307
1308/* An extension of builtin_range() that handles the case when PyLong
1309 * arguments are given. */
1310static PyObject *
1311handle_range_longs(PyObject *self, PyObject *args)
1312{
1313 PyObject *ilow;
Tim Peters874e1f72003-04-13 22:13:08 +00001314 PyObject *ihigh = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001315 PyObject *istep = NULL;
Tim Peters874e1f72003-04-13 22:13:08 +00001316
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001317 PyObject *curnum = NULL;
1318 PyObject *v = NULL;
1319 long bign;
1320 int i, n;
1321 int cmp_result;
1322
Tim Peters874e1f72003-04-13 22:13:08 +00001323 PyObject *zero = PyLong_FromLong(0);
1324
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001325 if (zero == NULL)
1326 return NULL;
1327
Tim Peters874e1f72003-04-13 22:13:08 +00001328 if (!PyArg_UnpackTuple(args, "range", 1, 3, &ilow, &ihigh, &istep)) {
1329 Py_DECREF(zero);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001330 return NULL;
1331 }
1332
Tim Peters874e1f72003-04-13 22:13:08 +00001333 /* Figure out which way we were called, supply defaults, and be
1334 * sure to incref everything so that the decrefs at the end
1335 * are correct.
1336 */
1337 assert(ilow != NULL);
1338 if (ihigh == NULL) {
1339 /* only 1 arg -- it's the upper limit */
1340 ihigh = ilow;
1341 ilow = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001342 }
Tim Peters874e1f72003-04-13 22:13:08 +00001343 assert(ihigh != NULL);
1344 Py_INCREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001345
Tim Peters874e1f72003-04-13 22:13:08 +00001346 /* ihigh correct now; do ilow */
1347 if (ilow == NULL)
1348 ilow = zero;
1349 Py_INCREF(ilow);
1350
1351 /* ilow and ihigh correct now; do istep */
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001352 if (istep == NULL) {
1353 istep = PyLong_FromLong(1L);
1354 if (istep == NULL)
1355 goto Fail;
1356 }
1357 else {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001358 Py_INCREF(istep);
1359 }
1360
Tim Peters874e1f72003-04-13 22:13:08 +00001361 if (!PyInt_Check(ilow) && !PyLong_Check(ilow)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001362 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001363 "range() integer start argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001364 ilow->ob_type->tp_name);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001365 goto Fail;
1366 }
1367
Tim Peters874e1f72003-04-13 22:13:08 +00001368 if (!PyInt_Check(ihigh) && !PyLong_Check(ihigh)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001369 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001370 "range() integer end argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001371 ihigh->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001372 goto Fail;
1373 }
1374
1375 if (!PyInt_Check(istep) && !PyLong_Check(istep)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001376 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001377 "range() integer step argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001378 istep->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001379 goto Fail;
1380 }
1381
1382 if (PyObject_Cmp(istep, zero, &cmp_result) == -1)
1383 goto Fail;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001384 if (cmp_result == 0) {
1385 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001386 "range() step argument must not be zero");
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001387 goto Fail;
1388 }
1389
1390 if (cmp_result > 0)
1391 bign = get_len_of_range_longs(ilow, ihigh, istep);
1392 else {
1393 PyObject *neg_istep = PyNumber_Negative(istep);
1394 if (neg_istep == NULL)
1395 goto Fail;
1396 bign = get_len_of_range_longs(ihigh, ilow, neg_istep);
1397 Py_DECREF(neg_istep);
1398 }
1399
1400 n = (int)bign;
1401 if (bign < 0 || (long)n != bign) {
1402 PyErr_SetString(PyExc_OverflowError,
1403 "range() result has too many items");
1404 goto Fail;
1405 }
1406
1407 v = PyList_New(n);
1408 if (v == NULL)
1409 goto Fail;
1410
1411 curnum = ilow;
1412 Py_INCREF(curnum);
1413
1414 for (i = 0; i < n; i++) {
1415 PyObject *w = PyNumber_Long(curnum);
1416 PyObject *tmp_num;
1417 if (w == NULL)
1418 goto Fail;
1419
1420 PyList_SET_ITEM(v, i, w);
1421
1422 tmp_num = PyNumber_Add(curnum, istep);
1423 if (tmp_num == NULL)
1424 goto Fail;
1425
1426 Py_DECREF(curnum);
1427 curnum = tmp_num;
1428 }
Tim Peters874e1f72003-04-13 22:13:08 +00001429 Py_DECREF(ilow);
1430 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001431 Py_DECREF(istep);
1432 Py_DECREF(zero);
Tim Peters874e1f72003-04-13 22:13:08 +00001433 Py_DECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001434 return v;
1435
1436 Fail:
Tim Peters874e1f72003-04-13 22:13:08 +00001437 Py_DECREF(ilow);
1438 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001439 Py_XDECREF(istep);
Tim Peters874e1f72003-04-13 22:13:08 +00001440 Py_DECREF(zero);
1441 Py_XDECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001442 Py_XDECREF(v);
1443 return NULL;
1444}
1445
Guido van Rossum124eff01999-02-23 16:11:01 +00001446/* Return number of items in range/xrange (lo, hi, step). step > 0
1447 * required. Return a value < 0 if & only if the true value is too
1448 * large to fit in a signed long.
1449 */
1450static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001451get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001452{
1453 /* -------------------------------------------------------------
1454 If lo >= hi, the range is empty.
1455 Else if n values are in the range, the last one is
1456 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1457 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1458 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1459 the RHS is non-negative and so truncation is the same as the
1460 floor. Letting M be the largest positive long, the worst case
1461 for the RHS numerator is hi=M, lo=-M-1, and then
1462 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1463 precision to compute the RHS exactly.
1464 ---------------------------------------------------------------*/
1465 long n = 0;
1466 if (lo < hi) {
1467 unsigned long uhi = (unsigned long)hi;
1468 unsigned long ulo = (unsigned long)lo;
1469 unsigned long diff = uhi - ulo - 1;
1470 n = (long)(diff / (unsigned long)step + 1);
1471 }
1472 return n;
1473}
1474
Guido van Rossum79f25d91997-04-29 20:08:16 +00001475static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001476builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001477{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001478 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001479 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001480 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001481
Guido van Rossum79f25d91997-04-29 20:08:16 +00001482 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001483
Guido van Rossum79f25d91997-04-29 20:08:16 +00001484 if (PyTuple_Size(args) <= 1) {
1485 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001486 "l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001487 &ihigh)) {
1488 PyErr_Clear();
1489 return handle_range_longs(self, args);
1490 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001491 }
1492 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001493 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001494 "ll|l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001495 &ilow, &ihigh, &istep)) {
1496 PyErr_Clear();
1497 return handle_range_longs(self, args);
1498 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001499 }
1500 if (istep == 0) {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001501 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001502 "range() step argument must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001503 return NULL;
1504 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001505 if (istep > 0)
1506 bign = get_len_of_range(ilow, ihigh, istep);
1507 else
1508 bign = get_len_of_range(ihigh, ilow, -istep);
1509 n = (int)bign;
1510 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001511 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001512 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001513 return NULL;
1514 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001515 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001516 if (v == NULL)
1517 return NULL;
1518 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001519 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001520 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001521 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001522 return NULL;
1523 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001524 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001525 ilow += istep;
1526 }
1527 return v;
1528}
1529
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001530PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001531"range([start,] stop[, step]) -> list of integers\n\
1532\n\
1533Return a list containing an arithmetic progression of integers.\n\
1534range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1535When step is given, it specifies the increment (or decrement).\n\
1536For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001537These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001538
1539
Guido van Rossum79f25d91997-04-29 20:08:16 +00001540static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001541builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001542{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001543 PyObject *v = NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001544 PyObject *fin = PySys_GetObject("stdin");
1545 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001546
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001547 if (!PyArg_UnpackTuple(args, "[raw_]input", 0, 1, &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001548 return NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001549
1550 if (fin == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001551 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdin");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001552 return NULL;
1553 }
1554 if (fout == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001555 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdout");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001556 return NULL;
1557 }
1558 if (PyFile_SoftSpace(fout, 0)) {
1559 if (PyFile_WriteString(" ", fout) != 0)
1560 return NULL;
1561 }
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001562 if (PyFile_Check (fin) && PyFile_Check (fout)
1563 && isatty(fileno(PyFile_AsFile(fin)))
1564 && isatty(fileno(PyFile_AsFile(fout)))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001565 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001566 char *prompt;
1567 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001568 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001569 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001570 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001571 if (po == NULL)
1572 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001573 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001574 if (prompt == NULL)
1575 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001576 }
1577 else {
1578 po = NULL;
1579 prompt = "";
1580 }
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001581 s = PyOS_Readline(PyFile_AsFile (fin), PyFile_AsFile (fout),
1582 prompt);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001583 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001584 if (s == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001585 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001586 return NULL;
1587 }
1588 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001589 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001590 result = NULL;
1591 }
1592 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001593 size_t len = strlen(s);
1594 if (len > INT_MAX) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001595 PyErr_SetString(PyExc_OverflowError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001596 "[raw_]input: input too long");
Guido van Rossum106f2da2000-06-28 21:12:25 +00001597 result = NULL;
1598 }
1599 else {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001600 result = PyString_FromStringAndSize(s,
1601 (int)(len-1));
Guido van Rossum106f2da2000-06-28 21:12:25 +00001602 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001603 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001604 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001605 return result;
1606 }
Guido van Rossum90933611991-06-07 16:10:43 +00001607 if (v != NULL) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001608 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001609 return NULL;
1610 }
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001611 return PyFile_GetLine(fin, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001612}
1613
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001614PyDoc_STRVAR(raw_input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001615"raw_input([prompt]) -> string\n\
1616\n\
1617Read a string from standard input. The trailing newline is stripped.\n\
1618If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1619On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001620is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001621
1622
Guido van Rossum79f25d91997-04-29 20:08:16 +00001623static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001624builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001625{
Tim Peters15d81ef2001-05-04 04:39:21 +00001626 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001627
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001628 if (!PyArg_UnpackTuple(args, "reduce", 2, 3, &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001629 return NULL;
1630 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001631 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001632
Tim Peters15d81ef2001-05-04 04:39:21 +00001633 it = PyObject_GetIter(seq);
1634 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001635 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001636 "reduce() arg 2 must support iteration");
1637 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001638 return NULL;
1639 }
1640
Guido van Rossum79f25d91997-04-29 20:08:16 +00001641 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001642 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001643
Tim Peters15d81ef2001-05-04 04:39:21 +00001644 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001645 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001646
1647 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001648 Py_DECREF(args);
1649 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001650 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001651 }
1652
Tim Peters15d81ef2001-05-04 04:39:21 +00001653 op2 = PyIter_Next(it);
1654 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001655 if (PyErr_Occurred())
1656 goto Fail;
1657 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001658 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001659
Guido van Rossum2d951851994-08-29 12:52:16 +00001660 if (result == NULL)
1661 result = op2;
1662 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001663 PyTuple_SetItem(args, 0, result);
1664 PyTuple_SetItem(args, 1, op2);
1665 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001666 goto Fail;
1667 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001668 }
1669
Guido van Rossum79f25d91997-04-29 20:08:16 +00001670 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001671
Guido van Rossum2d951851994-08-29 12:52:16 +00001672 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001673 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001674 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001675
Tim Peters15d81ef2001-05-04 04:39:21 +00001676 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001677 return result;
1678
Guido van Rossum2d951851994-08-29 12:52:16 +00001679Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001680 Py_XDECREF(args);
1681 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001682 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001683 return NULL;
1684}
1685
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001686PyDoc_STRVAR(reduce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001687"reduce(function, sequence[, initial]) -> value\n\
1688\n\
1689Apply a function of two arguments cumulatively to the items of a sequence,\n\
1690from left to right, so as to reduce the sequence to a single value.\n\
1691For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1692((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1693of the sequence in the calculation, and serves as a default when the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001694sequence is empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001695
1696
Guido van Rossum79f25d91997-04-29 20:08:16 +00001697static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001698builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001699{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001700 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001701}
1702
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001703PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001704"reload(module) -> module\n\
1705\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001706Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001707
1708
Guido van Rossum79f25d91997-04-29 20:08:16 +00001709static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001710builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001711{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001712 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001713}
1714
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001715PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001716"repr(object) -> string\n\
1717\n\
1718Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001719For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001720
1721
Guido van Rossum79f25d91997-04-29 20:08:16 +00001722static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001723builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001724{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001725 double x;
1726 double f;
1727 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001728 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001729
Guido van Rossum79f25d91997-04-29 20:08:16 +00001730 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001731 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001732 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001733 i = abs(ndigits);
1734 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001735 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001736 if (ndigits < 0)
1737 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001738 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00001739 x *= f;
1740 if (x >= 0.0)
1741 x = floor(x + 0.5);
1742 else
1743 x = ceil(x - 0.5);
1744 if (ndigits < 0)
1745 x *= f;
1746 else
1747 x /= f;
1748 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001749}
1750
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001751PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001752"round(number[, ndigits]) -> floating point number\n\
1753\n\
1754Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001755This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001756
Raymond Hettinger64958a12003-12-17 20:43:33 +00001757static PyObject *
1758builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1759{
1760 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
1761 PyObject *callable;
1762 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
1763 long reverse;
1764
1765 if (args != NULL) {
1766 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
1767 kwlist, &seq, &compare, &keyfunc, &reverse))
1768 return NULL;
1769 }
1770
1771 newlist = PySequence_List(seq);
1772 if (newlist == NULL)
1773 return NULL;
1774
1775 callable = PyObject_GetAttrString(newlist, "sort");
1776 if (callable == NULL) {
1777 Py_DECREF(newlist);
1778 return NULL;
1779 }
1780
1781 newargs = PyTuple_GetSlice(args, 1, 4);
1782 if (newargs == NULL) {
1783 Py_DECREF(newlist);
1784 Py_DECREF(callable);
1785 return NULL;
1786 }
1787
1788 v = PyObject_Call(callable, newargs, kwds);
1789 Py_DECREF(newargs);
1790 Py_DECREF(callable);
1791 if (v == NULL) {
1792 Py_DECREF(newlist);
1793 return NULL;
1794 }
1795 Py_DECREF(v);
1796 return newlist;
1797}
1798
1799PyDoc_STRVAR(sorted_doc,
1800"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001801
Guido van Rossum79f25d91997-04-29 20:08:16 +00001802static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001803builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001804{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001805 PyObject *v = NULL;
1806 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001807
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001808 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001809 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001810 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001811 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001812 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001813 if (!PyErr_Occurred())
1814 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001815 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001816 }
1817 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001818 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001819 }
1820 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001821 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001822 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001823 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001824 "vars() argument must have __dict__ attribute");
1825 return NULL;
1826 }
1827 }
1828 return d;
1829}
1830
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001831PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001832"vars([object]) -> dictionary\n\
1833\n\
1834Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001835With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001836
Alex Martellia70b1912003-04-22 08:12:33 +00001837
1838static PyObject*
1839builtin_sum(PyObject *self, PyObject *args)
1840{
1841 PyObject *seq;
1842 PyObject *result = NULL;
1843 PyObject *temp, *item, *iter;
1844
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001845 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001846 return NULL;
1847
1848 iter = PyObject_GetIter(seq);
1849 if (iter == NULL)
1850 return NULL;
1851
1852 if (result == NULL) {
1853 result = PyInt_FromLong(0);
1854 if (result == NULL) {
1855 Py_DECREF(iter);
1856 return NULL;
1857 }
1858 } else {
1859 /* reject string values for 'start' parameter */
1860 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
1861 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001862 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001863 Py_DECREF(iter);
1864 return NULL;
1865 }
Alex Martelli41c9f882003-04-22 09:24:48 +00001866 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001867 }
1868
1869 for(;;) {
1870 item = PyIter_Next(iter);
1871 if (item == NULL) {
1872 /* error, or end-of-sequence */
1873 if (PyErr_Occurred()) {
1874 Py_DECREF(result);
1875 result = NULL;
1876 }
1877 break;
1878 }
Alex Martellia253e182003-10-25 23:24:14 +00001879 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001880 Py_DECREF(result);
1881 Py_DECREF(item);
1882 result = temp;
1883 if (result == NULL)
1884 break;
1885 }
1886 Py_DECREF(iter);
1887 return result;
1888}
1889
1890PyDoc_STRVAR(sum_doc,
1891"sum(sequence, start=0) -> value\n\
1892\n\
1893Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
1894of parameter 'start'. When the sequence is empty, returns start.");
1895
1896
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001897static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001898builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001899{
1900 PyObject *inst;
1901 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001902 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001903
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001904 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001905 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001906
Guido van Rossum823649d2001-03-21 18:40:58 +00001907 retval = PyObject_IsInstance(inst, cls);
1908 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001909 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001910 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001911}
1912
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001913PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001914"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001915\n\
1916Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001917With a type as second argument, return whether that is the object's type.\n\
1918The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001919isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001920
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001921
1922static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001923builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001924{
1925 PyObject *derived;
1926 PyObject *cls;
1927 int retval;
1928
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001929 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001930 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001931
Guido van Rossum823649d2001-03-21 18:40:58 +00001932 retval = PyObject_IsSubclass(derived, cls);
1933 if (retval < 0)
1934 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001935 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001936}
1937
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001938PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001939"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001940\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00001941Return whether class C is a subclass (i.e., a derived class) of class B.\n\
1942When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
1943is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001944
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001945
Barry Warsawbd599b52000-08-03 15:45:29 +00001946static PyObject*
1947builtin_zip(PyObject *self, PyObject *args)
1948{
1949 PyObject *ret;
Tim Peters67d687a2002-04-29 21:27:32 +00001950 const int itemsize = PySequence_Length(args);
Tim Peters8572b4f2001-05-06 01:05:02 +00001951 int i;
1952 PyObject *itlist; /* tuple of iterators */
Tim Peters67d687a2002-04-29 21:27:32 +00001953 int len; /* guess at result length */
Barry Warsawbd599b52000-08-03 15:45:29 +00001954
Raymond Hettingereaef6152003-08-02 07:42:57 +00001955 if (itemsize == 0)
1956 return PyList_New(0);
1957
Barry Warsawbd599b52000-08-03 15:45:29 +00001958 /* args must be a tuple */
1959 assert(PyTuple_Check(args));
1960
Tim Peters39a86c22002-05-12 07:19:38 +00001961 /* Guess at result length: the shortest of the input lengths.
1962 If some argument refuses to say, we refuse to guess too, lest
1963 an argument like xrange(sys.maxint) lead us astray.*/
Tim Peters67d687a2002-04-29 21:27:32 +00001964 len = -1; /* unknown */
1965 for (i = 0; i < itemsize; ++i) {
1966 PyObject *item = PyTuple_GET_ITEM(args, i);
Raymond Hettinger77f3c872004-01-04 08:54:44 +00001967 int thislen = PyObject_Size(item);
Tim Peters39a86c22002-05-12 07:19:38 +00001968 if (thislen < 0) {
Tim Peters67d687a2002-04-29 21:27:32 +00001969 PyErr_Clear();
Tim Peters39a86c22002-05-12 07:19:38 +00001970 len = -1;
1971 break;
1972 }
Tim Peters67d687a2002-04-29 21:27:32 +00001973 else if (len < 0 || thislen < len)
1974 len = thislen;
1975 }
1976
Tim Peters8572b4f2001-05-06 01:05:02 +00001977 /* allocate result list */
Tim Peters67d687a2002-04-29 21:27:32 +00001978 if (len < 0)
1979 len = 10; /* arbitrary */
1980 if ((ret = PyList_New(len)) == NULL)
Barry Warsawbd599b52000-08-03 15:45:29 +00001981 return NULL;
1982
Tim Peters8572b4f2001-05-06 01:05:02 +00001983 /* obtain iterators */
1984 itlist = PyTuple_New(itemsize);
1985 if (itlist == NULL)
1986 goto Fail_ret;
1987 for (i = 0; i < itemsize; ++i) {
1988 PyObject *item = PyTuple_GET_ITEM(args, i);
1989 PyObject *it = PyObject_GetIter(item);
1990 if (it == NULL) {
1991 if (PyErr_ExceptionMatches(PyExc_TypeError))
1992 PyErr_Format(PyExc_TypeError,
1993 "zip argument #%d must support iteration",
1994 i+1);
1995 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00001996 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001997 PyTuple_SET_ITEM(itlist, i, it);
1998 }
Barry Warsawbd599b52000-08-03 15:45:29 +00001999
Tim Peters8572b4f2001-05-06 01:05:02 +00002000 /* build result into ret list */
Tim Peters67d687a2002-04-29 21:27:32 +00002001 for (i = 0; ; ++i) {
2002 int j;
Tim Peters8572b4f2001-05-06 01:05:02 +00002003 PyObject *next = PyTuple_New(itemsize);
2004 if (!next)
2005 goto Fail_ret_itlist;
2006
Tim Peters67d687a2002-04-29 21:27:32 +00002007 for (j = 0; j < itemsize; j++) {
2008 PyObject *it = PyTuple_GET_ITEM(itlist, j);
Tim Peters8572b4f2001-05-06 01:05:02 +00002009 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00002010 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00002011 if (PyErr_Occurred()) {
2012 Py_DECREF(ret);
2013 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002014 }
2015 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00002016 Py_DECREF(itlist);
Tim Peters67d687a2002-04-29 21:27:32 +00002017 goto Done;
Barry Warsawbd599b52000-08-03 15:45:29 +00002018 }
Tim Peters67d687a2002-04-29 21:27:32 +00002019 PyTuple_SET_ITEM(next, j, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00002020 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002021
Tim Peters67d687a2002-04-29 21:27:32 +00002022 if (i < len)
2023 PyList_SET_ITEM(ret, i, next);
2024 else {
2025 int status = PyList_Append(ret, next);
2026 Py_DECREF(next);
2027 ++len;
2028 if (status < 0)
2029 goto Fail_ret_itlist;
2030 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002031 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002032
Tim Peters67d687a2002-04-29 21:27:32 +00002033Done:
2034 if (ret != NULL && i < len) {
2035 /* The list is too big. */
2036 if (PyList_SetSlice(ret, i, len, NULL) < 0)
2037 return NULL;
2038 }
2039 return ret;
2040
Tim Peters8572b4f2001-05-06 01:05:02 +00002041Fail_ret_itlist:
2042 Py_DECREF(itlist);
2043Fail_ret:
2044 Py_DECREF(ret);
2045 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002046}
2047
2048
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002049PyDoc_STRVAR(zip_doc,
Barry Warsawbd599b52000-08-03 15:45:29 +00002050"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
2051\n\
2052Return a list of tuples, where each tuple contains the i-th element\n\
2053from each of the argument sequences. The returned list is truncated\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002054in length to the length of the shortest argument sequence.");
Barry Warsawbd599b52000-08-03 15:45:29 +00002055
2056
Guido van Rossum79f25d91997-04-29 20:08:16 +00002057static PyMethodDef builtin_methods[] = {
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002058 {"__import__", builtin___import__, METH_VARARGS, import_doc},
2059 {"abs", builtin_abs, METH_O, abs_doc},
2060 {"apply", builtin_apply, METH_VARARGS, apply_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002061 {"callable", builtin_callable, METH_O, callable_doc},
2062 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2063 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
2064 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
2065 {"compile", builtin_compile, METH_VARARGS, compile_doc},
2066 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2067 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2068 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2069 {"eval", builtin_eval, METH_VARARGS, eval_doc},
2070 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
2071 {"filter", builtin_filter, METH_VARARGS, filter_doc},
2072 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2073 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2074 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2075 {"hash", builtin_hash, METH_O, hash_doc},
2076 {"hex", builtin_hex, METH_O, hex_doc},
2077 {"id", builtin_id, METH_O, id_doc},
2078 {"input", builtin_input, METH_VARARGS, input_doc},
2079 {"intern", builtin_intern, METH_VARARGS, intern_doc},
2080 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2081 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2082 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2083 {"len", builtin_len, METH_O, len_doc},
2084 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2085 {"map", builtin_map, METH_VARARGS, map_doc},
2086 {"max", builtin_max, METH_VARARGS, max_doc},
2087 {"min", builtin_min, METH_VARARGS, min_doc},
2088 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002089 {"ord", builtin_ord, METH_O, ord_doc},
2090 {"pow", builtin_pow, METH_VARARGS, pow_doc},
2091 {"range", builtin_range, METH_VARARGS, range_doc},
2092 {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc},
2093 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
2094 {"reload", builtin_reload, METH_O, reload_doc},
2095 {"repr", builtin_repr, METH_O, repr_doc},
2096 {"round", builtin_round, METH_VARARGS, round_doc},
2097 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002098 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002099 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002100#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002101 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002102#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002103 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002104 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002105 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002106};
2107
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002108PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002109"Built-in functions, exceptions, and other objects.\n\
2110\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002111Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002112
Guido van Rossum25ce5661997-08-02 03:10:38 +00002113PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002114_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002115{
Fred Drake5550de32000-06-20 04:54:19 +00002116 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002117 mod = Py_InitModule4("__builtin__", builtin_methods,
2118 builtin_doc, (PyObject *)NULL,
2119 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002120 if (mod == NULL)
2121 return NULL;
2122 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002123
Tim Peters7571a0f2003-03-23 17:52:28 +00002124#ifdef Py_TRACE_REFS
2125 /* __builtin__ exposes a number of statically allocated objects
2126 * that, before this code was added in 2.3, never showed up in
2127 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2128 * result, programs leaking references to None and False (etc)
2129 * couldn't be diagnosed by examining sys.getobjects(0).
2130 */
2131#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2132#else
2133#define ADD_TO_ALL(OBJECT) (void)0
2134#endif
2135
Tim Peters4b7625e2001-09-13 21:37:17 +00002136#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002137 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2138 return NULL; \
2139 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002140
2141 SETBUILTIN("None", Py_None);
2142 SETBUILTIN("Ellipsis", Py_Ellipsis);
2143 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002144 SETBUILTIN("False", Py_False);
2145 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00002146 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002147 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002148 SETBUILTIN("buffer", &PyBuffer_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002149 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002150#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002151 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002152#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002153 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002154 SETBUILTIN("enumerate", &PyEnum_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002155 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002156 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002157 SETBUILTIN("property", &PyProperty_Type);
2158 SETBUILTIN("int", &PyInt_Type);
2159 SETBUILTIN("list", &PyList_Type);
2160 SETBUILTIN("long", &PyLong_Type);
2161 SETBUILTIN("object", &PyBaseObject_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002162 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002163 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002164 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002165 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2166 SETBUILTIN("str", &PyString_Type);
2167 SETBUILTIN("super", &PySuper_Type);
2168 SETBUILTIN("tuple", &PyTuple_Type);
2169 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00002170 SETBUILTIN("xrange", &PyRange_Type);
Tim Peters742dfd62001-09-13 21:49:44 +00002171
2172 /* Note that open() is just an alias of file(). */
2173 SETBUILTIN("open", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002174 SETBUILTIN("file", &PyFile_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002175#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00002176 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002177#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00002178 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002179 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2180 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002181 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002182 }
2183 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002184
Guido van Rossum25ce5661997-08-02 03:10:38 +00002185 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002186#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002187#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002188}
2189
Guido van Rossume77a7571993-11-03 15:01:26 +00002190/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002191
Guido van Rossum79f25d91997-04-29 20:08:16 +00002192static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002193filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002194{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002195 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002196 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002197 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002198
Guido van Rossumb7b45621995-08-04 04:07:45 +00002199 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002200 if (PyTuple_CheckExact(tuple))
2201 Py_INCREF(tuple);
2202 else
2203 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002204 return tuple;
2205 }
2206
Guido van Rossum79f25d91997-04-29 20:08:16 +00002207 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002208 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002209
Guido van Rossum12d12c51993-10-26 17:58:25 +00002210 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002211 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002212 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002213
Walter Dörwald8dd19322003-02-10 17:36:40 +00002214 if (tuple->ob_type->tp_as_sequence &&
2215 tuple->ob_type->tp_as_sequence->sq_item) {
2216 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002217 if (item == NULL)
2218 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002219 } else {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002220 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002221 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002222 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002223 if (func == Py_None) {
2224 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002225 good = item;
2226 }
2227 else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002228 PyObject *arg = PyTuple_Pack(1, item);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002229 if (arg == NULL) {
2230 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002231 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002232 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002233 good = PyEval_CallObject(func, arg);
2234 Py_DECREF(arg);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002235 if (good == NULL) {
2236 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002237 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002238 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002239 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002240 ok = PyObject_IsTrue(good);
2241 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002242 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002243 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002244 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002245 }
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002246 else
2247 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002248 }
2249
Tim Peters4324aa32001-05-28 22:30:08 +00002250 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002251 return NULL;
2252
Guido van Rossum12d12c51993-10-26 17:58:25 +00002253 return result;
2254
Guido van Rossum12d12c51993-10-26 17:58:25 +00002255Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002256 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002257 return NULL;
2258}
2259
2260
Guido van Rossume77a7571993-11-03 15:01:26 +00002261/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002262
Guido van Rossum79f25d91997-04-29 20:08:16 +00002263static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002264filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002265{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002266 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002267 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002268 int len = PyString_Size(strobj);
Walter Dörwald903f1e02003-02-04 16:28:00 +00002269 int outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002270
Guido van Rossum79f25d91997-04-29 20:08:16 +00002271 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002272 /* If it's a real string we can return the original,
2273 * as no character is ever false and __getitem__
2274 * does return this character. If it's a subclass
2275 * we must go through the __getitem__ loop */
2276 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002277 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002278 return strobj;
2279 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002280 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002281 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002282 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002283
Guido van Rossum12d12c51993-10-26 17:58:25 +00002284 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002285 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002286 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002287
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002288 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2289 if (item == NULL)
2290 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002291 if (func==Py_None) {
2292 ok = 1;
2293 } else {
2294 PyObject *arg, *good;
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002295 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002296 if (arg == NULL) {
2297 Py_DECREF(item);
2298 goto Fail_1;
2299 }
2300 good = PyEval_CallObject(func, arg);
2301 Py_DECREF(arg);
2302 if (good == NULL) {
2303 Py_DECREF(item);
2304 goto Fail_1;
2305 }
2306 ok = PyObject_IsTrue(good);
2307 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00002308 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002309 if (ok) {
2310 int reslen;
2311 if (!PyString_Check(item)) {
2312 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2313 " __getitem__ returned different type");
2314 Py_DECREF(item);
2315 goto Fail_1;
2316 }
2317 reslen = PyString_GET_SIZE(item);
2318 if (reslen == 1) {
2319 PyString_AS_STRING(result)[j++] =
2320 PyString_AS_STRING(item)[0];
2321 } else {
2322 /* do we need more space? */
2323 int need = j + reslen + len-i-1;
2324 if (need > outlen) {
2325 /* overallocate, to avoid reallocations */
2326 if (need<2*outlen)
2327 need = 2*outlen;
2328 if (_PyString_Resize(&result, need)) {
2329 Py_DECREF(item);
2330 return NULL;
2331 }
2332 outlen = need;
2333 }
2334 memcpy(
2335 PyString_AS_STRING(result) + j,
2336 PyString_AS_STRING(item),
2337 reslen
2338 );
2339 j += reslen;
2340 }
2341 }
Tim Peters388ed082001-04-07 20:34:48 +00002342 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002343 }
2344
Walter Dörwald903f1e02003-02-04 16:28:00 +00002345 if (j < outlen)
Tim Peters5de98422002-04-27 18:44:32 +00002346 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002347
Guido van Rossum12d12c51993-10-26 17:58:25 +00002348 return result;
2349
Guido van Rossum12d12c51993-10-26 17:58:25 +00002350Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002351 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002352 return NULL;
2353}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002354
2355#ifdef Py_USING_UNICODE
2356/* Helper for filter(): filter a Unicode object through a function */
2357
2358static PyObject *
2359filterunicode(PyObject *func, PyObject *strobj)
2360{
2361 PyObject *result;
2362 register int i, j;
2363 int len = PyUnicode_GetSize(strobj);
Walter Dörwald903f1e02003-02-04 16:28:00 +00002364 int outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002365
2366 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002367 /* If it's a real string we can return the original,
2368 * as no character is ever false and __getitem__
2369 * does return this character. If it's a subclass
2370 * we must go through the __getitem__ loop */
2371 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002372 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002373 return strobj;
2374 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002375 }
2376 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2377 return NULL;
2378
2379 for (i = j = 0; i < len; ++i) {
2380 PyObject *item, *arg, *good;
2381 int ok;
2382
2383 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2384 if (item == NULL)
2385 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002386 if (func == Py_None) {
2387 ok = 1;
2388 } else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002389 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002390 if (arg == NULL) {
2391 Py_DECREF(item);
2392 goto Fail_1;
2393 }
2394 good = PyEval_CallObject(func, arg);
2395 Py_DECREF(arg);
2396 if (good == NULL) {
2397 Py_DECREF(item);
2398 goto Fail_1;
2399 }
2400 ok = PyObject_IsTrue(good);
2401 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002402 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002403 if (ok) {
2404 int reslen;
2405 if (!PyUnicode_Check(item)) {
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002406 PyErr_SetString(PyExc_TypeError,
2407 "can't filter unicode to unicode:"
2408 " __getitem__ returned different type");
Walter Dörwald903f1e02003-02-04 16:28:00 +00002409 Py_DECREF(item);
2410 goto Fail_1;
2411 }
2412 reslen = PyUnicode_GET_SIZE(item);
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002413 if (reslen == 1)
Walter Dörwald903f1e02003-02-04 16:28:00 +00002414 PyUnicode_AS_UNICODE(result)[j++] =
2415 PyUnicode_AS_UNICODE(item)[0];
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002416 else {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002417 /* do we need more space? */
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002418 int need = j + reslen + len - i - 1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002419 if (need > outlen) {
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002420 /* overallocate,
2421 to avoid reallocations */
2422 if (need < 2 * outlen)
2423 need = 2 * outlen;
Jeremy Hylton364f6be2003-09-16 03:17:16 +00002424 if (PyUnicode_Resize(
2425 &result, need) < 0) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002426 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002427 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002428 }
2429 outlen = need;
2430 }
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002431 memcpy(PyUnicode_AS_UNICODE(result) + j,
2432 PyUnicode_AS_UNICODE(item),
2433 reslen*sizeof(Py_UNICODE));
Walter Dörwald903f1e02003-02-04 16:28:00 +00002434 j += reslen;
2435 }
2436 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002437 Py_DECREF(item);
2438 }
2439
Walter Dörwald903f1e02003-02-04 16:28:00 +00002440 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002441 PyUnicode_Resize(&result, j);
2442
2443 return result;
2444
2445Fail_1:
2446 Py_DECREF(result);
2447 return NULL;
2448}
2449#endif