blob: 7baaf14213c8d1b653f909a32dda962d69f894e9 [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
Raymond Hettinger17301e92008-03-13 00:19:26 +0000280typedef struct {
281 PyObject_HEAD
282 PyObject *func;
283 PyObject *it;
284} filterobject;
285
286PyTypeObject PyFilter_Type;
287
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000288static PyObject *
Raymond Hettinger17301e92008-03-13 00:19:26 +0000289filter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000290{
Raymond Hettinger17301e92008-03-13 00:19:26 +0000291 PyObject *func, *seq;
292 PyObject *it;
293 filterobject *lz;
294
295 if (type == &PyFilter_Type && !_PyArg_NoKeywords("filter()", kwds))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000296 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000297
298 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
Georg Brandle35b6572005-07-19 22:20:20 +0000299 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000300
301 /* Get iterator. */
302 it = PyObject_GetIter(seq);
303 if (it == NULL)
304 return NULL;
305
306 /* create filterobject structure */
307 lz = (filterobject *)type->tp_alloc(type, 0);
308 if (lz == NULL) {
309 Py_DECREF(it);
310 return NULL;
311 }
312 Py_INCREF(func);
313 lz->func = func;
314 lz->it = it;
315
316 return (PyObject *)lz;
317}
318
319static void
320filter_dealloc(filterobject *lz)
321{
322 PyObject_GC_UnTrack(lz);
323 Py_XDECREF(lz->func);
324 Py_XDECREF(lz->it);
325 Py_TYPE(lz)->tp_free(lz);
326}
327
328static int
329filter_traverse(filterobject *lz, visitproc visit, void *arg)
330{
331 Py_VISIT(lz->it);
332 Py_VISIT(lz->func);
333 return 0;
334}
335
336static PyObject *
337filter_next(filterobject *lz)
338{
339 PyObject *item;
340 PyObject *it = lz->it;
341 long ok;
342 PyObject *(*iternext)(PyObject *);
343
344 assert(PyIter_Check(it));
345 iternext = *Py_TYPE(it)->tp_iternext;
346 for (;;) {
347 item = iternext(it);
348 if (item == NULL)
349 return NULL;
350
351 if (lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type) {
352 ok = PyObject_IsTrue(item);
353 } else {
354 PyObject *good;
355 good = PyObject_CallFunctionObjArgs(lz->func,
356 item, NULL);
357 if (good == NULL) {
358 Py_DECREF(item);
359 return NULL;
360 }
361 ok = PyObject_IsTrue(good);
362 Py_DECREF(good);
363 }
364 if (ok)
365 return item;
366 Py_DECREF(item);
367 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000368}
369
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000370PyDoc_STRVAR(filter_doc,
Raymond Hettinger17301e92008-03-13 00:19:26 +0000371"filter(function or None, sequence) --> filter object\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000372\n\
Raymond Hettinger17301e92008-03-13 00:19:26 +0000373Return an iterator yielding those items of sequence for which function(item)\n\
374is true. If function is None, return the items that are true.");
375
376PyTypeObject PyFilter_Type = {
377 PyVarObject_HEAD_INIT(&PyType_Type, 0)
378 "filter", /* tp_name */
379 sizeof(filterobject), /* tp_basicsize */
380 0, /* tp_itemsize */
381 /* methods */
382 (destructor)filter_dealloc, /* tp_dealloc */
383 0, /* tp_print */
384 0, /* tp_getattr */
385 0, /* tp_setattr */
386 0, /* tp_compare */
387 0, /* tp_repr */
388 0, /* tp_as_number */
389 0, /* tp_as_sequence */
390 0, /* tp_as_mapping */
391 0, /* tp_hash */
392 0, /* tp_call */
393 0, /* tp_str */
394 PyObject_GenericGetAttr, /* tp_getattro */
395 0, /* tp_setattro */
396 0, /* tp_as_buffer */
397 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
398 Py_TPFLAGS_BASETYPE, /* tp_flags */
399 filter_doc, /* tp_doc */
400 (traverseproc)filter_traverse, /* tp_traverse */
401 0, /* tp_clear */
402 0, /* tp_richcompare */
403 0, /* tp_weaklistoffset */
404 PyObject_SelfIter, /* tp_iter */
405 (iternextfunc)filter_next, /* tp_iternext */
406 0, /* tp_methods */
407 0, /* tp_members */
408 0, /* tp_getset */
409 0, /* tp_base */
410 0, /* tp_dict */
411 0, /* tp_descr_get */
412 0, /* tp_descr_set */
413 0, /* tp_dictoffset */
414 0, /* tp_init */
415 PyType_GenericAlloc, /* tp_alloc */
416 filter_new, /* tp_new */
417 PyObject_GC_Del, /* tp_free */
418};
419
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000420
Eric Smith8c663262007-08-25 02:26:07 +0000421static PyObject *
422builtin_format(PyObject *self, PyObject *args)
423{
Christian Heimes94b7d3d2007-12-11 20:20:39 +0000424 PyObject *value;
Eric Smith8fd3eba2008-02-17 19:48:00 +0000425 PyObject *format_spec = NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000426
Eric Smith8fd3eba2008-02-17 19:48:00 +0000427 if (!PyArg_ParseTuple(args, "O|U:format", &value, &format_spec))
428 return NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000429
Eric Smith8fd3eba2008-02-17 19:48:00 +0000430 return PyObject_Format(value, format_spec);
Eric Smith8c663262007-08-25 02:26:07 +0000431}
432
Eric Smith8c663262007-08-25 02:26:07 +0000433PyDoc_STRVAR(format_doc,
Eric Smith81936692007-08-31 01:14:01 +0000434"format(value[, format_spec]) -> string\n\
Eric Smith8c663262007-08-25 02:26:07 +0000435\n\
Eric Smith81936692007-08-31 01:14:01 +0000436Returns value.__format__(format_spec)\n\
437format_spec defaults to \"\"");
438
Guido van Rossum7fcf2242007-05-04 17:43:11 +0000439static PyObject *
Walter Dörwalde7efd592007-06-05 20:07:21 +0000440builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000441{
442 long x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000443
Walter Dörwalde7efd592007-06-05 20:07:21 +0000444 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum09095f32000-03-10 23:00:52 +0000445 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000446
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000447 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000448}
449
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000450PyDoc_VAR(chr_doc) = PyDoc_STR(
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000451"chr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000452\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000453Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000454)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000455#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000456PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000457"\nIf 0x10000 <= i, a surrogate pair is returned."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000458)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000459#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000460;
Guido van Rossum09095f32000-03-10 23:00:52 +0000461
462
463static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000464builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000465{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000466 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000467 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000468
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000469 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000470 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000471 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000472 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +0000473 return PyLong_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000474}
475
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000476PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000477"cmp(x, y) -> integer\n\
478\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000479Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000480
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000481
482static char *
483source_as_string(PyObject *cmd)
484{
485 char *str;
486 Py_ssize_t size;
487
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000488 if (PyUnicode_Check(cmd)) {
489 cmd = _PyUnicode_AsDefaultEncodedString(cmd, NULL);
490 if (cmd == NULL)
491 return NULL;
492 }
Guido van Rossuma4b8d1d2007-08-27 15:02:28 +0000493 else if (!PyObject_CheckReadBuffer(cmd)) {
494 PyErr_SetString(PyExc_TypeError,
495 "eval()/exec() arg 1 must be a string, bytes or code object");
496 return NULL;
497 }
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000498 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &size) < 0) {
499 return NULL;
500 }
501 if (strlen(str) != size) {
502 PyErr_SetString(PyExc_TypeError,
503 "source code string cannot contain null bytes");
504 return NULL;
505 }
506 return str;
507}
508
Guido van Rossum79f25d91997-04-29 20:08:16 +0000509static PyObject *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000510builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000511{
512 char *str;
513 char *filename;
514 char *startstr;
515 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000516 int dont_inherit = 0;
517 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000518 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000519 PyObject *cmd;
Guido van Rossumd8faa362007-04-27 19:54:29 +0000520 static char *kwlist[] = {"source", "filename", "mode", "flags",
521 "dont_inherit", NULL};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000522
Guido van Rossumd8faa362007-04-27 19:54:29 +0000523 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
524 kwlist, &cmd, &filename, &startstr,
525 &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000526 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000527
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000528 cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000529
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000530 str = source_as_string(cmd);
531 if (str == NULL)
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000532 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000533
Guido van Rossum5b722181993-03-30 17:46:03 +0000534 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000535 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000536 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000537 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000538 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000539 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000540 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000541 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000542 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000543 return NULL;
Guido van Rossum5b722181993-03-30 17:46:03 +0000544 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000545
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000546 if (supplied_flags &
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000547 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000548 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000549 PyErr_SetString(PyExc_ValueError,
550 "compile(): unrecognised flags");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000551 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000552 }
553 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
554
Tim Peters6cd6a822001-08-17 22:11:27 +0000555 if (!dont_inherit) {
556 PyEval_MergeCompilerFlags(&cf);
557 }
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000558 return Py_CompileStringFlags(str, filename, start, &cf);
Guido van Rossum5b722181993-03-30 17:46:03 +0000559}
560
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000561PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000562"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000563\n\
564Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000565into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000566The filename will be used for run-time error messages.\n\
567The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000568single (interactive) statement, or 'eval' to compile an expression.\n\
569The flags argument, if present, controls which future statements influence\n\
570the compilation of the code.\n\
571The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
572the effects of any future statements in effect in the code calling\n\
573compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000574in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000575
Guido van Rossum79f25d91997-04-29 20:08:16 +0000576static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000577builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000578{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000579 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000580
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000581 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000582 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000583 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000584}
585
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000586PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000587"dir([object]) -> list of strings\n"
588"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000589"If called without an argument, return the names in the current scope.\n"
590"Else, return an alphabetized list of names comprising (some of) the attributes\n"
591"of the given object, and of attributes reachable from it.\n"
592"If the object supplies a method named __dir__, it will be used; otherwise\n"
593"the default dir() logic is used and returns:\n"
594" for a module object: the module's attributes.\n"
595" for a class object: its attributes, and recursively the attributes\n"
596" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000597" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000598" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000599
Guido van Rossum79f25d91997-04-29 20:08:16 +0000600static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000601builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000602{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000603 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000604
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000605 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000606 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000607 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000608}
609
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000610PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000611"divmod(x, y) -> (div, mod)\n\
612\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000613Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000614
615
Guido van Rossum79f25d91997-04-29 20:08:16 +0000616static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000617builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000618{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000619 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000620 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000621 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000622 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000623
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000624 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000625 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000626 if (locals != Py_None && !PyMapping_Check(locals)) {
627 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000628 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000629 }
630 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000631 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000632 "globals must be a real dict; try eval(expr, {}, mapping)"
633 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000634 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000635 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000636 if (globals == Py_None) {
637 globals = PyEval_GetGlobals();
638 if (locals == Py_None)
639 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000640 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000641 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000642 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000643
Georg Brandl77c85e62005-09-15 10:46:13 +0000644 if (globals == NULL || locals == NULL) {
645 PyErr_SetString(PyExc_TypeError,
646 "eval must be given globals and locals "
647 "when called without a frame");
648 return NULL;
649 }
650
Guido van Rossum79f25d91997-04-29 20:08:16 +0000651 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
652 if (PyDict_SetItemString(globals, "__builtins__",
653 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000654 return NULL;
655 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000656
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000657 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000658 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000659 PyErr_SetString(PyExc_TypeError,
660 "code object passed to eval() may not contain free variables");
661 return NULL;
662 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000663 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000664 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000665
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000666 str = source_as_string(cmd);
667 if (str == NULL)
Guido van Rossum94390a41992-08-14 15:14:30 +0000668 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000669
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000670 while (*str == ' ' || *str == '\t')
671 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000672
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000673 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Tim Peters9fa96be2001-08-17 23:04:59 +0000674 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000675 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
676 Py_XDECREF(tmp);
677 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000678}
679
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000680PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000681"eval(source[, globals[, locals]]) -> value\n\
682\n\
683Evaluate the source in the context of globals and locals.\n\
684The source may be a string representing a Python expression\n\
685or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000686The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000687defaulting to the current globals and locals.\n\
688If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000689
Georg Brandl7cae87c2006-09-06 06:51:57 +0000690static PyObject *
691builtin_exec(PyObject *self, PyObject *args)
692{
693 PyObject *v;
694 PyObject *prog, *globals = Py_None, *locals = Py_None;
695 int plain = 0;
696
697 if (!PyArg_ParseTuple(args, "O|OO:exec", &prog, &globals, &locals))
698 return NULL;
699
700 if (globals == Py_None) {
701 globals = PyEval_GetGlobals();
702 if (locals == Py_None) {
703 locals = PyEval_GetLocals();
704 plain = 1;
705 }
706 if (!globals || !locals) {
707 PyErr_SetString(PyExc_SystemError,
708 "globals and locals cannot be NULL");
709 return NULL;
710 }
711 }
712 else if (locals == Py_None)
713 locals = globals;
Neal Norwitz6ea45d32007-08-26 04:19:43 +0000714 if (!PyUnicode_Check(prog) &&
Guido van Rossumda5b8f22007-06-12 23:30:11 +0000715 !PyCode_Check(prog)) {
Georg Brandl7cae87c2006-09-06 06:51:57 +0000716 PyErr_Format(PyExc_TypeError,
717 "exec() arg 1 must be a string, file, or code "
718 "object, not %.100s", prog->ob_type->tp_name);
719 return NULL;
720 }
721 if (!PyDict_Check(globals)) {
722 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
723 globals->ob_type->tp_name);
724 return NULL;
725 }
726 if (!PyMapping_Check(locals)) {
727 PyErr_Format(PyExc_TypeError,
728 "arg 3 must be a mapping or None, not %.100s",
729 locals->ob_type->tp_name);
730 return NULL;
731 }
732 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
733 if (PyDict_SetItemString(globals, "__builtins__",
734 PyEval_GetBuiltins()) != 0)
735 return NULL;
736 }
737
738 if (PyCode_Check(prog)) {
739 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
740 PyErr_SetString(PyExc_TypeError,
741 "code object passed to exec() may not "
742 "contain free variables");
743 return NULL;
744 }
745 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
746 }
Georg Brandl7cae87c2006-09-06 06:51:57 +0000747 else {
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000748 char *str = source_as_string(prog);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000749 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000750 if (str == NULL)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000751 return NULL;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000752 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000753 if (PyEval_MergeCompilerFlags(&cf))
754 v = PyRun_StringFlags(str, Py_file_input, globals,
755 locals, &cf);
756 else
757 v = PyRun_String(str, Py_file_input, globals, locals);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000758 }
759 if (v == NULL)
760 return NULL;
761 Py_DECREF(v);
762 Py_RETURN_NONE;
763}
764
765PyDoc_STRVAR(exec_doc,
766"exec(object[, globals[, locals]])\n\
767\n\
768Read and execute code from a object, which can be a string, a code\n\
769object or a file object.\n\
770The globals and locals are dictionaries, defaulting to the current\n\
771globals and locals. If only globals is given, locals defaults to it.");
772
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000773
Guido van Rossum79f25d91997-04-29 20:08:16 +0000774static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000775builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000776{
Neal Norwitz6ea45d32007-08-26 04:19:43 +0000777 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000778 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000779
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000780 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000781 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000782
Martin v. Löwis5b222132007-06-10 09:51:05 +0000783 if (!PyUnicode_Check(name)) {
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000784 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000785 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000786 return NULL;
787 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000788 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000789 if (result == NULL && dflt != NULL &&
790 PyErr_ExceptionMatches(PyExc_AttributeError))
791 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000792 PyErr_Clear();
793 Py_INCREF(dflt);
794 result = dflt;
795 }
796 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000797}
798
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000799PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000800"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000801\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000802Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
803When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000804exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000805
806
Guido van Rossum79f25d91997-04-29 20:08:16 +0000807static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000808builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000809{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000810 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000811
Guido van Rossum79f25d91997-04-29 20:08:16 +0000812 d = PyEval_GetGlobals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000813 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000814 return d;
815}
816
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000817PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000818"globals() -> dictionary\n\
819\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000820Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000821
822
Guido van Rossum79f25d91997-04-29 20:08:16 +0000823static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000824builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000825{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000826 PyObject *v;
827 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000828
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000829 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000830 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000831 if (!PyUnicode_Check(name)) {
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000832 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000833 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000834 return NULL;
835 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000836 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000837 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000838 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000839 Py_INCREF(Py_False);
840 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000841 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000842 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000843 Py_INCREF(Py_True);
844 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000845}
846
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000847PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000848"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000849\n\
850Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000851(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000852
853
Guido van Rossum79f25d91997-04-29 20:08:16 +0000854static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000855builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000856{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000857 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000858}
859
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000860PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000861"id(object) -> integer\n\
862\n\
863Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000864simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000865
866
Guido van Rossum79f25d91997-04-29 20:08:16 +0000867static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000868builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000869{
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000870 PyObject *itertools, *imap, *result;
Christian Heimes819b8bf2008-01-03 23:05:47 +0000871 itertools = PyImport_ImportModuleNoBlock("itertools");
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000872 if (itertools == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000873 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000874 imap = PyObject_GetAttrString(itertools, "imap");
875 Py_DECREF(itertools);
876 if (imap == NULL)
Tim Peters4e9afdc2001-05-03 23:54:49 +0000877 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000878 result = PyObject_Call(imap, args, NULL);
879 Py_DECREF(imap);
Tim Peters4e9afdc2001-05-03 23:54:49 +0000880 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000881}
882
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000883PyDoc_STRVAR(map_doc,
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000884"map(function, iterable[, iterable, ...]) -> iterator\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000885\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000886Return an iterator yielding the results of applying the function to the\n\
887items of the argument iterables(s). If more than one iterable is given,\n\
888the function is called with an argument list consisting of the\n\
889corresponding item of each iterable, until an iterable is exhausted.\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000890(This is identical to itertools.imap().)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000891
892
Guido van Rossum79f25d91997-04-29 20:08:16 +0000893static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +0000894builtin_next(PyObject *self, PyObject *args)
895{
896 PyObject *it, *res;
897 PyObject *def = NULL;
898
899 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
900 return NULL;
901 if (!PyIter_Check(it)) {
902 PyErr_Format(PyExc_TypeError,
903 "%.200s object is not an iterator", it->ob_type->tp_name);
904 return NULL;
905 }
906
907 res = (*it->ob_type->tp_iternext)(it);
908 if (res == NULL) {
909 if (def) {
910 if (PyErr_Occurred() &&
911 !PyErr_ExceptionMatches(PyExc_StopIteration))
912 return NULL;
913 PyErr_Clear();
914 Py_INCREF(def);
915 return def;
916 } else if (PyErr_Occurred()) {
917 return NULL;
918 } else {
919 PyErr_SetNone(PyExc_StopIteration);
920 return NULL;
921 }
922 }
923 return res;
924}
925
926PyDoc_STRVAR(next_doc,
927"next(iterator[, default])\n\
928\n\
929Return the next item from the iterator. If default is given and the iterator\n\
930is exhausted, it is returned instead of raising StopIteration.");
931
932
933static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000934builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000935{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000936 PyObject *v;
937 PyObject *name;
938 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000939
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000940 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000941 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000942 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000943 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000944 Py_INCREF(Py_None);
945 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000946}
947
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000948PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000949"setattr(object, name, value)\n\
950\n\
951Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000952``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000953
954
Guido van Rossum79f25d91997-04-29 20:08:16 +0000955static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000956builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000957{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000958 PyObject *v;
959 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000960
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000961 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +0000962 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000963 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000964 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000965 Py_INCREF(Py_None);
966 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +0000967}
968
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000969PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +0000970"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000971\n\
972Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000973``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000974
975
Guido van Rossum79f25d91997-04-29 20:08:16 +0000976static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000977builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000978{
Guido van Rossum9bfef441993-03-29 10:43:31 +0000979 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000980
Guido van Rossum79f25d91997-04-29 20:08:16 +0000981 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000982 if (x == -1)
983 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +0000984 return PyLong_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000985}
986
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000987PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000988"hash(object) -> integer\n\
989\n\
990Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000991the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000992
993
Guido van Rossum79f25d91997-04-29 20:08:16 +0000994static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000995builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +0000996{
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000997 return PyNumber_ToBase(v, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +0000998}
999
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001000PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001001"hex(number) -> string\n\
1002\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001003Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001004
1005
Guido van Rossum79f25d91997-04-29 20:08:16 +00001006static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001007builtin_iter(PyObject *self, PyObject *args)
1008{
1009 PyObject *v, *w = NULL;
1010
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001011 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001012 return NULL;
1013 if (w == NULL)
1014 return PyObject_GetIter(v);
1015 if (!PyCallable_Check(v)) {
1016 PyErr_SetString(PyExc_TypeError,
1017 "iter(v, w): v must be callable");
1018 return NULL;
1019 }
1020 return PyCallIter_New(v, w);
1021}
1022
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001023PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001024"iter(collection) -> iterator\n\
1025iter(callable, sentinel) -> iterator\n\
1026\n\
1027Get an iterator from an object. In the first form, the argument must\n\
1028supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001029In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001030
1031
1032static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001033builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001034{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001035 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001036
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001037 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001038 if (res < 0 && PyErr_Occurred())
1039 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001040 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001041}
1042
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001043PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001044"len(object) -> integer\n\
1045\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001046Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001047
1048
Guido van Rossum79f25d91997-04-29 20:08:16 +00001049static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001050builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001051{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001052 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001053
Guido van Rossum79f25d91997-04-29 20:08:16 +00001054 d = PyEval_GetLocals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00001055 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001056 return d;
1057}
1058
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001059PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001060"locals() -> dictionary\n\
1061\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001062Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001063
1064
Guido van Rossum79f25d91997-04-29 20:08:16 +00001065static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001066min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001067{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001068 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001069 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001070
Guido van Rossum79f25d91997-04-29 20:08:16 +00001071 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001072 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001073 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001074 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001075
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001076 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1077 keyfunc = PyDict_GetItemString(kwds, "key");
1078 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001079 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001080 "%s() got an unexpected keyword argument", name);
1081 return NULL;
1082 }
Christian Heimesbbffeb62008-01-24 09:42:52 +00001083 Py_INCREF(keyfunc);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001084 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001085
Tim Petersc3074532001-05-03 07:00:32 +00001086 it = PyObject_GetIter(v);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001087 if (it == NULL) {
1088 Py_XDECREF(keyfunc);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001089 return NULL;
Christian Heimesbbffeb62008-01-24 09:42:52 +00001090 }
Tim Petersc3074532001-05-03 07:00:32 +00001091
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001092 maxitem = NULL; /* the result */
1093 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001094 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001095 /* get the value from the key function */
1096 if (keyfunc != NULL) {
1097 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1098 if (val == NULL)
1099 goto Fail_it_item;
1100 }
1101 /* no key function; the value is the item */
1102 else {
1103 val = item;
1104 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001105 }
Tim Petersc3074532001-05-03 07:00:32 +00001106
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001107 /* maximum value and item are unset; set them */
1108 if (maxval == NULL) {
1109 maxitem = item;
1110 maxval = val;
1111 }
1112 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001113 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001114 int cmp = PyObject_RichCompareBool(val, maxval, op);
1115 if (cmp < 0)
1116 goto Fail_it_item_and_val;
1117 else if (cmp > 0) {
1118 Py_DECREF(maxval);
1119 Py_DECREF(maxitem);
1120 maxval = val;
1121 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001122 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001123 else {
1124 Py_DECREF(item);
1125 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001126 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001127 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001128 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001129 if (PyErr_Occurred())
1130 goto Fail_it;
1131 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001132 PyErr_Format(PyExc_ValueError,
1133 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001134 assert(maxitem == NULL);
1135 }
1136 else
1137 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001138 Py_DECREF(it);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001139 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001140 return maxitem;
1141
1142Fail_it_item_and_val:
1143 Py_DECREF(val);
1144Fail_it_item:
1145 Py_DECREF(item);
1146Fail_it:
1147 Py_XDECREF(maxval);
1148 Py_XDECREF(maxitem);
1149 Py_DECREF(it);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001150 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001151 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001152}
1153
Guido van Rossum79f25d91997-04-29 20:08:16 +00001154static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001155builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001156{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001157 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001158}
1159
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001160PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001161"min(iterable[, key=func]) -> value\n\
1162min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001163\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001164With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001165With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001166
1167
Guido van Rossum79f25d91997-04-29 20:08:16 +00001168static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001169builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001170{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001171 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001172}
1173
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001174PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001175"max(iterable[, key=func]) -> value\n\
1176max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001177\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001178With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001179With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001180
1181
Guido van Rossum79f25d91997-04-29 20:08:16 +00001182static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001183builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001184{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001185 return PyNumber_ToBase(v, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001186}
1187
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001188PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001189"oct(number) -> string\n\
1190\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001191Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001192
1193
Guido van Rossum79f25d91997-04-29 20:08:16 +00001194static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001195builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001196{
Guido van Rossum09095f32000-03-10 23:00:52 +00001197 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001198 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001199
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001200 if (PyString_Check(obj)) {
1201 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001202 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001203 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Christian Heimes217cfd12007-12-02 14:31:20 +00001204 return PyLong_FromLong(ord);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001205 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001206 }
1207 else if (PyUnicode_Check(obj)) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001208 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001209 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001210 ord = (long)*PyUnicode_AS_UNICODE(obj);
Christian Heimes217cfd12007-12-02 14:31:20 +00001211 return PyLong_FromLong(ord);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001212 }
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001213#ifndef Py_UNICODE_WIDE
1214 if (size == 2) {
1215 /* Decode a valid surrogate pair */
1216 int c0 = PyUnicode_AS_UNICODE(obj)[0];
1217 int c1 = PyUnicode_AS_UNICODE(obj)[1];
1218 if (0xD800 <= c0 && c0 <= 0xDBFF &&
1219 0xDC00 <= c1 && c1 <= 0xDFFF) {
1220 ord = ((((c0 & 0x03FF) << 10) | (c1 & 0x03FF)) +
1221 0x00010000);
Christian Heimes217cfd12007-12-02 14:31:20 +00001222 return PyLong_FromLong(ord);
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001223 }
1224 }
1225#endif
Guido van Rossum6f376c42007-05-24 14:31:33 +00001226 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001227 else if (PyBytes_Check(obj)) {
1228 /* XXX Hopefully this is temporary */
1229 size = PyBytes_GET_SIZE(obj);
1230 if (size == 1) {
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001231 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
Christian Heimes217cfd12007-12-02 14:31:20 +00001232 return PyLong_FromLong(ord);
Guido van Rossum98f97462007-04-13 03:31:13 +00001233 }
1234 }
1235 else {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001236 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001237 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001238 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001239 return NULL;
1240 }
1241
Guido van Rossumad991772001-01-12 16:03:05 +00001242 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001243 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001244 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001245 size);
1246 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001247}
1248
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001249PyDoc_VAR(ord_doc) = PyDoc_STR(
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001250"ord(c) -> integer\n\
1251\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001252Return the integer ordinal of a one-character string."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001253)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001254#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001255PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001256"\nA valid surrogate pair is also accepted."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001257)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001258#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001259;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001260
1261
Guido van Rossum79f25d91997-04-29 20:08:16 +00001262static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001263builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001264{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001265 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001266
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001267 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001268 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001269 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001270}
1271
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001272PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001273"pow(x, y[, z]) -> number\n\
1274\n\
1275With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001276equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001277
1278
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001279
Guido van Rossum34343512006-11-30 22:13:52 +00001280static PyObject *
1281builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1282{
1283 static char *kwlist[] = {"sep", "end", "file", 0};
Georg Brandl257d3d92007-02-26 10:35:10 +00001284 static PyObject *dummy_args;
Guido van Rossum34343512006-11-30 22:13:52 +00001285 PyObject *sep = NULL, *end = NULL, *file = NULL;
1286 int i, err;
1287
Georg Brandl257d3d92007-02-26 10:35:10 +00001288 if (dummy_args == NULL) {
1289 if (!(dummy_args = PyTuple_New(0)))
1290 return NULL;
1291 }
Georg Brandl88fc6642007-02-09 21:28:07 +00001292 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
Guido van Rossum34343512006-11-30 22:13:52 +00001293 kwlist, &sep, &end, &file))
Christian Heimesfef9bba2007-11-13 15:24:14 +00001294 return NULL;
1295 if (file == NULL || file == Py_None) {
Guido van Rossum34343512006-11-30 22:13:52 +00001296 file = PySys_GetObject("stdout");
Christian Heimesfef9bba2007-11-13 15:24:14 +00001297 /* sys.stdout may be None when FILE* stdout isn't connected */
1298 if (file == Py_None)
1299 Py_RETURN_NONE;
1300 }
Guido van Rossum34343512006-11-30 22:13:52 +00001301
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001302 if (sep && sep != Py_None && !PyUnicode_Check(sep)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001303 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001304 "sep must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001305 sep->ob_type->tp_name);
1306 return NULL;
1307 }
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001308 if (end && end != Py_None && !PyUnicode_Check(end)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001309 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001310 "end must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001311 end->ob_type->tp_name);
1312 return NULL;
1313 }
Guido van Rossum34343512006-11-30 22:13:52 +00001314
1315 for (i = 0; i < PyTuple_Size(args); i++) {
1316 if (i > 0) {
1317 if (sep == NULL || sep == Py_None)
1318 err = PyFile_WriteString(" ", file);
1319 else
1320 err = PyFile_WriteObject(sep, file,
1321 Py_PRINT_RAW);
1322 if (err)
1323 return NULL;
1324 }
1325 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1326 Py_PRINT_RAW);
1327 if (err)
1328 return NULL;
1329 }
1330
1331 if (end == NULL || end == Py_None)
1332 err = PyFile_WriteString("\n", file);
1333 else
1334 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1335 if (err)
1336 return NULL;
1337
1338 Py_RETURN_NONE;
1339}
1340
1341PyDoc_STRVAR(print_doc,
Georg Brandlcd5da7d2008-02-01 15:47:37 +00001342"print(value, ..., sep=' ', end='\\n', file=sys.stdout)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001343\n\
1344Prints the values to a stream, or to sys.stdout by default.\n\
1345Optional keyword arguments:\n\
1346file: a file-like object (stream); defaults to the current sys.stdout.\n\
1347sep: string inserted between values, default a space.\n\
1348end: string appended after the last value, default a newline.");
1349
1350
Guido van Rossuma88a0332007-02-26 16:59:55 +00001351static PyObject *
1352builtin_input(PyObject *self, PyObject *args)
1353{
Guido van Rossumeba76962007-05-27 09:13:28 +00001354 PyObject *promptarg = NULL;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001355 PyObject *fin = PySys_GetObject("stdin");
1356 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossumeba76962007-05-27 09:13:28 +00001357 PyObject *ferr = PySys_GetObject("stderr");
1358 PyObject *tmp;
1359 long fd;
1360 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001361
Guido van Rossumeba76962007-05-27 09:13:28 +00001362 /* Parse arguments */
1363 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg))
Guido van Rossuma88a0332007-02-26 16:59:55 +00001364 return NULL;
1365
Guido van Rossumeba76962007-05-27 09:13:28 +00001366 /* Check that stdin/out/err are intact */
Christian Heimes2be03732007-11-15 02:26:46 +00001367 if (fin == NULL || fin == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001368 PyErr_SetString(PyExc_RuntimeError,
1369 "input(): lost sys.stdin");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001370 return NULL;
1371 }
Christian Heimes2be03732007-11-15 02:26:46 +00001372 if (fout == NULL || fout == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001373 PyErr_SetString(PyExc_RuntimeError,
1374 "input(): lost sys.stdout");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001375 return NULL;
1376 }
Christian Heimes2be03732007-11-15 02:26:46 +00001377 if (ferr == NULL || ferr == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001378 PyErr_SetString(PyExc_RuntimeError,
1379 "input(): lost sys.stderr");
1380 return NULL;
1381 }
1382
1383 /* First of all, flush stderr */
1384 tmp = PyObject_CallMethod(ferr, "flush", "");
1385 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001386 PyErr_Clear();
1387 else
1388 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001389
1390 /* We should only use (GNU) readline if Python's sys.stdin and
1391 sys.stdout are the same as C's stdin and stdout, because we
1392 need to pass it those. */
1393 tmp = PyObject_CallMethod(fin, "fileno", "");
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001394 if (tmp == NULL) {
1395 PyErr_Clear();
1396 tty = 0;
1397 }
1398 else {
Christian Heimes217cfd12007-12-02 14:31:20 +00001399 fd = PyLong_AsLong(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001400 Py_DECREF(tmp);
1401 if (fd < 0 && PyErr_Occurred())
1402 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001403 tty = fd == fileno(stdin) && isatty(fd);
1404 }
1405 if (tty) {
1406 tmp = PyObject_CallMethod(fout, "fileno", "");
1407 if (tmp == NULL)
1408 PyErr_Clear();
1409 else {
Christian Heimes217cfd12007-12-02 14:31:20 +00001410 fd = PyLong_AsLong(tmp);
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001411 Py_DECREF(tmp);
1412 if (fd < 0 && PyErr_Occurred())
1413 return NULL;
1414 tty = fd == fileno(stdout) && isatty(fd);
1415 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001416 }
1417
1418 /* If we're interactive, use (GNU) readline */
1419 if (tty) {
Guido van Rossuma88a0332007-02-26 16:59:55 +00001420 PyObject *po;
1421 char *prompt;
1422 char *s;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001423 PyObject *stdin_encoding;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001424 PyObject *result;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001425
1426 stdin_encoding = PyObject_GetAttrString(fin, "encoding");
1427 if (!stdin_encoding)
1428 /* stdin is a text stream, so it must have an
1429 encoding. */
1430 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001431 tmp = PyObject_CallMethod(fout, "flush", "");
1432 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001433 PyErr_Clear();
1434 else
1435 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001436 if (promptarg != NULL) {
1437 po = PyObject_Str(promptarg);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001438 if (po == NULL) {
1439 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001440 return NULL;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001441 }
Christian Heimes91c77302007-11-25 09:18:01 +00001442 prompt = PyUnicode_AsString(po);
Guido van Rossumeba76962007-05-27 09:13:28 +00001443 if (prompt == NULL) {
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001444 Py_DECREF(stdin_encoding);
Guido van Rossumeba76962007-05-27 09:13:28 +00001445 Py_DECREF(po);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001446 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001447 }
Guido van Rossuma88a0332007-02-26 16:59:55 +00001448 }
1449 else {
1450 po = NULL;
1451 prompt = "";
1452 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001453 s = PyOS_Readline(stdin, stdout, prompt);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001454 Py_XDECREF(po);
1455 if (s == NULL) {
1456 if (!PyErr_Occurred())
1457 PyErr_SetNone(PyExc_KeyboardInterrupt);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001458 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001459 return NULL;
1460 }
1461 if (*s == '\0') {
1462 PyErr_SetNone(PyExc_EOFError);
1463 result = NULL;
1464 }
1465 else { /* strip trailing '\n' */
1466 size_t len = strlen(s);
1467 if (len > PY_SSIZE_T_MAX) {
1468 PyErr_SetString(PyExc_OverflowError,
1469 "input: input too long");
1470 result = NULL;
1471 }
1472 else {
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001473 result = PyUnicode_Decode
1474 (s, len-1,
1475 PyUnicode_AsString(stdin_encoding),
1476 NULL);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001477 }
1478 }
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001479 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001480 PyMem_FREE(s);
1481 return result;
1482 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001483
1484 /* Fallback if we're not interactive */
1485 if (promptarg != NULL) {
1486 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0)
Guido van Rossuma88a0332007-02-26 16:59:55 +00001487 return NULL;
1488 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001489 tmp = PyObject_CallMethod(fout, "flush", "");
1490 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001491 PyErr_Clear();
1492 else
1493 Py_DECREF(tmp);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001494 return PyFile_GetLine(fin, -1);
1495}
1496
1497PyDoc_STRVAR(input_doc,
1498"input([prompt]) -> string\n\
1499\n\
1500Read a string from standard input. The trailing newline is stripped.\n\
1501If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1502On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1503is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001504
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001505
Guido van Rossum79f25d91997-04-29 20:08:16 +00001506static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001507builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001508{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001509 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001510}
1511
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001512PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001513"repr(object) -> string\n\
1514\n\
1515Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001516For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001517
1518
Guido van Rossum79f25d91997-04-29 20:08:16 +00001519static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001520builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001521{
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001522#define UNDEF_NDIGITS (-0x7fffffff) /* Unlikely ndigits value */
1523 static PyObject *round_str = NULL;
1524 int ndigits = UNDEF_NDIGITS;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001525 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001526 PyObject *number, *round;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001527
Alex Martelliae211f92007-08-22 23:21:33 +00001528 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|i:round",
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001529 kwlist, &number, &ndigits))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001530 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00001531
Christian Heimes90aa7642007-12-19 02:45:37 +00001532 if (Py_TYPE(number)->tp_dict == NULL) {
1533 if (PyType_Ready(Py_TYPE(number)) < 0)
Guido van Rossum15d3d042007-08-24 02:02:45 +00001534 return NULL;
1535 }
1536
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001537 if (round_str == NULL) {
Christian Heimesfe82e772008-01-28 02:38:20 +00001538 round_str = PyUnicode_InternFromString("__round__");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001539 if (round_str == NULL)
Alex Martelliae211f92007-08-22 23:21:33 +00001540 return NULL;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001541 }
1542
Christian Heimes90aa7642007-12-19 02:45:37 +00001543 round = _PyType_Lookup(Py_TYPE(number), round_str);
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001544 if (round == NULL) {
1545 PyErr_Format(PyExc_TypeError,
1546 "type %.100s doesn't define __round__ method",
Christian Heimes90aa7642007-12-19 02:45:37 +00001547 Py_TYPE(number)->tp_name);
Alex Martelliae211f92007-08-22 23:21:33 +00001548 return NULL;
1549 }
1550
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001551 if (ndigits == UNDEF_NDIGITS)
1552 return PyObject_CallFunction(round, "O", number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001553 else
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001554 return PyObject_CallFunction(round, "Oi", number, ndigits);
1555#undef UNDEF_NDIGITS
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001556}
1557
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001558PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001559"round(number[, ndigits]) -> floating point number\n\
1560\n\
1561Round a number to a given precision in decimal digits (default 0 digits).\n\
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001562This returns an int when called with one argument, otherwise a float.\n\
1563Precision may be negative.");
1564
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001565
Raymond Hettinger64958a12003-12-17 20:43:33 +00001566static PyObject *
1567builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1568{
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001569 PyObject *newlist, *v, *seq, *keyfunc=NULL, *newargs;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001570 PyObject *callable;
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001571 static char *kwlist[] = {"iterable", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001572 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001573
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001574 /* args 1-3 should match listsort in Objects/listobject.c */
1575 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted",
1576 kwlist, &seq, &keyfunc, &reverse))
Armin Rigo71d7e702005-09-20 18:13:03 +00001577 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001578
1579 newlist = PySequence_List(seq);
1580 if (newlist == NULL)
1581 return NULL;
1582
1583 callable = PyObject_GetAttrString(newlist, "sort");
1584 if (callable == NULL) {
1585 Py_DECREF(newlist);
1586 return NULL;
1587 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001588
Raymond Hettinger64958a12003-12-17 20:43:33 +00001589 newargs = PyTuple_GetSlice(args, 1, 4);
1590 if (newargs == NULL) {
1591 Py_DECREF(newlist);
1592 Py_DECREF(callable);
1593 return NULL;
1594 }
1595
1596 v = PyObject_Call(callable, newargs, kwds);
1597 Py_DECREF(newargs);
1598 Py_DECREF(callable);
1599 if (v == NULL) {
1600 Py_DECREF(newlist);
1601 return NULL;
1602 }
1603 Py_DECREF(v);
1604 return newlist;
1605}
1606
1607PyDoc_STRVAR(sorted_doc,
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001608"sorted(iterable, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001609
Guido van Rossum79f25d91997-04-29 20:08:16 +00001610static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001611builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001612{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001613 PyObject *v = NULL;
1614 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001615
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001616 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001617 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001618 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001619 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001620 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001621 if (!PyErr_Occurred())
1622 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001623 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001624 }
1625 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001626 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001627 }
1628 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001629 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001630 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001631 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001632 "vars() argument must have __dict__ attribute");
1633 return NULL;
1634 }
1635 }
1636 return d;
1637}
1638
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001639PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001640"vars([object]) -> dictionary\n\
1641\n\
1642Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001643With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001644
Alex Martellia70b1912003-04-22 08:12:33 +00001645static PyObject*
1646builtin_sum(PyObject *self, PyObject *args)
1647{
1648 PyObject *seq;
1649 PyObject *result = NULL;
1650 PyObject *temp, *item, *iter;
1651
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001652 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001653 return NULL;
1654
1655 iter = PyObject_GetIter(seq);
1656 if (iter == NULL)
1657 return NULL;
1658
1659 if (result == NULL) {
Christian Heimes217cfd12007-12-02 14:31:20 +00001660 result = PyLong_FromLong(0);
Alex Martellia70b1912003-04-22 08:12:33 +00001661 if (result == NULL) {
1662 Py_DECREF(iter);
1663 return NULL;
1664 }
1665 } else {
1666 /* reject string values for 'start' parameter */
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001667 if (PyUnicode_Check(result)) {
Alex Martellia70b1912003-04-22 08:12:33 +00001668 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001669 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001670 Py_DECREF(iter);
1671 return NULL;
1672 }
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001673 if (PyBytes_Check(result)) {
1674 PyErr_SetString(PyExc_TypeError,
1675 "sum() can't sum bytes [use b''.join(seq) instead]");
1676 Py_DECREF(iter);
1677 return NULL;
1678 }
1679
Alex Martelli41c9f882003-04-22 09:24:48 +00001680 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001681 }
1682
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001683#ifndef SLOW_SUM
1684 /* Fast addition by keeping temporary sums in C instead of new Python objects.
1685 Assumes all inputs are the same type. If the assumption fails, default
1686 to the more general routine.
1687 */
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001688 if (PyLong_CheckExact(result)) {
1689 int overflow;
1690 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
1691 /* If this already overflowed, don't even enter the loop. */
1692 if (overflow == 0) {
1693 Py_DECREF(result);
1694 result = NULL;
1695 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001696 while(result == NULL) {
1697 item = PyIter_Next(iter);
1698 if (item == NULL) {
1699 Py_DECREF(iter);
1700 if (PyErr_Occurred())
1701 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001702 return PyLong_FromLong(i_result);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001703 }
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001704 if (PyLong_CheckExact(item)) {
1705 long b = PyLong_AsLongAndOverflow(item, &overflow);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001706 long x = i_result + b;
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001707 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001708 i_result = x;
1709 Py_DECREF(item);
1710 continue;
1711 }
1712 }
1713 /* Either overflowed or is not an int. Restore real objects and process normally */
Christian Heimes217cfd12007-12-02 14:31:20 +00001714 result = PyLong_FromLong(i_result);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001715 temp = PyNumber_Add(result, item);
1716 Py_DECREF(result);
1717 Py_DECREF(item);
1718 result = temp;
1719 if (result == NULL) {
1720 Py_DECREF(iter);
1721 return NULL;
1722 }
1723 }
1724 }
1725
1726 if (PyFloat_CheckExact(result)) {
1727 double f_result = PyFloat_AS_DOUBLE(result);
1728 Py_DECREF(result);
1729 result = NULL;
1730 while(result == NULL) {
1731 item = PyIter_Next(iter);
1732 if (item == NULL) {
1733 Py_DECREF(iter);
1734 if (PyErr_Occurred())
1735 return NULL;
1736 return PyFloat_FromDouble(f_result);
1737 }
1738 if (PyFloat_CheckExact(item)) {
1739 PyFPE_START_PROTECT("add", return 0)
1740 f_result += PyFloat_AS_DOUBLE(item);
1741 PyFPE_END_PROTECT(f_result)
1742 Py_DECREF(item);
1743 continue;
1744 }
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001745 if (PyLong_CheckExact(item)) {
1746 long value;
1747 int overflow;
1748 value = PyLong_AsLongAndOverflow(item, &overflow);
1749 if (!overflow) {
1750 PyFPE_START_PROTECT("add", return 0)
1751 f_result += (double)value;
1752 PyFPE_END_PROTECT(f_result)
1753 Py_DECREF(item);
1754 continue;
1755 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001756 }
1757 result = PyFloat_FromDouble(f_result);
1758 temp = PyNumber_Add(result, item);
1759 Py_DECREF(result);
1760 Py_DECREF(item);
1761 result = temp;
1762 if (result == NULL) {
1763 Py_DECREF(iter);
1764 return NULL;
1765 }
1766 }
1767 }
1768#endif
1769
Alex Martellia70b1912003-04-22 08:12:33 +00001770 for(;;) {
1771 item = PyIter_Next(iter);
1772 if (item == NULL) {
1773 /* error, or end-of-sequence */
1774 if (PyErr_Occurred()) {
1775 Py_DECREF(result);
1776 result = NULL;
1777 }
1778 break;
1779 }
Alex Martellia253e182003-10-25 23:24:14 +00001780 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001781 Py_DECREF(result);
1782 Py_DECREF(item);
1783 result = temp;
1784 if (result == NULL)
1785 break;
1786 }
1787 Py_DECREF(iter);
1788 return result;
1789}
1790
1791PyDoc_STRVAR(sum_doc,
Thomas Wouters89f507f2006-12-13 04:49:30 +00001792"sum(sequence[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00001793\n\
1794Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00001795of parameter 'start' (which defaults to 0). When the sequence is\n\
1796empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00001797
1798
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001799static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001800builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001801{
1802 PyObject *inst;
1803 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001804 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001805
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001806 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001807 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001808
Guido van Rossum823649d2001-03-21 18:40:58 +00001809 retval = PyObject_IsInstance(inst, cls);
1810 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001811 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001812 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001813}
1814
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001815PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001816"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001817\n\
1818Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001819With a type as second argument, return whether that is the object's type.\n\
1820The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001821isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001822
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001823
1824static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001825builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001826{
1827 PyObject *derived;
1828 PyObject *cls;
1829 int retval;
1830
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001831 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001832 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001833
Guido van Rossum823649d2001-03-21 18:40:58 +00001834 retval = PyObject_IsSubclass(derived, cls);
1835 if (retval < 0)
1836 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001837 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001838}
1839
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001840PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001841"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001842\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00001843Return whether class C is a subclass (i.e., a derived class) of class B.\n\
1844When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
1845is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001846
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001847
Barry Warsawbd599b52000-08-03 15:45:29 +00001848static PyObject*
1849builtin_zip(PyObject *self, PyObject *args)
1850{
Guido van Rossumb65fb332006-08-25 23:26:40 +00001851 /* args must be a tuple */
1852 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00001853
Guido van Rossumb65fb332006-08-25 23:26:40 +00001854 return _PyZip_CreateIter(args);
Barry Warsawbd599b52000-08-03 15:45:29 +00001855}
1856
1857
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001858PyDoc_STRVAR(zip_doc,
Guido van Rossum801f0d72006-08-24 19:48:10 +00001859"zip(it1 [, it2 [...]]) -> iter([(it1[0], it2[0] ...), ...])\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00001860\n\
Guido van Rossum801f0d72006-08-24 19:48:10 +00001861Return an iterator yielding tuples, where each tuple contains the\n\
1862corresponding element from each of the argument iterables.\n\
1863The returned iterator ends when the shortest argument iterable is exhausted.\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001864(This is identical to itertools.izip().)");
Barry Warsawbd599b52000-08-03 15:45:29 +00001865
1866
Guido van Rossum79f25d91997-04-29 20:08:16 +00001867static PyMethodDef builtin_methods[] = {
Guido van Rossum52cc1d82007-03-18 15:41:51 +00001868 {"__build_class__", (PyCFunction)builtin___build_class__,
1869 METH_VARARGS | METH_KEYWORDS, build_class_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001870 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001871 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00001872 {"all", builtin_all, METH_O, all_doc},
1873 {"any", builtin_any, METH_O, any_doc},
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001874 {"bin", builtin_bin, METH_O, bin_doc},
Neal Norwitzc2550c72007-08-31 04:17:51 +00001875 {"chr", builtin_chr, METH_VARARGS, chr_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001876 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
Guido van Rossumd8faa362007-04-27 19:54:29 +00001877 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001878 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
1879 {"dir", builtin_dir, METH_VARARGS, dir_doc},
1880 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
1881 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00001882 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Eric Smith8c663262007-08-25 02:26:07 +00001883 {"format", builtin_format, METH_VARARGS, format_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001884 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
1885 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
1886 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
1887 {"hash", builtin_hash, METH_O, hash_doc},
1888 {"hex", builtin_hex, METH_O, hex_doc},
1889 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00001890 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001891 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
1892 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
1893 {"iter", builtin_iter, METH_VARARGS, iter_doc},
1894 {"len", builtin_len, METH_O, len_doc},
1895 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
1896 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001897 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
1898 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandla18af4e2007-04-21 15:47:16 +00001899 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001900 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001901 {"ord", builtin_ord, METH_O, ord_doc},
1902 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00001903 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001904 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001905 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001906 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00001907 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00001908 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001909 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001910 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00001911 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00001912};
1913
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001914PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001915"Built-in functions, exceptions, and other objects.\n\
1916\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001917Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001918
Guido van Rossum25ce5661997-08-02 03:10:38 +00001919PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001920_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001921{
Fred Drake5550de32000-06-20 04:54:19 +00001922 PyObject *mod, *dict, *debug;
Georg Brandl1a3284e2007-12-02 09:40:06 +00001923 mod = Py_InitModule4("builtins", builtin_methods,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001924 builtin_doc, (PyObject *)NULL,
1925 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001926 if (mod == NULL)
1927 return NULL;
1928 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00001929
Tim Peters7571a0f2003-03-23 17:52:28 +00001930#ifdef Py_TRACE_REFS
Georg Brandl1a3284e2007-12-02 09:40:06 +00001931 /* "builtins" exposes a number of statically allocated objects
Tim Peters7571a0f2003-03-23 17:52:28 +00001932 * that, before this code was added in 2.3, never showed up in
1933 * the list of "all objects" maintained by Py_TRACE_REFS. As a
1934 * result, programs leaking references to None and False (etc)
1935 * couldn't be diagnosed by examining sys.getobjects(0).
1936 */
1937#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
1938#else
1939#define ADD_TO_ALL(OBJECT) (void)0
1940#endif
1941
Tim Peters4b7625e2001-09-13 21:37:17 +00001942#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00001943 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
1944 return NULL; \
1945 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00001946
1947 SETBUILTIN("None", Py_None);
1948 SETBUILTIN("Ellipsis", Py_Ellipsis);
1949 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001950 SETBUILTIN("False", Py_False);
1951 SETBUILTIN("True", Py_True);
1952 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbae07c92007-10-08 02:46:15 +00001953 SETBUILTIN("memoryview", &PyMemoryView_Type);
Guido van Rossum254348e2007-11-21 19:29:53 +00001954 SETBUILTIN("bytearray", &PyBytes_Type);
Guido van Rossum98297ee2007-11-06 21:34:58 +00001955 SETBUILTIN("bytes", &PyString_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001956 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001957#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00001958 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001959#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00001960 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00001961 SETBUILTIN("enumerate", &PyEnum_Type);
Raymond Hettinger17301e92008-03-13 00:19:26 +00001962 SETBUILTIN("filter", &PyFilter_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001963 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00001964 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001965 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00001966 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001967 SETBUILTIN("list", &PyList_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001968 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossum805365e2007-05-07 22:24:25 +00001969 SETBUILTIN("range", &PyRange_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00001970 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00001971 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001972 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001973 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Guido van Rossum572dbf82007-04-27 23:53:51 +00001974 SETBUILTIN("str", &PyUnicode_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001975 SETBUILTIN("super", &PySuper_Type);
1976 SETBUILTIN("tuple", &PyTuple_Type);
1977 SETBUILTIN("type", &PyType_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001978 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00001979 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
1980 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001981 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00001982 }
1983 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00001984
Guido van Rossum25ce5661997-08-02 03:10:38 +00001985 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00001986#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00001987#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00001988}