blob: a17c6d9c1f1edcec7f30309b5a94e00cac903e5e [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))
578# if defined(PY_OS2) && defined(PYCC_VACPP)
579 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;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000982
983 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000984 if (line == NULL)
985 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000986 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000987 return NULL;
988 while (*str == ' ' || *str == '\t')
989 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000990 globals = PyEval_GetGlobals();
991 locals = PyEval_GetLocals();
992 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
993 if (PyDict_SetItemString(globals, "__builtins__",
994 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000995 return NULL;
996 }
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000997 res = PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000998 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000999 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001000}
1001
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001002PyDoc_STRVAR(input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001003"input([prompt]) -> value\n\
1004\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001005Equivalent to eval(raw_input(prompt)).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001006
1007
Guido van Rossume8811f81997-02-14 15:48:05 +00001008static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001009builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001010{
1011 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001012 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001013 return NULL;
1014 Py_INCREF(s);
1015 PyString_InternInPlace(&s);
1016 return s;
1017}
1018
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001019PyDoc_STRVAR(intern_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001020"intern(string) -> string\n\
1021\n\
1022``Intern'' the given string. This enters the string in the (global)\n\
1023table of interned strings whose purpose is to speed up dictionary lookups.\n\
1024Return the string itself or the previously interned string object with the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001025same value.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001026
1027
Guido van Rossum79f25d91997-04-29 20:08:16 +00001028static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001029builtin_iter(PyObject *self, PyObject *args)
1030{
1031 PyObject *v, *w = NULL;
1032
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001033 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001034 return NULL;
1035 if (w == NULL)
1036 return PyObject_GetIter(v);
1037 if (!PyCallable_Check(v)) {
1038 PyErr_SetString(PyExc_TypeError,
1039 "iter(v, w): v must be callable");
1040 return NULL;
1041 }
1042 return PyCallIter_New(v, w);
1043}
1044
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001045PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001046"iter(collection) -> iterator\n\
1047iter(callable, sentinel) -> iterator\n\
1048\n\
1049Get an iterator from an object. In the first form, the argument must\n\
1050supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001051In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001052
1053
1054static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001055builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001056{
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001057 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001058
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001059 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001060 if (res < 0 && PyErr_Occurred())
1061 return NULL;
1062 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001063}
1064
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001065PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001066"len(object) -> integer\n\
1067\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001068Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001069
1070
Guido van Rossum79f25d91997-04-29 20:08:16 +00001071static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001072builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001073{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001074 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001075
Guido van Rossum79f25d91997-04-29 20:08:16 +00001076 d = PyEval_GetLocals();
1077 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001078 return d;
1079}
1080
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001081PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001082"locals() -> dictionary\n\
1083\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001084Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001085
1086
Guido van Rossum79f25d91997-04-29 20:08:16 +00001087static PyObject *
Guido van Rossum53451b32001-01-17 15:47:24 +00001088min_max(PyObject *args, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001089{
Tim Petersc3074532001-05-03 07:00:32 +00001090 PyObject *v, *w, *x, *it;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001091
Guido van Rossum79f25d91997-04-29 20:08:16 +00001092 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001093 v = args;
Raymond Hettingerbbfb9102002-12-29 18:31:19 +00001094 else if (!PyArg_UnpackTuple(args, (op==Py_LT) ? "min" : "max", 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001095 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001096
Tim Petersc3074532001-05-03 07:00:32 +00001097 it = PyObject_GetIter(v);
1098 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001099 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001100
1101 w = NULL; /* the result */
Tim Petersf4848da2001-05-05 00:14:56 +00001102 for (;;) {
Tim Petersc3074532001-05-03 07:00:32 +00001103 x = PyIter_Next(it);
Guido van Rossum2d951851994-08-29 12:52:16 +00001104 if (x == NULL) {
Tim Petersc3074532001-05-03 07:00:32 +00001105 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001106 Py_XDECREF(w);
1107 Py_DECREF(it);
1108 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001109 }
Tim Petersc3074532001-05-03 07:00:32 +00001110 break;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001111 }
Tim Petersc3074532001-05-03 07:00:32 +00001112
Guido van Rossum2d951851994-08-29 12:52:16 +00001113 if (w == NULL)
1114 w = x;
1115 else {
Guido van Rossum53451b32001-01-17 15:47:24 +00001116 int cmp = PyObject_RichCompareBool(x, w, op);
1117 if (cmp > 0) {
1118 Py_DECREF(w);
1119 w = x;
1120 }
1121 else if (cmp < 0) {
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001122 Py_DECREF(x);
Tim Petersc3074532001-05-03 07:00:32 +00001123 Py_DECREF(w);
1124 Py_DECREF(it);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001125 return NULL;
1126 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001127 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001128 Py_DECREF(x);
Guido van Rossum2d951851994-08-29 12:52:16 +00001129 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001130 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001131 if (w == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001132 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +00001133 "min() or max() arg is an empty sequence");
Tim Petersc3074532001-05-03 07:00:32 +00001134 Py_DECREF(it);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001135 return w;
1136}
1137
Guido van Rossum79f25d91997-04-29 20:08:16 +00001138static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001139builtin_min(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001140{
Guido van Rossum53451b32001-01-17 15:47:24 +00001141 return min_max(v, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001142}
1143
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001144PyDoc_STRVAR(min_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001145"min(sequence) -> value\n\
1146min(a, b, c, ...) -> value\n\
1147\n\
1148With a single sequence argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001149With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001150
1151
Guido van Rossum79f25d91997-04-29 20:08:16 +00001152static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001153builtin_max(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001154{
Guido van Rossum53451b32001-01-17 15:47:24 +00001155 return min_max(v, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001156}
1157
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001158PyDoc_STRVAR(max_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001159"max(sequence) -> value\n\
1160max(a, b, c, ...) -> value\n\
1161\n\
1162With a single sequence argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001163With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001164
1165
Guido van Rossum79f25d91997-04-29 20:08:16 +00001166static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001167builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001168{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001169 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001170
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001171 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1172 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001173 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001174 "oct() argument can't be converted to oct");
1175 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001176 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001177 return (*nb->nb_oct)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001178}
1179
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001180PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001181"oct(number) -> string\n\
1182\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001183Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001184
1185
Guido van Rossum79f25d91997-04-29 20:08:16 +00001186static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001187builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001188{
Guido van Rossum09095f32000-03-10 23:00:52 +00001189 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001190 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001191
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001192 if (PyString_Check(obj)) {
1193 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001194 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001195 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001196 return PyInt_FromLong(ord);
1197 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001198#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001199 } else if (PyUnicode_Check(obj)) {
1200 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001201 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001202 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001203 return PyInt_FromLong(ord);
1204 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001205#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001206 } else {
1207 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001208 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001209 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001210 return NULL;
1211 }
1212
Guido van Rossumad991772001-01-12 16:03:05 +00001213 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001214 "ord() expected a character, "
1215 "but string of length %d found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001216 size);
1217 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001218}
1219
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001220PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001221"ord(c) -> integer\n\
1222\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001223Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001224
1225
Guido van Rossum79f25d91997-04-29 20:08:16 +00001226static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001227builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001228{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001229 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001230
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001231 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001232 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001233 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001234}
1235
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001236PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001237"pow(x, y[, z]) -> number\n\
1238\n\
1239With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001240equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001241
1242
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001243
1244/* Return number of items in range (lo, hi, step), when arguments are
1245 * PyInt or PyLong objects. step > 0 required. Return a value < 0 if
1246 * & only if the true value is too large to fit in a signed long.
1247 * Arguments MUST return 1 with either PyInt_Check() or
1248 * PyLong_Check(). Return -1 when there is an error.
1249 */
1250static long
1251get_len_of_range_longs(PyObject *lo, PyObject *hi, PyObject *step)
1252{
1253 /* -------------------------------------------------------------
1254 Algorithm is equal to that of get_len_of_range(), but it operates
1255 on PyObjects (which are assumed to be PyLong or PyInt objects).
1256 ---------------------------------------------------------------*/
1257 long n;
1258 PyObject *diff = NULL;
1259 PyObject *one = NULL;
1260 PyObject *tmp1 = NULL, *tmp2 = NULL, *tmp3 = NULL;
1261 /* holds sub-expression evaluations */
1262
1263 /* if (lo >= hi), return length of 0. */
1264 if (PyObject_Compare(lo, hi) >= 0)
1265 return 0;
1266
1267 if ((one = PyLong_FromLong(1L)) == NULL)
1268 goto Fail;
1269
1270 if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL)
1271 goto Fail;
1272
1273 if ((diff = PyNumber_Subtract(tmp1, one)) == NULL)
1274 goto Fail;
1275
1276 if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL)
1277 goto Fail;
1278
1279 if ((tmp3 = PyNumber_Add(tmp2, one)) == NULL)
1280 goto Fail;
1281
1282 n = PyLong_AsLong(tmp3);
1283 if (PyErr_Occurred()) { /* Check for Overflow */
1284 PyErr_Clear();
1285 goto Fail;
1286 }
1287
1288 Py_DECREF(tmp3);
1289 Py_DECREF(tmp2);
1290 Py_DECREF(diff);
1291 Py_DECREF(tmp1);
1292 Py_DECREF(one);
1293 return n;
1294
1295 Fail:
1296 Py_XDECREF(tmp3);
1297 Py_XDECREF(tmp2);
1298 Py_XDECREF(diff);
1299 Py_XDECREF(tmp1);
1300 Py_XDECREF(one);
1301 return -1;
1302}
1303
1304/* An extension of builtin_range() that handles the case when PyLong
1305 * arguments are given. */
1306static PyObject *
1307handle_range_longs(PyObject *self, PyObject *args)
1308{
1309 PyObject *ilow;
Tim Peters874e1f72003-04-13 22:13:08 +00001310 PyObject *ihigh = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001311 PyObject *istep = NULL;
Tim Peters874e1f72003-04-13 22:13:08 +00001312
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001313 PyObject *curnum = NULL;
1314 PyObject *v = NULL;
1315 long bign;
1316 int i, n;
1317 int cmp_result;
1318
Tim Peters874e1f72003-04-13 22:13:08 +00001319 PyObject *zero = PyLong_FromLong(0);
1320
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001321 if (zero == NULL)
1322 return NULL;
1323
Tim Peters874e1f72003-04-13 22:13:08 +00001324 if (!PyArg_UnpackTuple(args, "range", 1, 3, &ilow, &ihigh, &istep)) {
1325 Py_DECREF(zero);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001326 return NULL;
1327 }
1328
Tim Peters874e1f72003-04-13 22:13:08 +00001329 /* Figure out which way we were called, supply defaults, and be
1330 * sure to incref everything so that the decrefs at the end
1331 * are correct.
1332 */
1333 assert(ilow != NULL);
1334 if (ihigh == NULL) {
1335 /* only 1 arg -- it's the upper limit */
1336 ihigh = ilow;
1337 ilow = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001338 }
Tim Peters874e1f72003-04-13 22:13:08 +00001339 assert(ihigh != NULL);
1340 Py_INCREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001341
Tim Peters874e1f72003-04-13 22:13:08 +00001342 /* ihigh correct now; do ilow */
1343 if (ilow == NULL)
1344 ilow = zero;
1345 Py_INCREF(ilow);
1346
1347 /* ilow and ihigh correct now; do istep */
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001348 if (istep == NULL) {
1349 istep = PyLong_FromLong(1L);
1350 if (istep == NULL)
1351 goto Fail;
1352 }
1353 else {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001354 Py_INCREF(istep);
1355 }
1356
Tim Peters874e1f72003-04-13 22:13:08 +00001357 if (!PyInt_Check(ilow) && !PyLong_Check(ilow)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001358 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001359 "range() integer start argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001360 ilow->ob_type->tp_name);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001361 goto Fail;
1362 }
1363
Tim Peters874e1f72003-04-13 22:13:08 +00001364 if (!PyInt_Check(ihigh) && !PyLong_Check(ihigh)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001365 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001366 "range() integer end argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001367 ihigh->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001368 goto Fail;
1369 }
1370
1371 if (!PyInt_Check(istep) && !PyLong_Check(istep)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001372 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001373 "range() integer step argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001374 istep->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001375 goto Fail;
1376 }
1377
1378 if (PyObject_Cmp(istep, zero, &cmp_result) == -1)
1379 goto Fail;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001380 if (cmp_result == 0) {
1381 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001382 "range() step argument must not be zero");
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001383 goto Fail;
1384 }
1385
1386 if (cmp_result > 0)
1387 bign = get_len_of_range_longs(ilow, ihigh, istep);
1388 else {
1389 PyObject *neg_istep = PyNumber_Negative(istep);
1390 if (neg_istep == NULL)
1391 goto Fail;
1392 bign = get_len_of_range_longs(ihigh, ilow, neg_istep);
1393 Py_DECREF(neg_istep);
1394 }
1395
1396 n = (int)bign;
1397 if (bign < 0 || (long)n != bign) {
1398 PyErr_SetString(PyExc_OverflowError,
1399 "range() result has too many items");
1400 goto Fail;
1401 }
1402
1403 v = PyList_New(n);
1404 if (v == NULL)
1405 goto Fail;
1406
1407 curnum = ilow;
1408 Py_INCREF(curnum);
1409
1410 for (i = 0; i < n; i++) {
1411 PyObject *w = PyNumber_Long(curnum);
1412 PyObject *tmp_num;
1413 if (w == NULL)
1414 goto Fail;
1415
1416 PyList_SET_ITEM(v, i, w);
1417
1418 tmp_num = PyNumber_Add(curnum, istep);
1419 if (tmp_num == NULL)
1420 goto Fail;
1421
1422 Py_DECREF(curnum);
1423 curnum = tmp_num;
1424 }
Tim Peters874e1f72003-04-13 22:13:08 +00001425 Py_DECREF(ilow);
1426 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001427 Py_DECREF(istep);
1428 Py_DECREF(zero);
Tim Peters874e1f72003-04-13 22:13:08 +00001429 Py_DECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001430 return v;
1431
1432 Fail:
Tim Peters874e1f72003-04-13 22:13:08 +00001433 Py_DECREF(ilow);
1434 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001435 Py_XDECREF(istep);
Tim Peters874e1f72003-04-13 22:13:08 +00001436 Py_DECREF(zero);
1437 Py_XDECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001438 Py_XDECREF(v);
1439 return NULL;
1440}
1441
Guido van Rossum124eff01999-02-23 16:11:01 +00001442/* Return number of items in range/xrange (lo, hi, step). step > 0
1443 * required. Return a value < 0 if & only if the true value is too
1444 * large to fit in a signed long.
1445 */
1446static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001447get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001448{
1449 /* -------------------------------------------------------------
1450 If lo >= hi, the range is empty.
1451 Else if n values are in the range, the last one is
1452 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1453 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1454 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1455 the RHS is non-negative and so truncation is the same as the
1456 floor. Letting M be the largest positive long, the worst case
1457 for the RHS numerator is hi=M, lo=-M-1, and then
1458 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1459 precision to compute the RHS exactly.
1460 ---------------------------------------------------------------*/
1461 long n = 0;
1462 if (lo < hi) {
1463 unsigned long uhi = (unsigned long)hi;
1464 unsigned long ulo = (unsigned long)lo;
1465 unsigned long diff = uhi - ulo - 1;
1466 n = (long)(diff / (unsigned long)step + 1);
1467 }
1468 return n;
1469}
1470
Guido van Rossum79f25d91997-04-29 20:08:16 +00001471static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001472builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001473{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001474 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001475 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001476 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001477
Guido van Rossum79f25d91997-04-29 20:08:16 +00001478 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001479
Guido van Rossum79f25d91997-04-29 20:08:16 +00001480 if (PyTuple_Size(args) <= 1) {
1481 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001482 "l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001483 &ihigh)) {
1484 PyErr_Clear();
1485 return handle_range_longs(self, args);
1486 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001487 }
1488 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001489 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001490 "ll|l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001491 &ilow, &ihigh, &istep)) {
1492 PyErr_Clear();
1493 return handle_range_longs(self, args);
1494 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001495 }
1496 if (istep == 0) {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001497 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001498 "range() step argument must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001499 return NULL;
1500 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001501 if (istep > 0)
1502 bign = get_len_of_range(ilow, ihigh, istep);
1503 else
1504 bign = get_len_of_range(ihigh, ilow, -istep);
1505 n = (int)bign;
1506 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001507 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001508 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001509 return NULL;
1510 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001511 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001512 if (v == NULL)
1513 return NULL;
1514 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001515 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001516 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001517 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001518 return NULL;
1519 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001520 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001521 ilow += istep;
1522 }
1523 return v;
1524}
1525
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001526PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001527"range([start,] stop[, step]) -> list of integers\n\
1528\n\
1529Return a list containing an arithmetic progression of integers.\n\
1530range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1531When step is given, it specifies the increment (or decrement).\n\
1532For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001533These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001534
1535
Guido van Rossum79f25d91997-04-29 20:08:16 +00001536static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001537builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001538{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001539 PyObject *v = NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001540 PyObject *fin = PySys_GetObject("stdin");
1541 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001542
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001543 if (!PyArg_UnpackTuple(args, "[raw_]input", 0, 1, &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001544 return NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001545
1546 if (fin == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001547 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdin");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001548 return NULL;
1549 }
1550 if (fout == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001551 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdout");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001552 return NULL;
1553 }
1554 if (PyFile_SoftSpace(fout, 0)) {
1555 if (PyFile_WriteString(" ", fout) != 0)
1556 return NULL;
1557 }
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001558 if (PyFile_Check (fin) && PyFile_Check (fout)
1559 && isatty(fileno(PyFile_AsFile(fin)))
1560 && isatty(fileno(PyFile_AsFile(fout)))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001561 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001562 char *prompt;
1563 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001564 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001565 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001566 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001567 if (po == NULL)
1568 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001569 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001570 if (prompt == NULL)
1571 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001572 }
1573 else {
1574 po = NULL;
1575 prompt = "";
1576 }
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001577 s = PyOS_Readline(PyFile_AsFile (fin), PyFile_AsFile (fout),
1578 prompt);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001579 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001580 if (s == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001581 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001582 return NULL;
1583 }
1584 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001585 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001586 result = NULL;
1587 }
1588 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001589 size_t len = strlen(s);
1590 if (len > INT_MAX) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001591 PyErr_SetString(PyExc_OverflowError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001592 "[raw_]input: input too long");
Guido van Rossum106f2da2000-06-28 21:12:25 +00001593 result = NULL;
1594 }
1595 else {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001596 result = PyString_FromStringAndSize(s,
1597 (int)(len-1));
Guido van Rossum106f2da2000-06-28 21:12:25 +00001598 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001599 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001600 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001601 return result;
1602 }
Guido van Rossum90933611991-06-07 16:10:43 +00001603 if (v != NULL) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001604 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001605 return NULL;
1606 }
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001607 return PyFile_GetLine(fin, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001608}
1609
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001610PyDoc_STRVAR(raw_input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001611"raw_input([prompt]) -> string\n\
1612\n\
1613Read a string from standard input. The trailing newline is stripped.\n\
1614If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1615On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001616is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001617
1618
Guido van Rossum79f25d91997-04-29 20:08:16 +00001619static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001620builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001621{
Tim Peters15d81ef2001-05-04 04:39:21 +00001622 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001623
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001624 if (!PyArg_UnpackTuple(args, "reduce", 2, 3, &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001625 return NULL;
1626 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001627 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001628
Tim Peters15d81ef2001-05-04 04:39:21 +00001629 it = PyObject_GetIter(seq);
1630 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001631 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001632 "reduce() arg 2 must support iteration");
1633 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001634 return NULL;
1635 }
1636
Guido van Rossum79f25d91997-04-29 20:08:16 +00001637 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001638 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001639
Tim Peters15d81ef2001-05-04 04:39:21 +00001640 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001641 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001642
1643 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001644 Py_DECREF(args);
1645 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001646 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001647 }
1648
Tim Peters15d81ef2001-05-04 04:39:21 +00001649 op2 = PyIter_Next(it);
1650 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001651 if (PyErr_Occurred())
1652 goto Fail;
1653 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001654 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001655
Guido van Rossum2d951851994-08-29 12:52:16 +00001656 if (result == NULL)
1657 result = op2;
1658 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001659 PyTuple_SetItem(args, 0, result);
1660 PyTuple_SetItem(args, 1, op2);
1661 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001662 goto Fail;
1663 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001664 }
1665
Guido van Rossum79f25d91997-04-29 20:08:16 +00001666 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001667
Guido van Rossum2d951851994-08-29 12:52:16 +00001668 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001669 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001670 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001671
Tim Peters15d81ef2001-05-04 04:39:21 +00001672 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001673 return result;
1674
Guido van Rossum2d951851994-08-29 12:52:16 +00001675Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001676 Py_XDECREF(args);
1677 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001678 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001679 return NULL;
1680}
1681
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001682PyDoc_STRVAR(reduce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001683"reduce(function, sequence[, initial]) -> value\n\
1684\n\
1685Apply a function of two arguments cumulatively to the items of a sequence,\n\
1686from left to right, so as to reduce the sequence to a single value.\n\
1687For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1688((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1689of the sequence in the calculation, and serves as a default when the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001690sequence is empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001691
1692
Guido van Rossum79f25d91997-04-29 20:08:16 +00001693static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001694builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001695{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001696 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001697}
1698
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001699PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001700"reload(module) -> module\n\
1701\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001702Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001703
1704
Guido van Rossum79f25d91997-04-29 20:08:16 +00001705static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001706builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001707{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001708 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001709}
1710
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001711PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001712"repr(object) -> string\n\
1713\n\
1714Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001715For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001716
1717
Guido van Rossum79f25d91997-04-29 20:08:16 +00001718static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001719builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001720{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001721 double x;
1722 double f;
1723 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001724 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001725
Guido van Rossum79f25d91997-04-29 20:08:16 +00001726 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001727 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001728 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001729 i = abs(ndigits);
1730 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001731 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001732 if (ndigits < 0)
1733 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001734 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00001735 x *= f;
1736 if (x >= 0.0)
1737 x = floor(x + 0.5);
1738 else
1739 x = ceil(x - 0.5);
1740 if (ndigits < 0)
1741 x *= f;
1742 else
1743 x /= f;
1744 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001745}
1746
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001747PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001748"round(number[, ndigits]) -> floating point number\n\
1749\n\
1750Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001751This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001752
Raymond Hettinger64958a12003-12-17 20:43:33 +00001753static PyObject *
1754builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1755{
1756 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
1757 PyObject *callable;
1758 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
1759 long reverse;
1760
1761 if (args != NULL) {
1762 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
1763 kwlist, &seq, &compare, &keyfunc, &reverse))
1764 return NULL;
1765 }
1766
1767 newlist = PySequence_List(seq);
1768 if (newlist == NULL)
1769 return NULL;
1770
1771 callable = PyObject_GetAttrString(newlist, "sort");
1772 if (callable == NULL) {
1773 Py_DECREF(newlist);
1774 return NULL;
1775 }
1776
1777 newargs = PyTuple_GetSlice(args, 1, 4);
1778 if (newargs == NULL) {
1779 Py_DECREF(newlist);
1780 Py_DECREF(callable);
1781 return NULL;
1782 }
1783
1784 v = PyObject_Call(callable, newargs, kwds);
1785 Py_DECREF(newargs);
1786 Py_DECREF(callable);
1787 if (v == NULL) {
1788 Py_DECREF(newlist);
1789 return NULL;
1790 }
1791 Py_DECREF(v);
1792 return newlist;
1793}
1794
1795PyDoc_STRVAR(sorted_doc,
1796"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001797
Guido van Rossum79f25d91997-04-29 20:08:16 +00001798static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001799builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001800{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001801 PyObject *v = NULL;
1802 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001803
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001804 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001805 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001806 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001807 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001808 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001809 if (!PyErr_Occurred())
1810 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001811 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001812 }
1813 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001814 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001815 }
1816 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001817 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001818 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001819 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001820 "vars() argument must have __dict__ attribute");
1821 return NULL;
1822 }
1823 }
1824 return d;
1825}
1826
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001827PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001828"vars([object]) -> dictionary\n\
1829\n\
1830Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001831With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001832
Alex Martellia70b1912003-04-22 08:12:33 +00001833
1834static PyObject*
1835builtin_sum(PyObject *self, PyObject *args)
1836{
1837 PyObject *seq;
1838 PyObject *result = NULL;
1839 PyObject *temp, *item, *iter;
1840
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001841 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001842 return NULL;
1843
1844 iter = PyObject_GetIter(seq);
1845 if (iter == NULL)
1846 return NULL;
1847
1848 if (result == NULL) {
1849 result = PyInt_FromLong(0);
1850 if (result == NULL) {
1851 Py_DECREF(iter);
1852 return NULL;
1853 }
1854 } else {
1855 /* reject string values for 'start' parameter */
1856 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
1857 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001858 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001859 Py_DECREF(iter);
1860 return NULL;
1861 }
Alex Martelli41c9f882003-04-22 09:24:48 +00001862 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001863 }
1864
1865 for(;;) {
1866 item = PyIter_Next(iter);
1867 if (item == NULL) {
1868 /* error, or end-of-sequence */
1869 if (PyErr_Occurred()) {
1870 Py_DECREF(result);
1871 result = NULL;
1872 }
1873 break;
1874 }
Alex Martellia253e182003-10-25 23:24:14 +00001875 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001876 Py_DECREF(result);
1877 Py_DECREF(item);
1878 result = temp;
1879 if (result == NULL)
1880 break;
1881 }
1882 Py_DECREF(iter);
1883 return result;
1884}
1885
1886PyDoc_STRVAR(sum_doc,
1887"sum(sequence, start=0) -> value\n\
1888\n\
1889Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
1890of parameter 'start'. When the sequence is empty, returns start.");
1891
1892
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001893static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001894builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001895{
1896 PyObject *inst;
1897 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001898 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001899
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001900 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001901 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001902
Guido van Rossum823649d2001-03-21 18:40:58 +00001903 retval = PyObject_IsInstance(inst, cls);
1904 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001905 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001906 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001907}
1908
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001909PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001910"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001911\n\
1912Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001913With a type as second argument, return whether that is the object's type.\n\
1914The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001915isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001916
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001917
1918static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001919builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001920{
1921 PyObject *derived;
1922 PyObject *cls;
1923 int retval;
1924
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001925 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001926 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001927
Guido van Rossum823649d2001-03-21 18:40:58 +00001928 retval = PyObject_IsSubclass(derived, cls);
1929 if (retval < 0)
1930 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001931 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001932}
1933
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001934PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001935"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001936\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00001937Return whether class C is a subclass (i.e., a derived class) of class B.\n\
1938When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
1939is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001940
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001941
Barry Warsawbd599b52000-08-03 15:45:29 +00001942static PyObject*
1943builtin_zip(PyObject *self, PyObject *args)
1944{
1945 PyObject *ret;
Tim Peters67d687a2002-04-29 21:27:32 +00001946 const int itemsize = PySequence_Length(args);
Tim Peters8572b4f2001-05-06 01:05:02 +00001947 int i;
1948 PyObject *itlist; /* tuple of iterators */
Tim Peters67d687a2002-04-29 21:27:32 +00001949 int len; /* guess at result length */
Barry Warsawbd599b52000-08-03 15:45:29 +00001950
Raymond Hettingereaef6152003-08-02 07:42:57 +00001951 if (itemsize == 0)
1952 return PyList_New(0);
1953
Barry Warsawbd599b52000-08-03 15:45:29 +00001954 /* args must be a tuple */
1955 assert(PyTuple_Check(args));
1956
Tim Peters39a86c22002-05-12 07:19:38 +00001957 /* Guess at result length: the shortest of the input lengths.
1958 If some argument refuses to say, we refuse to guess too, lest
1959 an argument like xrange(sys.maxint) lead us astray.*/
Tim Peters67d687a2002-04-29 21:27:32 +00001960 len = -1; /* unknown */
1961 for (i = 0; i < itemsize; ++i) {
1962 PyObject *item = PyTuple_GET_ITEM(args, i);
Raymond Hettinger77f3c872004-01-04 08:54:44 +00001963 int thislen = PyObject_Size(item);
Tim Peters39a86c22002-05-12 07:19:38 +00001964 if (thislen < 0) {
Tim Peters67d687a2002-04-29 21:27:32 +00001965 PyErr_Clear();
Tim Peters39a86c22002-05-12 07:19:38 +00001966 len = -1;
1967 break;
1968 }
Tim Peters67d687a2002-04-29 21:27:32 +00001969 else if (len < 0 || thislen < len)
1970 len = thislen;
1971 }
1972
Tim Peters8572b4f2001-05-06 01:05:02 +00001973 /* allocate result list */
Tim Peters67d687a2002-04-29 21:27:32 +00001974 if (len < 0)
1975 len = 10; /* arbitrary */
1976 if ((ret = PyList_New(len)) == NULL)
Barry Warsawbd599b52000-08-03 15:45:29 +00001977 return NULL;
1978
Tim Peters8572b4f2001-05-06 01:05:02 +00001979 /* obtain iterators */
1980 itlist = PyTuple_New(itemsize);
1981 if (itlist == NULL)
1982 goto Fail_ret;
1983 for (i = 0; i < itemsize; ++i) {
1984 PyObject *item = PyTuple_GET_ITEM(args, i);
1985 PyObject *it = PyObject_GetIter(item);
1986 if (it == NULL) {
1987 if (PyErr_ExceptionMatches(PyExc_TypeError))
1988 PyErr_Format(PyExc_TypeError,
1989 "zip argument #%d must support iteration",
1990 i+1);
1991 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00001992 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001993 PyTuple_SET_ITEM(itlist, i, it);
1994 }
Barry Warsawbd599b52000-08-03 15:45:29 +00001995
Tim Peters8572b4f2001-05-06 01:05:02 +00001996 /* build result into ret list */
Tim Peters67d687a2002-04-29 21:27:32 +00001997 for (i = 0; ; ++i) {
1998 int j;
Tim Peters8572b4f2001-05-06 01:05:02 +00001999 PyObject *next = PyTuple_New(itemsize);
2000 if (!next)
2001 goto Fail_ret_itlist;
2002
Tim Peters67d687a2002-04-29 21:27:32 +00002003 for (j = 0; j < itemsize; j++) {
2004 PyObject *it = PyTuple_GET_ITEM(itlist, j);
Tim Peters8572b4f2001-05-06 01:05:02 +00002005 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00002006 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00002007 if (PyErr_Occurred()) {
2008 Py_DECREF(ret);
2009 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002010 }
2011 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00002012 Py_DECREF(itlist);
Tim Peters67d687a2002-04-29 21:27:32 +00002013 goto Done;
Barry Warsawbd599b52000-08-03 15:45:29 +00002014 }
Tim Peters67d687a2002-04-29 21:27:32 +00002015 PyTuple_SET_ITEM(next, j, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00002016 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002017
Tim Peters67d687a2002-04-29 21:27:32 +00002018 if (i < len)
2019 PyList_SET_ITEM(ret, i, next);
2020 else {
2021 int status = PyList_Append(ret, next);
2022 Py_DECREF(next);
2023 ++len;
2024 if (status < 0)
2025 goto Fail_ret_itlist;
2026 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002027 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002028
Tim Peters67d687a2002-04-29 21:27:32 +00002029Done:
2030 if (ret != NULL && i < len) {
2031 /* The list is too big. */
2032 if (PyList_SetSlice(ret, i, len, NULL) < 0)
2033 return NULL;
2034 }
2035 return ret;
2036
Tim Peters8572b4f2001-05-06 01:05:02 +00002037Fail_ret_itlist:
2038 Py_DECREF(itlist);
2039Fail_ret:
2040 Py_DECREF(ret);
2041 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002042}
2043
2044
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002045PyDoc_STRVAR(zip_doc,
Barry Warsawbd599b52000-08-03 15:45:29 +00002046"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
2047\n\
2048Return a list of tuples, where each tuple contains the i-th element\n\
2049from each of the argument sequences. The returned list is truncated\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002050in length to the length of the shortest argument sequence.");
Barry Warsawbd599b52000-08-03 15:45:29 +00002051
2052
Guido van Rossum79f25d91997-04-29 20:08:16 +00002053static PyMethodDef builtin_methods[] = {
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002054 {"__import__", builtin___import__, METH_VARARGS, import_doc},
2055 {"abs", builtin_abs, METH_O, abs_doc},
2056 {"apply", builtin_apply, METH_VARARGS, apply_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002057 {"callable", builtin_callable, METH_O, callable_doc},
2058 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2059 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
2060 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
2061 {"compile", builtin_compile, METH_VARARGS, compile_doc},
2062 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2063 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2064 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2065 {"eval", builtin_eval, METH_VARARGS, eval_doc},
2066 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
2067 {"filter", builtin_filter, METH_VARARGS, filter_doc},
2068 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2069 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2070 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2071 {"hash", builtin_hash, METH_O, hash_doc},
2072 {"hex", builtin_hex, METH_O, hex_doc},
2073 {"id", builtin_id, METH_O, id_doc},
2074 {"input", builtin_input, METH_VARARGS, input_doc},
2075 {"intern", builtin_intern, METH_VARARGS, intern_doc},
2076 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2077 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2078 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2079 {"len", builtin_len, METH_O, len_doc},
2080 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2081 {"map", builtin_map, METH_VARARGS, map_doc},
2082 {"max", builtin_max, METH_VARARGS, max_doc},
2083 {"min", builtin_min, METH_VARARGS, min_doc},
2084 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002085 {"ord", builtin_ord, METH_O, ord_doc},
2086 {"pow", builtin_pow, METH_VARARGS, pow_doc},
2087 {"range", builtin_range, METH_VARARGS, range_doc},
2088 {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc},
2089 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
2090 {"reload", builtin_reload, METH_O, reload_doc},
2091 {"repr", builtin_repr, METH_O, repr_doc},
2092 {"round", builtin_round, METH_VARARGS, round_doc},
2093 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002094 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002095 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002096#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002097 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002098#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002099 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002100 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002101 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002102};
2103
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002104PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002105"Built-in functions, exceptions, and other objects.\n\
2106\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002107Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002108
Guido van Rossum25ce5661997-08-02 03:10:38 +00002109PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002110_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002111{
Fred Drake5550de32000-06-20 04:54:19 +00002112 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002113 mod = Py_InitModule4("__builtin__", builtin_methods,
2114 builtin_doc, (PyObject *)NULL,
2115 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002116 if (mod == NULL)
2117 return NULL;
2118 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002119
Tim Peters7571a0f2003-03-23 17:52:28 +00002120#ifdef Py_TRACE_REFS
2121 /* __builtin__ exposes a number of statically allocated objects
2122 * that, before this code was added in 2.3, never showed up in
2123 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2124 * result, programs leaking references to None and False (etc)
2125 * couldn't be diagnosed by examining sys.getobjects(0).
2126 */
2127#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2128#else
2129#define ADD_TO_ALL(OBJECT) (void)0
2130#endif
2131
Tim Peters4b7625e2001-09-13 21:37:17 +00002132#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002133 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2134 return NULL; \
2135 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002136
2137 SETBUILTIN("None", Py_None);
2138 SETBUILTIN("Ellipsis", Py_Ellipsis);
2139 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002140 SETBUILTIN("False", Py_False);
2141 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00002142 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002143 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002144 SETBUILTIN("buffer", &PyBuffer_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002145 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002146#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002147 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002148#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002149 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002150 SETBUILTIN("enumerate", &PyEnum_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002151 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002152 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002153 SETBUILTIN("property", &PyProperty_Type);
2154 SETBUILTIN("int", &PyInt_Type);
2155 SETBUILTIN("list", &PyList_Type);
2156 SETBUILTIN("long", &PyLong_Type);
2157 SETBUILTIN("object", &PyBaseObject_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002158 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002159 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002160 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002161 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2162 SETBUILTIN("str", &PyString_Type);
2163 SETBUILTIN("super", &PySuper_Type);
2164 SETBUILTIN("tuple", &PyTuple_Type);
2165 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00002166 SETBUILTIN("xrange", &PyRange_Type);
Tim Peters742dfd62001-09-13 21:49:44 +00002167
2168 /* Note that open() is just an alias of file(). */
2169 SETBUILTIN("open", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002170 SETBUILTIN("file", &PyFile_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002171#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00002172 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002173#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00002174 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002175 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2176 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002177 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002178 }
2179 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002180
Guido van Rossum25ce5661997-08-02 03:10:38 +00002181 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002182#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002183#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002184}
2185
Guido van Rossume77a7571993-11-03 15:01:26 +00002186/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002187
Guido van Rossum79f25d91997-04-29 20:08:16 +00002188static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002189filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002190{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002191 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002192 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002193 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002194
Guido van Rossumb7b45621995-08-04 04:07:45 +00002195 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002196 if (PyTuple_CheckExact(tuple))
2197 Py_INCREF(tuple);
2198 else
2199 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002200 return tuple;
2201 }
2202
Guido van Rossum79f25d91997-04-29 20:08:16 +00002203 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002204 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002205
Guido van Rossum12d12c51993-10-26 17:58:25 +00002206 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002207 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002208 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002209
Walter Dörwald8dd19322003-02-10 17:36:40 +00002210 if (tuple->ob_type->tp_as_sequence &&
2211 tuple->ob_type->tp_as_sequence->sq_item) {
2212 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002213 if (item == NULL)
2214 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002215 } else {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002216 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002217 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002218 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002219 if (func == Py_None) {
2220 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002221 good = item;
2222 }
2223 else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002224 PyObject *arg = PyTuple_Pack(1, item);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002225 if (arg == NULL) {
2226 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002227 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002228 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002229 good = PyEval_CallObject(func, arg);
2230 Py_DECREF(arg);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002231 if (good == NULL) {
2232 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002233 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002234 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002235 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002236 ok = PyObject_IsTrue(good);
2237 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002238 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002239 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002240 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002241 }
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002242 else
2243 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002244 }
2245
Tim Peters4324aa32001-05-28 22:30:08 +00002246 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002247 return NULL;
2248
Guido van Rossum12d12c51993-10-26 17:58:25 +00002249 return result;
2250
Guido van Rossum12d12c51993-10-26 17:58:25 +00002251Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002252 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002253 return NULL;
2254}
2255
2256
Guido van Rossume77a7571993-11-03 15:01:26 +00002257/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002258
Guido van Rossum79f25d91997-04-29 20:08:16 +00002259static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002260filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002261{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002262 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002263 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002264 int len = PyString_Size(strobj);
Walter Dörwald903f1e02003-02-04 16:28:00 +00002265 int outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002266
Guido van Rossum79f25d91997-04-29 20:08:16 +00002267 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002268 /* If it's a real string we can return the original,
2269 * as no character is ever false and __getitem__
2270 * does return this character. If it's a subclass
2271 * we must go through the __getitem__ loop */
2272 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002273 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002274 return strobj;
2275 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002276 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002277 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002278 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002279
Guido van Rossum12d12c51993-10-26 17:58:25 +00002280 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002281 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002282 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002283
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002284 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2285 if (item == NULL)
2286 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002287 if (func==Py_None) {
2288 ok = 1;
2289 } else {
2290 PyObject *arg, *good;
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002291 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002292 if (arg == NULL) {
2293 Py_DECREF(item);
2294 goto Fail_1;
2295 }
2296 good = PyEval_CallObject(func, arg);
2297 Py_DECREF(arg);
2298 if (good == NULL) {
2299 Py_DECREF(item);
2300 goto Fail_1;
2301 }
2302 ok = PyObject_IsTrue(good);
2303 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00002304 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002305 if (ok) {
2306 int reslen;
2307 if (!PyString_Check(item)) {
2308 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2309 " __getitem__ returned different type");
2310 Py_DECREF(item);
2311 goto Fail_1;
2312 }
2313 reslen = PyString_GET_SIZE(item);
2314 if (reslen == 1) {
2315 PyString_AS_STRING(result)[j++] =
2316 PyString_AS_STRING(item)[0];
2317 } else {
2318 /* do we need more space? */
2319 int need = j + reslen + len-i-1;
2320 if (need > outlen) {
2321 /* overallocate, to avoid reallocations */
2322 if (need<2*outlen)
2323 need = 2*outlen;
2324 if (_PyString_Resize(&result, need)) {
2325 Py_DECREF(item);
2326 return NULL;
2327 }
2328 outlen = need;
2329 }
2330 memcpy(
2331 PyString_AS_STRING(result) + j,
2332 PyString_AS_STRING(item),
2333 reslen
2334 );
2335 j += reslen;
2336 }
2337 }
Tim Peters388ed082001-04-07 20:34:48 +00002338 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002339 }
2340
Walter Dörwald903f1e02003-02-04 16:28:00 +00002341 if (j < outlen)
Tim Peters5de98422002-04-27 18:44:32 +00002342 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002343
Guido van Rossum12d12c51993-10-26 17:58:25 +00002344 return result;
2345
Guido van Rossum12d12c51993-10-26 17:58:25 +00002346Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002347 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002348 return NULL;
2349}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002350
2351#ifdef Py_USING_UNICODE
2352/* Helper for filter(): filter a Unicode object through a function */
2353
2354static PyObject *
2355filterunicode(PyObject *func, PyObject *strobj)
2356{
2357 PyObject *result;
2358 register int i, j;
2359 int len = PyUnicode_GetSize(strobj);
Walter Dörwald903f1e02003-02-04 16:28:00 +00002360 int outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002361
2362 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002363 /* If it's a real string we can return the original,
2364 * as no character is ever false and __getitem__
2365 * does return this character. If it's a subclass
2366 * we must go through the __getitem__ loop */
2367 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002368 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002369 return strobj;
2370 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002371 }
2372 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2373 return NULL;
2374
2375 for (i = j = 0; i < len; ++i) {
2376 PyObject *item, *arg, *good;
2377 int ok;
2378
2379 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2380 if (item == NULL)
2381 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002382 if (func == Py_None) {
2383 ok = 1;
2384 } else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002385 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002386 if (arg == NULL) {
2387 Py_DECREF(item);
2388 goto Fail_1;
2389 }
2390 good = PyEval_CallObject(func, arg);
2391 Py_DECREF(arg);
2392 if (good == NULL) {
2393 Py_DECREF(item);
2394 goto Fail_1;
2395 }
2396 ok = PyObject_IsTrue(good);
2397 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002398 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002399 if (ok) {
2400 int reslen;
2401 if (!PyUnicode_Check(item)) {
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002402 PyErr_SetString(PyExc_TypeError,
2403 "can't filter unicode to unicode:"
2404 " __getitem__ returned different type");
Walter Dörwald903f1e02003-02-04 16:28:00 +00002405 Py_DECREF(item);
2406 goto Fail_1;
2407 }
2408 reslen = PyUnicode_GET_SIZE(item);
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002409 if (reslen == 1)
Walter Dörwald903f1e02003-02-04 16:28:00 +00002410 PyUnicode_AS_UNICODE(result)[j++] =
2411 PyUnicode_AS_UNICODE(item)[0];
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002412 else {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002413 /* do we need more space? */
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002414 int need = j + reslen + len - i - 1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002415 if (need > outlen) {
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002416 /* overallocate,
2417 to avoid reallocations */
2418 if (need < 2 * outlen)
2419 need = 2 * outlen;
Jeremy Hylton364f6be2003-09-16 03:17:16 +00002420 if (PyUnicode_Resize(
2421 &result, need) < 0) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002422 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002423 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002424 }
2425 outlen = need;
2426 }
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002427 memcpy(PyUnicode_AS_UNICODE(result) + j,
2428 PyUnicode_AS_UNICODE(item),
2429 reslen*sizeof(Py_UNICODE));
Walter Dörwald903f1e02003-02-04 16:28:00 +00002430 j += reslen;
2431 }
2432 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002433 Py_DECREF(item);
2434 }
2435
Walter Dörwald903f1e02003-02-04 16:28:00 +00002436 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002437 PyUnicode_Resize(&result, j);
2438
2439 return result;
2440
2441Fail_1:
2442 Py_DECREF(result);
2443 return NULL;
2444}
2445#endif