blob: a5b97163de1eb334e84ac473ec687c13ec73822d [file] [log] [blame]
Guido van Rossum3f5da241990-12-20 15:06:42 +00001/* Built-in functions */
2
Guido van Rossum79f25d91997-04-29 20:08:16 +00003#include "Python.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00004
5#include "node.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00006#include "code.h"
Guido van Rossum5b722181993-03-30 17:46:03 +00007#include "eval.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00008
Guido van Rossum6bf62da1997-04-11 20:37:35 +00009#include <ctype.h>
10
Mark Hammond26cffde42001-05-14 12:17:34 +000011/* The default encoding used by the platform file system APIs
12 Can remain NULL for all platforms that don't have such a concept
Guido van Rossum00bc0e02007-10-15 02:52:41 +000013
14 Don't forget to modify PyUnicode_DecodeFSDefault() if you touch any of the
15 values for Py_FileSystemDefaultEncoding!
Mark Hammond26cffde42001-05-14 12:17:34 +000016*/
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000017#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
Mark Hammond26cffde42001-05-14 12:17:34 +000018const char *Py_FileSystemDefaultEncoding = "mbcs";
Christian Heimesc8967002007-11-30 10:18:26 +000019const int Py_HasFileSystemDefaultEncoding = 1;
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000020#elif defined(__APPLE__)
21const char *Py_FileSystemDefaultEncoding = "utf-8";
Christian Heimesc8967002007-11-30 10:18:26 +000022const int Py_HasFileSystemDefaultEncoding = 1;
Mark Hammond26cffde42001-05-14 12:17:34 +000023#else
24const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
Christian Heimesc8967002007-11-30 10:18:26 +000025const int Py_HasFileSystemDefaultEncoding = 0;
Mark Hammond26cffde42001-05-14 12:17:34 +000026#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000027
Guido van Rossum79f25d91997-04-29 20:08:16 +000028static PyObject *
Guido van Rossum52cc1d82007-03-18 15:41:51 +000029builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds)
30{
Guido van Rossumcd16bf62007-06-13 18:07:49 +000031 PyObject *func, *name, *bases, *mkw, *meta, *prep, *ns, *cell;
32 PyObject *cls = NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +000033 Py_ssize_t nargs, nbases;
34
35 assert(args != NULL);
36 if (!PyTuple_Check(args)) {
37 PyErr_SetString(PyExc_TypeError,
38 "__build_class__: args is not a tuple");
39 return NULL;
40 }
41 nargs = PyTuple_GET_SIZE(args);
42 if (nargs < 2) {
43 PyErr_SetString(PyExc_TypeError,
44 "__build_class__: not enough arguments");
45 return NULL;
46 }
47 func = PyTuple_GET_ITEM(args, 0); /* Better be callable */
48 name = PyTuple_GET_ITEM(args, 1);
Neal Norwitz6ea45d32007-08-26 04:19:43 +000049 if (!PyUnicode_Check(name)) {
Guido van Rossum52cc1d82007-03-18 15:41:51 +000050 PyErr_SetString(PyExc_TypeError,
51 "__build_class__: name is not a string");
52 return NULL;
53 }
54 bases = PyTuple_GetSlice(args, 2, nargs);
55 if (bases == NULL)
56 return NULL;
57 nbases = nargs - 2;
58
59 if (kwds == NULL) {
60 meta = NULL;
61 mkw = NULL;
62 }
63 else {
64 mkw = PyDict_Copy(kwds); /* Don't modify kwds passed in! */
65 if (mkw == NULL) {
66 Py_DECREF(bases);
67 return NULL;
68 }
69 meta = PyDict_GetItemString(mkw, "metaclass");
70 if (meta != NULL) {
71 Py_INCREF(meta);
72 if (PyDict_DelItemString(mkw, "metaclass") < 0) {
73 Py_DECREF(meta);
74 Py_DECREF(mkw);
75 Py_DECREF(bases);
76 return NULL;
77 }
78 }
79 }
80 if (meta == NULL) {
81 if (PyTuple_GET_SIZE(bases) == 0)
82 meta = (PyObject *) (&PyType_Type);
83 else {
84 PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
85 meta = (PyObject *) (base0->ob_type);
86 }
87 Py_INCREF(meta);
88 }
89 prep = PyObject_GetAttrString(meta, "__prepare__");
90 if (prep == NULL) {
91 PyErr_Clear();
92 ns = PyDict_New();
93 }
94 else {
95 PyObject *pargs = Py_BuildValue("OO", name, bases);
96 if (pargs == NULL) {
97 Py_DECREF(prep);
98 Py_DECREF(meta);
99 Py_XDECREF(mkw);
100 Py_DECREF(bases);
101 return NULL;
102 }
103 ns = PyEval_CallObjectWithKeywords(prep, pargs, mkw);
104 Py_DECREF(pargs);
105 Py_DECREF(prep);
106 if (ns == NULL) {
107 Py_DECREF(meta);
108 Py_XDECREF(mkw);
109 Py_DECREF(bases);
110 return NULL;
111 }
112 }
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000113 cell = PyObject_CallFunctionObjArgs(func, ns, NULL);
114 if (cell != NULL) {
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000115 PyObject *margs;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000116 margs = Py_BuildValue("OOO", name, bases, ns);
117 if (margs != NULL) {
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000118 cls = PyEval_CallObjectWithKeywords(meta, margs, mkw);
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000119 Py_DECREF(margs);
120 }
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000121 if (cls != NULL && PyCell_Check(cell)) {
122 Py_INCREF(cls);
123 PyCell_SET(cell, cls);
124 }
125 Py_DECREF(cell);
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000126 }
127 Py_DECREF(ns);
128 Py_DECREF(meta);
129 Py_XDECREF(mkw);
130 Py_DECREF(bases);
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000131 return cls;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000132}
133
134PyDoc_STRVAR(build_class_doc,
135"__build_class__(func, name, *bases, metaclass=None, **kwds) -> class\n\
136\n\
137Internal helper function used by the class statement.");
138
139static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000140builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000141{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000142 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
143 "level", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000144 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000145 PyObject *globals = NULL;
146 PyObject *locals = NULL;
147 PyObject *fromlist = NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +0000148 int level = -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000149
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000150 if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|OOOi:__import__",
151 kwlist, &name, &globals, &locals, &fromlist, &level))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000152 return NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +0000153 return PyImport_ImportModuleLevel(name, globals, locals,
154 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000155}
156
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000157PyDoc_STRVAR(import_doc,
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000158"__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000159\n\
160Import a module. The globals are only used to determine the context;\n\
161they are not modified. The locals are currently unused. The fromlist\n\
162should be a list of names to emulate ``from name import ...'', or an\n\
163empty list to emulate ``import name''.\n\
164When importing a module from a package, note that __import__('A.B', ...)\n\
165returns package A when fromlist is empty, but its submodule B when\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000166fromlist is not empty. Level is used to determine whether to perform \n\
167absolute or relative imports. -1 is the original strategy of attempting\n\
168both absolute and relative imports, 0 is absolute, a positive number\n\
169is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000170
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000171
Guido van Rossum79f25d91997-04-29 20:08:16 +0000172static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000173builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000174{
Guido van Rossum09df08a1998-05-22 00:51:39 +0000175 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000176}
177
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000178PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000179"abs(number) -> number\n\
180\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000181Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000182
Raymond Hettinger96229b12005-03-11 06:49:40 +0000183static PyObject *
184builtin_all(PyObject *self, PyObject *v)
185{
186 PyObject *it, *item;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000187 PyObject *(*iternext)(PyObject *);
188 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000189
190 it = PyObject_GetIter(v);
191 if (it == NULL)
192 return NULL;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000193 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000194
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000195 for (;;) {
196 item = iternext(it);
197 if (item == NULL)
198 break;
199 cmp = PyObject_IsTrue(item);
Raymond Hettinger96229b12005-03-11 06:49:40 +0000200 Py_DECREF(item);
201 if (cmp < 0) {
202 Py_DECREF(it);
203 return NULL;
204 }
205 if (cmp == 0) {
206 Py_DECREF(it);
207 Py_RETURN_FALSE;
208 }
209 }
210 Py_DECREF(it);
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000211 if (PyErr_Occurred()) {
212 if (PyErr_ExceptionMatches(PyExc_StopIteration))
213 PyErr_Clear();
214 else
215 return NULL;
216 }
Raymond Hettinger96229b12005-03-11 06:49:40 +0000217 Py_RETURN_TRUE;
218}
219
220PyDoc_STRVAR(all_doc,
221"all(iterable) -> bool\n\
222\n\
223Return True if bool(x) is True for all values x in the iterable.");
224
225static PyObject *
226builtin_any(PyObject *self, PyObject *v)
227{
228 PyObject *it, *item;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000229 PyObject *(*iternext)(PyObject *);
230 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000231
232 it = PyObject_GetIter(v);
233 if (it == NULL)
234 return NULL;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000235 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000236
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000237 for (;;) {
238 item = iternext(it);
239 if (item == NULL)
240 break;
241 cmp = PyObject_IsTrue(item);
Raymond Hettinger96229b12005-03-11 06:49:40 +0000242 Py_DECREF(item);
243 if (cmp < 0) {
244 Py_DECREF(it);
245 return NULL;
246 }
247 if (cmp == 1) {
248 Py_DECREF(it);
249 Py_RETURN_TRUE;
250 }
251 }
252 Py_DECREF(it);
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000253 if (PyErr_Occurred()) {
254 if (PyErr_ExceptionMatches(PyExc_StopIteration))
255 PyErr_Clear();
256 else
257 return NULL;
258 }
Raymond Hettinger96229b12005-03-11 06:49:40 +0000259 Py_RETURN_FALSE;
260}
261
262PyDoc_STRVAR(any_doc,
263"any(iterable) -> bool\n\
264\n\
265Return True if bool(x) is True for any x in the iterable.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000266
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000267
Guido van Rossum79f25d91997-04-29 20:08:16 +0000268static PyObject *
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000269builtin_bin(PyObject *self, PyObject *v)
270{
271 return PyNumber_ToBase(v, 2);
272}
273
274PyDoc_STRVAR(bin_doc,
275"bin(number) -> string\n\
276\n\
277Return the binary representation of an integer or long integer.");
278
279
280static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000281builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000282{
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000283 PyObject *itertools, *ifilter, *result;
Christian Heimes819b8bf2008-01-03 23:05:47 +0000284 itertools = PyImport_ImportModuleNoBlock("itertools");
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000285 if (itertools == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000286 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000287 ifilter = PyObject_GetAttrString(itertools, "ifilter");
288 Py_DECREF(itertools);
289 if (ifilter == NULL)
Georg Brandle35b6572005-07-19 22:20:20 +0000290 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000291 result = PyObject_Call(ifilter, args, NULL);
292 Py_DECREF(ifilter);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000293 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000294}
295
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000296PyDoc_STRVAR(filter_doc,
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000297"filter(predicate, iterable) -> iterator\n\
298\n\
299Return an iterator yielding only those elements of the input iterable\n\
300for which the predicate (a Boolean function) returns true.\n\
301If the predicate is None, 'lambda x: bool(x)' is assumed.\n\
302(This is identical to itertools.ifilter().)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000303
Eric Smith8c663262007-08-25 02:26:07 +0000304static PyObject *
305builtin_format(PyObject *self, PyObject *args)
306{
Christian Heimes94b7d3d2007-12-11 20:20:39 +0000307 static PyObject * format_str = NULL;
308 PyObject *value;
309 PyObject *spec = NULL;
310 PyObject *meth;
311 PyObject *empty = NULL;
312 PyObject *result = NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000313
Christian Heimes94b7d3d2007-12-11 20:20:39 +0000314 /* Initialize cached value */
315 if (format_str == NULL) {
316 /* Initialize static variable needed by _PyType_Lookup */
317 format_str = PyUnicode_FromString("__format__");
318 if (format_str == NULL)
319 goto done;
320 }
Eric Smith8c663262007-08-25 02:26:07 +0000321
Christian Heimes94b7d3d2007-12-11 20:20:39 +0000322 if (!PyArg_ParseTuple(args, "O|U:format", &value, &spec))
323 goto done;
Eric Smith81936692007-08-31 01:14:01 +0000324
Christian Heimes94b7d3d2007-12-11 20:20:39 +0000325 /* initialize the default value */
326 if (spec == NULL) {
327 empty = PyUnicode_FromUnicode(NULL, 0);
328 spec = empty;
329 }
Eric Smith8c663262007-08-25 02:26:07 +0000330
Christian Heimes94b7d3d2007-12-11 20:20:39 +0000331 /* Make sure the type is initialized. float gets initialized late */
Christian Heimes90aa7642007-12-19 02:45:37 +0000332 if (Py_TYPE(value)->tp_dict == NULL)
333 if (PyType_Ready(Py_TYPE(value)) < 0)
Christian Heimes94b7d3d2007-12-11 20:20:39 +0000334 goto done;
Eric Smith8c663262007-08-25 02:26:07 +0000335
Christian Heimes94b7d3d2007-12-11 20:20:39 +0000336 /* Find the (unbound!) __format__ method (a borrowed reference) */
Christian Heimes90aa7642007-12-19 02:45:37 +0000337 meth = _PyType_Lookup(Py_TYPE(value), format_str);
Christian Heimes94b7d3d2007-12-11 20:20:39 +0000338 if (meth == NULL) {
339 PyErr_Format(PyExc_TypeError,
340 "Type %.100s doesn't define __format__",
Christian Heimes90aa7642007-12-19 02:45:37 +0000341 Py_TYPE(value)->tp_name);
Christian Heimes94b7d3d2007-12-11 20:20:39 +0000342 goto done;
343 }
Eric Smith8c663262007-08-25 02:26:07 +0000344
Christian Heimes94b7d3d2007-12-11 20:20:39 +0000345 /* And call it, binding it to the value */
346 result = PyObject_CallFunctionObjArgs(meth, value, spec, NULL);
Eric Smith8c663262007-08-25 02:26:07 +0000347
Christian Heimes94b7d3d2007-12-11 20:20:39 +0000348 if (result && !PyUnicode_Check(result)) {
349 PyErr_SetString(PyExc_TypeError,
350 "__format__ method did not return string");
351 Py_DECREF(result);
352 result = NULL;
353 goto done;
354 }
Eric Smith8c663262007-08-25 02:26:07 +0000355
Eric Smith81936692007-08-31 01:14:01 +0000356done:
Christian Heimes94b7d3d2007-12-11 20:20:39 +0000357 Py_XDECREF(empty);
358 return result;
Eric Smith8c663262007-08-25 02:26:07 +0000359}
360
Eric Smith8c663262007-08-25 02:26:07 +0000361PyDoc_STRVAR(format_doc,
Eric Smith81936692007-08-31 01:14:01 +0000362"format(value[, format_spec]) -> string\n\
Eric Smith8c663262007-08-25 02:26:07 +0000363\n\
Eric Smith81936692007-08-31 01:14:01 +0000364Returns value.__format__(format_spec)\n\
365format_spec defaults to \"\"");
366
Guido van Rossum7fcf2242007-05-04 17:43:11 +0000367static PyObject *
Walter Dörwalde7efd592007-06-05 20:07:21 +0000368builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000369{
370 long x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000371
Walter Dörwalde7efd592007-06-05 20:07:21 +0000372 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum09095f32000-03-10 23:00:52 +0000373 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000374
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000375 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000376}
377
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000378PyDoc_VAR(chr_doc) = PyDoc_STR(
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000379"chr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000380\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000381Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000382)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000383#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000384PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000385"\nIf 0x10000 <= i, a surrogate pair is returned."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000386)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000387#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000388;
Guido van Rossum09095f32000-03-10 23:00:52 +0000389
390
391static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000392builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000393{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000394 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000395 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000396
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000397 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000398 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000399 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000400 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +0000401 return PyLong_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000402}
403
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000404PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000405"cmp(x, y) -> integer\n\
406\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000407Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000408
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000409
410static char *
411source_as_string(PyObject *cmd)
412{
413 char *str;
414 Py_ssize_t size;
415
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000416 if (PyUnicode_Check(cmd)) {
417 cmd = _PyUnicode_AsDefaultEncodedString(cmd, NULL);
418 if (cmd == NULL)
419 return NULL;
420 }
Guido van Rossuma4b8d1d2007-08-27 15:02:28 +0000421 else if (!PyObject_CheckReadBuffer(cmd)) {
422 PyErr_SetString(PyExc_TypeError,
423 "eval()/exec() arg 1 must be a string, bytes or code object");
424 return NULL;
425 }
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000426 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &size) < 0) {
427 return NULL;
428 }
429 if (strlen(str) != size) {
430 PyErr_SetString(PyExc_TypeError,
431 "source code string cannot contain null bytes");
432 return NULL;
433 }
434 return str;
435}
436
Guido van Rossum79f25d91997-04-29 20:08:16 +0000437static PyObject *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000438builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000439{
440 char *str;
441 char *filename;
442 char *startstr;
443 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000444 int dont_inherit = 0;
445 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000446 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000447 PyObject *cmd;
Guido van Rossumd8faa362007-04-27 19:54:29 +0000448 static char *kwlist[] = {"source", "filename", "mode", "flags",
449 "dont_inherit", NULL};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000450
Guido van Rossumd8faa362007-04-27 19:54:29 +0000451 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
452 kwlist, &cmd, &filename, &startstr,
453 &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000454 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000455
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000456 cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000457
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000458 str = source_as_string(cmd);
459 if (str == NULL)
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000460 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000461
Guido van Rossum5b722181993-03-30 17:46:03 +0000462 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000463 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000464 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000465 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000466 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000467 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000468 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000469 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000470 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000471 return NULL;
Guido van Rossum5b722181993-03-30 17:46:03 +0000472 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000473
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000474 if (supplied_flags &
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000475 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000476 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000477 PyErr_SetString(PyExc_ValueError,
478 "compile(): unrecognised flags");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000479 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000480 }
481 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
482
Tim Peters6cd6a822001-08-17 22:11:27 +0000483 if (!dont_inherit) {
484 PyEval_MergeCompilerFlags(&cf);
485 }
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000486 return Py_CompileStringFlags(str, filename, start, &cf);
Guido van Rossum5b722181993-03-30 17:46:03 +0000487}
488
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000489PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000490"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000491\n\
492Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000493into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000494The filename will be used for run-time error messages.\n\
495The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000496single (interactive) statement, or 'eval' to compile an expression.\n\
497The flags argument, if present, controls which future statements influence\n\
498the compilation of the code.\n\
499The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
500the effects of any future statements in effect in the code calling\n\
501compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000502in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000503
Guido van Rossum79f25d91997-04-29 20:08:16 +0000504static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000505builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000506{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000507 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000508
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000509 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000510 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000511 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000512}
513
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000514PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000515"dir([object]) -> list of strings\n"
516"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000517"If called without an argument, return the names in the current scope.\n"
518"Else, return an alphabetized list of names comprising (some of) the attributes\n"
519"of the given object, and of attributes reachable from it.\n"
520"If the object supplies a method named __dir__, it will be used; otherwise\n"
521"the default dir() logic is used and returns:\n"
522" for a module object: the module's attributes.\n"
523" for a class object: its attributes, and recursively the attributes\n"
524" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000525" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000526" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000527
Guido van Rossum79f25d91997-04-29 20:08:16 +0000528static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000529builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000530{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000531 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000532
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000533 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000534 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000535 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000536}
537
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000538PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000539"divmod(x, y) -> (div, mod)\n\
540\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000541Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000542
543
Guido van Rossum79f25d91997-04-29 20:08:16 +0000544static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000545builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000546{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000547 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000548 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000549 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000550 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000551
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000552 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000553 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000554 if (locals != Py_None && !PyMapping_Check(locals)) {
555 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000556 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000557 }
558 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000559 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000560 "globals must be a real dict; try eval(expr, {}, mapping)"
561 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000562 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000563 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000564 if (globals == Py_None) {
565 globals = PyEval_GetGlobals();
566 if (locals == Py_None)
567 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000568 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000569 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000570 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000571
Georg Brandl77c85e62005-09-15 10:46:13 +0000572 if (globals == NULL || locals == NULL) {
573 PyErr_SetString(PyExc_TypeError,
574 "eval must be given globals and locals "
575 "when called without a frame");
576 return NULL;
577 }
578
Guido van Rossum79f25d91997-04-29 20:08:16 +0000579 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
580 if (PyDict_SetItemString(globals, "__builtins__",
581 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000582 return NULL;
583 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000584
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000585 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000586 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000587 PyErr_SetString(PyExc_TypeError,
588 "code object passed to eval() may not contain free variables");
589 return NULL;
590 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000591 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000592 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000593
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000594 str = source_as_string(cmd);
595 if (str == NULL)
Guido van Rossum94390a41992-08-14 15:14:30 +0000596 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000597
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000598 while (*str == ' ' || *str == '\t')
599 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000600
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000601 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Tim Peters9fa96be2001-08-17 23:04:59 +0000602 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000603 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
604 Py_XDECREF(tmp);
605 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000606}
607
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000608PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000609"eval(source[, globals[, locals]]) -> value\n\
610\n\
611Evaluate the source in the context of globals and locals.\n\
612The source may be a string representing a Python expression\n\
613or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000614The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000615defaulting to the current globals and locals.\n\
616If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000617
Georg Brandl7cae87c2006-09-06 06:51:57 +0000618static PyObject *
619builtin_exec(PyObject *self, PyObject *args)
620{
621 PyObject *v;
622 PyObject *prog, *globals = Py_None, *locals = Py_None;
623 int plain = 0;
624
625 if (!PyArg_ParseTuple(args, "O|OO:exec", &prog, &globals, &locals))
626 return NULL;
627
628 if (globals == Py_None) {
629 globals = PyEval_GetGlobals();
630 if (locals == Py_None) {
631 locals = PyEval_GetLocals();
632 plain = 1;
633 }
634 if (!globals || !locals) {
635 PyErr_SetString(PyExc_SystemError,
636 "globals and locals cannot be NULL");
637 return NULL;
638 }
639 }
640 else if (locals == Py_None)
641 locals = globals;
Neal Norwitz6ea45d32007-08-26 04:19:43 +0000642 if (!PyUnicode_Check(prog) &&
Guido van Rossumda5b8f22007-06-12 23:30:11 +0000643 !PyCode_Check(prog)) {
Georg Brandl7cae87c2006-09-06 06:51:57 +0000644 PyErr_Format(PyExc_TypeError,
645 "exec() arg 1 must be a string, file, or code "
646 "object, not %.100s", prog->ob_type->tp_name);
647 return NULL;
648 }
649 if (!PyDict_Check(globals)) {
650 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
651 globals->ob_type->tp_name);
652 return NULL;
653 }
654 if (!PyMapping_Check(locals)) {
655 PyErr_Format(PyExc_TypeError,
656 "arg 3 must be a mapping or None, not %.100s",
657 locals->ob_type->tp_name);
658 return NULL;
659 }
660 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
661 if (PyDict_SetItemString(globals, "__builtins__",
662 PyEval_GetBuiltins()) != 0)
663 return NULL;
664 }
665
666 if (PyCode_Check(prog)) {
667 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
668 PyErr_SetString(PyExc_TypeError,
669 "code object passed to exec() may not "
670 "contain free variables");
671 return NULL;
672 }
673 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
674 }
Georg Brandl7cae87c2006-09-06 06:51:57 +0000675 else {
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000676 char *str = source_as_string(prog);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000677 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000678 if (str == NULL)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000679 return NULL;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000680 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000681 if (PyEval_MergeCompilerFlags(&cf))
682 v = PyRun_StringFlags(str, Py_file_input, globals,
683 locals, &cf);
684 else
685 v = PyRun_String(str, Py_file_input, globals, locals);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000686 }
687 if (v == NULL)
688 return NULL;
689 Py_DECREF(v);
690 Py_RETURN_NONE;
691}
692
693PyDoc_STRVAR(exec_doc,
694"exec(object[, globals[, locals]])\n\
695\n\
696Read and execute code from a object, which can be a string, a code\n\
697object or a file object.\n\
698The globals and locals are dictionaries, defaulting to the current\n\
699globals and locals. If only globals is given, locals defaults to it.");
700
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000701
Guido van Rossum79f25d91997-04-29 20:08:16 +0000702static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000703builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000704{
Neal Norwitz6ea45d32007-08-26 04:19:43 +0000705 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000706 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000707
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000708 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000709 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000710
Martin v. Löwis5b222132007-06-10 09:51:05 +0000711 if (!PyUnicode_Check(name)) {
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000712 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000713 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000714 return NULL;
715 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000716 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000717 if (result == NULL && dflt != NULL &&
718 PyErr_ExceptionMatches(PyExc_AttributeError))
719 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000720 PyErr_Clear();
721 Py_INCREF(dflt);
722 result = dflt;
723 }
724 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000725}
726
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000727PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000728"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000729\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000730Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
731When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000732exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000733
734
Guido van Rossum79f25d91997-04-29 20:08:16 +0000735static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000736builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000737{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000738 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000739
Guido van Rossum79f25d91997-04-29 20:08:16 +0000740 d = PyEval_GetGlobals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000741 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000742 return d;
743}
744
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000745PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000746"globals() -> dictionary\n\
747\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000748Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000749
750
Guido van Rossum79f25d91997-04-29 20:08:16 +0000751static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000752builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000753{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000754 PyObject *v;
755 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000756
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000757 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000758 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000759 if (!PyUnicode_Check(name)) {
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000760 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000761 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000762 return NULL;
763 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000764 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000765 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000766 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000767 Py_INCREF(Py_False);
768 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000769 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000770 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000771 Py_INCREF(Py_True);
772 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000773}
774
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000775PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000776"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000777\n\
778Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000779(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000780
781
Guido van Rossum79f25d91997-04-29 20:08:16 +0000782static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000783builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000784{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000785 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000786}
787
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000788PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000789"id(object) -> integer\n\
790\n\
791Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000792simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000793
794
Guido van Rossum79f25d91997-04-29 20:08:16 +0000795static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000796builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000797{
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000798 PyObject *itertools, *imap, *result;
Christian Heimes819b8bf2008-01-03 23:05:47 +0000799 itertools = PyImport_ImportModuleNoBlock("itertools");
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000800 if (itertools == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000801 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000802 imap = PyObject_GetAttrString(itertools, "imap");
803 Py_DECREF(itertools);
804 if (imap == NULL)
Tim Peters4e9afdc2001-05-03 23:54:49 +0000805 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000806 result = PyObject_Call(imap, args, NULL);
807 Py_DECREF(imap);
Tim Peters4e9afdc2001-05-03 23:54:49 +0000808 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000809}
810
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000811PyDoc_STRVAR(map_doc,
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000812"map(function, iterable[, iterable, ...]) -> iterator\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000813\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000814Return an iterator yielding the results of applying the function to the\n\
815items of the argument iterables(s). If more than one iterable is given,\n\
816the function is called with an argument list consisting of the\n\
817corresponding item of each iterable, until an iterable is exhausted.\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000818(This is identical to itertools.imap().)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000819
820
Guido van Rossum79f25d91997-04-29 20:08:16 +0000821static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +0000822builtin_next(PyObject *self, PyObject *args)
823{
824 PyObject *it, *res;
825 PyObject *def = NULL;
826
827 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
828 return NULL;
829 if (!PyIter_Check(it)) {
830 PyErr_Format(PyExc_TypeError,
831 "%.200s object is not an iterator", it->ob_type->tp_name);
832 return NULL;
833 }
834
835 res = (*it->ob_type->tp_iternext)(it);
836 if (res == NULL) {
837 if (def) {
838 if (PyErr_Occurred() &&
839 !PyErr_ExceptionMatches(PyExc_StopIteration))
840 return NULL;
841 PyErr_Clear();
842 Py_INCREF(def);
843 return def;
844 } else if (PyErr_Occurred()) {
845 return NULL;
846 } else {
847 PyErr_SetNone(PyExc_StopIteration);
848 return NULL;
849 }
850 }
851 return res;
852}
853
854PyDoc_STRVAR(next_doc,
855"next(iterator[, default])\n\
856\n\
857Return the next item from the iterator. If default is given and the iterator\n\
858is exhausted, it is returned instead of raising StopIteration.");
859
860
861static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000862builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000863{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000864 PyObject *v;
865 PyObject *name;
866 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000867
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000868 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000869 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000870 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000871 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000872 Py_INCREF(Py_None);
873 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000874}
875
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000876PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000877"setattr(object, name, value)\n\
878\n\
879Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000880``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000881
882
Guido van Rossum79f25d91997-04-29 20:08:16 +0000883static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000884builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000885{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000886 PyObject *v;
887 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000888
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000889 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +0000890 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000891 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000892 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000893 Py_INCREF(Py_None);
894 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +0000895}
896
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000897PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +0000898"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000899\n\
900Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000901``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000902
903
Guido van Rossum79f25d91997-04-29 20:08:16 +0000904static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000905builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000906{
Guido van Rossum9bfef441993-03-29 10:43:31 +0000907 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000908
Guido van Rossum79f25d91997-04-29 20:08:16 +0000909 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000910 if (x == -1)
911 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +0000912 return PyLong_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000913}
914
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000915PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000916"hash(object) -> integer\n\
917\n\
918Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000919the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000920
921
Guido van Rossum79f25d91997-04-29 20:08:16 +0000922static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000923builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +0000924{
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000925 return PyNumber_ToBase(v, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +0000926}
927
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000928PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000929"hex(number) -> string\n\
930\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000931Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000932
933
Guido van Rossum79f25d91997-04-29 20:08:16 +0000934static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000935builtin_iter(PyObject *self, PyObject *args)
936{
937 PyObject *v, *w = NULL;
938
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000939 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000940 return NULL;
941 if (w == NULL)
942 return PyObject_GetIter(v);
943 if (!PyCallable_Check(v)) {
944 PyErr_SetString(PyExc_TypeError,
945 "iter(v, w): v must be callable");
946 return NULL;
947 }
948 return PyCallIter_New(v, w);
949}
950
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000951PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000952"iter(collection) -> iterator\n\
953iter(callable, sentinel) -> iterator\n\
954\n\
955Get an iterator from an object. In the first form, the argument must\n\
956supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000957In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000958
959
960static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000961builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000962{
Martin v. Löwis18e16552006-02-15 17:27:45 +0000963 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000964
Jeremy Hylton03657cf2000-07-12 13:05:33 +0000965 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +0000966 if (res < 0 && PyErr_Occurred())
967 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +0000968 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000969}
970
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000971PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000972"len(object) -> integer\n\
973\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000974Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000975
976
Guido van Rossum79f25d91997-04-29 20:08:16 +0000977static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000978builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000979{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000980 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000981
Guido van Rossum79f25d91997-04-29 20:08:16 +0000982 d = PyEval_GetLocals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000983 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000984 return d;
985}
986
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000987PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000988"locals() -> dictionary\n\
989\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +0000990Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000991
992
Guido van Rossum79f25d91997-04-29 20:08:16 +0000993static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000994min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000995{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000996 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +0000997 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000998
Guido van Rossum79f25d91997-04-29 20:08:16 +0000999 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001000 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001001 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001002 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001003
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001004 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1005 keyfunc = PyDict_GetItemString(kwds, "key");
1006 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001007 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001008 "%s() got an unexpected keyword argument", name);
1009 return NULL;
1010 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001011 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001012
Tim Petersc3074532001-05-03 07:00:32 +00001013 it = PyObject_GetIter(v);
1014 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001015 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001016
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001017 maxitem = NULL; /* the result */
1018 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001019 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001020 /* get the value from the key function */
1021 if (keyfunc != NULL) {
1022 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1023 if (val == NULL)
1024 goto Fail_it_item;
1025 }
1026 /* no key function; the value is the item */
1027 else {
1028 val = item;
1029 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001030 }
Tim Petersc3074532001-05-03 07:00:32 +00001031
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001032 /* maximum value and item are unset; set them */
1033 if (maxval == NULL) {
1034 maxitem = item;
1035 maxval = val;
1036 }
1037 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001038 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001039 int cmp = PyObject_RichCompareBool(val, maxval, op);
1040 if (cmp < 0)
1041 goto Fail_it_item_and_val;
1042 else if (cmp > 0) {
1043 Py_DECREF(maxval);
1044 Py_DECREF(maxitem);
1045 maxval = val;
1046 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001047 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001048 else {
1049 Py_DECREF(item);
1050 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001051 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001052 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001053 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001054 if (PyErr_Occurred())
1055 goto Fail_it;
1056 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001057 PyErr_Format(PyExc_ValueError,
1058 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001059 assert(maxitem == NULL);
1060 }
1061 else
1062 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001063 Py_DECREF(it);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001064 return maxitem;
1065
1066Fail_it_item_and_val:
1067 Py_DECREF(val);
1068Fail_it_item:
1069 Py_DECREF(item);
1070Fail_it:
1071 Py_XDECREF(maxval);
1072 Py_XDECREF(maxitem);
1073 Py_DECREF(it);
1074 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001075}
1076
Guido van Rossum79f25d91997-04-29 20:08:16 +00001077static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001078builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001079{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001080 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001081}
1082
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001083PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001084"min(iterable[, key=func]) -> value\n\
1085min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001086\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001087With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001088With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001089
1090
Guido van Rossum79f25d91997-04-29 20:08:16 +00001091static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001092builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001093{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001094 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001095}
1096
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001097PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001098"max(iterable[, key=func]) -> value\n\
1099max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001100\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001101With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001102With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001103
1104
Guido van Rossum79f25d91997-04-29 20:08:16 +00001105static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001106builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001107{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001108 return PyNumber_ToBase(v, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001109}
1110
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001111PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001112"oct(number) -> string\n\
1113\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001114Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001115
1116
Guido van Rossum79f25d91997-04-29 20:08:16 +00001117static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001118builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001119{
Guido van Rossum09095f32000-03-10 23:00:52 +00001120 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001121 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001122
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001123 if (PyString_Check(obj)) {
1124 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001125 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001126 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Christian Heimes217cfd12007-12-02 14:31:20 +00001127 return PyLong_FromLong(ord);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001128 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001129 }
1130 else if (PyUnicode_Check(obj)) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001131 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001132 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001133 ord = (long)*PyUnicode_AS_UNICODE(obj);
Christian Heimes217cfd12007-12-02 14:31:20 +00001134 return PyLong_FromLong(ord);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001135 }
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001136#ifndef Py_UNICODE_WIDE
1137 if (size == 2) {
1138 /* Decode a valid surrogate pair */
1139 int c0 = PyUnicode_AS_UNICODE(obj)[0];
1140 int c1 = PyUnicode_AS_UNICODE(obj)[1];
1141 if (0xD800 <= c0 && c0 <= 0xDBFF &&
1142 0xDC00 <= c1 && c1 <= 0xDFFF) {
1143 ord = ((((c0 & 0x03FF) << 10) | (c1 & 0x03FF)) +
1144 0x00010000);
Christian Heimes217cfd12007-12-02 14:31:20 +00001145 return PyLong_FromLong(ord);
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001146 }
1147 }
1148#endif
Guido van Rossum6f376c42007-05-24 14:31:33 +00001149 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001150 else if (PyBytes_Check(obj)) {
1151 /* XXX Hopefully this is temporary */
1152 size = PyBytes_GET_SIZE(obj);
1153 if (size == 1) {
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001154 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
Christian Heimes217cfd12007-12-02 14:31:20 +00001155 return PyLong_FromLong(ord);
Guido van Rossum98f97462007-04-13 03:31:13 +00001156 }
1157 }
1158 else {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001159 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001160 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001161 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001162 return NULL;
1163 }
1164
Guido van Rossumad991772001-01-12 16:03:05 +00001165 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001166 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001167 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001168 size);
1169 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001170}
1171
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001172PyDoc_VAR(ord_doc) = PyDoc_STR(
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001173"ord(c) -> integer\n\
1174\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001175Return the integer ordinal of a one-character string."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001176)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001177#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001178PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001179"\nA valid surrogate pair is also accepted."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001180)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001181#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001182;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001183
1184
Guido van Rossum79f25d91997-04-29 20:08:16 +00001185static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001186builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001187{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001188 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001189
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001190 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001191 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001192 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001193}
1194
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001195PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001196"pow(x, y[, z]) -> number\n\
1197\n\
1198With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001199equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001200
1201
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001202
Guido van Rossum34343512006-11-30 22:13:52 +00001203static PyObject *
1204builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1205{
1206 static char *kwlist[] = {"sep", "end", "file", 0};
Georg Brandl257d3d92007-02-26 10:35:10 +00001207 static PyObject *dummy_args;
Guido van Rossum34343512006-11-30 22:13:52 +00001208 PyObject *sep = NULL, *end = NULL, *file = NULL;
1209 int i, err;
1210
Georg Brandl257d3d92007-02-26 10:35:10 +00001211 if (dummy_args == NULL) {
1212 if (!(dummy_args = PyTuple_New(0)))
1213 return NULL;
1214 }
Georg Brandl88fc6642007-02-09 21:28:07 +00001215 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
Guido van Rossum34343512006-11-30 22:13:52 +00001216 kwlist, &sep, &end, &file))
Christian Heimesfef9bba2007-11-13 15:24:14 +00001217 return NULL;
1218 if (file == NULL || file == Py_None) {
Guido van Rossum34343512006-11-30 22:13:52 +00001219 file = PySys_GetObject("stdout");
Christian Heimesfef9bba2007-11-13 15:24:14 +00001220 /* sys.stdout may be None when FILE* stdout isn't connected */
1221 if (file == Py_None)
1222 Py_RETURN_NONE;
1223 }
Guido van Rossum34343512006-11-30 22:13:52 +00001224
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001225 if (sep && sep != Py_None && !PyUnicode_Check(sep)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001226 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001227 "sep must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001228 sep->ob_type->tp_name);
1229 return NULL;
1230 }
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001231 if (end && end != Py_None && !PyUnicode_Check(end)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001232 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001233 "end must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001234 end->ob_type->tp_name);
1235 return NULL;
1236 }
Guido van Rossum34343512006-11-30 22:13:52 +00001237
1238 for (i = 0; i < PyTuple_Size(args); i++) {
1239 if (i > 0) {
1240 if (sep == NULL || sep == Py_None)
1241 err = PyFile_WriteString(" ", file);
1242 else
1243 err = PyFile_WriteObject(sep, file,
1244 Py_PRINT_RAW);
1245 if (err)
1246 return NULL;
1247 }
1248 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1249 Py_PRINT_RAW);
1250 if (err)
1251 return NULL;
1252 }
1253
1254 if (end == NULL || end == Py_None)
1255 err = PyFile_WriteString("\n", file);
1256 else
1257 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1258 if (err)
1259 return NULL;
1260
1261 Py_RETURN_NONE;
1262}
1263
1264PyDoc_STRVAR(print_doc,
Guido van Rossum452bf512007-02-09 05:32:43 +00001265"print(value, ..., file=None, sep=' ', end='\\n')\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001266\n\
1267Prints the values to a stream, or to sys.stdout by default.\n\
1268Optional keyword arguments:\n\
1269file: a file-like object (stream); defaults to the current sys.stdout.\n\
1270sep: string inserted between values, default a space.\n\
1271end: string appended after the last value, default a newline.");
1272
1273
Guido van Rossuma88a0332007-02-26 16:59:55 +00001274static PyObject *
1275builtin_input(PyObject *self, PyObject *args)
1276{
Guido van Rossumeba76962007-05-27 09:13:28 +00001277 PyObject *promptarg = NULL;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001278 PyObject *fin = PySys_GetObject("stdin");
1279 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossumeba76962007-05-27 09:13:28 +00001280 PyObject *ferr = PySys_GetObject("stderr");
1281 PyObject *tmp;
1282 long fd;
1283 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001284
Guido van Rossumeba76962007-05-27 09:13:28 +00001285 /* Parse arguments */
1286 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg))
Guido van Rossuma88a0332007-02-26 16:59:55 +00001287 return NULL;
1288
Guido van Rossumeba76962007-05-27 09:13:28 +00001289 /* Check that stdin/out/err are intact */
Christian Heimes2be03732007-11-15 02:26:46 +00001290 if (fin == NULL || fin == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001291 PyErr_SetString(PyExc_RuntimeError,
1292 "input(): lost sys.stdin");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001293 return NULL;
1294 }
Christian Heimes2be03732007-11-15 02:26:46 +00001295 if (fout == NULL || fout == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001296 PyErr_SetString(PyExc_RuntimeError,
1297 "input(): lost sys.stdout");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001298 return NULL;
1299 }
Christian Heimes2be03732007-11-15 02:26:46 +00001300 if (ferr == NULL || ferr == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001301 PyErr_SetString(PyExc_RuntimeError,
1302 "input(): lost sys.stderr");
1303 return NULL;
1304 }
1305
1306 /* First of all, flush stderr */
1307 tmp = PyObject_CallMethod(ferr, "flush", "");
1308 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001309 PyErr_Clear();
1310 else
1311 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001312
1313 /* We should only use (GNU) readline if Python's sys.stdin and
1314 sys.stdout are the same as C's stdin and stdout, because we
1315 need to pass it those. */
1316 tmp = PyObject_CallMethod(fin, "fileno", "");
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001317 if (tmp == NULL) {
1318 PyErr_Clear();
1319 tty = 0;
1320 }
1321 else {
Christian Heimes217cfd12007-12-02 14:31:20 +00001322 fd = PyLong_AsLong(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001323 Py_DECREF(tmp);
1324 if (fd < 0 && PyErr_Occurred())
1325 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001326 tty = fd == fileno(stdin) && isatty(fd);
1327 }
1328 if (tty) {
1329 tmp = PyObject_CallMethod(fout, "fileno", "");
1330 if (tmp == NULL)
1331 PyErr_Clear();
1332 else {
Christian Heimes217cfd12007-12-02 14:31:20 +00001333 fd = PyLong_AsLong(tmp);
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001334 Py_DECREF(tmp);
1335 if (fd < 0 && PyErr_Occurred())
1336 return NULL;
1337 tty = fd == fileno(stdout) && isatty(fd);
1338 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001339 }
1340
1341 /* If we're interactive, use (GNU) readline */
1342 if (tty) {
Guido van Rossuma88a0332007-02-26 16:59:55 +00001343 PyObject *po;
1344 char *prompt;
1345 char *s;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001346 PyObject *stdin_encoding;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001347 PyObject *result;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001348
1349 stdin_encoding = PyObject_GetAttrString(fin, "encoding");
1350 if (!stdin_encoding)
1351 /* stdin is a text stream, so it must have an
1352 encoding. */
1353 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001354 tmp = PyObject_CallMethod(fout, "flush", "");
1355 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001356 PyErr_Clear();
1357 else
1358 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001359 if (promptarg != NULL) {
1360 po = PyObject_Str(promptarg);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001361 if (po == NULL) {
1362 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001363 return NULL;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001364 }
Christian Heimes91c77302007-11-25 09:18:01 +00001365 prompt = PyUnicode_AsString(po);
Guido van Rossumeba76962007-05-27 09:13:28 +00001366 if (prompt == NULL) {
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001367 Py_DECREF(stdin_encoding);
Guido van Rossumeba76962007-05-27 09:13:28 +00001368 Py_DECREF(po);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001369 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001370 }
Guido van Rossuma88a0332007-02-26 16:59:55 +00001371 }
1372 else {
1373 po = NULL;
1374 prompt = "";
1375 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001376 s = PyOS_Readline(stdin, stdout, prompt);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001377 Py_XDECREF(po);
1378 if (s == NULL) {
1379 if (!PyErr_Occurred())
1380 PyErr_SetNone(PyExc_KeyboardInterrupt);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001381 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001382 return NULL;
1383 }
1384 if (*s == '\0') {
1385 PyErr_SetNone(PyExc_EOFError);
1386 result = NULL;
1387 }
1388 else { /* strip trailing '\n' */
1389 size_t len = strlen(s);
1390 if (len > PY_SSIZE_T_MAX) {
1391 PyErr_SetString(PyExc_OverflowError,
1392 "input: input too long");
1393 result = NULL;
1394 }
1395 else {
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001396 result = PyUnicode_Decode
1397 (s, len-1,
1398 PyUnicode_AsString(stdin_encoding),
1399 NULL);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001400 }
1401 }
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001402 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001403 PyMem_FREE(s);
1404 return result;
1405 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001406
1407 /* Fallback if we're not interactive */
1408 if (promptarg != NULL) {
1409 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0)
Guido van Rossuma88a0332007-02-26 16:59:55 +00001410 return NULL;
1411 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001412 tmp = PyObject_CallMethod(fout, "flush", "");
1413 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001414 PyErr_Clear();
1415 else
1416 Py_DECREF(tmp);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001417 return PyFile_GetLine(fin, -1);
1418}
1419
1420PyDoc_STRVAR(input_doc,
1421"input([prompt]) -> string\n\
1422\n\
1423Read a string from standard input. The trailing newline is stripped.\n\
1424If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1425On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1426is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001427
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001428
Guido van Rossum79f25d91997-04-29 20:08:16 +00001429static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001430builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001431{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001432 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001433}
1434
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001435PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001436"repr(object) -> string\n\
1437\n\
1438Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001439For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001440
1441
Guido van Rossum79f25d91997-04-29 20:08:16 +00001442static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001443builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001444{
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001445#define UNDEF_NDIGITS (-0x7fffffff) /* Unlikely ndigits value */
1446 static PyObject *round_str = NULL;
1447 int ndigits = UNDEF_NDIGITS;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001448 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001449 PyObject *number, *round;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001450
Alex Martelliae211f92007-08-22 23:21:33 +00001451 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|i:round",
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001452 kwlist, &number, &ndigits))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001453 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00001454
Christian Heimes90aa7642007-12-19 02:45:37 +00001455 if (Py_TYPE(number)->tp_dict == NULL) {
1456 if (PyType_Ready(Py_TYPE(number)) < 0)
Guido van Rossum15d3d042007-08-24 02:02:45 +00001457 return NULL;
1458 }
1459
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001460 if (round_str == NULL) {
1461 round_str = PyUnicode_FromString("__round__");
1462 if (round_str == NULL)
Alex Martelliae211f92007-08-22 23:21:33 +00001463 return NULL;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001464 }
1465
Christian Heimes90aa7642007-12-19 02:45:37 +00001466 round = _PyType_Lookup(Py_TYPE(number), round_str);
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001467 if (round == NULL) {
1468 PyErr_Format(PyExc_TypeError,
1469 "type %.100s doesn't define __round__ method",
Christian Heimes90aa7642007-12-19 02:45:37 +00001470 Py_TYPE(number)->tp_name);
Alex Martelliae211f92007-08-22 23:21:33 +00001471 return NULL;
1472 }
1473
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001474 if (ndigits == UNDEF_NDIGITS)
1475 return PyObject_CallFunction(round, "O", number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001476 else
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001477 return PyObject_CallFunction(round, "Oi", number, ndigits);
1478#undef UNDEF_NDIGITS
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001479}
1480
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001481PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001482"round(number[, ndigits]) -> floating point number\n\
1483\n\
1484Round a number to a given precision in decimal digits (default 0 digits).\n\
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001485This returns an int when called with one argument, otherwise a float.\n\
1486Precision may be negative.");
1487
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001488
Raymond Hettinger64958a12003-12-17 20:43:33 +00001489static PyObject *
1490builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1491{
1492 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
1493 PyObject *callable;
Martin v. Löwis15e62742006-02-27 16:46:16 +00001494 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001495 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001496
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001497 /* args 1-4 should match listsort in Objects/listobject.c */
Armin Rigo71d7e702005-09-20 18:13:03 +00001498 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
1499 kwlist, &seq, &compare, &keyfunc, &reverse))
1500 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001501
1502 newlist = PySequence_List(seq);
1503 if (newlist == NULL)
1504 return NULL;
1505
1506 callable = PyObject_GetAttrString(newlist, "sort");
1507 if (callable == NULL) {
1508 Py_DECREF(newlist);
1509 return NULL;
1510 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001511
Raymond Hettinger64958a12003-12-17 20:43:33 +00001512 newargs = PyTuple_GetSlice(args, 1, 4);
1513 if (newargs == NULL) {
1514 Py_DECREF(newlist);
1515 Py_DECREF(callable);
1516 return NULL;
1517 }
1518
1519 v = PyObject_Call(callable, newargs, kwds);
1520 Py_DECREF(newargs);
1521 Py_DECREF(callable);
1522 if (v == NULL) {
1523 Py_DECREF(newlist);
1524 return NULL;
1525 }
1526 Py_DECREF(v);
1527 return newlist;
1528}
1529
1530PyDoc_STRVAR(sorted_doc,
1531"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001532
Guido van Rossum79f25d91997-04-29 20:08:16 +00001533static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001534builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001535{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001536 PyObject *v = NULL;
1537 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001538
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001539 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001540 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001541 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001542 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001543 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001544 if (!PyErr_Occurred())
1545 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001546 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001547 }
1548 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001549 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001550 }
1551 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001552 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001553 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001554 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001555 "vars() argument must have __dict__ attribute");
1556 return NULL;
1557 }
1558 }
1559 return d;
1560}
1561
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001562PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001563"vars([object]) -> dictionary\n\
1564\n\
1565Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001566With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001567
Alex Martelli86d8b342007-08-22 22:39:42 +00001568static PyObject *
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001569builtin_trunc(PyObject *self, PyObject *number)
Alex Martelli86d8b342007-08-22 22:39:42 +00001570{
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001571 static PyObject *trunc_str = NULL;
1572 PyObject *trunc;
1573
Christian Heimes90aa7642007-12-19 02:45:37 +00001574 if (Py_TYPE(number)->tp_dict == NULL) {
1575 if (PyType_Ready(Py_TYPE(number)) < 0)
Guido van Rossum15d3d042007-08-24 02:02:45 +00001576 return NULL;
1577 }
1578
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001579 if (trunc_str == NULL) {
1580 trunc_str = PyUnicode_FromString("__trunc__");
1581 if (trunc_str == NULL)
1582 return NULL;
1583 }
1584
Christian Heimes90aa7642007-12-19 02:45:37 +00001585 trunc = _PyType_Lookup(Py_TYPE(number), trunc_str);
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001586 if (trunc == NULL) {
1587 PyErr_Format(PyExc_TypeError,
1588 "type %.100s doesn't define __trunc__ method",
Christian Heimes90aa7642007-12-19 02:45:37 +00001589 Py_TYPE(number)->tp_name);
Alex Martelli86d8b342007-08-22 22:39:42 +00001590 return NULL;
1591 }
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001592 return PyObject_CallFunction(trunc, "O", number);
Alex Martelli86d8b342007-08-22 22:39:42 +00001593}
1594
1595PyDoc_STRVAR(trunc_doc,
1596"trunc(Real) -> Integral\n\
1597\n\
1598returns the integral closest to x between 0 and x.");
1599
1600
Alex Martellia70b1912003-04-22 08:12:33 +00001601
1602static PyObject*
1603builtin_sum(PyObject *self, PyObject *args)
1604{
1605 PyObject *seq;
1606 PyObject *result = NULL;
1607 PyObject *temp, *item, *iter;
1608
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001609 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001610 return NULL;
1611
1612 iter = PyObject_GetIter(seq);
1613 if (iter == NULL)
1614 return NULL;
1615
1616 if (result == NULL) {
Christian Heimes217cfd12007-12-02 14:31:20 +00001617 result = PyLong_FromLong(0);
Alex Martellia70b1912003-04-22 08:12:33 +00001618 if (result == NULL) {
1619 Py_DECREF(iter);
1620 return NULL;
1621 }
1622 } else {
1623 /* reject string values for 'start' parameter */
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001624 if (PyUnicode_Check(result)) {
Alex Martellia70b1912003-04-22 08:12:33 +00001625 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001626 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001627 Py_DECREF(iter);
1628 return NULL;
1629 }
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001630 if (PyBytes_Check(result)) {
1631 PyErr_SetString(PyExc_TypeError,
1632 "sum() can't sum bytes [use b''.join(seq) instead]");
1633 Py_DECREF(iter);
1634 return NULL;
1635 }
1636
Alex Martelli41c9f882003-04-22 09:24:48 +00001637 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001638 }
1639
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001640#ifndef SLOW_SUM
1641 /* Fast addition by keeping temporary sums in C instead of new Python objects.
1642 Assumes all inputs are the same type. If the assumption fails, default
1643 to the more general routine.
1644 */
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001645 if (PyLong_CheckExact(result)) {
1646 int overflow;
1647 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
1648 /* If this already overflowed, don't even enter the loop. */
1649 if (overflow == 0) {
1650 Py_DECREF(result);
1651 result = NULL;
1652 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001653 while(result == NULL) {
1654 item = PyIter_Next(iter);
1655 if (item == NULL) {
1656 Py_DECREF(iter);
1657 if (PyErr_Occurred())
1658 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001659 return PyLong_FromLong(i_result);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001660 }
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001661 if (PyLong_CheckExact(item)) {
1662 long b = PyLong_AsLongAndOverflow(item, &overflow);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001663 long x = i_result + b;
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001664 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001665 i_result = x;
1666 Py_DECREF(item);
1667 continue;
1668 }
1669 }
1670 /* Either overflowed or is not an int. Restore real objects and process normally */
Christian Heimes217cfd12007-12-02 14:31:20 +00001671 result = PyLong_FromLong(i_result);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001672 temp = PyNumber_Add(result, item);
1673 Py_DECREF(result);
1674 Py_DECREF(item);
1675 result = temp;
1676 if (result == NULL) {
1677 Py_DECREF(iter);
1678 return NULL;
1679 }
1680 }
1681 }
1682
1683 if (PyFloat_CheckExact(result)) {
1684 double f_result = PyFloat_AS_DOUBLE(result);
1685 Py_DECREF(result);
1686 result = NULL;
1687 while(result == NULL) {
1688 item = PyIter_Next(iter);
1689 if (item == NULL) {
1690 Py_DECREF(iter);
1691 if (PyErr_Occurred())
1692 return NULL;
1693 return PyFloat_FromDouble(f_result);
1694 }
1695 if (PyFloat_CheckExact(item)) {
1696 PyFPE_START_PROTECT("add", return 0)
1697 f_result += PyFloat_AS_DOUBLE(item);
1698 PyFPE_END_PROTECT(f_result)
1699 Py_DECREF(item);
1700 continue;
1701 }
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001702 if (PyLong_CheckExact(item)) {
1703 long value;
1704 int overflow;
1705 value = PyLong_AsLongAndOverflow(item, &overflow);
1706 if (!overflow) {
1707 PyFPE_START_PROTECT("add", return 0)
1708 f_result += (double)value;
1709 PyFPE_END_PROTECT(f_result)
1710 Py_DECREF(item);
1711 continue;
1712 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001713 }
1714 result = PyFloat_FromDouble(f_result);
1715 temp = PyNumber_Add(result, item);
1716 Py_DECREF(result);
1717 Py_DECREF(item);
1718 result = temp;
1719 if (result == NULL) {
1720 Py_DECREF(iter);
1721 return NULL;
1722 }
1723 }
1724 }
1725#endif
1726
Alex Martellia70b1912003-04-22 08:12:33 +00001727 for(;;) {
1728 item = PyIter_Next(iter);
1729 if (item == NULL) {
1730 /* error, or end-of-sequence */
1731 if (PyErr_Occurred()) {
1732 Py_DECREF(result);
1733 result = NULL;
1734 }
1735 break;
1736 }
Alex Martellia253e182003-10-25 23:24:14 +00001737 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001738 Py_DECREF(result);
1739 Py_DECREF(item);
1740 result = temp;
1741 if (result == NULL)
1742 break;
1743 }
1744 Py_DECREF(iter);
1745 return result;
1746}
1747
1748PyDoc_STRVAR(sum_doc,
Thomas Wouters89f507f2006-12-13 04:49:30 +00001749"sum(sequence[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00001750\n\
1751Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00001752of parameter 'start' (which defaults to 0). When the sequence is\n\
1753empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00001754
1755
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001756static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001757builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001758{
1759 PyObject *inst;
1760 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001761 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001762
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001763 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001764 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001765
Guido van Rossum823649d2001-03-21 18:40:58 +00001766 retval = PyObject_IsInstance(inst, cls);
1767 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001768 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001769 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001770}
1771
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001772PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001773"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001774\n\
1775Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001776With a type as second argument, return whether that is the object's type.\n\
1777The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001778isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001779
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001780
1781static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001782builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001783{
1784 PyObject *derived;
1785 PyObject *cls;
1786 int retval;
1787
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001788 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001789 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001790
Guido van Rossum823649d2001-03-21 18:40:58 +00001791 retval = PyObject_IsSubclass(derived, cls);
1792 if (retval < 0)
1793 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001794 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001795}
1796
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001797PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001798"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001799\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00001800Return whether class C is a subclass (i.e., a derived class) of class B.\n\
1801When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
1802is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001803
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001804
Barry Warsawbd599b52000-08-03 15:45:29 +00001805static PyObject*
1806builtin_zip(PyObject *self, PyObject *args)
1807{
Guido van Rossumb65fb332006-08-25 23:26:40 +00001808 /* args must be a tuple */
1809 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00001810
Guido van Rossumb65fb332006-08-25 23:26:40 +00001811 return _PyZip_CreateIter(args);
Barry Warsawbd599b52000-08-03 15:45:29 +00001812}
1813
1814
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001815PyDoc_STRVAR(zip_doc,
Guido van Rossum801f0d72006-08-24 19:48:10 +00001816"zip(it1 [, it2 [...]]) -> iter([(it1[0], it2[0] ...), ...])\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00001817\n\
Guido van Rossum801f0d72006-08-24 19:48:10 +00001818Return an iterator yielding tuples, where each tuple contains the\n\
1819corresponding element from each of the argument iterables.\n\
1820The returned iterator ends when the shortest argument iterable is exhausted.\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001821(This is identical to itertools.izip().)");
Barry Warsawbd599b52000-08-03 15:45:29 +00001822
1823
Guido van Rossum79f25d91997-04-29 20:08:16 +00001824static PyMethodDef builtin_methods[] = {
Guido van Rossum52cc1d82007-03-18 15:41:51 +00001825 {"__build_class__", (PyCFunction)builtin___build_class__,
1826 METH_VARARGS | METH_KEYWORDS, build_class_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001827 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001828 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00001829 {"all", builtin_all, METH_O, all_doc},
1830 {"any", builtin_any, METH_O, any_doc},
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001831 {"bin", builtin_bin, METH_O, bin_doc},
Neal Norwitzc2550c72007-08-31 04:17:51 +00001832 {"chr", builtin_chr, METH_VARARGS, chr_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001833 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
Guido van Rossumd8faa362007-04-27 19:54:29 +00001834 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001835 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
1836 {"dir", builtin_dir, METH_VARARGS, dir_doc},
1837 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
1838 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00001839 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001840 {"filter", builtin_filter, METH_VARARGS, filter_doc},
Eric Smith8c663262007-08-25 02:26:07 +00001841 {"format", builtin_format, METH_VARARGS, format_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001842 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
1843 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
1844 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
1845 {"hash", builtin_hash, METH_O, hash_doc},
1846 {"hex", builtin_hex, METH_O, hex_doc},
1847 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00001848 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001849 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
1850 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
1851 {"iter", builtin_iter, METH_VARARGS, iter_doc},
1852 {"len", builtin_len, METH_O, len_doc},
1853 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
1854 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001855 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
1856 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandla18af4e2007-04-21 15:47:16 +00001857 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001858 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001859 {"ord", builtin_ord, METH_O, ord_doc},
1860 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00001861 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001862 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001863 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001864 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00001865 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00001866 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001867 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Alex Martelli86d8b342007-08-22 22:39:42 +00001868 {"trunc", builtin_trunc, METH_O, trunc_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001869 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00001870 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00001871};
1872
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001873PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001874"Built-in functions, exceptions, and other objects.\n\
1875\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001876Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001877
Guido van Rossum25ce5661997-08-02 03:10:38 +00001878PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001879_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001880{
Fred Drake5550de32000-06-20 04:54:19 +00001881 PyObject *mod, *dict, *debug;
Georg Brandl1a3284e2007-12-02 09:40:06 +00001882 mod = Py_InitModule4("builtins", builtin_methods,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001883 builtin_doc, (PyObject *)NULL,
1884 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001885 if (mod == NULL)
1886 return NULL;
1887 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00001888
Tim Peters7571a0f2003-03-23 17:52:28 +00001889#ifdef Py_TRACE_REFS
Georg Brandl1a3284e2007-12-02 09:40:06 +00001890 /* "builtins" exposes a number of statically allocated objects
Tim Peters7571a0f2003-03-23 17:52:28 +00001891 * that, before this code was added in 2.3, never showed up in
1892 * the list of "all objects" maintained by Py_TRACE_REFS. As a
1893 * result, programs leaking references to None and False (etc)
1894 * couldn't be diagnosed by examining sys.getobjects(0).
1895 */
1896#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
1897#else
1898#define ADD_TO_ALL(OBJECT) (void)0
1899#endif
1900
Tim Peters4b7625e2001-09-13 21:37:17 +00001901#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00001902 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
1903 return NULL; \
1904 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00001905
1906 SETBUILTIN("None", Py_None);
1907 SETBUILTIN("Ellipsis", Py_Ellipsis);
1908 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001909 SETBUILTIN("False", Py_False);
1910 SETBUILTIN("True", Py_True);
1911 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbae07c92007-10-08 02:46:15 +00001912 SETBUILTIN("memoryview", &PyMemoryView_Type);
Guido van Rossum254348e2007-11-21 19:29:53 +00001913 SETBUILTIN("bytearray", &PyBytes_Type);
Guido van Rossum98297ee2007-11-06 21:34:58 +00001914 SETBUILTIN("bytes", &PyString_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001915 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001916#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00001917 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001918#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00001919 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00001920 SETBUILTIN("enumerate", &PyEnum_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001921 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00001922 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001923 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00001924 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001925 SETBUILTIN("list", &PyList_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001926 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossum805365e2007-05-07 22:24:25 +00001927 SETBUILTIN("range", &PyRange_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00001928 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00001929 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001930 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001931 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Guido van Rossum572dbf82007-04-27 23:53:51 +00001932 SETBUILTIN("str", &PyUnicode_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001933 SETBUILTIN("super", &PySuper_Type);
1934 SETBUILTIN("tuple", &PyTuple_Type);
1935 SETBUILTIN("type", &PyType_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001936 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00001937 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
1938 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001939 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00001940 }
1941 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00001942
Guido van Rossum25ce5661997-08-02 03:10:38 +00001943 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00001944#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00001945#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00001946}