blob: b3c8b09a31cf5c39e65fcc25b5168e4a3360ae8b [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. */
Raymond Hettingerb86269d2004-01-04 11:00:08 +0000156 len = PyObject_Size(seq);
157 if (len < 0) {
158 PyErr_Clear();
159 len = 8; /* arbitrary */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000160 }
161
Guido van Rossumc7903a12002-08-16 07:04:56 +0000162 /* Pre-allocate argument list tuple. */
163 arg = PyTuple_New(1);
164 if (arg == NULL)
165 goto Fail_arg;
166
Tim Peters0e57abf2001-05-02 07:39:38 +0000167 /* Get a result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000168 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000169 /* Eww - can modify the list in-place. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000170 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000171 result = seq;
172 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000173 else {
Tim Peters0e57abf2001-05-02 07:39:38 +0000174 result = PyList_New(len);
175 if (result == NULL)
176 goto Fail_it;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000177 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000178
Tim Peters0e57abf2001-05-02 07:39:38 +0000179 /* Build the result list. */
Tim Petersf4848da2001-05-05 00:14:56 +0000180 j = 0;
181 for (;;) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000182 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000183 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000184
Tim Peters0e57abf2001-05-02 07:39:38 +0000185 item = PyIter_Next(it);
186 if (item == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +0000187 if (PyErr_Occurred())
188 goto Fail_result_it;
Tim Peters0e57abf2001-05-02 07:39:38 +0000189 break;
Guido van Rossum2d951851994-08-29 12:52:16 +0000190 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000191
Neil Schemenauer68973552003-08-14 20:37:34 +0000192 if (func == (PyObject *)&PyBool_Type || func == Py_None) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000193 ok = PyObject_IsTrue(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000194 }
195 else {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000196 PyObject *good;
197 PyTuple_SET_ITEM(arg, 0, item);
198 good = PyObject_Call(func, arg, NULL);
199 PyTuple_SET_ITEM(arg, 0, NULL);
Guido van Rossum58b68731995-01-10 17:40:55 +0000200 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000201 Py_DECREF(item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000202 goto Fail_result_it;
Guido van Rossum58b68731995-01-10 17:40:55 +0000203 }
Guido van Rossumc7903a12002-08-16 07:04:56 +0000204 ok = PyObject_IsTrue(good);
205 Py_DECREF(good);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000206 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000207 if (ok) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000208 if (j < len)
209 PyList_SET_ITEM(result, j, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000210 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000211 int status = PyList_Append(result, item);
Barry Warsawfa77e091999-01-28 18:49:12 +0000212 Py_DECREF(item);
213 if (status < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000214 goto Fail_result_it;
Guido van Rossum2d951851994-08-29 12:52:16 +0000215 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000216 ++j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000217 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000218 else
219 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000220 }
221
Guido van Rossum12d12c51993-10-26 17:58:25 +0000222
Tim Peters0e57abf2001-05-02 07:39:38 +0000223 /* Cut back result list if len is too big. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000224 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000225 goto Fail_result_it;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000226
Tim Peters3c6b1482001-05-21 08:07:05 +0000227 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000228 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000229 return result;
230
Tim Peters0e57abf2001-05-02 07:39:38 +0000231Fail_result_it:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000232 Py_DECREF(result);
Tim Peters0e57abf2001-05-02 07:39:38 +0000233Fail_it:
234 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000235Fail_arg:
236 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000237 return NULL;
238}
239
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000240PyDoc_STRVAR(filter_doc,
Tim Petersd50e5442002-03-09 00:06:26 +0000241"filter(function or None, sequence) -> list, tuple, or string\n"
242"\n"
243"Return those items of sequence for which function(item) is true. If\n"
244"function is None, return the items that are true. If sequence is a tuple\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000245"or string, return the same type, else return a list.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000246
Guido van Rossum79f25d91997-04-29 20:08:16 +0000247static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000248builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000249{
250 long x;
251 char s[1];
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000252
Guido van Rossum79f25d91997-04-29 20:08:16 +0000253 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000254 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000255 if (x < 0 || x >= 256) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000256 PyErr_SetString(PyExc_ValueError,
257 "chr() arg not in range(256)");
Guido van Rossum3f5da241990-12-20 15:06:42 +0000258 return NULL;
259 }
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000260 s[0] = (char)x;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000261 return PyString_FromStringAndSize(s, 1);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000262}
263
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000264PyDoc_STRVAR(chr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000265"chr(i) -> character\n\
266\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000267Return a string of one character with ordinal i; 0 <= i < 256.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000268
269
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000270#ifdef Py_USING_UNICODE
Guido van Rossum79f25d91997-04-29 20:08:16 +0000271static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000272builtin_unichr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000273{
274 long x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000275
276 if (!PyArg_ParseTuple(args, "l:unichr", &x))
277 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000278
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000279 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000280}
281
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000282PyDoc_STRVAR(unichr_doc,
Fred Drake078b24f2000-04-13 02:42:50 +0000283"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000284\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000285Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.");
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000286#endif
Guido van Rossum09095f32000-03-10 23:00:52 +0000287
288
289static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000290builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000291{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000292 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000293 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000294
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000295 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000296 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000297 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000298 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000299 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000300}
301
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000302PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000303"cmp(x, y) -> integer\n\
304\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000305Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000306
307
Guido van Rossum79f25d91997-04-29 20:08:16 +0000308static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000309builtin_coerce(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000310{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000311 PyObject *v, *w;
312 PyObject *res;
Guido van Rossum5524a591995-01-10 15:26:20 +0000313
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000314 if (!PyArg_UnpackTuple(args, "coerce", 2, 2, &v, &w))
Guido van Rossum5524a591995-01-10 15:26:20 +0000315 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000316 if (PyNumber_Coerce(&v, &w) < 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +0000317 return NULL;
Raymond Hettinger8ae46892003-10-12 19:09:37 +0000318 res = PyTuple_Pack(2, v, w);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000319 Py_DECREF(v);
320 Py_DECREF(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +0000321 return res;
322}
323
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000324PyDoc_STRVAR(coerce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000325"coerce(x, y) -> None or (x1, y1)\n\
326\n\
327When 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 +0000328containing the coerced values. When they can't be coerced, return None.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000329
330
Guido van Rossum79f25d91997-04-29 20:08:16 +0000331static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000332builtin_compile(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000333{
334 char *str;
335 char *filename;
336 char *startstr;
337 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000338 int dont_inherit = 0;
339 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000340 PyCompilerFlags cf;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000341 PyObject *result, *cmd, *tmp = NULL;
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000342 int length;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000343
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000344 if (!PyArg_ParseTuple(args, "Oss|ii:compile", &cmd, &filename,
Tim Peters6cd6a822001-08-17 22:11:27 +0000345 &startstr, &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000346 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000347
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000348 cf.cf_flags = supplied_flags;
349
350#ifdef Py_USING_UNICODE
351 if (PyUnicode_Check(cmd)) {
352 tmp = PyUnicode_AsUTF8String(cmd);
353 if (tmp == NULL)
354 return NULL;
355 cmd = tmp;
356 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
357 }
358#endif
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000359 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &length))
360 return NULL;
Tim Peters2c646c92003-02-10 14:48:29 +0000361 if ((size_t)length != strlen(str)) {
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000362 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000363 "compile() expected string without null bytes");
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000364 return NULL;
365 }
366
Guido van Rossum5b722181993-03-30 17:46:03 +0000367 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000368 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000369 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000370 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000371 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000372 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000373 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000374 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000375 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossum5b722181993-03-30 17:46:03 +0000376 return NULL;
377 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000378
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000379 if (supplied_flags &
380 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT))
381 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000382 PyErr_SetString(PyExc_ValueError,
383 "compile(): unrecognised flags");
384 return NULL;
385 }
386 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
387
Tim Peters6cd6a822001-08-17 22:11:27 +0000388 if (!dont_inherit) {
389 PyEval_MergeCompilerFlags(&cf);
390 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000391 result = Py_CompileStringFlags(str, filename, start, &cf);
392 Py_XDECREF(tmp);
393 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000394}
395
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000396PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000397"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000398\n\
399Compile the source string (a Python module, statement or expression)\n\
400into a code object that can be executed by the exec statement or eval().\n\
401The filename will be used for run-time error messages.\n\
402The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000403single (interactive) statement, or 'eval' to compile an expression.\n\
404The flags argument, if present, controls which future statements influence\n\
405the compilation of the code.\n\
406The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
407the effects of any future statements in effect in the code calling\n\
408compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000409in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000410
Guido van Rossum79f25d91997-04-29 20:08:16 +0000411static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000412builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000413{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000414 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000415
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000416 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000417 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000418 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000419}
420
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000421PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000422"dir([object]) -> list of strings\n"
423"\n"
424"Return an alphabetized list of names comprising (some of) the attributes\n"
425"of the given object, and of attributes reachable from it:\n"
426"\n"
427"No argument: the names in the current scope.\n"
428"Module object: the module attributes.\n"
Tim Peters37a309d2001-09-04 01:20:04 +0000429"Type or class object: its attributes, and recursively the attributes of\n"
430" its bases.\n"
Tim Peters5d2b77c2001-09-03 05:47:38 +0000431"Otherwise: its attributes, its class's attributes, and recursively the\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000432" attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000433
Guido van Rossum79f25d91997-04-29 20:08:16 +0000434static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000435builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000436{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000437 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000438
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000439 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000440 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000441 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000442}
443
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000444PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000445"divmod(x, y) -> (div, mod)\n\
446\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000447Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000448
449
Guido van Rossum79f25d91997-04-29 20:08:16 +0000450static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000451builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000452{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000453 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000454 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000455 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000456 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000457
Guido van Rossum79f25d91997-04-29 20:08:16 +0000458 if (!PyArg_ParseTuple(args, "O|O!O!:eval",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000459 &cmd,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000460 &PyDict_Type, &globals,
461 &PyDict_Type, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000462 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000463 if (globals == Py_None) {
464 globals = PyEval_GetGlobals();
465 if (locals == Py_None)
466 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000467 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000468 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000469 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000470
Guido van Rossum79f25d91997-04-29 20:08:16 +0000471 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
472 if (PyDict_SetItemString(globals, "__builtins__",
473 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000474 return NULL;
475 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000476
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000477 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000478 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000479 PyErr_SetString(PyExc_TypeError,
480 "code object passed to eval() may not contain free variables");
481 return NULL;
482 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000483 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000484 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000485
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000486 if (!PyString_Check(cmd) &&
487 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000488 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000489 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000490 return NULL;
491 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000492 cf.cf_flags = 0;
493
494#ifdef Py_USING_UNICODE
495 if (PyUnicode_Check(cmd)) {
496 tmp = PyUnicode_AsUTF8String(cmd);
497 if (tmp == NULL)
498 return NULL;
499 cmd = tmp;
500 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
501 }
502#endif
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000503 if (PyString_AsStringAndSize(cmd, &str, NULL))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000504 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000505 while (*str == ' ' || *str == '\t')
506 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000507
Tim Peters9fa96be2001-08-17 23:04:59 +0000508 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000509 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
510 Py_XDECREF(tmp);
511 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000512}
513
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000514PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000515"eval(source[, globals[, locals]]) -> value\n\
516\n\
517Evaluate the source in the context of globals and locals.\n\
518The source may be a string representing a Python expression\n\
519or a code object as returned by compile().\n\
520The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000521globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000522
523
Guido van Rossum79f25d91997-04-29 20:08:16 +0000524static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000525builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000526{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000527 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000528 PyObject *globals = Py_None, *locals = Py_None;
529 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000530 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000531 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000532 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000533
Guido van Rossum79f25d91997-04-29 20:08:16 +0000534 if (!PyArg_ParseTuple(args, "s|O!O!:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000535 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000536 &PyDict_Type, &globals,
537 &PyDict_Type, &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000538 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000539 if (globals == Py_None) {
540 globals = PyEval_GetGlobals();
541 if (locals == Py_None)
542 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000543 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000544 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000545 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000546 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
547 if (PyDict_SetItemString(globals, "__builtins__",
548 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000549 return NULL;
550 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000551
552 exists = 0;
553 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000554#if defined(PLAN9)
555 {
556 Dir *d;
557
558 if ((d = dirstat(filename))!=nil) {
559 if(d->mode & DMDIR)
560 werrstr("is a directory");
561 else
562 exists = 1;
563 free(d);
564 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000565 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000566#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000567 if (object_exists(filename)) {
568 if (isdir(filename))
569 errno = EISDIR;
570 else
571 exists = 1;
572 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000573#else /* standard Posix */
574 {
575 struct stat s;
576 if (stat(filename, &s) == 0) {
577 if (S_ISDIR(s.st_mode))
Andrew MacIntyreda4d6cb2004-03-29 11:53:38 +0000578# if defined(PYOS_OS2) && defined(PYCC_VACPP)
Martin v. Löwis3484a182002-03-09 12:07:51 +0000579 errno = EOS2ERR;
580# else
581 errno = EISDIR;
582# endif
583 else
584 exists = 1;
585 }
586 }
587#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000588
589 if (exists) {
590 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000591 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000592 Py_END_ALLOW_THREADS
593
594 if (fp == NULL) {
595 exists = 0;
596 }
597 }
598
599 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000600 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000601 return NULL;
602 }
Tim Peters5ba58662001-07-16 02:29:45 +0000603 cf.cf_flags = 0;
604 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000605 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000606 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000607 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000608 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000609 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000610 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000611}
612
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000613PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000614"execfile(filename[, globals[, locals]])\n\
615\n\
616Read and execute a Python script from a file.\n\
617The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000618globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000619
620
Guido van Rossum79f25d91997-04-29 20:08:16 +0000621static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000622builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000623{
Guido van Rossum950ff291998-06-29 13:38:57 +0000624 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000625 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000626
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000627 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000628 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000629#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000630 if (PyUnicode_Check(name)) {
631 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
632 if (name == NULL)
633 return NULL;
634 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000635#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000636
637 if (!PyString_Check(name)) {
638 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000639 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000640 return NULL;
641 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000642 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000643 if (result == NULL && dflt != NULL &&
644 PyErr_ExceptionMatches(PyExc_AttributeError))
645 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000646 PyErr_Clear();
647 Py_INCREF(dflt);
648 result = dflt;
649 }
650 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000651}
652
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000653PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000654"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000655\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000656Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
657When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000658exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000659
660
Guido van Rossum79f25d91997-04-29 20:08:16 +0000661static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000662builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000663{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000664 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000665
Guido van Rossum79f25d91997-04-29 20:08:16 +0000666 d = PyEval_GetGlobals();
667 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000668 return d;
669}
670
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000671PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000672"globals() -> dictionary\n\
673\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000674Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000675
676
Guido van Rossum79f25d91997-04-29 20:08:16 +0000677static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000678builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000679{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000680 PyObject *v;
681 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000682
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000683 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000684 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000685#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000686 if (PyUnicode_Check(name)) {
687 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
688 if (name == NULL)
689 return NULL;
690 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000691#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000692
693 if (!PyString_Check(name)) {
694 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000695 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000696 return NULL;
697 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000698 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000699 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000700 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000701 Py_INCREF(Py_False);
702 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000703 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000704 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000705 Py_INCREF(Py_True);
706 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000707}
708
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000709PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000710"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000711\n\
712Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000713(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000714
715
Guido van Rossum79f25d91997-04-29 20:08:16 +0000716static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000717builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000718{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000719 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000720}
721
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000722PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000723"id(object) -> integer\n\
724\n\
725Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000726simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000727
728
Guido van Rossum79f25d91997-04-29 20:08:16 +0000729static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000730builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000731{
732 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000733 PyObject *it; /* the iterator object */
734 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000735 } sequence;
736
Guido van Rossum79f25d91997-04-29 20:08:16 +0000737 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000738 sequence *seqs = NULL, *sqp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000739 int n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000740 register int i, j;
741
Guido van Rossum79f25d91997-04-29 20:08:16 +0000742 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000743 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000744 PyErr_SetString(PyExc_TypeError,
745 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000746 return NULL;
747 }
748
Guido van Rossum79f25d91997-04-29 20:08:16 +0000749 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000750 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000751
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000752 if (func == Py_None && n == 1) {
753 /* map(None, S) is the same as list(S). */
754 return PySequence_List(PyTuple_GetItem(args, 1));
755 }
756
Tim Peters4e9afdc2001-05-03 23:54:49 +0000757 /* Get space for sequence descriptors. Must NULL out the iterator
758 * pointers so that jumping to Fail_2 later doesn't see trash.
759 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000760 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
761 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000762 return NULL;
763 }
764 for (i = 0; i < n; ++i) {
765 seqs[i].it = (PyObject*)NULL;
766 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000767 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000768
Tim Peters4e9afdc2001-05-03 23:54:49 +0000769 /* Do a first pass to obtain iterators for the arguments, and set len
770 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000771 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000772 len = 0;
773 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
774 PyObject *curseq;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000775 int curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000776
Tim Peters4e9afdc2001-05-03 23:54:49 +0000777 /* Get iterator. */
778 curseq = PyTuple_GetItem(args, i+1);
779 sqp->it = PyObject_GetIter(curseq);
780 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000781 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000782 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000783 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +0000784 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000785 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000786 goto Fail_2;
787 }
788
Tim Peters4e9afdc2001-05-03 23:54:49 +0000789 /* Update len. */
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000790 curlen = PyObject_Size(curseq);
791 if (curlen < 0) {
792 PyErr_Clear();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000793 curlen = 8; /* arbitrary */
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000794 }
795 if (curlen > len)
796 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000797 }
798
Tim Peters4e9afdc2001-05-03 23:54:49 +0000799 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000800 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000801 goto Fail_2;
802
Tim Peters4e9afdc2001-05-03 23:54:49 +0000803 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +0000804 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000805 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000806 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000807
Guido van Rossum79f25d91997-04-29 20:08:16 +0000808 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +0000809 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000810 else if ((alist = PyTuple_New(n)) == NULL)
811 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000812
813 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000814 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000815 Py_INCREF(Py_None);
816 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000817 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000818 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000819 item = PyIter_Next(sqp->it);
820 if (item)
821 ++numactive;
822 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000823 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +0000824 Py_XDECREF(alist);
825 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000826 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000827 Py_INCREF(Py_None);
828 item = Py_None;
829 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000830 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000831 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000832 if (alist)
833 PyTuple_SET_ITEM(alist, j, item);
834 else
Guido van Rossum2d951851994-08-29 12:52:16 +0000835 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000836 }
837
Guido van Rossum32120311995-07-10 13:52:21 +0000838 if (!alist)
839 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +0000840
Tim Peters4e9afdc2001-05-03 23:54:49 +0000841 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000842 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +0000843 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000844 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000845
Guido van Rossum79f25d91997-04-29 20:08:16 +0000846 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +0000847 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000848 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000849 value = PyEval_CallObject(func, alist);
850 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000851 if (value == NULL)
852 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000853 }
854 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +0000855 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +0000856 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +0000857 if (status < 0)
858 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000859 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000860 else if (PyList_SetItem(result, i, value) < 0)
861 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000862 }
863
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000864 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
865 goto Fail_1;
866
Tim Peters4e9afdc2001-05-03 23:54:49 +0000867 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000868
Guido van Rossum12d12c51993-10-26 17:58:25 +0000869Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000870 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000871Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +0000872 result = NULL;
873Succeed:
874 assert(seqs);
875 for (i = 0; i < n; ++i)
876 Py_XDECREF(seqs[i].it);
877 PyMem_DEL(seqs);
878 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000879}
880
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000881PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000882"map(function, sequence[, sequence, ...]) -> list\n\
883\n\
884Return a list of the results of applying the function to the items of\n\
885the argument sequence(s). If more than one sequence is given, the\n\
886function is called with an argument list consisting of the corresponding\n\
887item of each sequence, substituting None for missing values when not all\n\
888sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000889the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000890
891
Guido van Rossum79f25d91997-04-29 20:08:16 +0000892static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000893builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000894{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000895 PyObject *v;
896 PyObject *name;
897 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000898
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000899 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000900 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000901 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000902 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000903 Py_INCREF(Py_None);
904 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000905}
906
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000907PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000908"setattr(object, name, value)\n\
909\n\
910Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000911``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000912
913
Guido van Rossum79f25d91997-04-29 20:08:16 +0000914static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000915builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000916{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000917 PyObject *v;
918 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000919
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000920 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +0000921 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000922 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000923 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000924 Py_INCREF(Py_None);
925 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +0000926}
927
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000928PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +0000929"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000930\n\
931Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000932``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000933
934
Guido van Rossum79f25d91997-04-29 20:08:16 +0000935static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000936builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000937{
Guido van Rossum9bfef441993-03-29 10:43:31 +0000938 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000939
Guido van Rossum79f25d91997-04-29 20:08:16 +0000940 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000941 if (x == -1)
942 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000943 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000944}
945
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000946PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000947"hash(object) -> integer\n\
948\n\
949Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000950the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000951
952
Guido van Rossum79f25d91997-04-29 20:08:16 +0000953static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000954builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +0000955{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000956 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000957
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000958 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000959 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000960 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000961 "hex() argument can't be converted to hex");
962 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +0000963 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000964 return (*nb->nb_hex)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +0000965}
966
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000967PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000968"hex(number) -> string\n\
969\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000970Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000971
972
Tim Petersdbd9ba62000-07-09 03:09:57 +0000973static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000974
Guido van Rossum79f25d91997-04-29 20:08:16 +0000975static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000976builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000977{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000978 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000979 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000980 PyObject *res;
981 PyObject *globals, *locals;
Hye-Shik Changff83c2b2004-02-02 13:39:01 +0000982 PyCompilerFlags cf;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000983
984 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000985 if (line == NULL)
986 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000987 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000988 return NULL;
989 while (*str == ' ' || *str == '\t')
990 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000991 globals = PyEval_GetGlobals();
992 locals = PyEval_GetLocals();
993 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
994 if (PyDict_SetItemString(globals, "__builtins__",
995 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000996 return NULL;
997 }
Hye-Shik Changff83c2b2004-02-02 13:39:01 +0000998 cf.cf_flags = 0;
999 PyEval_MergeCompilerFlags(&cf);
1000 res = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001001 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001002 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001003}
1004
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001005PyDoc_STRVAR(input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001006"input([prompt]) -> value\n\
1007\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001008Equivalent to eval(raw_input(prompt)).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001009
1010
Guido van Rossume8811f81997-02-14 15:48:05 +00001011static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001012builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001013{
1014 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001015 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001016 return NULL;
1017 Py_INCREF(s);
1018 PyString_InternInPlace(&s);
1019 return s;
1020}
1021
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001022PyDoc_STRVAR(intern_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001023"intern(string) -> string\n\
1024\n\
1025``Intern'' the given string. This enters the string in the (global)\n\
1026table of interned strings whose purpose is to speed up dictionary lookups.\n\
1027Return the string itself or the previously interned string object with the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001028same value.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001029
1030
Guido van Rossum79f25d91997-04-29 20:08:16 +00001031static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001032builtin_iter(PyObject *self, PyObject *args)
1033{
1034 PyObject *v, *w = NULL;
1035
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001036 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001037 return NULL;
1038 if (w == NULL)
1039 return PyObject_GetIter(v);
1040 if (!PyCallable_Check(v)) {
1041 PyErr_SetString(PyExc_TypeError,
1042 "iter(v, w): v must be callable");
1043 return NULL;
1044 }
1045 return PyCallIter_New(v, w);
1046}
1047
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001048PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001049"iter(collection) -> iterator\n\
1050iter(callable, sentinel) -> iterator\n\
1051\n\
1052Get an iterator from an object. In the first form, the argument must\n\
1053supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001054In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001055
1056
1057static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001058builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001059{
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001060 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001061
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001062 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001063 if (res < 0 && PyErr_Occurred())
1064 return NULL;
1065 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001066}
1067
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001068PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001069"len(object) -> integer\n\
1070\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001071Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001072
1073
Guido van Rossum79f25d91997-04-29 20:08:16 +00001074static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001075builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001076{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001077 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001078
Guido van Rossum79f25d91997-04-29 20:08:16 +00001079 d = PyEval_GetLocals();
1080 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001081 return d;
1082}
1083
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001084PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001085"locals() -> dictionary\n\
1086\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001087Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001088
1089
Guido van Rossum79f25d91997-04-29 20:08:16 +00001090static PyObject *
Guido van Rossum53451b32001-01-17 15:47:24 +00001091min_max(PyObject *args, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001092{
Tim Petersc3074532001-05-03 07:00:32 +00001093 PyObject *v, *w, *x, *it;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001094
Guido van Rossum79f25d91997-04-29 20:08:16 +00001095 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001096 v = args;
Raymond Hettingerbbfb9102002-12-29 18:31:19 +00001097 else if (!PyArg_UnpackTuple(args, (op==Py_LT) ? "min" : "max", 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001098 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001099
Tim Petersc3074532001-05-03 07:00:32 +00001100 it = PyObject_GetIter(v);
1101 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001102 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001103
1104 w = NULL; /* the result */
Tim Petersf4848da2001-05-05 00:14:56 +00001105 for (;;) {
Tim Petersc3074532001-05-03 07:00:32 +00001106 x = PyIter_Next(it);
Guido van Rossum2d951851994-08-29 12:52:16 +00001107 if (x == NULL) {
Tim Petersc3074532001-05-03 07:00:32 +00001108 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001109 Py_XDECREF(w);
1110 Py_DECREF(it);
1111 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001112 }
Tim Petersc3074532001-05-03 07:00:32 +00001113 break;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001114 }
Tim Petersc3074532001-05-03 07:00:32 +00001115
Guido van Rossum2d951851994-08-29 12:52:16 +00001116 if (w == NULL)
1117 w = x;
1118 else {
Guido van Rossum53451b32001-01-17 15:47:24 +00001119 int cmp = PyObject_RichCompareBool(x, w, op);
1120 if (cmp > 0) {
1121 Py_DECREF(w);
1122 w = x;
1123 }
1124 else if (cmp < 0) {
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001125 Py_DECREF(x);
Tim Petersc3074532001-05-03 07:00:32 +00001126 Py_DECREF(w);
1127 Py_DECREF(it);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001128 return NULL;
1129 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001130 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001131 Py_DECREF(x);
Guido van Rossum2d951851994-08-29 12:52:16 +00001132 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001133 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001134 if (w == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001135 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +00001136 "min() or max() arg is an empty sequence");
Tim Petersc3074532001-05-03 07:00:32 +00001137 Py_DECREF(it);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001138 return w;
1139}
1140
Guido van Rossum79f25d91997-04-29 20:08:16 +00001141static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001142builtin_min(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001143{
Guido van Rossum53451b32001-01-17 15:47:24 +00001144 return min_max(v, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001145}
1146
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001147PyDoc_STRVAR(min_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001148"min(sequence) -> value\n\
1149min(a, b, c, ...) -> value\n\
1150\n\
1151With a single sequence argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001152With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001153
1154
Guido van Rossum79f25d91997-04-29 20:08:16 +00001155static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001156builtin_max(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001157{
Guido van Rossum53451b32001-01-17 15:47:24 +00001158 return min_max(v, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001159}
1160
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001161PyDoc_STRVAR(max_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001162"max(sequence) -> value\n\
1163max(a, b, c, ...) -> value\n\
1164\n\
1165With a single sequence argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001166With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001167
1168
Guido van Rossum79f25d91997-04-29 20:08:16 +00001169static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001170builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001171{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001172 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001173
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001174 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1175 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001176 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001177 "oct() argument can't be converted to oct");
1178 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001179 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001180 return (*nb->nb_oct)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001181}
1182
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001183PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001184"oct(number) -> string\n\
1185\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001186Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001187
1188
Guido van Rossum79f25d91997-04-29 20:08:16 +00001189static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001190builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001191{
Guido van Rossum09095f32000-03-10 23:00:52 +00001192 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001193 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001194
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001195 if (PyString_Check(obj)) {
1196 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001197 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001198 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001199 return PyInt_FromLong(ord);
1200 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001201#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001202 } else if (PyUnicode_Check(obj)) {
1203 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001204 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001205 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001206 return PyInt_FromLong(ord);
1207 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001208#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001209 } else {
1210 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001211 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001212 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001213 return NULL;
1214 }
1215
Guido van Rossumad991772001-01-12 16:03:05 +00001216 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001217 "ord() expected a character, "
1218 "but string of length %d found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001219 size);
1220 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001221}
1222
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001223PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001224"ord(c) -> integer\n\
1225\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001226Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001227
1228
Guido van Rossum79f25d91997-04-29 20:08:16 +00001229static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001230builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001231{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001232 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001233
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001234 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001235 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001236 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001237}
1238
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001239PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001240"pow(x, y[, z]) -> number\n\
1241\n\
1242With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001243equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001244
1245
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001246
1247/* Return number of items in range (lo, hi, step), when arguments are
1248 * PyInt or PyLong objects. step > 0 required. Return a value < 0 if
1249 * & only if the true value is too large to fit in a signed long.
1250 * Arguments MUST return 1 with either PyInt_Check() or
1251 * PyLong_Check(). Return -1 when there is an error.
1252 */
1253static long
1254get_len_of_range_longs(PyObject *lo, PyObject *hi, PyObject *step)
1255{
1256 /* -------------------------------------------------------------
1257 Algorithm is equal to that of get_len_of_range(), but it operates
1258 on PyObjects (which are assumed to be PyLong or PyInt objects).
1259 ---------------------------------------------------------------*/
1260 long n;
1261 PyObject *diff = NULL;
1262 PyObject *one = NULL;
1263 PyObject *tmp1 = NULL, *tmp2 = NULL, *tmp3 = NULL;
1264 /* holds sub-expression evaluations */
1265
1266 /* if (lo >= hi), return length of 0. */
1267 if (PyObject_Compare(lo, hi) >= 0)
1268 return 0;
1269
1270 if ((one = PyLong_FromLong(1L)) == NULL)
1271 goto Fail;
1272
1273 if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL)
1274 goto Fail;
1275
1276 if ((diff = PyNumber_Subtract(tmp1, one)) == NULL)
1277 goto Fail;
1278
1279 if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL)
1280 goto Fail;
1281
1282 if ((tmp3 = PyNumber_Add(tmp2, one)) == NULL)
1283 goto Fail;
1284
1285 n = PyLong_AsLong(tmp3);
1286 if (PyErr_Occurred()) { /* Check for Overflow */
1287 PyErr_Clear();
1288 goto Fail;
1289 }
1290
1291 Py_DECREF(tmp3);
1292 Py_DECREF(tmp2);
1293 Py_DECREF(diff);
1294 Py_DECREF(tmp1);
1295 Py_DECREF(one);
1296 return n;
1297
1298 Fail:
1299 Py_XDECREF(tmp3);
1300 Py_XDECREF(tmp2);
1301 Py_XDECREF(diff);
1302 Py_XDECREF(tmp1);
1303 Py_XDECREF(one);
1304 return -1;
1305}
1306
1307/* An extension of builtin_range() that handles the case when PyLong
1308 * arguments are given. */
1309static PyObject *
1310handle_range_longs(PyObject *self, PyObject *args)
1311{
1312 PyObject *ilow;
Tim Peters874e1f72003-04-13 22:13:08 +00001313 PyObject *ihigh = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001314 PyObject *istep = NULL;
Tim Peters874e1f72003-04-13 22:13:08 +00001315
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001316 PyObject *curnum = NULL;
1317 PyObject *v = NULL;
1318 long bign;
1319 int i, n;
1320 int cmp_result;
1321
Tim Peters874e1f72003-04-13 22:13:08 +00001322 PyObject *zero = PyLong_FromLong(0);
1323
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001324 if (zero == NULL)
1325 return NULL;
1326
Tim Peters874e1f72003-04-13 22:13:08 +00001327 if (!PyArg_UnpackTuple(args, "range", 1, 3, &ilow, &ihigh, &istep)) {
1328 Py_DECREF(zero);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001329 return NULL;
1330 }
1331
Tim Peters874e1f72003-04-13 22:13:08 +00001332 /* Figure out which way we were called, supply defaults, and be
1333 * sure to incref everything so that the decrefs at the end
1334 * are correct.
1335 */
1336 assert(ilow != NULL);
1337 if (ihigh == NULL) {
1338 /* only 1 arg -- it's the upper limit */
1339 ihigh = ilow;
1340 ilow = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001341 }
Tim Peters874e1f72003-04-13 22:13:08 +00001342 assert(ihigh != NULL);
1343 Py_INCREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001344
Tim Peters874e1f72003-04-13 22:13:08 +00001345 /* ihigh correct now; do ilow */
1346 if (ilow == NULL)
1347 ilow = zero;
1348 Py_INCREF(ilow);
1349
1350 /* ilow and ihigh correct now; do istep */
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001351 if (istep == NULL) {
1352 istep = PyLong_FromLong(1L);
1353 if (istep == NULL)
1354 goto Fail;
1355 }
1356 else {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001357 Py_INCREF(istep);
1358 }
1359
Tim Peters874e1f72003-04-13 22:13:08 +00001360 if (!PyInt_Check(ilow) && !PyLong_Check(ilow)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001361 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001362 "range() integer start argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001363 ilow->ob_type->tp_name);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001364 goto Fail;
1365 }
1366
Tim Peters874e1f72003-04-13 22:13:08 +00001367 if (!PyInt_Check(ihigh) && !PyLong_Check(ihigh)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001368 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001369 "range() integer end argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001370 ihigh->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001371 goto Fail;
1372 }
1373
1374 if (!PyInt_Check(istep) && !PyLong_Check(istep)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001375 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001376 "range() integer step argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001377 istep->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001378 goto Fail;
1379 }
1380
1381 if (PyObject_Cmp(istep, zero, &cmp_result) == -1)
1382 goto Fail;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001383 if (cmp_result == 0) {
1384 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001385 "range() step argument must not be zero");
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001386 goto Fail;
1387 }
1388
1389 if (cmp_result > 0)
1390 bign = get_len_of_range_longs(ilow, ihigh, istep);
1391 else {
1392 PyObject *neg_istep = PyNumber_Negative(istep);
1393 if (neg_istep == NULL)
1394 goto Fail;
1395 bign = get_len_of_range_longs(ihigh, ilow, neg_istep);
1396 Py_DECREF(neg_istep);
1397 }
1398
1399 n = (int)bign;
1400 if (bign < 0 || (long)n != bign) {
1401 PyErr_SetString(PyExc_OverflowError,
1402 "range() result has too many items");
1403 goto Fail;
1404 }
1405
1406 v = PyList_New(n);
1407 if (v == NULL)
1408 goto Fail;
1409
1410 curnum = ilow;
1411 Py_INCREF(curnum);
1412
1413 for (i = 0; i < n; i++) {
1414 PyObject *w = PyNumber_Long(curnum);
1415 PyObject *tmp_num;
1416 if (w == NULL)
1417 goto Fail;
1418
1419 PyList_SET_ITEM(v, i, w);
1420
1421 tmp_num = PyNumber_Add(curnum, istep);
1422 if (tmp_num == NULL)
1423 goto Fail;
1424
1425 Py_DECREF(curnum);
1426 curnum = tmp_num;
1427 }
Tim Peters874e1f72003-04-13 22:13:08 +00001428 Py_DECREF(ilow);
1429 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001430 Py_DECREF(istep);
1431 Py_DECREF(zero);
Tim Peters874e1f72003-04-13 22:13:08 +00001432 Py_DECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001433 return v;
1434
1435 Fail:
Tim Peters874e1f72003-04-13 22:13:08 +00001436 Py_DECREF(ilow);
1437 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001438 Py_XDECREF(istep);
Tim Peters874e1f72003-04-13 22:13:08 +00001439 Py_DECREF(zero);
1440 Py_XDECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001441 Py_XDECREF(v);
1442 return NULL;
1443}
1444
Guido van Rossum124eff01999-02-23 16:11:01 +00001445/* Return number of items in range/xrange (lo, hi, step). step > 0
1446 * required. Return a value < 0 if & only if the true value is too
1447 * large to fit in a signed long.
1448 */
1449static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001450get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001451{
1452 /* -------------------------------------------------------------
1453 If lo >= hi, the range is empty.
1454 Else if n values are in the range, the last one is
1455 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1456 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1457 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1458 the RHS is non-negative and so truncation is the same as the
1459 floor. Letting M be the largest positive long, the worst case
1460 for the RHS numerator is hi=M, lo=-M-1, and then
1461 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1462 precision to compute the RHS exactly.
1463 ---------------------------------------------------------------*/
1464 long n = 0;
1465 if (lo < hi) {
1466 unsigned long uhi = (unsigned long)hi;
1467 unsigned long ulo = (unsigned long)lo;
1468 unsigned long diff = uhi - ulo - 1;
1469 n = (long)(diff / (unsigned long)step + 1);
1470 }
1471 return n;
1472}
1473
Guido van Rossum79f25d91997-04-29 20:08:16 +00001474static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001475builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001476{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001477 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001478 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001479 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001480
Guido van Rossum79f25d91997-04-29 20:08:16 +00001481 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001482
Guido van Rossum79f25d91997-04-29 20:08:16 +00001483 if (PyTuple_Size(args) <= 1) {
1484 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001485 "l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001486 &ihigh)) {
1487 PyErr_Clear();
1488 return handle_range_longs(self, args);
1489 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001490 }
1491 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001492 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001493 "ll|l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001494 &ilow, &ihigh, &istep)) {
1495 PyErr_Clear();
1496 return handle_range_longs(self, args);
1497 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001498 }
1499 if (istep == 0) {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001500 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001501 "range() step argument must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001502 return NULL;
1503 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001504 if (istep > 0)
1505 bign = get_len_of_range(ilow, ihigh, istep);
1506 else
1507 bign = get_len_of_range(ihigh, ilow, -istep);
1508 n = (int)bign;
1509 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001510 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001511 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001512 return NULL;
1513 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001514 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001515 if (v == NULL)
1516 return NULL;
1517 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001518 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001519 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001520 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001521 return NULL;
1522 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001523 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001524 ilow += istep;
1525 }
1526 return v;
1527}
1528
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001529PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001530"range([start,] stop[, step]) -> list of integers\n\
1531\n\
1532Return a list containing an arithmetic progression of integers.\n\
1533range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1534When step is given, it specifies the increment (or decrement).\n\
1535For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001536These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001537
1538
Guido van Rossum79f25d91997-04-29 20:08:16 +00001539static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001540builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001541{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001542 PyObject *v = NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001543 PyObject *fin = PySys_GetObject("stdin");
1544 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001545
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001546 if (!PyArg_UnpackTuple(args, "[raw_]input", 0, 1, &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001547 return NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001548
1549 if (fin == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001550 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdin");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001551 return NULL;
1552 }
1553 if (fout == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001554 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdout");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001555 return NULL;
1556 }
1557 if (PyFile_SoftSpace(fout, 0)) {
1558 if (PyFile_WriteString(" ", fout) != 0)
1559 return NULL;
1560 }
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001561 if (PyFile_Check (fin) && PyFile_Check (fout)
1562 && isatty(fileno(PyFile_AsFile(fin)))
1563 && isatty(fileno(PyFile_AsFile(fout)))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001564 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001565 char *prompt;
1566 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001567 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001568 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001569 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001570 if (po == NULL)
1571 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001572 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001573 if (prompt == NULL)
1574 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001575 }
1576 else {
1577 po = NULL;
1578 prompt = "";
1579 }
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001580 s = PyOS_Readline(PyFile_AsFile (fin), PyFile_AsFile (fout),
1581 prompt);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001582 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001583 if (s == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001584 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001585 return NULL;
1586 }
1587 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001588 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001589 result = NULL;
1590 }
1591 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001592 size_t len = strlen(s);
1593 if (len > INT_MAX) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001594 PyErr_SetString(PyExc_OverflowError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001595 "[raw_]input: input too long");
Guido van Rossum106f2da2000-06-28 21:12:25 +00001596 result = NULL;
1597 }
1598 else {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001599 result = PyString_FromStringAndSize(s,
1600 (int)(len-1));
Guido van Rossum106f2da2000-06-28 21:12:25 +00001601 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001602 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001603 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001604 return result;
1605 }
Guido van Rossum90933611991-06-07 16:10:43 +00001606 if (v != NULL) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001607 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001608 return NULL;
1609 }
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001610 return PyFile_GetLine(fin, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001611}
1612
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001613PyDoc_STRVAR(raw_input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001614"raw_input([prompt]) -> string\n\
1615\n\
1616Read a string from standard input. The trailing newline is stripped.\n\
1617If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1618On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001619is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001620
1621
Guido van Rossum79f25d91997-04-29 20:08:16 +00001622static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001623builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001624{
Tim Peters15d81ef2001-05-04 04:39:21 +00001625 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001626
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001627 if (!PyArg_UnpackTuple(args, "reduce", 2, 3, &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001628 return NULL;
1629 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001630 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001631
Tim Peters15d81ef2001-05-04 04:39:21 +00001632 it = PyObject_GetIter(seq);
1633 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001634 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001635 "reduce() arg 2 must support iteration");
1636 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001637 return NULL;
1638 }
1639
Guido van Rossum79f25d91997-04-29 20:08:16 +00001640 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001641 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001642
Tim Peters15d81ef2001-05-04 04:39:21 +00001643 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001644 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001645
1646 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001647 Py_DECREF(args);
1648 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001649 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001650 }
1651
Tim Peters15d81ef2001-05-04 04:39:21 +00001652 op2 = PyIter_Next(it);
1653 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001654 if (PyErr_Occurred())
1655 goto Fail;
1656 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001657 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001658
Guido van Rossum2d951851994-08-29 12:52:16 +00001659 if (result == NULL)
1660 result = op2;
1661 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001662 PyTuple_SetItem(args, 0, result);
1663 PyTuple_SetItem(args, 1, op2);
1664 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001665 goto Fail;
1666 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001667 }
1668
Guido van Rossum79f25d91997-04-29 20:08:16 +00001669 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001670
Guido van Rossum2d951851994-08-29 12:52:16 +00001671 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001672 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001673 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001674
Tim Peters15d81ef2001-05-04 04:39:21 +00001675 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001676 return result;
1677
Guido van Rossum2d951851994-08-29 12:52:16 +00001678Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001679 Py_XDECREF(args);
1680 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001681 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001682 return NULL;
1683}
1684
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001685PyDoc_STRVAR(reduce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001686"reduce(function, sequence[, initial]) -> value\n\
1687\n\
1688Apply a function of two arguments cumulatively to the items of a sequence,\n\
1689from left to right, so as to reduce the sequence to a single value.\n\
1690For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1691((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1692of the sequence in the calculation, and serves as a default when the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001693sequence is empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001694
1695
Guido van Rossum79f25d91997-04-29 20:08:16 +00001696static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001697builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001698{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001699 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001700}
1701
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001702PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001703"reload(module) -> module\n\
1704\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001705Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001706
1707
Guido van Rossum79f25d91997-04-29 20:08:16 +00001708static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001709builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001710{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001711 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001712}
1713
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001714PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001715"repr(object) -> string\n\
1716\n\
1717Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001718For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001719
1720
Guido van Rossum79f25d91997-04-29 20:08:16 +00001721static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001722builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001723{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001724 double x;
1725 double f;
1726 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001727 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001728
Guido van Rossum79f25d91997-04-29 20:08:16 +00001729 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001730 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001731 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001732 i = abs(ndigits);
1733 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001734 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001735 if (ndigits < 0)
1736 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001737 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00001738 x *= f;
1739 if (x >= 0.0)
1740 x = floor(x + 0.5);
1741 else
1742 x = ceil(x - 0.5);
1743 if (ndigits < 0)
1744 x *= f;
1745 else
1746 x /= f;
1747 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001748}
1749
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001750PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001751"round(number[, ndigits]) -> floating point number\n\
1752\n\
1753Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001754This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001755
Raymond Hettinger64958a12003-12-17 20:43:33 +00001756static PyObject *
1757builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1758{
1759 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
1760 PyObject *callable;
1761 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
1762 long reverse;
1763
1764 if (args != NULL) {
1765 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
1766 kwlist, &seq, &compare, &keyfunc, &reverse))
1767 return NULL;
1768 }
1769
1770 newlist = PySequence_List(seq);
1771 if (newlist == NULL)
1772 return NULL;
1773
1774 callable = PyObject_GetAttrString(newlist, "sort");
1775 if (callable == NULL) {
1776 Py_DECREF(newlist);
1777 return NULL;
1778 }
1779
1780 newargs = PyTuple_GetSlice(args, 1, 4);
1781 if (newargs == NULL) {
1782 Py_DECREF(newlist);
1783 Py_DECREF(callable);
1784 return NULL;
1785 }
1786
1787 v = PyObject_Call(callable, newargs, kwds);
1788 Py_DECREF(newargs);
1789 Py_DECREF(callable);
1790 if (v == NULL) {
1791 Py_DECREF(newlist);
1792 return NULL;
1793 }
1794 Py_DECREF(v);
1795 return newlist;
1796}
1797
1798PyDoc_STRVAR(sorted_doc,
1799"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001800
Guido van Rossum79f25d91997-04-29 20:08:16 +00001801static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001802builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001803{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001804 PyObject *v = NULL;
1805 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001806
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001807 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001808 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001809 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001810 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001811 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001812 if (!PyErr_Occurred())
1813 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001814 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001815 }
1816 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001817 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001818 }
1819 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001820 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001821 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001822 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001823 "vars() argument must have __dict__ attribute");
1824 return NULL;
1825 }
1826 }
1827 return d;
1828}
1829
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001830PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001831"vars([object]) -> dictionary\n\
1832\n\
1833Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001834With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001835
Alex Martellia70b1912003-04-22 08:12:33 +00001836
1837static PyObject*
1838builtin_sum(PyObject *self, PyObject *args)
1839{
1840 PyObject *seq;
1841 PyObject *result = NULL;
1842 PyObject *temp, *item, *iter;
1843
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001844 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001845 return NULL;
1846
1847 iter = PyObject_GetIter(seq);
1848 if (iter == NULL)
1849 return NULL;
1850
1851 if (result == NULL) {
1852 result = PyInt_FromLong(0);
1853 if (result == NULL) {
1854 Py_DECREF(iter);
1855 return NULL;
1856 }
1857 } else {
1858 /* reject string values for 'start' parameter */
1859 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
1860 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001861 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001862 Py_DECREF(iter);
1863 return NULL;
1864 }
Alex Martelli41c9f882003-04-22 09:24:48 +00001865 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001866 }
1867
1868 for(;;) {
1869 item = PyIter_Next(iter);
1870 if (item == NULL) {
1871 /* error, or end-of-sequence */
1872 if (PyErr_Occurred()) {
1873 Py_DECREF(result);
1874 result = NULL;
1875 }
1876 break;
1877 }
Alex Martellia253e182003-10-25 23:24:14 +00001878 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001879 Py_DECREF(result);
1880 Py_DECREF(item);
1881 result = temp;
1882 if (result == NULL)
1883 break;
1884 }
1885 Py_DECREF(iter);
1886 return result;
1887}
1888
1889PyDoc_STRVAR(sum_doc,
1890"sum(sequence, start=0) -> value\n\
1891\n\
1892Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
1893of parameter 'start'. When the sequence is empty, returns start.");
1894
1895
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001896static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001897builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001898{
1899 PyObject *inst;
1900 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001901 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001902
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001903 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001904 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001905
Guido van Rossum823649d2001-03-21 18:40:58 +00001906 retval = PyObject_IsInstance(inst, cls);
1907 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001908 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001909 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001910}
1911
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001912PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001913"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001914\n\
1915Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001916With a type as second argument, return whether that is the object's type.\n\
1917The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001918isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001919
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001920
1921static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001922builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001923{
1924 PyObject *derived;
1925 PyObject *cls;
1926 int retval;
1927
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001928 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001929 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001930
Guido van Rossum823649d2001-03-21 18:40:58 +00001931 retval = PyObject_IsSubclass(derived, cls);
1932 if (retval < 0)
1933 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001934 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001935}
1936
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001937PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001938"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001939\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00001940Return whether class C is a subclass (i.e., a derived class) of class B.\n\
1941When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
1942is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001943
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001944
Barry Warsawbd599b52000-08-03 15:45:29 +00001945static PyObject*
1946builtin_zip(PyObject *self, PyObject *args)
1947{
1948 PyObject *ret;
Tim Peters67d687a2002-04-29 21:27:32 +00001949 const int itemsize = PySequence_Length(args);
Tim Peters8572b4f2001-05-06 01:05:02 +00001950 int i;
1951 PyObject *itlist; /* tuple of iterators */
Tim Peters67d687a2002-04-29 21:27:32 +00001952 int len; /* guess at result length */
Barry Warsawbd599b52000-08-03 15:45:29 +00001953
Raymond Hettingereaef6152003-08-02 07:42:57 +00001954 if (itemsize == 0)
1955 return PyList_New(0);
1956
Barry Warsawbd599b52000-08-03 15:45:29 +00001957 /* args must be a tuple */
1958 assert(PyTuple_Check(args));
1959
Tim Peters39a86c22002-05-12 07:19:38 +00001960 /* Guess at result length: the shortest of the input lengths.
1961 If some argument refuses to say, we refuse to guess too, lest
1962 an argument like xrange(sys.maxint) lead us astray.*/
Tim Peters67d687a2002-04-29 21:27:32 +00001963 len = -1; /* unknown */
1964 for (i = 0; i < itemsize; ++i) {
1965 PyObject *item = PyTuple_GET_ITEM(args, i);
Raymond Hettinger77f3c872004-01-04 08:54:44 +00001966 int thislen = PyObject_Size(item);
Tim Peters39a86c22002-05-12 07:19:38 +00001967 if (thislen < 0) {
Tim Peters67d687a2002-04-29 21:27:32 +00001968 PyErr_Clear();
Tim Peters39a86c22002-05-12 07:19:38 +00001969 len = -1;
1970 break;
1971 }
Tim Peters67d687a2002-04-29 21:27:32 +00001972 else if (len < 0 || thislen < len)
1973 len = thislen;
1974 }
1975
Tim Peters8572b4f2001-05-06 01:05:02 +00001976 /* allocate result list */
Tim Peters67d687a2002-04-29 21:27:32 +00001977 if (len < 0)
1978 len = 10; /* arbitrary */
1979 if ((ret = PyList_New(len)) == NULL)
Barry Warsawbd599b52000-08-03 15:45:29 +00001980 return NULL;
1981
Tim Peters8572b4f2001-05-06 01:05:02 +00001982 /* obtain iterators */
1983 itlist = PyTuple_New(itemsize);
1984 if (itlist == NULL)
1985 goto Fail_ret;
1986 for (i = 0; i < itemsize; ++i) {
1987 PyObject *item = PyTuple_GET_ITEM(args, i);
1988 PyObject *it = PyObject_GetIter(item);
1989 if (it == NULL) {
1990 if (PyErr_ExceptionMatches(PyExc_TypeError))
1991 PyErr_Format(PyExc_TypeError,
1992 "zip argument #%d must support iteration",
1993 i+1);
1994 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00001995 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001996 PyTuple_SET_ITEM(itlist, i, it);
1997 }
Barry Warsawbd599b52000-08-03 15:45:29 +00001998
Tim Peters8572b4f2001-05-06 01:05:02 +00001999 /* build result into ret list */
Tim Peters67d687a2002-04-29 21:27:32 +00002000 for (i = 0; ; ++i) {
2001 int j;
Tim Peters8572b4f2001-05-06 01:05:02 +00002002 PyObject *next = PyTuple_New(itemsize);
2003 if (!next)
2004 goto Fail_ret_itlist;
2005
Tim Peters67d687a2002-04-29 21:27:32 +00002006 for (j = 0; j < itemsize; j++) {
2007 PyObject *it = PyTuple_GET_ITEM(itlist, j);
Tim Peters8572b4f2001-05-06 01:05:02 +00002008 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00002009 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00002010 if (PyErr_Occurred()) {
2011 Py_DECREF(ret);
2012 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002013 }
2014 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00002015 Py_DECREF(itlist);
Tim Peters67d687a2002-04-29 21:27:32 +00002016 goto Done;
Barry Warsawbd599b52000-08-03 15:45:29 +00002017 }
Tim Peters67d687a2002-04-29 21:27:32 +00002018 PyTuple_SET_ITEM(next, j, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00002019 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002020
Tim Peters67d687a2002-04-29 21:27:32 +00002021 if (i < len)
2022 PyList_SET_ITEM(ret, i, next);
2023 else {
2024 int status = PyList_Append(ret, next);
2025 Py_DECREF(next);
2026 ++len;
2027 if (status < 0)
2028 goto Fail_ret_itlist;
2029 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002030 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002031
Tim Peters67d687a2002-04-29 21:27:32 +00002032Done:
2033 if (ret != NULL && i < len) {
2034 /* The list is too big. */
2035 if (PyList_SetSlice(ret, i, len, NULL) < 0)
2036 return NULL;
2037 }
2038 return ret;
2039
Tim Peters8572b4f2001-05-06 01:05:02 +00002040Fail_ret_itlist:
2041 Py_DECREF(itlist);
2042Fail_ret:
2043 Py_DECREF(ret);
2044 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002045}
2046
2047
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002048PyDoc_STRVAR(zip_doc,
Barry Warsawbd599b52000-08-03 15:45:29 +00002049"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
2050\n\
2051Return a list of tuples, where each tuple contains the i-th element\n\
2052from each of the argument sequences. The returned list is truncated\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002053in length to the length of the shortest argument sequence.");
Barry Warsawbd599b52000-08-03 15:45:29 +00002054
2055
Guido van Rossum79f25d91997-04-29 20:08:16 +00002056static PyMethodDef builtin_methods[] = {
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002057 {"__import__", builtin___import__, METH_VARARGS, import_doc},
2058 {"abs", builtin_abs, METH_O, abs_doc},
2059 {"apply", builtin_apply, METH_VARARGS, apply_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002060 {"callable", builtin_callable, METH_O, callable_doc},
2061 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2062 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
2063 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
2064 {"compile", builtin_compile, METH_VARARGS, compile_doc},
2065 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2066 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2067 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2068 {"eval", builtin_eval, METH_VARARGS, eval_doc},
2069 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
2070 {"filter", builtin_filter, METH_VARARGS, filter_doc},
2071 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2072 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2073 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2074 {"hash", builtin_hash, METH_O, hash_doc},
2075 {"hex", builtin_hex, METH_O, hex_doc},
2076 {"id", builtin_id, METH_O, id_doc},
2077 {"input", builtin_input, METH_VARARGS, input_doc},
2078 {"intern", builtin_intern, METH_VARARGS, intern_doc},
2079 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2080 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2081 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2082 {"len", builtin_len, METH_O, len_doc},
2083 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2084 {"map", builtin_map, METH_VARARGS, map_doc},
2085 {"max", builtin_max, METH_VARARGS, max_doc},
2086 {"min", builtin_min, METH_VARARGS, min_doc},
2087 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002088 {"ord", builtin_ord, METH_O, ord_doc},
2089 {"pow", builtin_pow, METH_VARARGS, pow_doc},
2090 {"range", builtin_range, METH_VARARGS, range_doc},
2091 {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc},
2092 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
2093 {"reload", builtin_reload, METH_O, reload_doc},
2094 {"repr", builtin_repr, METH_O, repr_doc},
2095 {"round", builtin_round, METH_VARARGS, round_doc},
2096 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002097 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002098 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002099#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002100 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002101#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002102 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002103 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002104 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002105};
2106
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002107PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002108"Built-in functions, exceptions, and other objects.\n\
2109\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002110Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002111
Guido van Rossum25ce5661997-08-02 03:10:38 +00002112PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002113_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002114{
Fred Drake5550de32000-06-20 04:54:19 +00002115 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002116 mod = Py_InitModule4("__builtin__", builtin_methods,
2117 builtin_doc, (PyObject *)NULL,
2118 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002119 if (mod == NULL)
2120 return NULL;
2121 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002122
Tim Peters7571a0f2003-03-23 17:52:28 +00002123#ifdef Py_TRACE_REFS
2124 /* __builtin__ exposes a number of statically allocated objects
2125 * that, before this code was added in 2.3, never showed up in
2126 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2127 * result, programs leaking references to None and False (etc)
2128 * couldn't be diagnosed by examining sys.getobjects(0).
2129 */
2130#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2131#else
2132#define ADD_TO_ALL(OBJECT) (void)0
2133#endif
2134
Tim Peters4b7625e2001-09-13 21:37:17 +00002135#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002136 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2137 return NULL; \
2138 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002139
2140 SETBUILTIN("None", Py_None);
2141 SETBUILTIN("Ellipsis", Py_Ellipsis);
2142 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002143 SETBUILTIN("False", Py_False);
2144 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00002145 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002146 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002147 SETBUILTIN("buffer", &PyBuffer_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002148 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002149#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002150 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002151#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002152 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002153 SETBUILTIN("enumerate", &PyEnum_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002154 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002155 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002156 SETBUILTIN("property", &PyProperty_Type);
2157 SETBUILTIN("int", &PyInt_Type);
2158 SETBUILTIN("list", &PyList_Type);
2159 SETBUILTIN("long", &PyLong_Type);
2160 SETBUILTIN("object", &PyBaseObject_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002161 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002162 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002163 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002164 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2165 SETBUILTIN("str", &PyString_Type);
2166 SETBUILTIN("super", &PySuper_Type);
2167 SETBUILTIN("tuple", &PyTuple_Type);
2168 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00002169 SETBUILTIN("xrange", &PyRange_Type);
Tim Peters742dfd62001-09-13 21:49:44 +00002170
2171 /* Note that open() is just an alias of file(). */
2172 SETBUILTIN("open", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002173 SETBUILTIN("file", &PyFile_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002174#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00002175 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002176#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00002177 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002178 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2179 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002180 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002181 }
2182 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002183
Guido van Rossum25ce5661997-08-02 03:10:38 +00002184 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002185#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002186#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002187}
2188
Guido van Rossume77a7571993-11-03 15:01:26 +00002189/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002190
Guido van Rossum79f25d91997-04-29 20:08:16 +00002191static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002192filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002193{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002194 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002195 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002196 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002197
Guido van Rossumb7b45621995-08-04 04:07:45 +00002198 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002199 if (PyTuple_CheckExact(tuple))
2200 Py_INCREF(tuple);
2201 else
2202 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002203 return tuple;
2204 }
2205
Guido van Rossum79f25d91997-04-29 20:08:16 +00002206 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002207 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002208
Guido van Rossum12d12c51993-10-26 17:58:25 +00002209 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002210 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002211 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002212
Walter Dörwald8dd19322003-02-10 17:36:40 +00002213 if (tuple->ob_type->tp_as_sequence &&
2214 tuple->ob_type->tp_as_sequence->sq_item) {
2215 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002216 if (item == NULL)
2217 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002218 } else {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002219 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002220 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002221 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002222 if (func == Py_None) {
2223 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002224 good = item;
2225 }
2226 else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002227 PyObject *arg = PyTuple_Pack(1, item);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002228 if (arg == NULL) {
2229 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002230 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002231 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002232 good = PyEval_CallObject(func, arg);
2233 Py_DECREF(arg);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002234 if (good == NULL) {
2235 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002236 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002237 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002238 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002239 ok = PyObject_IsTrue(good);
2240 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002241 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002242 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002243 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002244 }
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002245 else
2246 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002247 }
2248
Tim Peters4324aa32001-05-28 22:30:08 +00002249 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002250 return NULL;
2251
Guido van Rossum12d12c51993-10-26 17:58:25 +00002252 return result;
2253
Guido van Rossum12d12c51993-10-26 17:58:25 +00002254Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002255 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002256 return NULL;
2257}
2258
2259
Guido van Rossume77a7571993-11-03 15:01:26 +00002260/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002261
Guido van Rossum79f25d91997-04-29 20:08:16 +00002262static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002263filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002264{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002265 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002266 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002267 int len = PyString_Size(strobj);
Walter Dörwald903f1e02003-02-04 16:28:00 +00002268 int outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002269
Guido van Rossum79f25d91997-04-29 20:08:16 +00002270 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002271 /* If it's a real string we can return the original,
2272 * as no character is ever false and __getitem__
2273 * does return this character. If it's a subclass
2274 * we must go through the __getitem__ loop */
2275 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002276 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002277 return strobj;
2278 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002279 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002280 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002281 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002282
Guido van Rossum12d12c51993-10-26 17:58:25 +00002283 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002284 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002285 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002286
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002287 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2288 if (item == NULL)
2289 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002290 if (func==Py_None) {
2291 ok = 1;
2292 } else {
2293 PyObject *arg, *good;
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002294 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002295 if (arg == NULL) {
2296 Py_DECREF(item);
2297 goto Fail_1;
2298 }
2299 good = PyEval_CallObject(func, arg);
2300 Py_DECREF(arg);
2301 if (good == NULL) {
2302 Py_DECREF(item);
2303 goto Fail_1;
2304 }
2305 ok = PyObject_IsTrue(good);
2306 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00002307 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002308 if (ok) {
2309 int reslen;
2310 if (!PyString_Check(item)) {
2311 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2312 " __getitem__ returned different type");
2313 Py_DECREF(item);
2314 goto Fail_1;
2315 }
2316 reslen = PyString_GET_SIZE(item);
2317 if (reslen == 1) {
2318 PyString_AS_STRING(result)[j++] =
2319 PyString_AS_STRING(item)[0];
2320 } else {
2321 /* do we need more space? */
2322 int need = j + reslen + len-i-1;
2323 if (need > outlen) {
2324 /* overallocate, to avoid reallocations */
2325 if (need<2*outlen)
2326 need = 2*outlen;
2327 if (_PyString_Resize(&result, need)) {
2328 Py_DECREF(item);
2329 return NULL;
2330 }
2331 outlen = need;
2332 }
2333 memcpy(
2334 PyString_AS_STRING(result) + j,
2335 PyString_AS_STRING(item),
2336 reslen
2337 );
2338 j += reslen;
2339 }
2340 }
Tim Peters388ed082001-04-07 20:34:48 +00002341 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002342 }
2343
Walter Dörwald903f1e02003-02-04 16:28:00 +00002344 if (j < outlen)
Tim Peters5de98422002-04-27 18:44:32 +00002345 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002346
Guido van Rossum12d12c51993-10-26 17:58:25 +00002347 return result;
2348
Guido van Rossum12d12c51993-10-26 17:58:25 +00002349Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002350 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002351 return NULL;
2352}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002353
2354#ifdef Py_USING_UNICODE
2355/* Helper for filter(): filter a Unicode object through a function */
2356
2357static PyObject *
2358filterunicode(PyObject *func, PyObject *strobj)
2359{
2360 PyObject *result;
2361 register int i, j;
2362 int len = PyUnicode_GetSize(strobj);
Walter Dörwald903f1e02003-02-04 16:28:00 +00002363 int outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002364
2365 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002366 /* If it's a real string we can return the original,
2367 * as no character is ever false and __getitem__
2368 * does return this character. If it's a subclass
2369 * we must go through the __getitem__ loop */
2370 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002371 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002372 return strobj;
2373 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002374 }
2375 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2376 return NULL;
2377
2378 for (i = j = 0; i < len; ++i) {
2379 PyObject *item, *arg, *good;
2380 int ok;
2381
2382 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2383 if (item == NULL)
2384 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002385 if (func == Py_None) {
2386 ok = 1;
2387 } else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002388 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002389 if (arg == NULL) {
2390 Py_DECREF(item);
2391 goto Fail_1;
2392 }
2393 good = PyEval_CallObject(func, arg);
2394 Py_DECREF(arg);
2395 if (good == NULL) {
2396 Py_DECREF(item);
2397 goto Fail_1;
2398 }
2399 ok = PyObject_IsTrue(good);
2400 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002401 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002402 if (ok) {
2403 int reslen;
2404 if (!PyUnicode_Check(item)) {
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002405 PyErr_SetString(PyExc_TypeError,
2406 "can't filter unicode to unicode:"
2407 " __getitem__ returned different type");
Walter Dörwald903f1e02003-02-04 16:28:00 +00002408 Py_DECREF(item);
2409 goto Fail_1;
2410 }
2411 reslen = PyUnicode_GET_SIZE(item);
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002412 if (reslen == 1)
Walter Dörwald903f1e02003-02-04 16:28:00 +00002413 PyUnicode_AS_UNICODE(result)[j++] =
2414 PyUnicode_AS_UNICODE(item)[0];
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002415 else {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002416 /* do we need more space? */
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002417 int need = j + reslen + len - i - 1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002418 if (need > outlen) {
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002419 /* overallocate,
2420 to avoid reallocations */
2421 if (need < 2 * outlen)
2422 need = 2 * outlen;
Jeremy Hylton364f6be2003-09-16 03:17:16 +00002423 if (PyUnicode_Resize(
2424 &result, need) < 0) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002425 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002426 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002427 }
2428 outlen = need;
2429 }
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002430 memcpy(PyUnicode_AS_UNICODE(result) + j,
2431 PyUnicode_AS_UNICODE(item),
2432 reslen*sizeof(Py_UNICODE));
Walter Dörwald903f1e02003-02-04 16:28:00 +00002433 j += reslen;
2434 }
2435 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002436 Py_DECREF(item);
2437 }
2438
Walter Dörwald903f1e02003-02-04 16:28:00 +00002439 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002440 PyUnicode_Resize(&result, j);
2441
2442 return result;
2443
2444Fail_1:
2445 Py_DECREF(result);
2446 return NULL;
2447}
2448#endif