blob: 964fb320534ae60c2ecd889eae739fbf00c5f1ec [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 }
Christian Heimesbbffeb62008-01-24 09:42:52 +00001011 Py_INCREF(keyfunc);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001012 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001013
Tim Petersc3074532001-05-03 07:00:32 +00001014 it = PyObject_GetIter(v);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001015 if (it == NULL) {
1016 Py_XDECREF(keyfunc);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001017 return NULL;
Christian Heimesbbffeb62008-01-24 09:42:52 +00001018 }
Tim Petersc3074532001-05-03 07:00:32 +00001019
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001020 maxitem = NULL; /* the result */
1021 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001022 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001023 /* get the value from the key function */
1024 if (keyfunc != NULL) {
1025 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1026 if (val == NULL)
1027 goto Fail_it_item;
1028 }
1029 /* no key function; the value is the item */
1030 else {
1031 val = item;
1032 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001033 }
Tim Petersc3074532001-05-03 07:00:32 +00001034
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001035 /* maximum value and item are unset; set them */
1036 if (maxval == NULL) {
1037 maxitem = item;
1038 maxval = val;
1039 }
1040 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001041 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001042 int cmp = PyObject_RichCompareBool(val, maxval, op);
1043 if (cmp < 0)
1044 goto Fail_it_item_and_val;
1045 else if (cmp > 0) {
1046 Py_DECREF(maxval);
1047 Py_DECREF(maxitem);
1048 maxval = val;
1049 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001050 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001051 else {
1052 Py_DECREF(item);
1053 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001054 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001055 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001056 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001057 if (PyErr_Occurred())
1058 goto Fail_it;
1059 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001060 PyErr_Format(PyExc_ValueError,
1061 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001062 assert(maxitem == NULL);
1063 }
1064 else
1065 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001066 Py_DECREF(it);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001067 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001068 return maxitem;
1069
1070Fail_it_item_and_val:
1071 Py_DECREF(val);
1072Fail_it_item:
1073 Py_DECREF(item);
1074Fail_it:
1075 Py_XDECREF(maxval);
1076 Py_XDECREF(maxitem);
1077 Py_DECREF(it);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001078 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001079 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001080}
1081
Guido van Rossum79f25d91997-04-29 20:08:16 +00001082static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001083builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001084{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001085 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001086}
1087
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001088PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001089"min(iterable[, key=func]) -> value\n\
1090min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001091\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001092With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001093With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001094
1095
Guido van Rossum79f25d91997-04-29 20:08:16 +00001096static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001097builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001098{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001099 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001100}
1101
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001102PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001103"max(iterable[, key=func]) -> value\n\
1104max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001105\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001106With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001107With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001108
1109
Guido van Rossum79f25d91997-04-29 20:08:16 +00001110static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001111builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001112{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001113 return PyNumber_ToBase(v, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001114}
1115
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001116PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001117"oct(number) -> string\n\
1118\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001119Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001120
1121
Guido van Rossum79f25d91997-04-29 20:08:16 +00001122static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001123builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001124{
Guido van Rossum09095f32000-03-10 23:00:52 +00001125 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001126 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001127
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001128 if (PyString_Check(obj)) {
1129 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001130 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001131 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Christian Heimes217cfd12007-12-02 14:31:20 +00001132 return PyLong_FromLong(ord);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001133 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001134 }
1135 else if (PyUnicode_Check(obj)) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001136 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001137 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001138 ord = (long)*PyUnicode_AS_UNICODE(obj);
Christian Heimes217cfd12007-12-02 14:31:20 +00001139 return PyLong_FromLong(ord);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001140 }
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001141#ifndef Py_UNICODE_WIDE
1142 if (size == 2) {
1143 /* Decode a valid surrogate pair */
1144 int c0 = PyUnicode_AS_UNICODE(obj)[0];
1145 int c1 = PyUnicode_AS_UNICODE(obj)[1];
1146 if (0xD800 <= c0 && c0 <= 0xDBFF &&
1147 0xDC00 <= c1 && c1 <= 0xDFFF) {
1148 ord = ((((c0 & 0x03FF) << 10) | (c1 & 0x03FF)) +
1149 0x00010000);
Christian Heimes217cfd12007-12-02 14:31:20 +00001150 return PyLong_FromLong(ord);
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001151 }
1152 }
1153#endif
Guido van Rossum6f376c42007-05-24 14:31:33 +00001154 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001155 else if (PyBytes_Check(obj)) {
1156 /* XXX Hopefully this is temporary */
1157 size = PyBytes_GET_SIZE(obj);
1158 if (size == 1) {
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001159 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
Christian Heimes217cfd12007-12-02 14:31:20 +00001160 return PyLong_FromLong(ord);
Guido van Rossum98f97462007-04-13 03:31:13 +00001161 }
1162 }
1163 else {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001164 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001165 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001166 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001167 return NULL;
1168 }
1169
Guido van Rossumad991772001-01-12 16:03:05 +00001170 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001171 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001172 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001173 size);
1174 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001175}
1176
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001177PyDoc_VAR(ord_doc) = PyDoc_STR(
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001178"ord(c) -> integer\n\
1179\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001180Return the integer ordinal of a one-character string."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001181)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001182#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001183PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001184"\nA valid surrogate pair is also accepted."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001185)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001186#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001187;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001188
1189
Guido van Rossum79f25d91997-04-29 20:08:16 +00001190static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001191builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001192{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001193 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001194
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001195 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001196 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001197 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001198}
1199
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001200PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001201"pow(x, y[, z]) -> number\n\
1202\n\
1203With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001204equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001205
1206
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001207
Guido van Rossum34343512006-11-30 22:13:52 +00001208static PyObject *
1209builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1210{
1211 static char *kwlist[] = {"sep", "end", "file", 0};
Georg Brandl257d3d92007-02-26 10:35:10 +00001212 static PyObject *dummy_args;
Guido van Rossum34343512006-11-30 22:13:52 +00001213 PyObject *sep = NULL, *end = NULL, *file = NULL;
1214 int i, err;
1215
Georg Brandl257d3d92007-02-26 10:35:10 +00001216 if (dummy_args == NULL) {
1217 if (!(dummy_args = PyTuple_New(0)))
1218 return NULL;
1219 }
Georg Brandl88fc6642007-02-09 21:28:07 +00001220 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
Guido van Rossum34343512006-11-30 22:13:52 +00001221 kwlist, &sep, &end, &file))
Christian Heimesfef9bba2007-11-13 15:24:14 +00001222 return NULL;
1223 if (file == NULL || file == Py_None) {
Guido van Rossum34343512006-11-30 22:13:52 +00001224 file = PySys_GetObject("stdout");
Christian Heimesfef9bba2007-11-13 15:24:14 +00001225 /* sys.stdout may be None when FILE* stdout isn't connected */
1226 if (file == Py_None)
1227 Py_RETURN_NONE;
1228 }
Guido van Rossum34343512006-11-30 22:13:52 +00001229
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001230 if (sep && sep != Py_None && !PyUnicode_Check(sep)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001231 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001232 "sep must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001233 sep->ob_type->tp_name);
1234 return NULL;
1235 }
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001236 if (end && end != Py_None && !PyUnicode_Check(end)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001237 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001238 "end must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001239 end->ob_type->tp_name);
1240 return NULL;
1241 }
Guido van Rossum34343512006-11-30 22:13:52 +00001242
1243 for (i = 0; i < PyTuple_Size(args); i++) {
1244 if (i > 0) {
1245 if (sep == NULL || sep == Py_None)
1246 err = PyFile_WriteString(" ", file);
1247 else
1248 err = PyFile_WriteObject(sep, file,
1249 Py_PRINT_RAW);
1250 if (err)
1251 return NULL;
1252 }
1253 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1254 Py_PRINT_RAW);
1255 if (err)
1256 return NULL;
1257 }
1258
1259 if (end == NULL || end == Py_None)
1260 err = PyFile_WriteString("\n", file);
1261 else
1262 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1263 if (err)
1264 return NULL;
1265
1266 Py_RETURN_NONE;
1267}
1268
1269PyDoc_STRVAR(print_doc,
Georg Brandlcd5da7d2008-02-01 15:47:37 +00001270"print(value, ..., sep=' ', end='\\n', file=sys.stdout)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001271\n\
1272Prints the values to a stream, or to sys.stdout by default.\n\
1273Optional keyword arguments:\n\
1274file: a file-like object (stream); defaults to the current sys.stdout.\n\
1275sep: string inserted between values, default a space.\n\
1276end: string appended after the last value, default a newline.");
1277
1278
Guido van Rossuma88a0332007-02-26 16:59:55 +00001279static PyObject *
1280builtin_input(PyObject *self, PyObject *args)
1281{
Guido van Rossumeba76962007-05-27 09:13:28 +00001282 PyObject *promptarg = NULL;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001283 PyObject *fin = PySys_GetObject("stdin");
1284 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossumeba76962007-05-27 09:13:28 +00001285 PyObject *ferr = PySys_GetObject("stderr");
1286 PyObject *tmp;
1287 long fd;
1288 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001289
Guido van Rossumeba76962007-05-27 09:13:28 +00001290 /* Parse arguments */
1291 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg))
Guido van Rossuma88a0332007-02-26 16:59:55 +00001292 return NULL;
1293
Guido van Rossumeba76962007-05-27 09:13:28 +00001294 /* Check that stdin/out/err are intact */
Christian Heimes2be03732007-11-15 02:26:46 +00001295 if (fin == NULL || fin == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001296 PyErr_SetString(PyExc_RuntimeError,
1297 "input(): lost sys.stdin");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001298 return NULL;
1299 }
Christian Heimes2be03732007-11-15 02:26:46 +00001300 if (fout == NULL || fout == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001301 PyErr_SetString(PyExc_RuntimeError,
1302 "input(): lost sys.stdout");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001303 return NULL;
1304 }
Christian Heimes2be03732007-11-15 02:26:46 +00001305 if (ferr == NULL || ferr == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001306 PyErr_SetString(PyExc_RuntimeError,
1307 "input(): lost sys.stderr");
1308 return NULL;
1309 }
1310
1311 /* First of all, flush stderr */
1312 tmp = PyObject_CallMethod(ferr, "flush", "");
1313 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001314 PyErr_Clear();
1315 else
1316 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001317
1318 /* We should only use (GNU) readline if Python's sys.stdin and
1319 sys.stdout are the same as C's stdin and stdout, because we
1320 need to pass it those. */
1321 tmp = PyObject_CallMethod(fin, "fileno", "");
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001322 if (tmp == NULL) {
1323 PyErr_Clear();
1324 tty = 0;
1325 }
1326 else {
Christian Heimes217cfd12007-12-02 14:31:20 +00001327 fd = PyLong_AsLong(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001328 Py_DECREF(tmp);
1329 if (fd < 0 && PyErr_Occurred())
1330 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001331 tty = fd == fileno(stdin) && isatty(fd);
1332 }
1333 if (tty) {
1334 tmp = PyObject_CallMethod(fout, "fileno", "");
1335 if (tmp == NULL)
1336 PyErr_Clear();
1337 else {
Christian Heimes217cfd12007-12-02 14:31:20 +00001338 fd = PyLong_AsLong(tmp);
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001339 Py_DECREF(tmp);
1340 if (fd < 0 && PyErr_Occurred())
1341 return NULL;
1342 tty = fd == fileno(stdout) && isatty(fd);
1343 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001344 }
1345
1346 /* If we're interactive, use (GNU) readline */
1347 if (tty) {
Guido van Rossuma88a0332007-02-26 16:59:55 +00001348 PyObject *po;
1349 char *prompt;
1350 char *s;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001351 PyObject *stdin_encoding;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001352 PyObject *result;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001353
1354 stdin_encoding = PyObject_GetAttrString(fin, "encoding");
1355 if (!stdin_encoding)
1356 /* stdin is a text stream, so it must have an
1357 encoding. */
1358 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001359 tmp = PyObject_CallMethod(fout, "flush", "");
1360 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001361 PyErr_Clear();
1362 else
1363 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001364 if (promptarg != NULL) {
1365 po = PyObject_Str(promptarg);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001366 if (po == NULL) {
1367 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001368 return NULL;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001369 }
Christian Heimes91c77302007-11-25 09:18:01 +00001370 prompt = PyUnicode_AsString(po);
Guido van Rossumeba76962007-05-27 09:13:28 +00001371 if (prompt == NULL) {
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001372 Py_DECREF(stdin_encoding);
Guido van Rossumeba76962007-05-27 09:13:28 +00001373 Py_DECREF(po);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001374 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001375 }
Guido van Rossuma88a0332007-02-26 16:59:55 +00001376 }
1377 else {
1378 po = NULL;
1379 prompt = "";
1380 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001381 s = PyOS_Readline(stdin, stdout, prompt);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001382 Py_XDECREF(po);
1383 if (s == NULL) {
1384 if (!PyErr_Occurred())
1385 PyErr_SetNone(PyExc_KeyboardInterrupt);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001386 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001387 return NULL;
1388 }
1389 if (*s == '\0') {
1390 PyErr_SetNone(PyExc_EOFError);
1391 result = NULL;
1392 }
1393 else { /* strip trailing '\n' */
1394 size_t len = strlen(s);
1395 if (len > PY_SSIZE_T_MAX) {
1396 PyErr_SetString(PyExc_OverflowError,
1397 "input: input too long");
1398 result = NULL;
1399 }
1400 else {
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001401 result = PyUnicode_Decode
1402 (s, len-1,
1403 PyUnicode_AsString(stdin_encoding),
1404 NULL);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001405 }
1406 }
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001407 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001408 PyMem_FREE(s);
1409 return result;
1410 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001411
1412 /* Fallback if we're not interactive */
1413 if (promptarg != NULL) {
1414 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0)
Guido van Rossuma88a0332007-02-26 16:59:55 +00001415 return NULL;
1416 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001417 tmp = PyObject_CallMethod(fout, "flush", "");
1418 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001419 PyErr_Clear();
1420 else
1421 Py_DECREF(tmp);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001422 return PyFile_GetLine(fin, -1);
1423}
1424
1425PyDoc_STRVAR(input_doc,
1426"input([prompt]) -> string\n\
1427\n\
1428Read a string from standard input. The trailing newline is stripped.\n\
1429If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1430On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1431is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001432
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001433
Guido van Rossum79f25d91997-04-29 20:08:16 +00001434static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001435builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001436{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001437 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001438}
1439
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001440PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001441"repr(object) -> string\n\
1442\n\
1443Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001444For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001445
1446
Guido van Rossum79f25d91997-04-29 20:08:16 +00001447static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001448builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001449{
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001450#define UNDEF_NDIGITS (-0x7fffffff) /* Unlikely ndigits value */
1451 static PyObject *round_str = NULL;
1452 int ndigits = UNDEF_NDIGITS;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001453 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001454 PyObject *number, *round;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001455
Alex Martelliae211f92007-08-22 23:21:33 +00001456 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|i:round",
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001457 kwlist, &number, &ndigits))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001458 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00001459
Christian Heimes90aa7642007-12-19 02:45:37 +00001460 if (Py_TYPE(number)->tp_dict == NULL) {
1461 if (PyType_Ready(Py_TYPE(number)) < 0)
Guido van Rossum15d3d042007-08-24 02:02:45 +00001462 return NULL;
1463 }
1464
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001465 if (round_str == NULL) {
Christian Heimesfe82e772008-01-28 02:38:20 +00001466 round_str = PyUnicode_InternFromString("__round__");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001467 if (round_str == NULL)
Alex Martelliae211f92007-08-22 23:21:33 +00001468 return NULL;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001469 }
1470
Christian Heimes90aa7642007-12-19 02:45:37 +00001471 round = _PyType_Lookup(Py_TYPE(number), round_str);
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001472 if (round == NULL) {
1473 PyErr_Format(PyExc_TypeError,
1474 "type %.100s doesn't define __round__ method",
Christian Heimes90aa7642007-12-19 02:45:37 +00001475 Py_TYPE(number)->tp_name);
Alex Martelliae211f92007-08-22 23:21:33 +00001476 return NULL;
1477 }
1478
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001479 if (ndigits == UNDEF_NDIGITS)
1480 return PyObject_CallFunction(round, "O", number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001481 else
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001482 return PyObject_CallFunction(round, "Oi", number, ndigits);
1483#undef UNDEF_NDIGITS
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001484}
1485
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001486PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001487"round(number[, ndigits]) -> floating point number\n\
1488\n\
1489Round a number to a given precision in decimal digits (default 0 digits).\n\
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001490This returns an int when called with one argument, otherwise a float.\n\
1491Precision may be negative.");
1492
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001493
Raymond Hettinger64958a12003-12-17 20:43:33 +00001494static PyObject *
1495builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1496{
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001497 PyObject *newlist, *v, *seq, *keyfunc=NULL, *newargs;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001498 PyObject *callable;
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001499 static char *kwlist[] = {"iterable", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001500 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001501
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001502 /* args 1-3 should match listsort in Objects/listobject.c */
1503 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted",
1504 kwlist, &seq, &keyfunc, &reverse))
Armin Rigo71d7e702005-09-20 18:13:03 +00001505 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001506
1507 newlist = PySequence_List(seq);
1508 if (newlist == NULL)
1509 return NULL;
1510
1511 callable = PyObject_GetAttrString(newlist, "sort");
1512 if (callable == NULL) {
1513 Py_DECREF(newlist);
1514 return NULL;
1515 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001516
Raymond Hettinger64958a12003-12-17 20:43:33 +00001517 newargs = PyTuple_GetSlice(args, 1, 4);
1518 if (newargs == NULL) {
1519 Py_DECREF(newlist);
1520 Py_DECREF(callable);
1521 return NULL;
1522 }
1523
1524 v = PyObject_Call(callable, newargs, kwds);
1525 Py_DECREF(newargs);
1526 Py_DECREF(callable);
1527 if (v == NULL) {
1528 Py_DECREF(newlist);
1529 return NULL;
1530 }
1531 Py_DECREF(v);
1532 return newlist;
1533}
1534
1535PyDoc_STRVAR(sorted_doc,
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001536"sorted(iterable, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001537
Guido van Rossum79f25d91997-04-29 20:08:16 +00001538static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001539builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001540{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001541 PyObject *v = NULL;
1542 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001543
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001544 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001545 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001546 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001547 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001548 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001549 if (!PyErr_Occurred())
1550 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001551 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001552 }
1553 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001554 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001555 }
1556 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001557 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001558 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001559 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001560 "vars() argument must have __dict__ attribute");
1561 return NULL;
1562 }
1563 }
1564 return d;
1565}
1566
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001567PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001568"vars([object]) -> dictionary\n\
1569\n\
1570Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001571With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001572
Alex Martellia70b1912003-04-22 08:12:33 +00001573static PyObject*
1574builtin_sum(PyObject *self, PyObject *args)
1575{
1576 PyObject *seq;
1577 PyObject *result = NULL;
1578 PyObject *temp, *item, *iter;
1579
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001580 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001581 return NULL;
1582
1583 iter = PyObject_GetIter(seq);
1584 if (iter == NULL)
1585 return NULL;
1586
1587 if (result == NULL) {
Christian Heimes217cfd12007-12-02 14:31:20 +00001588 result = PyLong_FromLong(0);
Alex Martellia70b1912003-04-22 08:12:33 +00001589 if (result == NULL) {
1590 Py_DECREF(iter);
1591 return NULL;
1592 }
1593 } else {
1594 /* reject string values for 'start' parameter */
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001595 if (PyUnicode_Check(result)) {
Alex Martellia70b1912003-04-22 08:12:33 +00001596 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001597 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001598 Py_DECREF(iter);
1599 return NULL;
1600 }
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001601 if (PyBytes_Check(result)) {
1602 PyErr_SetString(PyExc_TypeError,
1603 "sum() can't sum bytes [use b''.join(seq) instead]");
1604 Py_DECREF(iter);
1605 return NULL;
1606 }
1607
Alex Martelli41c9f882003-04-22 09:24:48 +00001608 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001609 }
1610
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001611#ifndef SLOW_SUM
1612 /* Fast addition by keeping temporary sums in C instead of new Python objects.
1613 Assumes all inputs are the same type. If the assumption fails, default
1614 to the more general routine.
1615 */
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001616 if (PyLong_CheckExact(result)) {
1617 int overflow;
1618 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
1619 /* If this already overflowed, don't even enter the loop. */
1620 if (overflow == 0) {
1621 Py_DECREF(result);
1622 result = NULL;
1623 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001624 while(result == NULL) {
1625 item = PyIter_Next(iter);
1626 if (item == NULL) {
1627 Py_DECREF(iter);
1628 if (PyErr_Occurred())
1629 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001630 return PyLong_FromLong(i_result);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001631 }
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001632 if (PyLong_CheckExact(item)) {
1633 long b = PyLong_AsLongAndOverflow(item, &overflow);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001634 long x = i_result + b;
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001635 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001636 i_result = x;
1637 Py_DECREF(item);
1638 continue;
1639 }
1640 }
1641 /* Either overflowed or is not an int. Restore real objects and process normally */
Christian Heimes217cfd12007-12-02 14:31:20 +00001642 result = PyLong_FromLong(i_result);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001643 temp = PyNumber_Add(result, item);
1644 Py_DECREF(result);
1645 Py_DECREF(item);
1646 result = temp;
1647 if (result == NULL) {
1648 Py_DECREF(iter);
1649 return NULL;
1650 }
1651 }
1652 }
1653
1654 if (PyFloat_CheckExact(result)) {
1655 double f_result = PyFloat_AS_DOUBLE(result);
1656 Py_DECREF(result);
1657 result = NULL;
1658 while(result == NULL) {
1659 item = PyIter_Next(iter);
1660 if (item == NULL) {
1661 Py_DECREF(iter);
1662 if (PyErr_Occurred())
1663 return NULL;
1664 return PyFloat_FromDouble(f_result);
1665 }
1666 if (PyFloat_CheckExact(item)) {
1667 PyFPE_START_PROTECT("add", return 0)
1668 f_result += PyFloat_AS_DOUBLE(item);
1669 PyFPE_END_PROTECT(f_result)
1670 Py_DECREF(item);
1671 continue;
1672 }
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001673 if (PyLong_CheckExact(item)) {
1674 long value;
1675 int overflow;
1676 value = PyLong_AsLongAndOverflow(item, &overflow);
1677 if (!overflow) {
1678 PyFPE_START_PROTECT("add", return 0)
1679 f_result += (double)value;
1680 PyFPE_END_PROTECT(f_result)
1681 Py_DECREF(item);
1682 continue;
1683 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001684 }
1685 result = PyFloat_FromDouble(f_result);
1686 temp = PyNumber_Add(result, item);
1687 Py_DECREF(result);
1688 Py_DECREF(item);
1689 result = temp;
1690 if (result == NULL) {
1691 Py_DECREF(iter);
1692 return NULL;
1693 }
1694 }
1695 }
1696#endif
1697
Alex Martellia70b1912003-04-22 08:12:33 +00001698 for(;;) {
1699 item = PyIter_Next(iter);
1700 if (item == NULL) {
1701 /* error, or end-of-sequence */
1702 if (PyErr_Occurred()) {
1703 Py_DECREF(result);
1704 result = NULL;
1705 }
1706 break;
1707 }
Alex Martellia253e182003-10-25 23:24:14 +00001708 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001709 Py_DECREF(result);
1710 Py_DECREF(item);
1711 result = temp;
1712 if (result == NULL)
1713 break;
1714 }
1715 Py_DECREF(iter);
1716 return result;
1717}
1718
1719PyDoc_STRVAR(sum_doc,
Thomas Wouters89f507f2006-12-13 04:49:30 +00001720"sum(sequence[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00001721\n\
1722Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00001723of parameter 'start' (which defaults to 0). When the sequence is\n\
1724empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00001725
1726
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001727static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001728builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001729{
1730 PyObject *inst;
1731 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001732 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001733
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001734 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001735 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001736
Guido van Rossum823649d2001-03-21 18:40:58 +00001737 retval = PyObject_IsInstance(inst, cls);
1738 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001739 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001740 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001741}
1742
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001743PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001744"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001745\n\
1746Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001747With a type as second argument, return whether that is the object's type.\n\
1748The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001749isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001750
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001751
1752static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001753builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001754{
1755 PyObject *derived;
1756 PyObject *cls;
1757 int retval;
1758
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001759 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001760 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001761
Guido van Rossum823649d2001-03-21 18:40:58 +00001762 retval = PyObject_IsSubclass(derived, cls);
1763 if (retval < 0)
1764 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001765 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001766}
1767
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001768PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001769"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001770\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00001771Return whether class C is a subclass (i.e., a derived class) of class B.\n\
1772When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
1773is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001774
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001775
Barry Warsawbd599b52000-08-03 15:45:29 +00001776static PyObject*
1777builtin_zip(PyObject *self, PyObject *args)
1778{
Guido van Rossumb65fb332006-08-25 23:26:40 +00001779 /* args must be a tuple */
1780 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00001781
Guido van Rossumb65fb332006-08-25 23:26:40 +00001782 return _PyZip_CreateIter(args);
Barry Warsawbd599b52000-08-03 15:45:29 +00001783}
1784
1785
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001786PyDoc_STRVAR(zip_doc,
Guido van Rossum801f0d72006-08-24 19:48:10 +00001787"zip(it1 [, it2 [...]]) -> iter([(it1[0], it2[0] ...), ...])\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00001788\n\
Guido van Rossum801f0d72006-08-24 19:48:10 +00001789Return an iterator yielding tuples, where each tuple contains the\n\
1790corresponding element from each of the argument iterables.\n\
1791The returned iterator ends when the shortest argument iterable is exhausted.\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001792(This is identical to itertools.izip().)");
Barry Warsawbd599b52000-08-03 15:45:29 +00001793
1794
Guido van Rossum79f25d91997-04-29 20:08:16 +00001795static PyMethodDef builtin_methods[] = {
Guido van Rossum52cc1d82007-03-18 15:41:51 +00001796 {"__build_class__", (PyCFunction)builtin___build_class__,
1797 METH_VARARGS | METH_KEYWORDS, build_class_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001798 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001799 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00001800 {"all", builtin_all, METH_O, all_doc},
1801 {"any", builtin_any, METH_O, any_doc},
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001802 {"bin", builtin_bin, METH_O, bin_doc},
Neal Norwitzc2550c72007-08-31 04:17:51 +00001803 {"chr", builtin_chr, METH_VARARGS, chr_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001804 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
Guido van Rossumd8faa362007-04-27 19:54:29 +00001805 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001806 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
1807 {"dir", builtin_dir, METH_VARARGS, dir_doc},
1808 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
1809 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00001810 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001811 {"filter", builtin_filter, METH_VARARGS, filter_doc},
Eric Smith8c663262007-08-25 02:26:07 +00001812 {"format", builtin_format, METH_VARARGS, format_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001813 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
1814 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
1815 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
1816 {"hash", builtin_hash, METH_O, hash_doc},
1817 {"hex", builtin_hex, METH_O, hex_doc},
1818 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00001819 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001820 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
1821 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
1822 {"iter", builtin_iter, METH_VARARGS, iter_doc},
1823 {"len", builtin_len, METH_O, len_doc},
1824 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
1825 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001826 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
1827 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandla18af4e2007-04-21 15:47:16 +00001828 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001829 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001830 {"ord", builtin_ord, METH_O, ord_doc},
1831 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00001832 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001833 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001834 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001835 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00001836 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00001837 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001838 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001839 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00001840 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00001841};
1842
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001843PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001844"Built-in functions, exceptions, and other objects.\n\
1845\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001846Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001847
Guido van Rossum25ce5661997-08-02 03:10:38 +00001848PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001849_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001850{
Fred Drake5550de32000-06-20 04:54:19 +00001851 PyObject *mod, *dict, *debug;
Georg Brandl1a3284e2007-12-02 09:40:06 +00001852 mod = Py_InitModule4("builtins", builtin_methods,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001853 builtin_doc, (PyObject *)NULL,
1854 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001855 if (mod == NULL)
1856 return NULL;
1857 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00001858
Tim Peters7571a0f2003-03-23 17:52:28 +00001859#ifdef Py_TRACE_REFS
Georg Brandl1a3284e2007-12-02 09:40:06 +00001860 /* "builtins" exposes a number of statically allocated objects
Tim Peters7571a0f2003-03-23 17:52:28 +00001861 * that, before this code was added in 2.3, never showed up in
1862 * the list of "all objects" maintained by Py_TRACE_REFS. As a
1863 * result, programs leaking references to None and False (etc)
1864 * couldn't be diagnosed by examining sys.getobjects(0).
1865 */
1866#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
1867#else
1868#define ADD_TO_ALL(OBJECT) (void)0
1869#endif
1870
Tim Peters4b7625e2001-09-13 21:37:17 +00001871#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00001872 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
1873 return NULL; \
1874 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00001875
1876 SETBUILTIN("None", Py_None);
1877 SETBUILTIN("Ellipsis", Py_Ellipsis);
1878 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001879 SETBUILTIN("False", Py_False);
1880 SETBUILTIN("True", Py_True);
1881 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbae07c92007-10-08 02:46:15 +00001882 SETBUILTIN("memoryview", &PyMemoryView_Type);
Guido van Rossum254348e2007-11-21 19:29:53 +00001883 SETBUILTIN("bytearray", &PyBytes_Type);
Guido van Rossum98297ee2007-11-06 21:34:58 +00001884 SETBUILTIN("bytes", &PyString_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001885 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001886#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00001887 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001888#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00001889 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00001890 SETBUILTIN("enumerate", &PyEnum_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001891 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00001892 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001893 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00001894 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001895 SETBUILTIN("list", &PyList_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001896 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossum805365e2007-05-07 22:24:25 +00001897 SETBUILTIN("range", &PyRange_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00001898 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00001899 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001900 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001901 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Guido van Rossum572dbf82007-04-27 23:53:51 +00001902 SETBUILTIN("str", &PyUnicode_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001903 SETBUILTIN("super", &PySuper_Type);
1904 SETBUILTIN("tuple", &PyTuple_Type);
1905 SETBUILTIN("type", &PyType_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001906 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00001907 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
1908 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001909 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00001910 }
1911 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00001912
Guido van Rossum25ce5661997-08-02 03:10:38 +00001913 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00001914#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00001915#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00001916}