blob: 70237bf596ac1d5546553e011ec11f19301a1251 [file] [log] [blame]
Guido van Rossum3f5da241990-12-20 15:06:42 +00001/* Built-in functions */
2
Guido van Rossum79f25d91997-04-29 20:08:16 +00003#include "Python.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00004
5#include "node.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00006#include "code.h"
Guido van Rossum5b722181993-03-30 17:46:03 +00007#include "eval.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00008
Guido van Rossum6bf62da1997-04-11 20:37:35 +00009#include <ctype.h>
10
Mark Hammond26cffde42001-05-14 12:17:34 +000011/* The default encoding used by the platform file system APIs
12 Can remain NULL for all platforms that don't have such a concept
Guido van Rossum00bc0e02007-10-15 02:52:41 +000013
14 Don't forget to modify PyUnicode_DecodeFSDefault() if you touch any of the
15 values for Py_FileSystemDefaultEncoding!
Mark Hammond26cffde42001-05-14 12:17:34 +000016*/
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000017#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
Mark Hammond26cffde42001-05-14 12:17:34 +000018const char *Py_FileSystemDefaultEncoding = "mbcs";
Christian Heimesc8967002007-11-30 10:18:26 +000019const int Py_HasFileSystemDefaultEncoding = 1;
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000020#elif defined(__APPLE__)
21const char *Py_FileSystemDefaultEncoding = "utf-8";
Christian Heimesc8967002007-11-30 10:18:26 +000022const int Py_HasFileSystemDefaultEncoding = 1;
Mark Hammond26cffde42001-05-14 12:17:34 +000023#else
24const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
Christian Heimesc8967002007-11-30 10:18:26 +000025const int Py_HasFileSystemDefaultEncoding = 0;
Mark Hammond26cffde42001-05-14 12:17:34 +000026#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000027
Guido van Rossum79f25d91997-04-29 20:08:16 +000028static PyObject *
Guido van Rossum52cc1d82007-03-18 15:41:51 +000029builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds)
30{
Guido van Rossumcd16bf62007-06-13 18:07:49 +000031 PyObject *func, *name, *bases, *mkw, *meta, *prep, *ns, *cell;
32 PyObject *cls = NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +000033 Py_ssize_t nargs, nbases;
34
35 assert(args != NULL);
36 if (!PyTuple_Check(args)) {
37 PyErr_SetString(PyExc_TypeError,
38 "__build_class__: args is not a tuple");
39 return NULL;
40 }
41 nargs = PyTuple_GET_SIZE(args);
42 if (nargs < 2) {
43 PyErr_SetString(PyExc_TypeError,
44 "__build_class__: not enough arguments");
45 return NULL;
46 }
47 func = PyTuple_GET_ITEM(args, 0); /* Better be callable */
48 name = PyTuple_GET_ITEM(args, 1);
Neal Norwitz6ea45d32007-08-26 04:19:43 +000049 if (!PyUnicode_Check(name)) {
Guido van Rossum52cc1d82007-03-18 15:41:51 +000050 PyErr_SetString(PyExc_TypeError,
51 "__build_class__: name is not a string");
52 return NULL;
53 }
54 bases = PyTuple_GetSlice(args, 2, nargs);
55 if (bases == NULL)
56 return NULL;
57 nbases = nargs - 2;
58
59 if (kwds == NULL) {
60 meta = NULL;
61 mkw = NULL;
62 }
63 else {
64 mkw = PyDict_Copy(kwds); /* Don't modify kwds passed in! */
65 if (mkw == NULL) {
66 Py_DECREF(bases);
67 return NULL;
68 }
69 meta = PyDict_GetItemString(mkw, "metaclass");
70 if (meta != NULL) {
71 Py_INCREF(meta);
72 if (PyDict_DelItemString(mkw, "metaclass") < 0) {
73 Py_DECREF(meta);
74 Py_DECREF(mkw);
75 Py_DECREF(bases);
76 return NULL;
77 }
78 }
79 }
80 if (meta == NULL) {
81 if (PyTuple_GET_SIZE(bases) == 0)
82 meta = (PyObject *) (&PyType_Type);
83 else {
84 PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
85 meta = (PyObject *) (base0->ob_type);
86 }
87 Py_INCREF(meta);
88 }
89 prep = PyObject_GetAttrString(meta, "__prepare__");
90 if (prep == NULL) {
91 PyErr_Clear();
92 ns = PyDict_New();
93 }
94 else {
95 PyObject *pargs = Py_BuildValue("OO", name, bases);
96 if (pargs == NULL) {
97 Py_DECREF(prep);
98 Py_DECREF(meta);
99 Py_XDECREF(mkw);
100 Py_DECREF(bases);
101 return NULL;
102 }
103 ns = PyEval_CallObjectWithKeywords(prep, pargs, mkw);
104 Py_DECREF(pargs);
105 Py_DECREF(prep);
106 if (ns == NULL) {
107 Py_DECREF(meta);
108 Py_XDECREF(mkw);
109 Py_DECREF(bases);
110 return NULL;
111 }
112 }
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000113 cell = PyObject_CallFunctionObjArgs(func, ns, NULL);
114 if (cell != NULL) {
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000115 PyObject *margs;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000116 margs = Py_BuildValue("OOO", name, bases, ns);
117 if (margs != NULL) {
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000118 cls = PyEval_CallObjectWithKeywords(meta, margs, mkw);
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000119 Py_DECREF(margs);
120 }
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000121 if (cls != NULL && PyCell_Check(cell)) {
122 Py_INCREF(cls);
123 PyCell_SET(cell, cls);
124 }
125 Py_DECREF(cell);
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000126 }
127 Py_DECREF(ns);
128 Py_DECREF(meta);
129 Py_XDECREF(mkw);
130 Py_DECREF(bases);
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000131 return cls;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000132}
133
134PyDoc_STRVAR(build_class_doc,
135"__build_class__(func, name, *bases, metaclass=None, **kwds) -> class\n\
136\n\
137Internal helper function used by the class statement.");
138
139static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000140builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000141{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000142 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
143 "level", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000144 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000145 PyObject *globals = NULL;
146 PyObject *locals = NULL;
147 PyObject *fromlist = NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +0000148 int level = -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000149
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000150 if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|OOOi:__import__",
151 kwlist, &name, &globals, &locals, &fromlist, &level))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000152 return NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +0000153 return PyImport_ImportModuleLevel(name, globals, locals,
154 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000155}
156
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000157PyDoc_STRVAR(import_doc,
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000158"__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000159\n\
160Import a module. The globals are only used to determine the context;\n\
161they are not modified. The locals are currently unused. The fromlist\n\
162should be a list of names to emulate ``from name import ...'', or an\n\
163empty list to emulate ``import name''.\n\
164When importing a module from a package, note that __import__('A.B', ...)\n\
165returns package A when fromlist is empty, but its submodule B when\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000166fromlist is not empty. Level is used to determine whether to perform \n\
167absolute or relative imports. -1 is the original strategy of attempting\n\
168both absolute and relative imports, 0 is absolute, a positive number\n\
169is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000170
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000171
Guido van Rossum79f25d91997-04-29 20:08:16 +0000172static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000173builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000174{
Guido van Rossum09df08a1998-05-22 00:51:39 +0000175 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000176}
177
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000178PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000179"abs(number) -> number\n\
180\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000181Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000182
Raymond Hettinger96229b12005-03-11 06:49:40 +0000183static PyObject *
184builtin_all(PyObject *self, PyObject *v)
185{
186 PyObject *it, *item;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000187 PyObject *(*iternext)(PyObject *);
188 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000189
190 it = PyObject_GetIter(v);
191 if (it == NULL)
192 return NULL;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000193 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000194
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000195 for (;;) {
196 item = iternext(it);
197 if (item == NULL)
198 break;
199 cmp = PyObject_IsTrue(item);
Raymond Hettinger96229b12005-03-11 06:49:40 +0000200 Py_DECREF(item);
201 if (cmp < 0) {
202 Py_DECREF(it);
203 return NULL;
204 }
205 if (cmp == 0) {
206 Py_DECREF(it);
207 Py_RETURN_FALSE;
208 }
209 }
210 Py_DECREF(it);
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000211 if (PyErr_Occurred()) {
212 if (PyErr_ExceptionMatches(PyExc_StopIteration))
213 PyErr_Clear();
214 else
215 return NULL;
216 }
Raymond Hettinger96229b12005-03-11 06:49:40 +0000217 Py_RETURN_TRUE;
218}
219
220PyDoc_STRVAR(all_doc,
221"all(iterable) -> bool\n\
222\n\
223Return True if bool(x) is True for all values x in the iterable.");
224
225static PyObject *
226builtin_any(PyObject *self, PyObject *v)
227{
228 PyObject *it, *item;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000229 PyObject *(*iternext)(PyObject *);
230 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000231
232 it = PyObject_GetIter(v);
233 if (it == NULL)
234 return NULL;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000235 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000236
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000237 for (;;) {
238 item = iternext(it);
239 if (item == NULL)
240 break;
241 cmp = PyObject_IsTrue(item);
Raymond Hettinger96229b12005-03-11 06:49:40 +0000242 Py_DECREF(item);
243 if (cmp < 0) {
244 Py_DECREF(it);
245 return NULL;
246 }
247 if (cmp == 1) {
248 Py_DECREF(it);
249 Py_RETURN_TRUE;
250 }
251 }
252 Py_DECREF(it);
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000253 if (PyErr_Occurred()) {
254 if (PyErr_ExceptionMatches(PyExc_StopIteration))
255 PyErr_Clear();
256 else
257 return NULL;
258 }
Raymond Hettinger96229b12005-03-11 06:49:40 +0000259 Py_RETURN_FALSE;
260}
261
262PyDoc_STRVAR(any_doc,
263"any(iterable) -> bool\n\
264\n\
265Return True if bool(x) is True for any x in the iterable.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000266
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000267
Guido van Rossum79f25d91997-04-29 20:08:16 +0000268static PyObject *
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000269builtin_bin(PyObject *self, PyObject *v)
270{
271 return PyNumber_ToBase(v, 2);
272}
273
274PyDoc_STRVAR(bin_doc,
275"bin(number) -> string\n\
276\n\
277Return the binary representation of an integer or long integer.");
278
279
280static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000281builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000282{
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000283 PyObject *itertools, *ifilter, *result;
Christian Heimes819b8bf2008-01-03 23:05:47 +0000284 itertools = PyImport_ImportModuleNoBlock("itertools");
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000285 if (itertools == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000286 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000287 ifilter = PyObject_GetAttrString(itertools, "ifilter");
288 Py_DECREF(itertools);
289 if (ifilter == NULL)
Georg Brandle35b6572005-07-19 22:20:20 +0000290 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000291 result = PyObject_Call(ifilter, args, NULL);
292 Py_DECREF(ifilter);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000293 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000294}
295
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000296PyDoc_STRVAR(filter_doc,
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000297"filter(predicate, iterable) -> iterator\n\
298\n\
299Return an iterator yielding only those elements of the input iterable\n\
300for which the predicate (a Boolean function) returns true.\n\
301If the predicate is None, 'lambda x: bool(x)' is assumed.\n\
302(This is identical to itertools.ifilter().)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000303
Eric Smith8c663262007-08-25 02:26:07 +0000304static PyObject *
305builtin_format(PyObject *self, PyObject *args)
306{
Christian Heimes94b7d3d2007-12-11 20:20:39 +0000307 PyObject *value;
Eric Smith8fd3eba2008-02-17 19:48:00 +0000308 PyObject *format_spec = NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000309
Eric Smith8fd3eba2008-02-17 19:48:00 +0000310 if (!PyArg_ParseTuple(args, "O|U:format", &value, &format_spec))
311 return NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000312
Eric Smith8fd3eba2008-02-17 19:48:00 +0000313 return PyObject_Format(value, format_spec);
Eric Smith8c663262007-08-25 02:26:07 +0000314}
315
Eric Smith8c663262007-08-25 02:26:07 +0000316PyDoc_STRVAR(format_doc,
Eric Smith81936692007-08-31 01:14:01 +0000317"format(value[, format_spec]) -> string\n\
Eric Smith8c663262007-08-25 02:26:07 +0000318\n\
Eric Smith81936692007-08-31 01:14:01 +0000319Returns value.__format__(format_spec)\n\
320format_spec defaults to \"\"");
321
Guido van Rossum7fcf2242007-05-04 17:43:11 +0000322static PyObject *
Walter Dörwalde7efd592007-06-05 20:07:21 +0000323builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000324{
325 long x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000326
Walter Dörwalde7efd592007-06-05 20:07:21 +0000327 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum09095f32000-03-10 23:00:52 +0000328 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000329
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000330 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000331}
332
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000333PyDoc_VAR(chr_doc) = PyDoc_STR(
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000334"chr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000335\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000336Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000337)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000338#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000339PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000340"\nIf 0x10000 <= i, a surrogate pair is returned."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000341)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000342#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000343;
Guido van Rossum09095f32000-03-10 23:00:52 +0000344
345
346static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000347builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000348{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000349 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000350 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000351
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000352 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000353 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000354 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000355 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +0000356 return PyLong_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000357}
358
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000359PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000360"cmp(x, y) -> integer\n\
361\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000362Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000363
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000364
365static char *
366source_as_string(PyObject *cmd)
367{
368 char *str;
369 Py_ssize_t size;
370
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000371 if (PyUnicode_Check(cmd)) {
372 cmd = _PyUnicode_AsDefaultEncodedString(cmd, NULL);
373 if (cmd == NULL)
374 return NULL;
375 }
Guido van Rossuma4b8d1d2007-08-27 15:02:28 +0000376 else if (!PyObject_CheckReadBuffer(cmd)) {
377 PyErr_SetString(PyExc_TypeError,
378 "eval()/exec() arg 1 must be a string, bytes or code object");
379 return NULL;
380 }
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000381 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &size) < 0) {
382 return NULL;
383 }
384 if (strlen(str) != size) {
385 PyErr_SetString(PyExc_TypeError,
386 "source code string cannot contain null bytes");
387 return NULL;
388 }
389 return str;
390}
391
Guido van Rossum79f25d91997-04-29 20:08:16 +0000392static PyObject *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000393builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000394{
395 char *str;
396 char *filename;
397 char *startstr;
398 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000399 int dont_inherit = 0;
400 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000401 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000402 PyObject *cmd;
Guido van Rossumd8faa362007-04-27 19:54:29 +0000403 static char *kwlist[] = {"source", "filename", "mode", "flags",
404 "dont_inherit", NULL};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000405
Guido van Rossumd8faa362007-04-27 19:54:29 +0000406 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
407 kwlist, &cmd, &filename, &startstr,
408 &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000409 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000410
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000411 cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000412
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000413 str = source_as_string(cmd);
414 if (str == NULL)
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000415 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000416
Guido van Rossum5b722181993-03-30 17:46:03 +0000417 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000418 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000419 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000420 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000421 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000422 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000423 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000424 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000425 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000426 return NULL;
Guido van Rossum5b722181993-03-30 17:46:03 +0000427 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000428
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000429 if (supplied_flags &
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000430 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000431 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000432 PyErr_SetString(PyExc_ValueError,
433 "compile(): unrecognised flags");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000434 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000435 }
436 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
437
Tim Peters6cd6a822001-08-17 22:11:27 +0000438 if (!dont_inherit) {
439 PyEval_MergeCompilerFlags(&cf);
440 }
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000441 return Py_CompileStringFlags(str, filename, start, &cf);
Guido van Rossum5b722181993-03-30 17:46:03 +0000442}
443
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000444PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000445"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000446\n\
447Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000448into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000449The filename will be used for run-time error messages.\n\
450The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000451single (interactive) statement, or 'eval' to compile an expression.\n\
452The flags argument, if present, controls which future statements influence\n\
453the compilation of the code.\n\
454The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
455the effects of any future statements in effect in the code calling\n\
456compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000457in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000458
Guido van Rossum79f25d91997-04-29 20:08:16 +0000459static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000460builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000461{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000462 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000463
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000464 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000465 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000466 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000467}
468
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000469PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000470"dir([object]) -> list of strings\n"
471"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000472"If called without an argument, return the names in the current scope.\n"
473"Else, return an alphabetized list of names comprising (some of) the attributes\n"
474"of the given object, and of attributes reachable from it.\n"
475"If the object supplies a method named __dir__, it will be used; otherwise\n"
476"the default dir() logic is used and returns:\n"
477" for a module object: the module's attributes.\n"
478" for a class object: its attributes, and recursively the attributes\n"
479" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000480" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000481" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000482
Guido van Rossum79f25d91997-04-29 20:08:16 +0000483static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000484builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000485{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000486 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000487
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000488 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000489 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000490 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000491}
492
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000493PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000494"divmod(x, y) -> (div, mod)\n\
495\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000496Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000497
498
Guido van Rossum79f25d91997-04-29 20:08:16 +0000499static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000500builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000501{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000502 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000503 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000504 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000505 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000506
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000507 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000508 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000509 if (locals != Py_None && !PyMapping_Check(locals)) {
510 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000511 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000512 }
513 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000514 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000515 "globals must be a real dict; try eval(expr, {}, mapping)"
516 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000517 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000518 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000519 if (globals == Py_None) {
520 globals = PyEval_GetGlobals();
521 if (locals == Py_None)
522 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000523 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000524 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000525 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000526
Georg Brandl77c85e62005-09-15 10:46:13 +0000527 if (globals == NULL || locals == NULL) {
528 PyErr_SetString(PyExc_TypeError,
529 "eval must be given globals and locals "
530 "when called without a frame");
531 return NULL;
532 }
533
Guido van Rossum79f25d91997-04-29 20:08:16 +0000534 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
535 if (PyDict_SetItemString(globals, "__builtins__",
536 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000537 return NULL;
538 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000539
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000540 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000541 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000542 PyErr_SetString(PyExc_TypeError,
543 "code object passed to eval() may not contain free variables");
544 return NULL;
545 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000546 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000547 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000548
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000549 str = source_as_string(cmd);
550 if (str == NULL)
Guido van Rossum94390a41992-08-14 15:14:30 +0000551 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000552
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000553 while (*str == ' ' || *str == '\t')
554 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000555
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000556 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Tim Peters9fa96be2001-08-17 23:04:59 +0000557 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000558 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
559 Py_XDECREF(tmp);
560 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000561}
562
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000563PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000564"eval(source[, globals[, locals]]) -> value\n\
565\n\
566Evaluate the source in the context of globals and locals.\n\
567The source may be a string representing a Python expression\n\
568or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000569The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000570defaulting to the current globals and locals.\n\
571If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000572
Georg Brandl7cae87c2006-09-06 06:51:57 +0000573static PyObject *
574builtin_exec(PyObject *self, PyObject *args)
575{
576 PyObject *v;
577 PyObject *prog, *globals = Py_None, *locals = Py_None;
578 int plain = 0;
579
580 if (!PyArg_ParseTuple(args, "O|OO:exec", &prog, &globals, &locals))
581 return NULL;
582
583 if (globals == Py_None) {
584 globals = PyEval_GetGlobals();
585 if (locals == Py_None) {
586 locals = PyEval_GetLocals();
587 plain = 1;
588 }
589 if (!globals || !locals) {
590 PyErr_SetString(PyExc_SystemError,
591 "globals and locals cannot be NULL");
592 return NULL;
593 }
594 }
595 else if (locals == Py_None)
596 locals = globals;
Neal Norwitz6ea45d32007-08-26 04:19:43 +0000597 if (!PyUnicode_Check(prog) &&
Guido van Rossumda5b8f22007-06-12 23:30:11 +0000598 !PyCode_Check(prog)) {
Georg Brandl7cae87c2006-09-06 06:51:57 +0000599 PyErr_Format(PyExc_TypeError,
600 "exec() arg 1 must be a string, file, or code "
601 "object, not %.100s", prog->ob_type->tp_name);
602 return NULL;
603 }
604 if (!PyDict_Check(globals)) {
605 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
606 globals->ob_type->tp_name);
607 return NULL;
608 }
609 if (!PyMapping_Check(locals)) {
610 PyErr_Format(PyExc_TypeError,
611 "arg 3 must be a mapping or None, not %.100s",
612 locals->ob_type->tp_name);
613 return NULL;
614 }
615 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
616 if (PyDict_SetItemString(globals, "__builtins__",
617 PyEval_GetBuiltins()) != 0)
618 return NULL;
619 }
620
621 if (PyCode_Check(prog)) {
622 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
623 PyErr_SetString(PyExc_TypeError,
624 "code object passed to exec() may not "
625 "contain free variables");
626 return NULL;
627 }
628 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
629 }
Georg Brandl7cae87c2006-09-06 06:51:57 +0000630 else {
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000631 char *str = source_as_string(prog);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000632 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000633 if (str == NULL)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000634 return NULL;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000635 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000636 if (PyEval_MergeCompilerFlags(&cf))
637 v = PyRun_StringFlags(str, Py_file_input, globals,
638 locals, &cf);
639 else
640 v = PyRun_String(str, Py_file_input, globals, locals);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000641 }
642 if (v == NULL)
643 return NULL;
644 Py_DECREF(v);
645 Py_RETURN_NONE;
646}
647
648PyDoc_STRVAR(exec_doc,
649"exec(object[, globals[, locals]])\n\
650\n\
651Read and execute code from a object, which can be a string, a code\n\
652object or a file object.\n\
653The globals and locals are dictionaries, defaulting to the current\n\
654globals and locals. If only globals is given, locals defaults to it.");
655
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000656
Guido van Rossum79f25d91997-04-29 20:08:16 +0000657static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000658builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000659{
Neal Norwitz6ea45d32007-08-26 04:19:43 +0000660 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000661 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000662
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000663 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000664 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000665
Martin v. Löwis5b222132007-06-10 09:51:05 +0000666 if (!PyUnicode_Check(name)) {
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000667 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000668 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000669 return NULL;
670 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000671 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000672 if (result == NULL && dflt != NULL &&
673 PyErr_ExceptionMatches(PyExc_AttributeError))
674 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000675 PyErr_Clear();
676 Py_INCREF(dflt);
677 result = dflt;
678 }
679 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000680}
681
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000682PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000683"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000684\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000685Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
686When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000687exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000688
689
Guido van Rossum79f25d91997-04-29 20:08:16 +0000690static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000691builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000692{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000693 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000694
Guido van Rossum79f25d91997-04-29 20:08:16 +0000695 d = PyEval_GetGlobals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000696 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000697 return d;
698}
699
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000700PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000701"globals() -> dictionary\n\
702\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000703Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000704
705
Guido van Rossum79f25d91997-04-29 20:08:16 +0000706static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000707builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000708{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000709 PyObject *v;
710 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000711
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000712 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000713 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000714 if (!PyUnicode_Check(name)) {
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000715 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000716 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000717 return NULL;
718 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000719 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000720 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000721 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000722 Py_INCREF(Py_False);
723 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000724 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000725 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000726 Py_INCREF(Py_True);
727 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000728}
729
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000730PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000731"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000732\n\
733Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000734(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000735
736
Guido van Rossum79f25d91997-04-29 20:08:16 +0000737static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000738builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000739{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000740 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000741}
742
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000743PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000744"id(object) -> integer\n\
745\n\
746Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000747simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000748
749
Guido van Rossum79f25d91997-04-29 20:08:16 +0000750static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000751builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000752{
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000753 PyObject *itertools, *imap, *result;
Christian Heimes819b8bf2008-01-03 23:05:47 +0000754 itertools = PyImport_ImportModuleNoBlock("itertools");
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000755 if (itertools == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000756 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000757 imap = PyObject_GetAttrString(itertools, "imap");
758 Py_DECREF(itertools);
759 if (imap == NULL)
Tim Peters4e9afdc2001-05-03 23:54:49 +0000760 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000761 result = PyObject_Call(imap, args, NULL);
762 Py_DECREF(imap);
Tim Peters4e9afdc2001-05-03 23:54:49 +0000763 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000764}
765
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000766PyDoc_STRVAR(map_doc,
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000767"map(function, iterable[, iterable, ...]) -> iterator\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000768\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000769Return an iterator yielding the results of applying the function to the\n\
770items of the argument iterables(s). If more than one iterable is given,\n\
771the function is called with an argument list consisting of the\n\
772corresponding item of each iterable, until an iterable is exhausted.\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000773(This is identical to itertools.imap().)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000774
775
Guido van Rossum79f25d91997-04-29 20:08:16 +0000776static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +0000777builtin_next(PyObject *self, PyObject *args)
778{
779 PyObject *it, *res;
780 PyObject *def = NULL;
781
782 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
783 return NULL;
784 if (!PyIter_Check(it)) {
785 PyErr_Format(PyExc_TypeError,
786 "%.200s object is not an iterator", it->ob_type->tp_name);
787 return NULL;
788 }
789
790 res = (*it->ob_type->tp_iternext)(it);
791 if (res == NULL) {
792 if (def) {
793 if (PyErr_Occurred() &&
794 !PyErr_ExceptionMatches(PyExc_StopIteration))
795 return NULL;
796 PyErr_Clear();
797 Py_INCREF(def);
798 return def;
799 } else if (PyErr_Occurred()) {
800 return NULL;
801 } else {
802 PyErr_SetNone(PyExc_StopIteration);
803 return NULL;
804 }
805 }
806 return res;
807}
808
809PyDoc_STRVAR(next_doc,
810"next(iterator[, default])\n\
811\n\
812Return the next item from the iterator. If default is given and the iterator\n\
813is exhausted, it is returned instead of raising StopIteration.");
814
815
816static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000817builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000818{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000819 PyObject *v;
820 PyObject *name;
821 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000822
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000823 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000824 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000825 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000826 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000827 Py_INCREF(Py_None);
828 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000829}
830
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000831PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000832"setattr(object, name, value)\n\
833\n\
834Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000835``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000836
837
Guido van Rossum79f25d91997-04-29 20:08:16 +0000838static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000839builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000840{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000841 PyObject *v;
842 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000843
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000844 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +0000845 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000846 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000847 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000848 Py_INCREF(Py_None);
849 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +0000850}
851
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000852PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +0000853"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000854\n\
855Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000856``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000857
858
Guido van Rossum79f25d91997-04-29 20:08:16 +0000859static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000860builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000861{
Guido van Rossum9bfef441993-03-29 10:43:31 +0000862 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000863
Guido van Rossum79f25d91997-04-29 20:08:16 +0000864 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000865 if (x == -1)
866 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +0000867 return PyLong_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000868}
869
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000870PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000871"hash(object) -> integer\n\
872\n\
873Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000874the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000875
876
Guido van Rossum79f25d91997-04-29 20:08:16 +0000877static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000878builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +0000879{
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000880 return PyNumber_ToBase(v, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +0000881}
882
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000883PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000884"hex(number) -> string\n\
885\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000886Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000887
888
Guido van Rossum79f25d91997-04-29 20:08:16 +0000889static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000890builtin_iter(PyObject *self, PyObject *args)
891{
892 PyObject *v, *w = NULL;
893
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000894 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000895 return NULL;
896 if (w == NULL)
897 return PyObject_GetIter(v);
898 if (!PyCallable_Check(v)) {
899 PyErr_SetString(PyExc_TypeError,
900 "iter(v, w): v must be callable");
901 return NULL;
902 }
903 return PyCallIter_New(v, w);
904}
905
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000906PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000907"iter(collection) -> iterator\n\
908iter(callable, sentinel) -> iterator\n\
909\n\
910Get an iterator from an object. In the first form, the argument must\n\
911supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000912In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000913
914
915static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000916builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000917{
Martin v. Löwis18e16552006-02-15 17:27:45 +0000918 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000919
Jeremy Hylton03657cf2000-07-12 13:05:33 +0000920 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +0000921 if (res < 0 && PyErr_Occurred())
922 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +0000923 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000924}
925
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000926PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000927"len(object) -> integer\n\
928\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000929Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000930
931
Guido van Rossum79f25d91997-04-29 20:08:16 +0000932static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000933builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000934{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000935 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000936
Guido van Rossum79f25d91997-04-29 20:08:16 +0000937 d = PyEval_GetLocals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000938 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000939 return d;
940}
941
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000942PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000943"locals() -> dictionary\n\
944\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +0000945Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000946
947
Guido van Rossum79f25d91997-04-29 20:08:16 +0000948static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000949min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000950{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000951 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +0000952 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000953
Guido van Rossum79f25d91997-04-29 20:08:16 +0000954 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000955 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +0000956 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000957 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +0000958
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000959 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
960 keyfunc = PyDict_GetItemString(kwds, "key");
961 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000962 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000963 "%s() got an unexpected keyword argument", name);
964 return NULL;
965 }
Christian Heimesbbffeb62008-01-24 09:42:52 +0000966 Py_INCREF(keyfunc);
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000967 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000968
Tim Petersc3074532001-05-03 07:00:32 +0000969 it = PyObject_GetIter(v);
Christian Heimesbbffeb62008-01-24 09:42:52 +0000970 if (it == NULL) {
971 Py_XDECREF(keyfunc);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000972 return NULL;
Christian Heimesbbffeb62008-01-24 09:42:52 +0000973 }
Tim Petersc3074532001-05-03 07:00:32 +0000974
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000975 maxitem = NULL; /* the result */
976 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +0000977 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000978 /* get the value from the key function */
979 if (keyfunc != NULL) {
980 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
981 if (val == NULL)
982 goto Fail_it_item;
983 }
984 /* no key function; the value is the item */
985 else {
986 val = item;
987 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000988 }
Tim Petersc3074532001-05-03 07:00:32 +0000989
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000990 /* maximum value and item are unset; set them */
991 if (maxval == NULL) {
992 maxitem = item;
993 maxval = val;
994 }
995 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +0000996 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000997 int cmp = PyObject_RichCompareBool(val, maxval, op);
998 if (cmp < 0)
999 goto Fail_it_item_and_val;
1000 else if (cmp > 0) {
1001 Py_DECREF(maxval);
1002 Py_DECREF(maxitem);
1003 maxval = val;
1004 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001005 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001006 else {
1007 Py_DECREF(item);
1008 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001009 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001010 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001011 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001012 if (PyErr_Occurred())
1013 goto Fail_it;
1014 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001015 PyErr_Format(PyExc_ValueError,
1016 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001017 assert(maxitem == NULL);
1018 }
1019 else
1020 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001021 Py_DECREF(it);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001022 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001023 return maxitem;
1024
1025Fail_it_item_and_val:
1026 Py_DECREF(val);
1027Fail_it_item:
1028 Py_DECREF(item);
1029Fail_it:
1030 Py_XDECREF(maxval);
1031 Py_XDECREF(maxitem);
1032 Py_DECREF(it);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001033 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001034 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001035}
1036
Guido van Rossum79f25d91997-04-29 20:08:16 +00001037static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001038builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001039{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001040 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001041}
1042
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001043PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001044"min(iterable[, key=func]) -> value\n\
1045min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001046\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001047With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001048With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001049
1050
Guido van Rossum79f25d91997-04-29 20:08:16 +00001051static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001052builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001053{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001054 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001055}
1056
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001057PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001058"max(iterable[, key=func]) -> value\n\
1059max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001060\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001061With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001062With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001063
1064
Guido van Rossum79f25d91997-04-29 20:08:16 +00001065static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001066builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001067{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001068 return PyNumber_ToBase(v, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001069}
1070
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001071PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001072"oct(number) -> string\n\
1073\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001074Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001075
1076
Guido van Rossum79f25d91997-04-29 20:08:16 +00001077static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001078builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001079{
Guido van Rossum09095f32000-03-10 23:00:52 +00001080 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001081 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001082
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001083 if (PyString_Check(obj)) {
1084 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001085 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001086 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Christian Heimes217cfd12007-12-02 14:31:20 +00001087 return PyLong_FromLong(ord);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001088 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001089 }
1090 else if (PyUnicode_Check(obj)) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001091 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001092 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001093 ord = (long)*PyUnicode_AS_UNICODE(obj);
Christian Heimes217cfd12007-12-02 14:31:20 +00001094 return PyLong_FromLong(ord);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001095 }
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001096#ifndef Py_UNICODE_WIDE
1097 if (size == 2) {
1098 /* Decode a valid surrogate pair */
1099 int c0 = PyUnicode_AS_UNICODE(obj)[0];
1100 int c1 = PyUnicode_AS_UNICODE(obj)[1];
1101 if (0xD800 <= c0 && c0 <= 0xDBFF &&
1102 0xDC00 <= c1 && c1 <= 0xDFFF) {
1103 ord = ((((c0 & 0x03FF) << 10) | (c1 & 0x03FF)) +
1104 0x00010000);
Christian Heimes217cfd12007-12-02 14:31:20 +00001105 return PyLong_FromLong(ord);
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001106 }
1107 }
1108#endif
Guido van Rossum6f376c42007-05-24 14:31:33 +00001109 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001110 else if (PyBytes_Check(obj)) {
1111 /* XXX Hopefully this is temporary */
1112 size = PyBytes_GET_SIZE(obj);
1113 if (size == 1) {
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001114 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
Christian Heimes217cfd12007-12-02 14:31:20 +00001115 return PyLong_FromLong(ord);
Guido van Rossum98f97462007-04-13 03:31:13 +00001116 }
1117 }
1118 else {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001119 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001120 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001121 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001122 return NULL;
1123 }
1124
Guido van Rossumad991772001-01-12 16:03:05 +00001125 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001126 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001127 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001128 size);
1129 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001130}
1131
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001132PyDoc_VAR(ord_doc) = PyDoc_STR(
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001133"ord(c) -> integer\n\
1134\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001135Return the integer ordinal of a one-character string."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001136)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001137#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001138PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001139"\nA valid surrogate pair is also accepted."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001140)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001141#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001142;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001143
1144
Guido van Rossum79f25d91997-04-29 20:08:16 +00001145static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001146builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001147{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001148 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001149
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001150 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001151 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001152 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001153}
1154
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001155PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001156"pow(x, y[, z]) -> number\n\
1157\n\
1158With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001159equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001160
1161
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001162
Guido van Rossum34343512006-11-30 22:13:52 +00001163static PyObject *
1164builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1165{
1166 static char *kwlist[] = {"sep", "end", "file", 0};
Georg Brandl257d3d92007-02-26 10:35:10 +00001167 static PyObject *dummy_args;
Guido van Rossum34343512006-11-30 22:13:52 +00001168 PyObject *sep = NULL, *end = NULL, *file = NULL;
1169 int i, err;
1170
Georg Brandl257d3d92007-02-26 10:35:10 +00001171 if (dummy_args == NULL) {
1172 if (!(dummy_args = PyTuple_New(0)))
1173 return NULL;
1174 }
Georg Brandl88fc6642007-02-09 21:28:07 +00001175 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
Guido van Rossum34343512006-11-30 22:13:52 +00001176 kwlist, &sep, &end, &file))
Christian Heimesfef9bba2007-11-13 15:24:14 +00001177 return NULL;
1178 if (file == NULL || file == Py_None) {
Guido van Rossum34343512006-11-30 22:13:52 +00001179 file = PySys_GetObject("stdout");
Christian Heimesfef9bba2007-11-13 15:24:14 +00001180 /* sys.stdout may be None when FILE* stdout isn't connected */
1181 if (file == Py_None)
1182 Py_RETURN_NONE;
1183 }
Guido van Rossum34343512006-11-30 22:13:52 +00001184
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001185 if (sep && sep != Py_None && !PyUnicode_Check(sep)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001186 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001187 "sep must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001188 sep->ob_type->tp_name);
1189 return NULL;
1190 }
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001191 if (end && end != Py_None && !PyUnicode_Check(end)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001192 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001193 "end must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001194 end->ob_type->tp_name);
1195 return NULL;
1196 }
Guido van Rossum34343512006-11-30 22:13:52 +00001197
1198 for (i = 0; i < PyTuple_Size(args); i++) {
1199 if (i > 0) {
1200 if (sep == NULL || sep == Py_None)
1201 err = PyFile_WriteString(" ", file);
1202 else
1203 err = PyFile_WriteObject(sep, file,
1204 Py_PRINT_RAW);
1205 if (err)
1206 return NULL;
1207 }
1208 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1209 Py_PRINT_RAW);
1210 if (err)
1211 return NULL;
1212 }
1213
1214 if (end == NULL || end == Py_None)
1215 err = PyFile_WriteString("\n", file);
1216 else
1217 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1218 if (err)
1219 return NULL;
1220
1221 Py_RETURN_NONE;
1222}
1223
1224PyDoc_STRVAR(print_doc,
Georg Brandlcd5da7d2008-02-01 15:47:37 +00001225"print(value, ..., sep=' ', end='\\n', file=sys.stdout)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001226\n\
1227Prints the values to a stream, or to sys.stdout by default.\n\
1228Optional keyword arguments:\n\
1229file: a file-like object (stream); defaults to the current sys.stdout.\n\
1230sep: string inserted between values, default a space.\n\
1231end: string appended after the last value, default a newline.");
1232
1233
Guido van Rossuma88a0332007-02-26 16:59:55 +00001234static PyObject *
1235builtin_input(PyObject *self, PyObject *args)
1236{
Guido van Rossumeba76962007-05-27 09:13:28 +00001237 PyObject *promptarg = NULL;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001238 PyObject *fin = PySys_GetObject("stdin");
1239 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossumeba76962007-05-27 09:13:28 +00001240 PyObject *ferr = PySys_GetObject("stderr");
1241 PyObject *tmp;
1242 long fd;
1243 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001244
Guido van Rossumeba76962007-05-27 09:13:28 +00001245 /* Parse arguments */
1246 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg))
Guido van Rossuma88a0332007-02-26 16:59:55 +00001247 return NULL;
1248
Guido van Rossumeba76962007-05-27 09:13:28 +00001249 /* Check that stdin/out/err are intact */
Christian Heimes2be03732007-11-15 02:26:46 +00001250 if (fin == NULL || fin == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001251 PyErr_SetString(PyExc_RuntimeError,
1252 "input(): lost sys.stdin");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001253 return NULL;
1254 }
Christian Heimes2be03732007-11-15 02:26:46 +00001255 if (fout == NULL || fout == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001256 PyErr_SetString(PyExc_RuntimeError,
1257 "input(): lost sys.stdout");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001258 return NULL;
1259 }
Christian Heimes2be03732007-11-15 02:26:46 +00001260 if (ferr == NULL || ferr == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001261 PyErr_SetString(PyExc_RuntimeError,
1262 "input(): lost sys.stderr");
1263 return NULL;
1264 }
1265
1266 /* First of all, flush stderr */
1267 tmp = PyObject_CallMethod(ferr, "flush", "");
1268 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001269 PyErr_Clear();
1270 else
1271 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001272
1273 /* We should only use (GNU) readline if Python's sys.stdin and
1274 sys.stdout are the same as C's stdin and stdout, because we
1275 need to pass it those. */
1276 tmp = PyObject_CallMethod(fin, "fileno", "");
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001277 if (tmp == NULL) {
1278 PyErr_Clear();
1279 tty = 0;
1280 }
1281 else {
Christian Heimes217cfd12007-12-02 14:31:20 +00001282 fd = PyLong_AsLong(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001283 Py_DECREF(tmp);
1284 if (fd < 0 && PyErr_Occurred())
1285 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001286 tty = fd == fileno(stdin) && isatty(fd);
1287 }
1288 if (tty) {
1289 tmp = PyObject_CallMethod(fout, "fileno", "");
1290 if (tmp == NULL)
1291 PyErr_Clear();
1292 else {
Christian Heimes217cfd12007-12-02 14:31:20 +00001293 fd = PyLong_AsLong(tmp);
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001294 Py_DECREF(tmp);
1295 if (fd < 0 && PyErr_Occurred())
1296 return NULL;
1297 tty = fd == fileno(stdout) && isatty(fd);
1298 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001299 }
1300
1301 /* If we're interactive, use (GNU) readline */
1302 if (tty) {
Guido van Rossuma88a0332007-02-26 16:59:55 +00001303 PyObject *po;
1304 char *prompt;
1305 char *s;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001306 PyObject *stdin_encoding;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001307 PyObject *result;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001308
1309 stdin_encoding = PyObject_GetAttrString(fin, "encoding");
1310 if (!stdin_encoding)
1311 /* stdin is a text stream, so it must have an
1312 encoding. */
1313 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001314 tmp = PyObject_CallMethod(fout, "flush", "");
1315 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001316 PyErr_Clear();
1317 else
1318 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001319 if (promptarg != NULL) {
1320 po = PyObject_Str(promptarg);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001321 if (po == NULL) {
1322 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001323 return NULL;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001324 }
Christian Heimes91c77302007-11-25 09:18:01 +00001325 prompt = PyUnicode_AsString(po);
Guido van Rossumeba76962007-05-27 09:13:28 +00001326 if (prompt == NULL) {
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001327 Py_DECREF(stdin_encoding);
Guido van Rossumeba76962007-05-27 09:13:28 +00001328 Py_DECREF(po);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001329 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001330 }
Guido van Rossuma88a0332007-02-26 16:59:55 +00001331 }
1332 else {
1333 po = NULL;
1334 prompt = "";
1335 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001336 s = PyOS_Readline(stdin, stdout, prompt);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001337 Py_XDECREF(po);
1338 if (s == NULL) {
1339 if (!PyErr_Occurred())
1340 PyErr_SetNone(PyExc_KeyboardInterrupt);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001341 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001342 return NULL;
1343 }
1344 if (*s == '\0') {
1345 PyErr_SetNone(PyExc_EOFError);
1346 result = NULL;
1347 }
1348 else { /* strip trailing '\n' */
1349 size_t len = strlen(s);
1350 if (len > PY_SSIZE_T_MAX) {
1351 PyErr_SetString(PyExc_OverflowError,
1352 "input: input too long");
1353 result = NULL;
1354 }
1355 else {
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001356 result = PyUnicode_Decode
1357 (s, len-1,
1358 PyUnicode_AsString(stdin_encoding),
1359 NULL);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001360 }
1361 }
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001362 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001363 PyMem_FREE(s);
1364 return result;
1365 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001366
1367 /* Fallback if we're not interactive */
1368 if (promptarg != NULL) {
1369 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0)
Guido van Rossuma88a0332007-02-26 16:59:55 +00001370 return NULL;
1371 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001372 tmp = PyObject_CallMethod(fout, "flush", "");
1373 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001374 PyErr_Clear();
1375 else
1376 Py_DECREF(tmp);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001377 return PyFile_GetLine(fin, -1);
1378}
1379
1380PyDoc_STRVAR(input_doc,
1381"input([prompt]) -> string\n\
1382\n\
1383Read a string from standard input. The trailing newline is stripped.\n\
1384If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1385On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1386is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001387
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001388
Guido van Rossum79f25d91997-04-29 20:08:16 +00001389static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001390builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001391{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001392 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001393}
1394
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001395PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001396"repr(object) -> string\n\
1397\n\
1398Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001399For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001400
1401
Guido van Rossum79f25d91997-04-29 20:08:16 +00001402static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001403builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001404{
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001405#define UNDEF_NDIGITS (-0x7fffffff) /* Unlikely ndigits value */
1406 static PyObject *round_str = NULL;
1407 int ndigits = UNDEF_NDIGITS;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001408 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001409 PyObject *number, *round;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001410
Alex Martelliae211f92007-08-22 23:21:33 +00001411 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|i:round",
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001412 kwlist, &number, &ndigits))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001413 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00001414
Christian Heimes90aa7642007-12-19 02:45:37 +00001415 if (Py_TYPE(number)->tp_dict == NULL) {
1416 if (PyType_Ready(Py_TYPE(number)) < 0)
Guido van Rossum15d3d042007-08-24 02:02:45 +00001417 return NULL;
1418 }
1419
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001420 if (round_str == NULL) {
Christian Heimesfe82e772008-01-28 02:38:20 +00001421 round_str = PyUnicode_InternFromString("__round__");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001422 if (round_str == NULL)
Alex Martelliae211f92007-08-22 23:21:33 +00001423 return NULL;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001424 }
1425
Christian Heimes90aa7642007-12-19 02:45:37 +00001426 round = _PyType_Lookup(Py_TYPE(number), round_str);
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001427 if (round == NULL) {
1428 PyErr_Format(PyExc_TypeError,
1429 "type %.100s doesn't define __round__ method",
Christian Heimes90aa7642007-12-19 02:45:37 +00001430 Py_TYPE(number)->tp_name);
Alex Martelliae211f92007-08-22 23:21:33 +00001431 return NULL;
1432 }
1433
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001434 if (ndigits == UNDEF_NDIGITS)
1435 return PyObject_CallFunction(round, "O", number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001436 else
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001437 return PyObject_CallFunction(round, "Oi", number, ndigits);
1438#undef UNDEF_NDIGITS
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001439}
1440
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001441PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001442"round(number[, ndigits]) -> floating point number\n\
1443\n\
1444Round a number to a given precision in decimal digits (default 0 digits).\n\
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001445This returns an int when called with one argument, otherwise a float.\n\
1446Precision may be negative.");
1447
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001448
Raymond Hettinger64958a12003-12-17 20:43:33 +00001449static PyObject *
1450builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1451{
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001452 PyObject *newlist, *v, *seq, *keyfunc=NULL, *newargs;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001453 PyObject *callable;
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001454 static char *kwlist[] = {"iterable", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001455 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001456
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001457 /* args 1-3 should match listsort in Objects/listobject.c */
1458 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted",
1459 kwlist, &seq, &keyfunc, &reverse))
Armin Rigo71d7e702005-09-20 18:13:03 +00001460 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001461
1462 newlist = PySequence_List(seq);
1463 if (newlist == NULL)
1464 return NULL;
1465
1466 callable = PyObject_GetAttrString(newlist, "sort");
1467 if (callable == NULL) {
1468 Py_DECREF(newlist);
1469 return NULL;
1470 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001471
Raymond Hettinger64958a12003-12-17 20:43:33 +00001472 newargs = PyTuple_GetSlice(args, 1, 4);
1473 if (newargs == NULL) {
1474 Py_DECREF(newlist);
1475 Py_DECREF(callable);
1476 return NULL;
1477 }
1478
1479 v = PyObject_Call(callable, newargs, kwds);
1480 Py_DECREF(newargs);
1481 Py_DECREF(callable);
1482 if (v == NULL) {
1483 Py_DECREF(newlist);
1484 return NULL;
1485 }
1486 Py_DECREF(v);
1487 return newlist;
1488}
1489
1490PyDoc_STRVAR(sorted_doc,
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001491"sorted(iterable, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001492
Guido van Rossum79f25d91997-04-29 20:08:16 +00001493static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001494builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001495{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001496 PyObject *v = NULL;
1497 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001498
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001499 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001500 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001501 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001502 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001503 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001504 if (!PyErr_Occurred())
1505 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001506 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001507 }
1508 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001509 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001510 }
1511 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001512 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001513 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001514 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001515 "vars() argument must have __dict__ attribute");
1516 return NULL;
1517 }
1518 }
1519 return d;
1520}
1521
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001522PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001523"vars([object]) -> dictionary\n\
1524\n\
1525Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001526With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001527
Alex Martellia70b1912003-04-22 08:12:33 +00001528static PyObject*
1529builtin_sum(PyObject *self, PyObject *args)
1530{
1531 PyObject *seq;
1532 PyObject *result = NULL;
1533 PyObject *temp, *item, *iter;
1534
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001535 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001536 return NULL;
1537
1538 iter = PyObject_GetIter(seq);
1539 if (iter == NULL)
1540 return NULL;
1541
1542 if (result == NULL) {
Christian Heimes217cfd12007-12-02 14:31:20 +00001543 result = PyLong_FromLong(0);
Alex Martellia70b1912003-04-22 08:12:33 +00001544 if (result == NULL) {
1545 Py_DECREF(iter);
1546 return NULL;
1547 }
1548 } else {
1549 /* reject string values for 'start' parameter */
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001550 if (PyUnicode_Check(result)) {
Alex Martellia70b1912003-04-22 08:12:33 +00001551 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001552 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001553 Py_DECREF(iter);
1554 return NULL;
1555 }
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001556 if (PyBytes_Check(result)) {
1557 PyErr_SetString(PyExc_TypeError,
1558 "sum() can't sum bytes [use b''.join(seq) instead]");
1559 Py_DECREF(iter);
1560 return NULL;
1561 }
1562
Alex Martelli41c9f882003-04-22 09:24:48 +00001563 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001564 }
1565
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001566#ifndef SLOW_SUM
1567 /* Fast addition by keeping temporary sums in C instead of new Python objects.
1568 Assumes all inputs are the same type. If the assumption fails, default
1569 to the more general routine.
1570 */
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001571 if (PyLong_CheckExact(result)) {
1572 int overflow;
1573 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
1574 /* If this already overflowed, don't even enter the loop. */
1575 if (overflow == 0) {
1576 Py_DECREF(result);
1577 result = NULL;
1578 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001579 while(result == NULL) {
1580 item = PyIter_Next(iter);
1581 if (item == NULL) {
1582 Py_DECREF(iter);
1583 if (PyErr_Occurred())
1584 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001585 return PyLong_FromLong(i_result);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001586 }
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001587 if (PyLong_CheckExact(item)) {
1588 long b = PyLong_AsLongAndOverflow(item, &overflow);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001589 long x = i_result + b;
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001590 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001591 i_result = x;
1592 Py_DECREF(item);
1593 continue;
1594 }
1595 }
1596 /* Either overflowed or is not an int. Restore real objects and process normally */
Christian Heimes217cfd12007-12-02 14:31:20 +00001597 result = PyLong_FromLong(i_result);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001598 temp = PyNumber_Add(result, item);
1599 Py_DECREF(result);
1600 Py_DECREF(item);
1601 result = temp;
1602 if (result == NULL) {
1603 Py_DECREF(iter);
1604 return NULL;
1605 }
1606 }
1607 }
1608
1609 if (PyFloat_CheckExact(result)) {
1610 double f_result = PyFloat_AS_DOUBLE(result);
1611 Py_DECREF(result);
1612 result = NULL;
1613 while(result == NULL) {
1614 item = PyIter_Next(iter);
1615 if (item == NULL) {
1616 Py_DECREF(iter);
1617 if (PyErr_Occurred())
1618 return NULL;
1619 return PyFloat_FromDouble(f_result);
1620 }
1621 if (PyFloat_CheckExact(item)) {
1622 PyFPE_START_PROTECT("add", return 0)
1623 f_result += PyFloat_AS_DOUBLE(item);
1624 PyFPE_END_PROTECT(f_result)
1625 Py_DECREF(item);
1626 continue;
1627 }
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001628 if (PyLong_CheckExact(item)) {
1629 long value;
1630 int overflow;
1631 value = PyLong_AsLongAndOverflow(item, &overflow);
1632 if (!overflow) {
1633 PyFPE_START_PROTECT("add", return 0)
1634 f_result += (double)value;
1635 PyFPE_END_PROTECT(f_result)
1636 Py_DECREF(item);
1637 continue;
1638 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001639 }
1640 result = PyFloat_FromDouble(f_result);
1641 temp = PyNumber_Add(result, item);
1642 Py_DECREF(result);
1643 Py_DECREF(item);
1644 result = temp;
1645 if (result == NULL) {
1646 Py_DECREF(iter);
1647 return NULL;
1648 }
1649 }
1650 }
1651#endif
1652
Alex Martellia70b1912003-04-22 08:12:33 +00001653 for(;;) {
1654 item = PyIter_Next(iter);
1655 if (item == NULL) {
1656 /* error, or end-of-sequence */
1657 if (PyErr_Occurred()) {
1658 Py_DECREF(result);
1659 result = NULL;
1660 }
1661 break;
1662 }
Alex Martellia253e182003-10-25 23:24:14 +00001663 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001664 Py_DECREF(result);
1665 Py_DECREF(item);
1666 result = temp;
1667 if (result == NULL)
1668 break;
1669 }
1670 Py_DECREF(iter);
1671 return result;
1672}
1673
1674PyDoc_STRVAR(sum_doc,
Thomas Wouters89f507f2006-12-13 04:49:30 +00001675"sum(sequence[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00001676\n\
1677Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00001678of parameter 'start' (which defaults to 0). When the sequence is\n\
1679empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00001680
1681
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001682static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001683builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001684{
1685 PyObject *inst;
1686 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001687 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001688
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001689 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001690 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001691
Guido van Rossum823649d2001-03-21 18:40:58 +00001692 retval = PyObject_IsInstance(inst, cls);
1693 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001694 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001695 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001696}
1697
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001698PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001699"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001700\n\
1701Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001702With a type as second argument, return whether that is the object's type.\n\
1703The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001704isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001705
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001706
1707static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001708builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001709{
1710 PyObject *derived;
1711 PyObject *cls;
1712 int retval;
1713
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001714 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001715 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001716
Guido van Rossum823649d2001-03-21 18:40:58 +00001717 retval = PyObject_IsSubclass(derived, cls);
1718 if (retval < 0)
1719 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001720 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001721}
1722
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001723PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001724"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001725\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00001726Return whether class C is a subclass (i.e., a derived class) of class B.\n\
1727When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
1728is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001729
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001730
Barry Warsawbd599b52000-08-03 15:45:29 +00001731static PyObject*
1732builtin_zip(PyObject *self, PyObject *args)
1733{
Guido van Rossumb65fb332006-08-25 23:26:40 +00001734 /* args must be a tuple */
1735 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00001736
Guido van Rossumb65fb332006-08-25 23:26:40 +00001737 return _PyZip_CreateIter(args);
Barry Warsawbd599b52000-08-03 15:45:29 +00001738}
1739
1740
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001741PyDoc_STRVAR(zip_doc,
Guido van Rossum801f0d72006-08-24 19:48:10 +00001742"zip(it1 [, it2 [...]]) -> iter([(it1[0], it2[0] ...), ...])\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00001743\n\
Guido van Rossum801f0d72006-08-24 19:48:10 +00001744Return an iterator yielding tuples, where each tuple contains the\n\
1745corresponding element from each of the argument iterables.\n\
1746The returned iterator ends when the shortest argument iterable is exhausted.\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001747(This is identical to itertools.izip().)");
Barry Warsawbd599b52000-08-03 15:45:29 +00001748
1749
Guido van Rossum79f25d91997-04-29 20:08:16 +00001750static PyMethodDef builtin_methods[] = {
Guido van Rossum52cc1d82007-03-18 15:41:51 +00001751 {"__build_class__", (PyCFunction)builtin___build_class__,
1752 METH_VARARGS | METH_KEYWORDS, build_class_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001753 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001754 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00001755 {"all", builtin_all, METH_O, all_doc},
1756 {"any", builtin_any, METH_O, any_doc},
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001757 {"bin", builtin_bin, METH_O, bin_doc},
Neal Norwitzc2550c72007-08-31 04:17:51 +00001758 {"chr", builtin_chr, METH_VARARGS, chr_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001759 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
Guido van Rossumd8faa362007-04-27 19:54:29 +00001760 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001761 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
1762 {"dir", builtin_dir, METH_VARARGS, dir_doc},
1763 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
1764 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00001765 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001766 {"filter", builtin_filter, METH_VARARGS, filter_doc},
Eric Smith8c663262007-08-25 02:26:07 +00001767 {"format", builtin_format, METH_VARARGS, format_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001768 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
1769 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
1770 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
1771 {"hash", builtin_hash, METH_O, hash_doc},
1772 {"hex", builtin_hex, METH_O, hex_doc},
1773 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00001774 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001775 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
1776 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
1777 {"iter", builtin_iter, METH_VARARGS, iter_doc},
1778 {"len", builtin_len, METH_O, len_doc},
1779 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
1780 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001781 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
1782 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandla18af4e2007-04-21 15:47:16 +00001783 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001784 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001785 {"ord", builtin_ord, METH_O, ord_doc},
1786 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00001787 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001788 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001789 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001790 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00001791 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00001792 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001793 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001794 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00001795 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00001796};
1797
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001798PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001799"Built-in functions, exceptions, and other objects.\n\
1800\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001801Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001802
Guido van Rossum25ce5661997-08-02 03:10:38 +00001803PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001804_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001805{
Fred Drake5550de32000-06-20 04:54:19 +00001806 PyObject *mod, *dict, *debug;
Georg Brandl1a3284e2007-12-02 09:40:06 +00001807 mod = Py_InitModule4("builtins", builtin_methods,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001808 builtin_doc, (PyObject *)NULL,
1809 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001810 if (mod == NULL)
1811 return NULL;
1812 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00001813
Tim Peters7571a0f2003-03-23 17:52:28 +00001814#ifdef Py_TRACE_REFS
Georg Brandl1a3284e2007-12-02 09:40:06 +00001815 /* "builtins" exposes a number of statically allocated objects
Tim Peters7571a0f2003-03-23 17:52:28 +00001816 * that, before this code was added in 2.3, never showed up in
1817 * the list of "all objects" maintained by Py_TRACE_REFS. As a
1818 * result, programs leaking references to None and False (etc)
1819 * couldn't be diagnosed by examining sys.getobjects(0).
1820 */
1821#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
1822#else
1823#define ADD_TO_ALL(OBJECT) (void)0
1824#endif
1825
Tim Peters4b7625e2001-09-13 21:37:17 +00001826#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00001827 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
1828 return NULL; \
1829 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00001830
1831 SETBUILTIN("None", Py_None);
1832 SETBUILTIN("Ellipsis", Py_Ellipsis);
1833 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001834 SETBUILTIN("False", Py_False);
1835 SETBUILTIN("True", Py_True);
1836 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbae07c92007-10-08 02:46:15 +00001837 SETBUILTIN("memoryview", &PyMemoryView_Type);
Guido van Rossum254348e2007-11-21 19:29:53 +00001838 SETBUILTIN("bytearray", &PyBytes_Type);
Guido van Rossum98297ee2007-11-06 21:34:58 +00001839 SETBUILTIN("bytes", &PyString_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001840 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001841#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00001842 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001843#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00001844 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00001845 SETBUILTIN("enumerate", &PyEnum_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001846 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00001847 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001848 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00001849 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001850 SETBUILTIN("list", &PyList_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001851 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossum805365e2007-05-07 22:24:25 +00001852 SETBUILTIN("range", &PyRange_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00001853 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00001854 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001855 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001856 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Guido van Rossum572dbf82007-04-27 23:53:51 +00001857 SETBUILTIN("str", &PyUnicode_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001858 SETBUILTIN("super", &PySuper_Type);
1859 SETBUILTIN("tuple", &PyTuple_Type);
1860 SETBUILTIN("type", &PyType_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001861 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00001862 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
1863 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001864 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00001865 }
1866 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00001867
Guido van Rossum25ce5661997-08-02 03:10:38 +00001868 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00001869#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00001870#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00001871}