blob: 98285b98c07e7a64184646f259603eae781b1cc4 [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;
284 itertools = PyImport_ImportModule("itertools");
285 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;
799 itertools = PyImport_ImportModule("itertools");
800 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\
818If the function is None, 'lambda *a: a' is assumed.\n\
819(This is identical to itertools.imap().)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000820
821
Guido van Rossum79f25d91997-04-29 20:08:16 +0000822static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +0000823builtin_next(PyObject *self, PyObject *args)
824{
825 PyObject *it, *res;
826 PyObject *def = NULL;
827
828 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
829 return NULL;
830 if (!PyIter_Check(it)) {
831 PyErr_Format(PyExc_TypeError,
832 "%.200s object is not an iterator", it->ob_type->tp_name);
833 return NULL;
834 }
835
836 res = (*it->ob_type->tp_iternext)(it);
837 if (res == NULL) {
838 if (def) {
839 if (PyErr_Occurred() &&
840 !PyErr_ExceptionMatches(PyExc_StopIteration))
841 return NULL;
842 PyErr_Clear();
843 Py_INCREF(def);
844 return def;
845 } else if (PyErr_Occurred()) {
846 return NULL;
847 } else {
848 PyErr_SetNone(PyExc_StopIteration);
849 return NULL;
850 }
851 }
852 return res;
853}
854
855PyDoc_STRVAR(next_doc,
856"next(iterator[, default])\n\
857\n\
858Return the next item from the iterator. If default is given and the iterator\n\
859is exhausted, it is returned instead of raising StopIteration.");
860
861
862static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000863builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000864{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000865 PyObject *v;
866 PyObject *name;
867 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000868
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000869 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000870 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000871 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000872 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000873 Py_INCREF(Py_None);
874 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000875}
876
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000877PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000878"setattr(object, name, value)\n\
879\n\
880Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000881``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000882
883
Guido van Rossum79f25d91997-04-29 20:08:16 +0000884static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000885builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000886{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000887 PyObject *v;
888 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000889
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000890 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +0000891 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000892 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000893 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000894 Py_INCREF(Py_None);
895 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +0000896}
897
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000898PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +0000899"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000900\n\
901Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000902``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000903
904
Guido van Rossum79f25d91997-04-29 20:08:16 +0000905static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000906builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000907{
Guido van Rossum9bfef441993-03-29 10:43:31 +0000908 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000909
Guido van Rossum79f25d91997-04-29 20:08:16 +0000910 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000911 if (x == -1)
912 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +0000913 return PyLong_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000914}
915
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000916PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000917"hash(object) -> integer\n\
918\n\
919Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000920the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000921
922
Guido van Rossum79f25d91997-04-29 20:08:16 +0000923static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000924builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +0000925{
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000926 return PyNumber_ToBase(v, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +0000927}
928
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000929PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000930"hex(number) -> string\n\
931\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000932Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000933
934
Guido van Rossum79f25d91997-04-29 20:08:16 +0000935static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000936builtin_iter(PyObject *self, PyObject *args)
937{
938 PyObject *v, *w = NULL;
939
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000940 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000941 return NULL;
942 if (w == NULL)
943 return PyObject_GetIter(v);
944 if (!PyCallable_Check(v)) {
945 PyErr_SetString(PyExc_TypeError,
946 "iter(v, w): v must be callable");
947 return NULL;
948 }
949 return PyCallIter_New(v, w);
950}
951
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000952PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000953"iter(collection) -> iterator\n\
954iter(callable, sentinel) -> iterator\n\
955\n\
956Get an iterator from an object. In the first form, the argument must\n\
957supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000958In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000959
960
961static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000962builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000963{
Martin v. Löwis18e16552006-02-15 17:27:45 +0000964 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000965
Jeremy Hylton03657cf2000-07-12 13:05:33 +0000966 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +0000967 if (res < 0 && PyErr_Occurred())
968 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +0000969 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000970}
971
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000972PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000973"len(object) -> integer\n\
974\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000975Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000976
977
Guido van Rossum79f25d91997-04-29 20:08:16 +0000978static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000979builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000980{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000981 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000982
Guido van Rossum79f25d91997-04-29 20:08:16 +0000983 d = PyEval_GetLocals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000984 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000985 return d;
986}
987
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000988PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000989"locals() -> dictionary\n\
990\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +0000991Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000992
993
Guido van Rossum79f25d91997-04-29 20:08:16 +0000994static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000995min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000996{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000997 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +0000998 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000999
Guido van Rossum79f25d91997-04-29 20:08:16 +00001000 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001001 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001002 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001003 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001004
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001005 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1006 keyfunc = PyDict_GetItemString(kwds, "key");
1007 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001008 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001009 "%s() got an unexpected keyword argument", name);
1010 return NULL;
1011 }
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);
1015 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001016 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001017
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001018 maxitem = NULL; /* the result */
1019 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001020 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001021 /* get the value from the key function */
1022 if (keyfunc != NULL) {
1023 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1024 if (val == NULL)
1025 goto Fail_it_item;
1026 }
1027 /* no key function; the value is the item */
1028 else {
1029 val = item;
1030 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001031 }
Tim Petersc3074532001-05-03 07:00:32 +00001032
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001033 /* maximum value and item are unset; set them */
1034 if (maxval == NULL) {
1035 maxitem = item;
1036 maxval = val;
1037 }
1038 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001039 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001040 int cmp = PyObject_RichCompareBool(val, maxval, op);
1041 if (cmp < 0)
1042 goto Fail_it_item_and_val;
1043 else if (cmp > 0) {
1044 Py_DECREF(maxval);
1045 Py_DECREF(maxitem);
1046 maxval = val;
1047 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001048 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001049 else {
1050 Py_DECREF(item);
1051 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001052 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001053 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001054 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001055 if (PyErr_Occurred())
1056 goto Fail_it;
1057 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001058 PyErr_Format(PyExc_ValueError,
1059 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001060 assert(maxitem == NULL);
1061 }
1062 else
1063 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001064 Py_DECREF(it);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001065 return maxitem;
1066
1067Fail_it_item_and_val:
1068 Py_DECREF(val);
1069Fail_it_item:
1070 Py_DECREF(item);
1071Fail_it:
1072 Py_XDECREF(maxval);
1073 Py_XDECREF(maxitem);
1074 Py_DECREF(it);
1075 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001076}
1077
Guido van Rossum79f25d91997-04-29 20:08:16 +00001078static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001079builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001080{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001081 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001082}
1083
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001084PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001085"min(iterable[, key=func]) -> value\n\
1086min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001087\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001088With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001089With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001090
1091
Guido van Rossum79f25d91997-04-29 20:08:16 +00001092static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001093builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001094{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001095 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001096}
1097
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001098PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001099"max(iterable[, key=func]) -> value\n\
1100max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001101\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001102With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001103With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001104
1105
Guido van Rossum79f25d91997-04-29 20:08:16 +00001106static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001107builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001108{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001109 return PyNumber_ToBase(v, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001110}
1111
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001112PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001113"oct(number) -> string\n\
1114\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001115Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001116
1117
Guido van Rossum79f25d91997-04-29 20:08:16 +00001118static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001119builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001120{
Guido van Rossum09095f32000-03-10 23:00:52 +00001121 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001122 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001123
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001124 if (PyString_Check(obj)) {
1125 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001126 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001127 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Christian Heimes217cfd12007-12-02 14:31:20 +00001128 return PyLong_FromLong(ord);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001129 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001130 }
1131 else if (PyUnicode_Check(obj)) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001132 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001133 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001134 ord = (long)*PyUnicode_AS_UNICODE(obj);
Christian Heimes217cfd12007-12-02 14:31:20 +00001135 return PyLong_FromLong(ord);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001136 }
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001137#ifndef Py_UNICODE_WIDE
1138 if (size == 2) {
1139 /* Decode a valid surrogate pair */
1140 int c0 = PyUnicode_AS_UNICODE(obj)[0];
1141 int c1 = PyUnicode_AS_UNICODE(obj)[1];
1142 if (0xD800 <= c0 && c0 <= 0xDBFF &&
1143 0xDC00 <= c1 && c1 <= 0xDFFF) {
1144 ord = ((((c0 & 0x03FF) << 10) | (c1 & 0x03FF)) +
1145 0x00010000);
Christian Heimes217cfd12007-12-02 14:31:20 +00001146 return PyLong_FromLong(ord);
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001147 }
1148 }
1149#endif
Guido van Rossum6f376c42007-05-24 14:31:33 +00001150 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001151 else if (PyBytes_Check(obj)) {
1152 /* XXX Hopefully this is temporary */
1153 size = PyBytes_GET_SIZE(obj);
1154 if (size == 1) {
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001155 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
Christian Heimes217cfd12007-12-02 14:31:20 +00001156 return PyLong_FromLong(ord);
Guido van Rossum98f97462007-04-13 03:31:13 +00001157 }
1158 }
1159 else {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001160 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001161 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001162 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001163 return NULL;
1164 }
1165
Guido van Rossumad991772001-01-12 16:03:05 +00001166 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001167 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001168 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001169 size);
1170 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001171}
1172
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001173PyDoc_VAR(ord_doc) = PyDoc_STR(
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001174"ord(c) -> integer\n\
1175\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001176Return the integer ordinal of a one-character string."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001177)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001178#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001179PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001180"\nA valid surrogate pair is also accepted."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001181)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001182#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001183;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001184
1185
Guido van Rossum79f25d91997-04-29 20:08:16 +00001186static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001187builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001188{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001189 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001190
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001191 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001192 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001193 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001194}
1195
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001196PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001197"pow(x, y[, z]) -> number\n\
1198\n\
1199With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001200equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001201
1202
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001203
Guido van Rossum34343512006-11-30 22:13:52 +00001204static PyObject *
1205builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1206{
1207 static char *kwlist[] = {"sep", "end", "file", 0};
Georg Brandl257d3d92007-02-26 10:35:10 +00001208 static PyObject *dummy_args;
Guido van Rossum34343512006-11-30 22:13:52 +00001209 PyObject *sep = NULL, *end = NULL, *file = NULL;
1210 int i, err;
1211
Georg Brandl257d3d92007-02-26 10:35:10 +00001212 if (dummy_args == NULL) {
1213 if (!(dummy_args = PyTuple_New(0)))
1214 return NULL;
1215 }
Georg Brandl88fc6642007-02-09 21:28:07 +00001216 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
Guido van Rossum34343512006-11-30 22:13:52 +00001217 kwlist, &sep, &end, &file))
Christian Heimesfef9bba2007-11-13 15:24:14 +00001218 return NULL;
1219 if (file == NULL || file == Py_None) {
Guido van Rossum34343512006-11-30 22:13:52 +00001220 file = PySys_GetObject("stdout");
Christian Heimesfef9bba2007-11-13 15:24:14 +00001221 /* sys.stdout may be None when FILE* stdout isn't connected */
1222 if (file == Py_None)
1223 Py_RETURN_NONE;
1224 }
Guido van Rossum34343512006-11-30 22:13:52 +00001225
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001226 if (sep && sep != Py_None && !PyUnicode_Check(sep)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001227 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001228 "sep must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001229 sep->ob_type->tp_name);
1230 return NULL;
1231 }
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001232 if (end && end != Py_None && !PyUnicode_Check(end)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001233 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001234 "end must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001235 end->ob_type->tp_name);
1236 return NULL;
1237 }
Guido van Rossum34343512006-11-30 22:13:52 +00001238
1239 for (i = 0; i < PyTuple_Size(args); i++) {
1240 if (i > 0) {
1241 if (sep == NULL || sep == Py_None)
1242 err = PyFile_WriteString(" ", file);
1243 else
1244 err = PyFile_WriteObject(sep, file,
1245 Py_PRINT_RAW);
1246 if (err)
1247 return NULL;
1248 }
1249 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1250 Py_PRINT_RAW);
1251 if (err)
1252 return NULL;
1253 }
1254
1255 if (end == NULL || end == Py_None)
1256 err = PyFile_WriteString("\n", file);
1257 else
1258 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1259 if (err)
1260 return NULL;
1261
1262 Py_RETURN_NONE;
1263}
1264
1265PyDoc_STRVAR(print_doc,
Guido van Rossum452bf512007-02-09 05:32:43 +00001266"print(value, ..., file=None, sep=' ', end='\\n')\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001267\n\
1268Prints the values to a stream, or to sys.stdout by default.\n\
1269Optional keyword arguments:\n\
1270file: a file-like object (stream); defaults to the current sys.stdout.\n\
1271sep: string inserted between values, default a space.\n\
1272end: string appended after the last value, default a newline.");
1273
1274
Guido van Rossuma88a0332007-02-26 16:59:55 +00001275static PyObject *
1276builtin_input(PyObject *self, PyObject *args)
1277{
Guido van Rossumeba76962007-05-27 09:13:28 +00001278 PyObject *promptarg = NULL;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001279 PyObject *fin = PySys_GetObject("stdin");
1280 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossumeba76962007-05-27 09:13:28 +00001281 PyObject *ferr = PySys_GetObject("stderr");
1282 PyObject *tmp;
1283 long fd;
1284 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001285
Guido van Rossumeba76962007-05-27 09:13:28 +00001286 /* Parse arguments */
1287 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg))
Guido van Rossuma88a0332007-02-26 16:59:55 +00001288 return NULL;
1289
Guido van Rossumeba76962007-05-27 09:13:28 +00001290 /* Check that stdin/out/err are intact */
Christian Heimes2be03732007-11-15 02:26:46 +00001291 if (fin == NULL || fin == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001292 PyErr_SetString(PyExc_RuntimeError,
1293 "input(): lost sys.stdin");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001294 return NULL;
1295 }
Christian Heimes2be03732007-11-15 02:26:46 +00001296 if (fout == NULL || fout == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001297 PyErr_SetString(PyExc_RuntimeError,
1298 "input(): lost sys.stdout");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001299 return NULL;
1300 }
Christian Heimes2be03732007-11-15 02:26:46 +00001301 if (ferr == NULL || ferr == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001302 PyErr_SetString(PyExc_RuntimeError,
1303 "input(): lost sys.stderr");
1304 return NULL;
1305 }
1306
1307 /* First of all, flush stderr */
1308 tmp = PyObject_CallMethod(ferr, "flush", "");
1309 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001310 PyErr_Clear();
1311 else
1312 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001313
1314 /* We should only use (GNU) readline if Python's sys.stdin and
1315 sys.stdout are the same as C's stdin and stdout, because we
1316 need to pass it those. */
1317 tmp = PyObject_CallMethod(fin, "fileno", "");
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001318 if (tmp == NULL) {
1319 PyErr_Clear();
1320 tty = 0;
1321 }
1322 else {
Christian Heimes217cfd12007-12-02 14:31:20 +00001323 fd = PyLong_AsLong(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001324 Py_DECREF(tmp);
1325 if (fd < 0 && PyErr_Occurred())
1326 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001327 tty = fd == fileno(stdin) && isatty(fd);
1328 }
1329 if (tty) {
1330 tmp = PyObject_CallMethod(fout, "fileno", "");
1331 if (tmp == NULL)
1332 PyErr_Clear();
1333 else {
Christian Heimes217cfd12007-12-02 14:31:20 +00001334 fd = PyLong_AsLong(tmp);
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001335 Py_DECREF(tmp);
1336 if (fd < 0 && PyErr_Occurred())
1337 return NULL;
1338 tty = fd == fileno(stdout) && isatty(fd);
1339 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001340 }
1341
1342 /* If we're interactive, use (GNU) readline */
1343 if (tty) {
Guido van Rossuma88a0332007-02-26 16:59:55 +00001344 PyObject *po;
1345 char *prompt;
1346 char *s;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001347 PyObject *stdin_encoding;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001348 PyObject *result;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001349
1350 stdin_encoding = PyObject_GetAttrString(fin, "encoding");
1351 if (!stdin_encoding)
1352 /* stdin is a text stream, so it must have an
1353 encoding. */
1354 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001355 tmp = PyObject_CallMethod(fout, "flush", "");
1356 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001357 PyErr_Clear();
1358 else
1359 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001360 if (promptarg != NULL) {
1361 po = PyObject_Str(promptarg);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001362 if (po == NULL) {
1363 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001364 return NULL;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001365 }
Christian Heimes91c77302007-11-25 09:18:01 +00001366 prompt = PyUnicode_AsString(po);
Guido van Rossumeba76962007-05-27 09:13:28 +00001367 if (prompt == NULL) {
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001368 Py_DECREF(stdin_encoding);
Guido van Rossumeba76962007-05-27 09:13:28 +00001369 Py_DECREF(po);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001370 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001371 }
Guido van Rossuma88a0332007-02-26 16:59:55 +00001372 }
1373 else {
1374 po = NULL;
1375 prompt = "";
1376 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001377 s = PyOS_Readline(stdin, stdout, prompt);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001378 Py_XDECREF(po);
1379 if (s == NULL) {
1380 if (!PyErr_Occurred())
1381 PyErr_SetNone(PyExc_KeyboardInterrupt);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001382 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001383 return NULL;
1384 }
1385 if (*s == '\0') {
1386 PyErr_SetNone(PyExc_EOFError);
1387 result = NULL;
1388 }
1389 else { /* strip trailing '\n' */
1390 size_t len = strlen(s);
1391 if (len > PY_SSIZE_T_MAX) {
1392 PyErr_SetString(PyExc_OverflowError,
1393 "input: input too long");
1394 result = NULL;
1395 }
1396 else {
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001397 result = PyUnicode_Decode
1398 (s, len-1,
1399 PyUnicode_AsString(stdin_encoding),
1400 NULL);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001401 }
1402 }
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001403 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001404 PyMem_FREE(s);
1405 return result;
1406 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001407
1408 /* Fallback if we're not interactive */
1409 if (promptarg != NULL) {
1410 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0)
Guido van Rossuma88a0332007-02-26 16:59:55 +00001411 return NULL;
1412 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001413 tmp = PyObject_CallMethod(fout, "flush", "");
1414 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001415 PyErr_Clear();
1416 else
1417 Py_DECREF(tmp);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001418 return PyFile_GetLine(fin, -1);
1419}
1420
1421PyDoc_STRVAR(input_doc,
1422"input([prompt]) -> string\n\
1423\n\
1424Read a string from standard input. The trailing newline is stripped.\n\
1425If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1426On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1427is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001428
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001429
Guido van Rossum79f25d91997-04-29 20:08:16 +00001430static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001431builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001432{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001433 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001434}
1435
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001436PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001437"repr(object) -> string\n\
1438\n\
1439Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001440For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001441
1442
Guido van Rossum79f25d91997-04-29 20:08:16 +00001443static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001444builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001445{
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001446#define UNDEF_NDIGITS (-0x7fffffff) /* Unlikely ndigits value */
1447 static PyObject *round_str = NULL;
1448 int ndigits = UNDEF_NDIGITS;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001449 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001450 PyObject *number, *round;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001451
Alex Martelliae211f92007-08-22 23:21:33 +00001452 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|i:round",
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001453 kwlist, &number, &ndigits))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001454 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00001455
Christian Heimes90aa7642007-12-19 02:45:37 +00001456 if (Py_TYPE(number)->tp_dict == NULL) {
1457 if (PyType_Ready(Py_TYPE(number)) < 0)
Guido van Rossum15d3d042007-08-24 02:02:45 +00001458 return NULL;
1459 }
1460
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001461 if (round_str == NULL) {
1462 round_str = PyUnicode_FromString("__round__");
1463 if (round_str == NULL)
Alex Martelliae211f92007-08-22 23:21:33 +00001464 return NULL;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001465 }
1466
Christian Heimes90aa7642007-12-19 02:45:37 +00001467 round = _PyType_Lookup(Py_TYPE(number), round_str);
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001468 if (round == NULL) {
1469 PyErr_Format(PyExc_TypeError,
1470 "type %.100s doesn't define __round__ method",
Christian Heimes90aa7642007-12-19 02:45:37 +00001471 Py_TYPE(number)->tp_name);
Alex Martelliae211f92007-08-22 23:21:33 +00001472 return NULL;
1473 }
1474
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001475 if (ndigits == UNDEF_NDIGITS)
1476 return PyObject_CallFunction(round, "O", number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001477 else
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001478 return PyObject_CallFunction(round, "Oi", number, ndigits);
1479#undef UNDEF_NDIGITS
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001480}
1481
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001482PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001483"round(number[, ndigits]) -> floating point number\n\
1484\n\
1485Round a number to a given precision in decimal digits (default 0 digits).\n\
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001486This returns an int when called with one argument, otherwise a float.\n\
1487Precision may be negative.");
1488
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001489
Raymond Hettinger64958a12003-12-17 20:43:33 +00001490static PyObject *
1491builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1492{
1493 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
1494 PyObject *callable;
Martin v. Löwis15e62742006-02-27 16:46:16 +00001495 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001496 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001497
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001498 /* args 1-4 should match listsort in Objects/listobject.c */
Armin Rigo71d7e702005-09-20 18:13:03 +00001499 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
1500 kwlist, &seq, &compare, &keyfunc, &reverse))
1501 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001502
1503 newlist = PySequence_List(seq);
1504 if (newlist == NULL)
1505 return NULL;
1506
1507 callable = PyObject_GetAttrString(newlist, "sort");
1508 if (callable == NULL) {
1509 Py_DECREF(newlist);
1510 return NULL;
1511 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001512
Raymond Hettinger64958a12003-12-17 20:43:33 +00001513 newargs = PyTuple_GetSlice(args, 1, 4);
1514 if (newargs == NULL) {
1515 Py_DECREF(newlist);
1516 Py_DECREF(callable);
1517 return NULL;
1518 }
1519
1520 v = PyObject_Call(callable, newargs, kwds);
1521 Py_DECREF(newargs);
1522 Py_DECREF(callable);
1523 if (v == NULL) {
1524 Py_DECREF(newlist);
1525 return NULL;
1526 }
1527 Py_DECREF(v);
1528 return newlist;
1529}
1530
1531PyDoc_STRVAR(sorted_doc,
1532"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001533
Guido van Rossum79f25d91997-04-29 20:08:16 +00001534static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001535builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001536{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001537 PyObject *v = NULL;
1538 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001539
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001540 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001541 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001542 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001543 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001544 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001545 if (!PyErr_Occurred())
1546 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001547 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001548 }
1549 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001550 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001551 }
1552 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001553 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001554 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001555 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001556 "vars() argument must have __dict__ attribute");
1557 return NULL;
1558 }
1559 }
1560 return d;
1561}
1562
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001563PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001564"vars([object]) -> dictionary\n\
1565\n\
1566Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001567With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001568
Alex Martelli86d8b342007-08-22 22:39:42 +00001569static PyObject *
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001570builtin_trunc(PyObject *self, PyObject *number)
Alex Martelli86d8b342007-08-22 22:39:42 +00001571{
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001572 static PyObject *trunc_str = NULL;
1573 PyObject *trunc;
1574
Christian Heimes90aa7642007-12-19 02:45:37 +00001575 if (Py_TYPE(number)->tp_dict == NULL) {
1576 if (PyType_Ready(Py_TYPE(number)) < 0)
Guido van Rossum15d3d042007-08-24 02:02:45 +00001577 return NULL;
1578 }
1579
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001580 if (trunc_str == NULL) {
1581 trunc_str = PyUnicode_FromString("__trunc__");
1582 if (trunc_str == NULL)
1583 return NULL;
1584 }
1585
Christian Heimes90aa7642007-12-19 02:45:37 +00001586 trunc = _PyType_Lookup(Py_TYPE(number), trunc_str);
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001587 if (trunc == NULL) {
1588 PyErr_Format(PyExc_TypeError,
1589 "type %.100s doesn't define __trunc__ method",
Christian Heimes90aa7642007-12-19 02:45:37 +00001590 Py_TYPE(number)->tp_name);
Alex Martelli86d8b342007-08-22 22:39:42 +00001591 return NULL;
1592 }
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001593 return PyObject_CallFunction(trunc, "O", number);
Alex Martelli86d8b342007-08-22 22:39:42 +00001594}
1595
1596PyDoc_STRVAR(trunc_doc,
1597"trunc(Real) -> Integral\n\
1598\n\
1599returns the integral closest to x between 0 and x.");
1600
1601
Alex Martellia70b1912003-04-22 08:12:33 +00001602
1603static PyObject*
1604builtin_sum(PyObject *self, PyObject *args)
1605{
1606 PyObject *seq;
1607 PyObject *result = NULL;
1608 PyObject *temp, *item, *iter;
1609
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001610 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001611 return NULL;
1612
1613 iter = PyObject_GetIter(seq);
1614 if (iter == NULL)
1615 return NULL;
1616
1617 if (result == NULL) {
Christian Heimes217cfd12007-12-02 14:31:20 +00001618 result = PyLong_FromLong(0);
Alex Martellia70b1912003-04-22 08:12:33 +00001619 if (result == NULL) {
1620 Py_DECREF(iter);
1621 return NULL;
1622 }
1623 } else {
1624 /* reject string values for 'start' parameter */
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001625 if (PyUnicode_Check(result)) {
Alex Martellia70b1912003-04-22 08:12:33 +00001626 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001627 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001628 Py_DECREF(iter);
1629 return NULL;
1630 }
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001631 if (PyBytes_Check(result)) {
1632 PyErr_SetString(PyExc_TypeError,
1633 "sum() can't sum bytes [use b''.join(seq) instead]");
1634 Py_DECREF(iter);
1635 return NULL;
1636 }
1637
Alex Martelli41c9f882003-04-22 09:24:48 +00001638 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001639 }
1640
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001641#ifndef SLOW_SUM
1642 /* Fast addition by keeping temporary sums in C instead of new Python objects.
1643 Assumes all inputs are the same type. If the assumption fails, default
1644 to the more general routine.
1645 */
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001646 if (PyLong_CheckExact(result)) {
1647 int overflow;
1648 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
1649 /* If this already overflowed, don't even enter the loop. */
1650 if (overflow == 0) {
1651 Py_DECREF(result);
1652 result = NULL;
1653 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001654 while(result == NULL) {
1655 item = PyIter_Next(iter);
1656 if (item == NULL) {
1657 Py_DECREF(iter);
1658 if (PyErr_Occurred())
1659 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001660 return PyLong_FromLong(i_result);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001661 }
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001662 if (PyLong_CheckExact(item)) {
1663 long b = PyLong_AsLongAndOverflow(item, &overflow);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001664 long x = i_result + b;
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001665 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001666 i_result = x;
1667 Py_DECREF(item);
1668 continue;
1669 }
1670 }
1671 /* Either overflowed or is not an int. Restore real objects and process normally */
Christian Heimes217cfd12007-12-02 14:31:20 +00001672 result = PyLong_FromLong(i_result);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001673 temp = PyNumber_Add(result, item);
1674 Py_DECREF(result);
1675 Py_DECREF(item);
1676 result = temp;
1677 if (result == NULL) {
1678 Py_DECREF(iter);
1679 return NULL;
1680 }
1681 }
1682 }
1683
1684 if (PyFloat_CheckExact(result)) {
1685 double f_result = PyFloat_AS_DOUBLE(result);
1686 Py_DECREF(result);
1687 result = NULL;
1688 while(result == NULL) {
1689 item = PyIter_Next(iter);
1690 if (item == NULL) {
1691 Py_DECREF(iter);
1692 if (PyErr_Occurred())
1693 return NULL;
1694 return PyFloat_FromDouble(f_result);
1695 }
1696 if (PyFloat_CheckExact(item)) {
1697 PyFPE_START_PROTECT("add", return 0)
1698 f_result += PyFloat_AS_DOUBLE(item);
1699 PyFPE_END_PROTECT(f_result)
1700 Py_DECREF(item);
1701 continue;
1702 }
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001703 if (PyLong_CheckExact(item)) {
1704 long value;
1705 int overflow;
1706 value = PyLong_AsLongAndOverflow(item, &overflow);
1707 if (!overflow) {
1708 PyFPE_START_PROTECT("add", return 0)
1709 f_result += (double)value;
1710 PyFPE_END_PROTECT(f_result)
1711 Py_DECREF(item);
1712 continue;
1713 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001714 }
1715 result = PyFloat_FromDouble(f_result);
1716 temp = PyNumber_Add(result, item);
1717 Py_DECREF(result);
1718 Py_DECREF(item);
1719 result = temp;
1720 if (result == NULL) {
1721 Py_DECREF(iter);
1722 return NULL;
1723 }
1724 }
1725 }
1726#endif
1727
Alex Martellia70b1912003-04-22 08:12:33 +00001728 for(;;) {
1729 item = PyIter_Next(iter);
1730 if (item == NULL) {
1731 /* error, or end-of-sequence */
1732 if (PyErr_Occurred()) {
1733 Py_DECREF(result);
1734 result = NULL;
1735 }
1736 break;
1737 }
Alex Martellia253e182003-10-25 23:24:14 +00001738 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001739 Py_DECREF(result);
1740 Py_DECREF(item);
1741 result = temp;
1742 if (result == NULL)
1743 break;
1744 }
1745 Py_DECREF(iter);
1746 return result;
1747}
1748
1749PyDoc_STRVAR(sum_doc,
Thomas Wouters89f507f2006-12-13 04:49:30 +00001750"sum(sequence[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00001751\n\
1752Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00001753of parameter 'start' (which defaults to 0). When the sequence is\n\
1754empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00001755
1756
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001757static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001758builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001759{
1760 PyObject *inst;
1761 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001762 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001763
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001764 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001765 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001766
Guido van Rossum823649d2001-03-21 18:40:58 +00001767 retval = PyObject_IsInstance(inst, cls);
1768 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001769 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001770 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001771}
1772
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001773PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001774"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001775\n\
1776Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001777With a type as second argument, return whether that is the object's type.\n\
1778The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001779isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001780
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001781
1782static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001783builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001784{
1785 PyObject *derived;
1786 PyObject *cls;
1787 int retval;
1788
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001789 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001790 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001791
Guido van Rossum823649d2001-03-21 18:40:58 +00001792 retval = PyObject_IsSubclass(derived, cls);
1793 if (retval < 0)
1794 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001795 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001796}
1797
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001798PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001799"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001800\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00001801Return whether class C is a subclass (i.e., a derived class) of class B.\n\
1802When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
1803is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001804
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001805
Barry Warsawbd599b52000-08-03 15:45:29 +00001806static PyObject*
1807builtin_zip(PyObject *self, PyObject *args)
1808{
Guido van Rossumb65fb332006-08-25 23:26:40 +00001809 /* args must be a tuple */
1810 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00001811
Guido van Rossumb65fb332006-08-25 23:26:40 +00001812 return _PyZip_CreateIter(args);
Barry Warsawbd599b52000-08-03 15:45:29 +00001813}
1814
1815
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001816PyDoc_STRVAR(zip_doc,
Guido van Rossum801f0d72006-08-24 19:48:10 +00001817"zip(it1 [, it2 [...]]) -> iter([(it1[0], it2[0] ...), ...])\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00001818\n\
Guido van Rossum801f0d72006-08-24 19:48:10 +00001819Return an iterator yielding tuples, where each tuple contains the\n\
1820corresponding element from each of the argument iterables.\n\
1821The returned iterator ends when the shortest argument iterable is exhausted.\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001822(This is identical to itertools.izip().)");
Barry Warsawbd599b52000-08-03 15:45:29 +00001823
1824
Guido van Rossum79f25d91997-04-29 20:08:16 +00001825static PyMethodDef builtin_methods[] = {
Guido van Rossum52cc1d82007-03-18 15:41:51 +00001826 {"__build_class__", (PyCFunction)builtin___build_class__,
1827 METH_VARARGS | METH_KEYWORDS, build_class_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001828 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001829 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00001830 {"all", builtin_all, METH_O, all_doc},
1831 {"any", builtin_any, METH_O, any_doc},
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001832 {"bin", builtin_bin, METH_O, bin_doc},
Neal Norwitzc2550c72007-08-31 04:17:51 +00001833 {"chr", builtin_chr, METH_VARARGS, chr_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001834 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
Guido van Rossumd8faa362007-04-27 19:54:29 +00001835 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001836 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
1837 {"dir", builtin_dir, METH_VARARGS, dir_doc},
1838 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
1839 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00001840 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001841 {"filter", builtin_filter, METH_VARARGS, filter_doc},
Eric Smith8c663262007-08-25 02:26:07 +00001842 {"format", builtin_format, METH_VARARGS, format_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001843 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
1844 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
1845 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
1846 {"hash", builtin_hash, METH_O, hash_doc},
1847 {"hex", builtin_hex, METH_O, hex_doc},
1848 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00001849 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001850 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
1851 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
1852 {"iter", builtin_iter, METH_VARARGS, iter_doc},
1853 {"len", builtin_len, METH_O, len_doc},
1854 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
1855 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001856 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
1857 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandla18af4e2007-04-21 15:47:16 +00001858 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001859 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001860 {"ord", builtin_ord, METH_O, ord_doc},
1861 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00001862 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001863 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001864 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001865 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00001866 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00001867 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001868 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Alex Martelli86d8b342007-08-22 22:39:42 +00001869 {"trunc", builtin_trunc, METH_O, trunc_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001870 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00001871 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00001872};
1873
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001874PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001875"Built-in functions, exceptions, and other objects.\n\
1876\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001877Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001878
Guido van Rossum25ce5661997-08-02 03:10:38 +00001879PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001880_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001881{
Fred Drake5550de32000-06-20 04:54:19 +00001882 PyObject *mod, *dict, *debug;
Georg Brandl1a3284e2007-12-02 09:40:06 +00001883 mod = Py_InitModule4("builtins", builtin_methods,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001884 builtin_doc, (PyObject *)NULL,
1885 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001886 if (mod == NULL)
1887 return NULL;
1888 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00001889
Tim Peters7571a0f2003-03-23 17:52:28 +00001890#ifdef Py_TRACE_REFS
Georg Brandl1a3284e2007-12-02 09:40:06 +00001891 /* "builtins" exposes a number of statically allocated objects
Tim Peters7571a0f2003-03-23 17:52:28 +00001892 * that, before this code was added in 2.3, never showed up in
1893 * the list of "all objects" maintained by Py_TRACE_REFS. As a
1894 * result, programs leaking references to None and False (etc)
1895 * couldn't be diagnosed by examining sys.getobjects(0).
1896 */
1897#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
1898#else
1899#define ADD_TO_ALL(OBJECT) (void)0
1900#endif
1901
Tim Peters4b7625e2001-09-13 21:37:17 +00001902#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00001903 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
1904 return NULL; \
1905 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00001906
1907 SETBUILTIN("None", Py_None);
1908 SETBUILTIN("Ellipsis", Py_Ellipsis);
1909 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001910 SETBUILTIN("False", Py_False);
1911 SETBUILTIN("True", Py_True);
1912 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbae07c92007-10-08 02:46:15 +00001913 SETBUILTIN("memoryview", &PyMemoryView_Type);
Guido van Rossum254348e2007-11-21 19:29:53 +00001914 SETBUILTIN("bytearray", &PyBytes_Type);
Guido van Rossum98297ee2007-11-06 21:34:58 +00001915 SETBUILTIN("bytes", &PyString_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001916 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001917#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00001918 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001919#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00001920 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00001921 SETBUILTIN("enumerate", &PyEnum_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001922 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00001923 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001924 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00001925 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001926 SETBUILTIN("list", &PyList_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001927 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossum805365e2007-05-07 22:24:25 +00001928 SETBUILTIN("range", &PyRange_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00001929 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00001930 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001931 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001932 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Guido van Rossum572dbf82007-04-27 23:53:51 +00001933 SETBUILTIN("str", &PyUnicode_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001934 SETBUILTIN("super", &PySuper_Type);
1935 SETBUILTIN("tuple", &PyTuple_Type);
1936 SETBUILTIN("type", &PyType_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001937 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00001938 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
1939 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001940 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00001941 }
1942 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00001943
Guido van Rossum25ce5661997-08-02 03:10:38 +00001944 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00001945#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00001946#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00001947}