Add better error reporting for MemoryErrors caused by str->float conversions.
[python.git] / Python / bltinmodule.c
blob3132cf4b41b67d874fed629450da5cddb2fda706
1 /* Built-in functions */
3 #include "Python.h"
4 #include "Python-ast.h"
6 #include "node.h"
7 #include "code.h"
8 #include "eval.h"
10 #include <ctype.h>
11 #include <float.h> /* for DBL_MANT_DIG and friends */
13 #ifdef RISCOS
14 #include "unixstuff.h"
15 #endif
17 /* The default encoding used by the platform file system APIs
18 Can remain NULL for all platforms that don't have such a concept
20 #if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
21 const char *Py_FileSystemDefaultEncoding = "mbcs";
22 #elif defined(__APPLE__)
23 const char *Py_FileSystemDefaultEncoding = "utf-8";
24 #else
25 const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
26 #endif
28 /* Forward */
29 static PyObject *filterstring(PyObject *, PyObject *);
30 #ifdef Py_USING_UNICODE
31 static PyObject *filterunicode(PyObject *, PyObject *);
32 #endif
33 static PyObject *filtertuple (PyObject *, PyObject *);
35 static PyObject *
36 builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
38 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
39 "level", 0};
40 char *name;
41 PyObject *globals = NULL;
42 PyObject *locals = NULL;
43 PyObject *fromlist = NULL;
44 int level = -1;
46 if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|OOOi:__import__",
47 kwlist, &name, &globals, &locals, &fromlist, &level))
48 return NULL;
49 return PyImport_ImportModuleLevel(name, globals, locals,
50 fromlist, level);
53 PyDoc_STRVAR(import_doc,
54 "__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module\n\
55 \n\
56 Import a module. The globals are only used to determine the context;\n\
57 they are not modified. The locals are currently unused. The fromlist\n\
58 should be a list of names to emulate ``from name import ...'', or an\n\
59 empty list to emulate ``import name''.\n\
60 When importing a module from a package, note that __import__('A.B', ...)\n\
61 returns package A when fromlist is empty, but its submodule B when\n\
62 fromlist is not empty. Level is used to determine whether to perform \n\
63 absolute or relative imports. -1 is the original strategy of attempting\n\
64 both absolute and relative imports, 0 is absolute, a positive number\n\
65 is the number of parent directories to search relative to the current module.");
68 static PyObject *
69 builtin_abs(PyObject *self, PyObject *v)
71 return PyNumber_Absolute(v);
74 PyDoc_STRVAR(abs_doc,
75 "abs(number) -> number\n\
76 \n\
77 Return the absolute value of the argument.");
79 static PyObject *
80 builtin_all(PyObject *self, PyObject *v)
82 PyObject *it, *item;
83 PyObject *(*iternext)(PyObject *);
84 int cmp;
86 it = PyObject_GetIter(v);
87 if (it == NULL)
88 return NULL;
89 iternext = *Py_TYPE(it)->tp_iternext;
91 for (;;) {
92 item = iternext(it);
93 if (item == NULL)
94 break;
95 cmp = PyObject_IsTrue(item);
96 Py_DECREF(item);
97 if (cmp < 0) {
98 Py_DECREF(it);
99 return NULL;
101 if (cmp == 0) {
102 Py_DECREF(it);
103 Py_RETURN_FALSE;
106 Py_DECREF(it);
107 if (PyErr_Occurred()) {
108 if (PyErr_ExceptionMatches(PyExc_StopIteration))
109 PyErr_Clear();
110 else
111 return NULL;
113 Py_RETURN_TRUE;
116 PyDoc_STRVAR(all_doc,
117 "all(iterable) -> bool\n\
119 Return True if bool(x) is True for all values x in the iterable.");
121 static PyObject *
122 builtin_any(PyObject *self, PyObject *v)
124 PyObject *it, *item;
125 PyObject *(*iternext)(PyObject *);
126 int cmp;
128 it = PyObject_GetIter(v);
129 if (it == NULL)
130 return NULL;
131 iternext = *Py_TYPE(it)->tp_iternext;
133 for (;;) {
134 item = iternext(it);
135 if (item == NULL)
136 break;
137 cmp = PyObject_IsTrue(item);
138 Py_DECREF(item);
139 if (cmp < 0) {
140 Py_DECREF(it);
141 return NULL;
143 if (cmp == 1) {
144 Py_DECREF(it);
145 Py_RETURN_TRUE;
148 Py_DECREF(it);
149 if (PyErr_Occurred()) {
150 if (PyErr_ExceptionMatches(PyExc_StopIteration))
151 PyErr_Clear();
152 else
153 return NULL;
155 Py_RETURN_FALSE;
158 PyDoc_STRVAR(any_doc,
159 "any(iterable) -> bool\n\
161 Return True if bool(x) is True for any x in the iterable.");
163 static PyObject *
164 builtin_apply(PyObject *self, PyObject *args)
166 PyObject *func, *alist = NULL, *kwdict = NULL;
167 PyObject *t = NULL, *retval = NULL;
169 if (PyErr_WarnPy3k("apply() not supported in 3.x; "
170 "use func(*args, **kwargs)", 1) < 0)
171 return NULL;
173 if (!PyArg_UnpackTuple(args, "apply", 1, 3, &func, &alist, &kwdict))
174 return NULL;
175 if (alist != NULL) {
176 if (!PyTuple_Check(alist)) {
177 if (!PySequence_Check(alist)) {
178 PyErr_Format(PyExc_TypeError,
179 "apply() arg 2 expected sequence, found %s",
180 alist->ob_type->tp_name);
181 return NULL;
183 t = PySequence_Tuple(alist);
184 if (t == NULL)
185 return NULL;
186 alist = t;
189 if (kwdict != NULL && !PyDict_Check(kwdict)) {
190 PyErr_Format(PyExc_TypeError,
191 "apply() arg 3 expected dictionary, found %s",
192 kwdict->ob_type->tp_name);
193 goto finally;
195 retval = PyEval_CallObjectWithKeywords(func, alist, kwdict);
196 finally:
197 Py_XDECREF(t);
198 return retval;
201 PyDoc_STRVAR(apply_doc,
202 "apply(object[, args[, kwargs]]) -> value\n\
204 Call a callable object with positional arguments taken from the tuple args,\n\
205 and keyword arguments taken from the optional dictionary kwargs.\n\
206 Note that classes are callable, as are instances with a __call__() method.\n\
208 Deprecated since release 2.3. Instead, use the extended call syntax:\n\
209 function(*args, **keywords).");
212 static PyObject *
213 builtin_bin(PyObject *self, PyObject *v)
215 return PyNumber_ToBase(v, 2);
218 PyDoc_STRVAR(bin_doc,
219 "bin(number) -> string\n\
221 Return the binary representation of an integer or long integer.");
224 static PyObject *
225 builtin_callable(PyObject *self, PyObject *v)
227 if (PyErr_WarnPy3k("callable() not supported in 3.x; "
228 "use isinstance(x, collections.Callable)", 1) < 0)
229 return NULL;
230 return PyBool_FromLong((long)PyCallable_Check(v));
233 PyDoc_STRVAR(callable_doc,
234 "callable(object) -> bool\n\
236 Return whether the object is callable (i.e., some kind of function).\n\
237 Note that classes are callable, as are instances with a __call__() method.");
240 static PyObject *
241 builtin_filter(PyObject *self, PyObject *args)
243 PyObject *func, *seq, *result, *it, *arg;
244 Py_ssize_t len; /* guess for result list size */
245 register Py_ssize_t j;
247 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
248 return NULL;
250 /* Strings and tuples return a result of the same type. */
251 if (PyString_Check(seq))
252 return filterstring(func, seq);
253 #ifdef Py_USING_UNICODE
254 if (PyUnicode_Check(seq))
255 return filterunicode(func, seq);
256 #endif
257 if (PyTuple_Check(seq))
258 return filtertuple(func, seq);
260 /* Pre-allocate argument list tuple. */
261 arg = PyTuple_New(1);
262 if (arg == NULL)
263 return NULL;
265 /* Get iterator. */
266 it = PyObject_GetIter(seq);
267 if (it == NULL)
268 goto Fail_arg;
270 /* Guess a result list size. */
271 len = _PyObject_LengthHint(seq, 8);
272 if (len == -1)
273 goto Fail_it;
275 /* Get a result list. */
276 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
277 /* Eww - can modify the list in-place. */
278 Py_INCREF(seq);
279 result = seq;
281 else {
282 result = PyList_New(len);
283 if (result == NULL)
284 goto Fail_it;
287 /* Build the result list. */
288 j = 0;
289 for (;;) {
290 PyObject *item;
291 int ok;
293 item = PyIter_Next(it);
294 if (item == NULL) {
295 if (PyErr_Occurred())
296 goto Fail_result_it;
297 break;
300 if (func == (PyObject *)&PyBool_Type || func == Py_None) {
301 ok = PyObject_IsTrue(item);
303 else {
304 PyObject *good;
305 PyTuple_SET_ITEM(arg, 0, item);
306 good = PyObject_Call(func, arg, NULL);
307 PyTuple_SET_ITEM(arg, 0, NULL);
308 if (good == NULL) {
309 Py_DECREF(item);
310 goto Fail_result_it;
312 ok = PyObject_IsTrue(good);
313 Py_DECREF(good);
315 if (ok) {
316 if (j < len)
317 PyList_SET_ITEM(result, j, item);
318 else {
319 int status = PyList_Append(result, item);
320 Py_DECREF(item);
321 if (status < 0)
322 goto Fail_result_it;
324 ++j;
326 else
327 Py_DECREF(item);
331 /* Cut back result list if len is too big. */
332 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
333 goto Fail_result_it;
335 Py_DECREF(it);
336 Py_DECREF(arg);
337 return result;
339 Fail_result_it:
340 Py_DECREF(result);
341 Fail_it:
342 Py_DECREF(it);
343 Fail_arg:
344 Py_DECREF(arg);
345 return NULL;
348 PyDoc_STRVAR(filter_doc,
349 "filter(function or None, sequence) -> list, tuple, or string\n"
350 "\n"
351 "Return those items of sequence for which function(item) is true. If\n"
352 "function is None, return the items that are true. If sequence is a tuple\n"
353 "or string, return the same type, else return a list.");
355 static PyObject *
356 builtin_format(PyObject *self, PyObject *args)
358 PyObject *value;
359 PyObject *format_spec = NULL;
361 if (!PyArg_ParseTuple(args, "O|O:format", &value, &format_spec))
362 return NULL;
364 return PyObject_Format(value, format_spec);
367 PyDoc_STRVAR(format_doc,
368 "format(value[, format_spec]) -> string\n\
370 Returns value.__format__(format_spec)\n\
371 format_spec defaults to \"\"");
373 static PyObject *
374 builtin_chr(PyObject *self, PyObject *args)
376 long x;
377 char s[1];
379 if (!PyArg_ParseTuple(args, "l:chr", &x))
380 return NULL;
381 if (x < 0 || x >= 256) {
382 PyErr_SetString(PyExc_ValueError,
383 "chr() arg not in range(256)");
384 return NULL;
386 s[0] = (char)x;
387 return PyString_FromStringAndSize(s, 1);
390 PyDoc_STRVAR(chr_doc,
391 "chr(i) -> character\n\
393 Return a string of one character with ordinal i; 0 <= i < 256.");
396 #ifdef Py_USING_UNICODE
397 static PyObject *
398 builtin_unichr(PyObject *self, PyObject *args)
400 int x;
402 if (!PyArg_ParseTuple(args, "i:unichr", &x))
403 return NULL;
405 return PyUnicode_FromOrdinal(x);
408 PyDoc_STRVAR(unichr_doc,
409 "unichr(i) -> Unicode character\n\
411 Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.");
412 #endif
415 static PyObject *
416 builtin_cmp(PyObject *self, PyObject *args)
418 PyObject *a, *b;
419 int c;
421 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
422 return NULL;
423 if (PyObject_Cmp(a, b, &c) < 0)
424 return NULL;
425 return PyInt_FromLong((long)c);
428 PyDoc_STRVAR(cmp_doc,
429 "cmp(x, y) -> integer\n\
431 Return negative if x<y, zero if x==y, positive if x>y.");
434 static PyObject *
435 builtin_coerce(PyObject *self, PyObject *args)
437 PyObject *v, *w;
438 PyObject *res;
440 if (PyErr_WarnPy3k("coerce() not supported in 3.x", 1) < 0)
441 return NULL;
443 if (!PyArg_UnpackTuple(args, "coerce", 2, 2, &v, &w))
444 return NULL;
445 if (PyNumber_Coerce(&v, &w) < 0)
446 return NULL;
447 res = PyTuple_Pack(2, v, w);
448 Py_DECREF(v);
449 Py_DECREF(w);
450 return res;
453 PyDoc_STRVAR(coerce_doc,
454 "coerce(x, y) -> (x1, y1)\n\
456 Return a tuple consisting of the two numeric arguments converted to\n\
457 a common type, using the same rules as used by arithmetic operations.\n\
458 If coercion is not possible, raise TypeError.");
460 static PyObject *
461 builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
463 char *str;
464 char *filename;
465 char *startstr;
466 int mode = -1;
467 int dont_inherit = 0;
468 int supplied_flags = 0;
469 int is_ast;
470 PyCompilerFlags cf;
471 PyObject *result = NULL, *cmd, *tmp = NULL;
472 Py_ssize_t length;
473 static char *kwlist[] = {"source", "filename", "mode", "flags",
474 "dont_inherit", NULL};
475 int start[] = {Py_file_input, Py_eval_input, Py_single_input};
477 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
478 kwlist, &cmd, &filename, &startstr,
479 &supplied_flags, &dont_inherit))
480 return NULL;
482 cf.cf_flags = supplied_flags;
484 if (supplied_flags &
485 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
487 PyErr_SetString(PyExc_ValueError,
488 "compile(): unrecognised flags");
489 return NULL;
491 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
493 if (!dont_inherit) {
494 PyEval_MergeCompilerFlags(&cf);
497 if (strcmp(startstr, "exec") == 0)
498 mode = 0;
499 else if (strcmp(startstr, "eval") == 0)
500 mode = 1;
501 else if (strcmp(startstr, "single") == 0)
502 mode = 2;
503 else {
504 PyErr_SetString(PyExc_ValueError,
505 "compile() arg 3 must be 'exec', 'eval' or 'single'");
506 return NULL;
509 is_ast = PyAST_Check(cmd);
510 if (is_ast == -1)
511 return NULL;
512 if (is_ast) {
513 if (supplied_flags & PyCF_ONLY_AST) {
514 Py_INCREF(cmd);
515 result = cmd;
517 else {
518 PyArena *arena;
519 mod_ty mod;
521 arena = PyArena_New();
522 mod = PyAST_obj2mod(cmd, arena, mode);
523 if (mod == NULL) {
524 PyArena_Free(arena);
525 return NULL;
527 result = (PyObject*)PyAST_Compile(mod, filename,
528 &cf, arena);
529 PyArena_Free(arena);
531 return result;
534 #ifdef Py_USING_UNICODE
535 if (PyUnicode_Check(cmd)) {
536 tmp = PyUnicode_AsUTF8String(cmd);
537 if (tmp == NULL)
538 return NULL;
539 cmd = tmp;
540 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
542 #endif
544 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &length))
545 goto cleanup;
546 if ((size_t)length != strlen(str)) {
547 PyErr_SetString(PyExc_TypeError,
548 "compile() expected string without null bytes");
549 goto cleanup;
551 result = Py_CompileStringFlags(str, filename, start[mode], &cf);
552 cleanup:
553 Py_XDECREF(tmp);
554 return result;
557 PyDoc_STRVAR(compile_doc,
558 "compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
560 Compile the source string (a Python module, statement or expression)\n\
561 into a code object that can be executed by the exec statement or eval().\n\
562 The filename will be used for run-time error messages.\n\
563 The mode must be 'exec' to compile a module, 'single' to compile a\n\
564 single (interactive) statement, or 'eval' to compile an expression.\n\
565 The flags argument, if present, controls which future statements influence\n\
566 the compilation of the code.\n\
567 The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
568 the effects of any future statements in effect in the code calling\n\
569 compile; if absent or zero these statements do influence the compilation,\n\
570 in addition to any features explicitly specified.");
572 static PyObject *
573 builtin_dir(PyObject *self, PyObject *args)
575 PyObject *arg = NULL;
577 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
578 return NULL;
579 return PyObject_Dir(arg);
582 PyDoc_STRVAR(dir_doc,
583 "dir([object]) -> list of strings\n"
584 "\n"
585 "If called without an argument, return the names in the current scope.\n"
586 "Else, return an alphabetized list of names comprising (some of) the attributes\n"
587 "of the given object, and of attributes reachable from it.\n"
588 "If the object supplies a method named __dir__, it will be used; otherwise\n"
589 "the default dir() logic is used and returns:\n"
590 " for a module object: the module's attributes.\n"
591 " for a class object: its attributes, and recursively the attributes\n"
592 " of its bases.\n"
593 " for any other object: its attributes, its class's attributes, and\n"
594 " recursively the attributes of its class's base classes.");
596 static PyObject *
597 builtin_divmod(PyObject *self, PyObject *args)
599 PyObject *v, *w;
601 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
602 return NULL;
603 return PyNumber_Divmod(v, w);
606 PyDoc_STRVAR(divmod_doc,
607 "divmod(x, y) -> (div, mod)\n\
609 Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
612 static PyObject *
613 builtin_eval(PyObject *self, PyObject *args)
615 PyObject *cmd, *result, *tmp = NULL;
616 PyObject *globals = Py_None, *locals = Py_None;
617 char *str;
618 PyCompilerFlags cf;
620 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
621 return NULL;
622 if (locals != Py_None && !PyMapping_Check(locals)) {
623 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
624 return NULL;
626 if (globals != Py_None && !PyDict_Check(globals)) {
627 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
628 "globals must be a real dict; try eval(expr, {}, mapping)"
629 : "globals must be a dict");
630 return NULL;
632 if (globals == Py_None) {
633 globals = PyEval_GetGlobals();
634 if (locals == Py_None)
635 locals = PyEval_GetLocals();
637 else if (locals == Py_None)
638 locals = globals;
640 if (globals == NULL || locals == NULL) {
641 PyErr_SetString(PyExc_TypeError,
642 "eval must be given globals and locals "
643 "when called without a frame");
644 return NULL;
647 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
648 if (PyDict_SetItemString(globals, "__builtins__",
649 PyEval_GetBuiltins()) != 0)
650 return NULL;
653 if (PyCode_Check(cmd)) {
654 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
655 PyErr_SetString(PyExc_TypeError,
656 "code object passed to eval() may not contain free variables");
657 return NULL;
659 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
662 if (!PyString_Check(cmd) &&
663 !PyUnicode_Check(cmd)) {
664 PyErr_SetString(PyExc_TypeError,
665 "eval() arg 1 must be a string or code object");
666 return NULL;
668 cf.cf_flags = 0;
670 #ifdef Py_USING_UNICODE
671 if (PyUnicode_Check(cmd)) {
672 tmp = PyUnicode_AsUTF8String(cmd);
673 if (tmp == NULL)
674 return NULL;
675 cmd = tmp;
676 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
678 #endif
679 if (PyString_AsStringAndSize(cmd, &str, NULL)) {
680 Py_XDECREF(tmp);
681 return NULL;
683 while (*str == ' ' || *str == '\t')
684 str++;
686 (void)PyEval_MergeCompilerFlags(&cf);
687 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
688 Py_XDECREF(tmp);
689 return result;
692 PyDoc_STRVAR(eval_doc,
693 "eval(source[, globals[, locals]]) -> value\n\
695 Evaluate the source in the context of globals and locals.\n\
696 The source may be a string representing a Python expression\n\
697 or a code object as returned by compile().\n\
698 The globals must be a dictionary and locals can be any mapping,\n\
699 defaulting to the current globals and locals.\n\
700 If only globals is given, locals defaults to it.\n");
703 static PyObject *
704 builtin_execfile(PyObject *self, PyObject *args)
706 char *filename;
707 PyObject *globals = Py_None, *locals = Py_None;
708 PyObject *res;
709 FILE* fp = NULL;
710 PyCompilerFlags cf;
711 int exists;
713 if (PyErr_WarnPy3k("execfile() not supported in 3.x; use exec()",
714 1) < 0)
715 return NULL;
717 if (!PyArg_ParseTuple(args, "s|O!O:execfile",
718 &filename,
719 &PyDict_Type, &globals,
720 &locals))
721 return NULL;
722 if (locals != Py_None && !PyMapping_Check(locals)) {
723 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
724 return NULL;
726 if (globals == Py_None) {
727 globals = PyEval_GetGlobals();
728 if (locals == Py_None)
729 locals = PyEval_GetLocals();
731 else if (locals == Py_None)
732 locals = globals;
733 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
734 if (PyDict_SetItemString(globals, "__builtins__",
735 PyEval_GetBuiltins()) != 0)
736 return NULL;
739 exists = 0;
740 /* Test for existence or directory. */
741 #if defined(PLAN9)
743 Dir *d;
745 if ((d = dirstat(filename))!=nil) {
746 if(d->mode & DMDIR)
747 werrstr("is a directory");
748 else
749 exists = 1;
750 free(d);
753 #elif defined(RISCOS)
754 if (object_exists(filename)) {
755 if (isdir(filename))
756 errno = EISDIR;
757 else
758 exists = 1;
760 #else /* standard Posix */
762 struct stat s;
763 if (stat(filename, &s) == 0) {
764 if (S_ISDIR(s.st_mode))
765 # if defined(PYOS_OS2) && defined(PYCC_VACPP)
766 errno = EOS2ERR;
767 # else
768 errno = EISDIR;
769 # endif
770 else
771 exists = 1;
774 #endif
776 if (exists) {
777 Py_BEGIN_ALLOW_THREADS
778 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
779 Py_END_ALLOW_THREADS
781 if (fp == NULL) {
782 exists = 0;
786 if (!exists) {
787 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
788 return NULL;
790 cf.cf_flags = 0;
791 if (PyEval_MergeCompilerFlags(&cf))
792 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
793 locals, 1, &cf);
794 else
795 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
796 locals, 1);
797 return res;
800 PyDoc_STRVAR(execfile_doc,
801 "execfile(filename[, globals[, locals]])\n\
803 Read and execute a Python script from a file.\n\
804 The globals and locals are dictionaries, defaulting to the current\n\
805 globals and locals. If only globals is given, locals defaults to it.");
808 static PyObject *
809 builtin_getattr(PyObject *self, PyObject *args)
811 PyObject *v, *result, *dflt = NULL;
812 PyObject *name;
814 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
815 return NULL;
816 #ifdef Py_USING_UNICODE
817 if (PyUnicode_Check(name)) {
818 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
819 if (name == NULL)
820 return NULL;
822 #endif
824 if (!PyString_Check(name)) {
825 PyErr_SetString(PyExc_TypeError,
826 "getattr(): attribute name must be string");
827 return NULL;
829 result = PyObject_GetAttr(v, name);
830 if (result == NULL && dflt != NULL &&
831 PyErr_ExceptionMatches(PyExc_AttributeError))
833 PyErr_Clear();
834 Py_INCREF(dflt);
835 result = dflt;
837 return result;
840 PyDoc_STRVAR(getattr_doc,
841 "getattr(object, name[, default]) -> value\n\
843 Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
844 When a default argument is given, it is returned when the attribute doesn't\n\
845 exist; without it, an exception is raised in that case.");
848 static PyObject *
849 builtin_globals(PyObject *self)
851 PyObject *d;
853 d = PyEval_GetGlobals();
854 Py_XINCREF(d);
855 return d;
858 PyDoc_STRVAR(globals_doc,
859 "globals() -> dictionary\n\
861 Return the dictionary containing the current scope's global variables.");
864 static PyObject *
865 builtin_hasattr(PyObject *self, PyObject *args)
867 PyObject *v;
868 PyObject *name;
870 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
871 return NULL;
872 #ifdef Py_USING_UNICODE
873 if (PyUnicode_Check(name)) {
874 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
875 if (name == NULL)
876 return NULL;
878 #endif
880 if (!PyString_Check(name)) {
881 PyErr_SetString(PyExc_TypeError,
882 "hasattr(): attribute name must be string");
883 return NULL;
885 v = PyObject_GetAttr(v, name);
886 if (v == NULL) {
887 if (!PyErr_ExceptionMatches(PyExc_Exception))
888 return NULL;
889 else {
890 PyErr_Clear();
891 Py_INCREF(Py_False);
892 return Py_False;
895 Py_DECREF(v);
896 Py_INCREF(Py_True);
897 return Py_True;
900 PyDoc_STRVAR(hasattr_doc,
901 "hasattr(object, name) -> bool\n\
903 Return whether the object has an attribute with the given name.\n\
904 (This is done by calling getattr(object, name) and catching exceptions.)");
907 static PyObject *
908 builtin_id(PyObject *self, PyObject *v)
910 return PyLong_FromVoidPtr(v);
913 PyDoc_STRVAR(id_doc,
914 "id(object) -> integer\n\
916 Return the identity of an object. This is guaranteed to be unique among\n\
917 simultaneously existing objects. (Hint: it's the object's memory address.)");
920 static PyObject *
921 builtin_map(PyObject *self, PyObject *args)
923 typedef struct {
924 PyObject *it; /* the iterator object */
925 int saw_StopIteration; /* bool: did the iterator end? */
926 } sequence;
928 PyObject *func, *result;
929 sequence *seqs = NULL, *sqp;
930 Py_ssize_t n, len;
931 register int i, j;
933 n = PyTuple_Size(args);
934 if (n < 2) {
935 PyErr_SetString(PyExc_TypeError,
936 "map() requires at least two args");
937 return NULL;
940 func = PyTuple_GetItem(args, 0);
941 n--;
943 if (func == Py_None) {
944 if (PyErr_WarnPy3k("map(None, ...) not supported in 3.x; "
945 "use list(...)", 1) < 0)
946 return NULL;
947 if (n == 1) {
948 /* map(None, S) is the same as list(S). */
949 return PySequence_List(PyTuple_GetItem(args, 1));
953 /* Get space for sequence descriptors. Must NULL out the iterator
954 * pointers so that jumping to Fail_2 later doesn't see trash.
956 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
957 PyErr_NoMemory();
958 return NULL;
960 for (i = 0; i < n; ++i) {
961 seqs[i].it = (PyObject*)NULL;
962 seqs[i].saw_StopIteration = 0;
965 /* Do a first pass to obtain iterators for the arguments, and set len
966 * to the largest of their lengths.
968 len = 0;
969 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
970 PyObject *curseq;
971 Py_ssize_t curlen;
973 /* Get iterator. */
974 curseq = PyTuple_GetItem(args, i+1);
975 sqp->it = PyObject_GetIter(curseq);
976 if (sqp->it == NULL) {
977 static char errmsg[] =
978 "argument %d to map() must support iteration";
979 char errbuf[sizeof(errmsg) + 25];
980 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
981 PyErr_SetString(PyExc_TypeError, errbuf);
982 goto Fail_2;
985 /* Update len. */
986 curlen = _PyObject_LengthHint(curseq, 8);
987 if (curlen > len)
988 len = curlen;
991 /* Get space for the result list. */
992 if ((result = (PyObject *) PyList_New(len)) == NULL)
993 goto Fail_2;
995 /* Iterate over the sequences until all have stopped. */
996 for (i = 0; ; ++i) {
997 PyObject *alist, *item=NULL, *value;
998 int numactive = 0;
1000 if (func == Py_None && n == 1)
1001 alist = NULL;
1002 else if ((alist = PyTuple_New(n)) == NULL)
1003 goto Fail_1;
1005 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
1006 if (sqp->saw_StopIteration) {
1007 Py_INCREF(Py_None);
1008 item = Py_None;
1010 else {
1011 item = PyIter_Next(sqp->it);
1012 if (item)
1013 ++numactive;
1014 else {
1015 if (PyErr_Occurred()) {
1016 Py_XDECREF(alist);
1017 goto Fail_1;
1019 Py_INCREF(Py_None);
1020 item = Py_None;
1021 sqp->saw_StopIteration = 1;
1024 if (alist)
1025 PyTuple_SET_ITEM(alist, j, item);
1026 else
1027 break;
1030 if (!alist)
1031 alist = item;
1033 if (numactive == 0) {
1034 Py_DECREF(alist);
1035 break;
1038 if (func == Py_None)
1039 value = alist;
1040 else {
1041 value = PyEval_CallObject(func, alist);
1042 Py_DECREF(alist);
1043 if (value == NULL)
1044 goto Fail_1;
1046 if (i >= len) {
1047 int status = PyList_Append(result, value);
1048 Py_DECREF(value);
1049 if (status < 0)
1050 goto Fail_1;
1052 else if (PyList_SetItem(result, i, value) < 0)
1053 goto Fail_1;
1056 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
1057 goto Fail_1;
1059 goto Succeed;
1061 Fail_1:
1062 Py_DECREF(result);
1063 Fail_2:
1064 result = NULL;
1065 Succeed:
1066 assert(seqs);
1067 for (i = 0; i < n; ++i)
1068 Py_XDECREF(seqs[i].it);
1069 PyMem_DEL(seqs);
1070 return result;
1073 PyDoc_STRVAR(map_doc,
1074 "map(function, sequence[, sequence, ...]) -> list\n\
1076 Return a list of the results of applying the function to the items of\n\
1077 the argument sequence(s). If more than one sequence is given, the\n\
1078 function is called with an argument list consisting of the corresponding\n\
1079 item of each sequence, substituting None for missing values when not all\n\
1080 sequences have the same length. If the function is None, return a list of\n\
1081 the items of the sequence (or a list of tuples if more than one sequence).");
1084 static PyObject *
1085 builtin_next(PyObject *self, PyObject *args)
1087 PyObject *it, *res;
1088 PyObject *def = NULL;
1090 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1091 return NULL;
1092 if (!PyIter_Check(it)) {
1093 PyErr_Format(PyExc_TypeError,
1094 "%.200s object is not an iterator",
1095 it->ob_type->tp_name);
1096 return NULL;
1099 res = (*it->ob_type->tp_iternext)(it);
1100 if (res != NULL) {
1101 return res;
1102 } else if (def != NULL) {
1103 if (PyErr_Occurred()) {
1104 if (!PyErr_ExceptionMatches(PyExc_StopIteration))
1105 return NULL;
1106 PyErr_Clear();
1108 Py_INCREF(def);
1109 return def;
1110 } else if (PyErr_Occurred()) {
1111 return NULL;
1112 } else {
1113 PyErr_SetNone(PyExc_StopIteration);
1114 return NULL;
1118 PyDoc_STRVAR(next_doc,
1119 "next(iterator[, default])\n\
1121 Return the next item from the iterator. If default is given and the iterator\n\
1122 is exhausted, it is returned instead of raising StopIteration.");
1125 static PyObject *
1126 builtin_setattr(PyObject *self, PyObject *args)
1128 PyObject *v;
1129 PyObject *name;
1130 PyObject *value;
1132 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
1133 return NULL;
1134 if (PyObject_SetAttr(v, name, value) != 0)
1135 return NULL;
1136 Py_INCREF(Py_None);
1137 return Py_None;
1140 PyDoc_STRVAR(setattr_doc,
1141 "setattr(object, name, value)\n\
1143 Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
1144 ``x.y = v''.");
1147 static PyObject *
1148 builtin_delattr(PyObject *self, PyObject *args)
1150 PyObject *v;
1151 PyObject *name;
1153 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
1154 return NULL;
1155 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
1156 return NULL;
1157 Py_INCREF(Py_None);
1158 return Py_None;
1161 PyDoc_STRVAR(delattr_doc,
1162 "delattr(object, name)\n\
1164 Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
1165 ``del x.y''.");
1168 static PyObject *
1169 builtin_hash(PyObject *self, PyObject *v)
1171 long x;
1173 x = PyObject_Hash(v);
1174 if (x == -1)
1175 return NULL;
1176 return PyInt_FromLong(x);
1179 PyDoc_STRVAR(hash_doc,
1180 "hash(object) -> integer\n\
1182 Return a hash value for the object. Two objects with the same value have\n\
1183 the same hash value. The reverse is not necessarily true, but likely.");
1186 static PyObject *
1187 builtin_hex(PyObject *self, PyObject *v)
1189 PyNumberMethods *nb;
1190 PyObject *res;
1192 if ((nb = v->ob_type->tp_as_number) == NULL ||
1193 nb->nb_hex == NULL) {
1194 PyErr_SetString(PyExc_TypeError,
1195 "hex() argument can't be converted to hex");
1196 return NULL;
1198 res = (*nb->nb_hex)(v);
1199 if (res && !PyString_Check(res)) {
1200 PyErr_Format(PyExc_TypeError,
1201 "__hex__ returned non-string (type %.200s)",
1202 res->ob_type->tp_name);
1203 Py_DECREF(res);
1204 return NULL;
1206 return res;
1209 PyDoc_STRVAR(hex_doc,
1210 "hex(number) -> string\n\
1212 Return the hexadecimal representation of an integer or long integer.");
1215 static PyObject *builtin_raw_input(PyObject *, PyObject *);
1217 static PyObject *
1218 builtin_input(PyObject *self, PyObject *args)
1220 PyObject *line;
1221 char *str;
1222 PyObject *res;
1223 PyObject *globals, *locals;
1224 PyCompilerFlags cf;
1226 line = builtin_raw_input(self, args);
1227 if (line == NULL)
1228 return line;
1229 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
1230 return NULL;
1231 while (*str == ' ' || *str == '\t')
1232 str++;
1233 globals = PyEval_GetGlobals();
1234 locals = PyEval_GetLocals();
1235 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
1236 if (PyDict_SetItemString(globals, "__builtins__",
1237 PyEval_GetBuiltins()) != 0)
1238 return NULL;
1240 cf.cf_flags = 0;
1241 PyEval_MergeCompilerFlags(&cf);
1242 res = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
1243 Py_DECREF(line);
1244 return res;
1247 PyDoc_STRVAR(input_doc,
1248 "input([prompt]) -> value\n\
1250 Equivalent to eval(raw_input(prompt)).");
1253 static PyObject *
1254 builtin_intern(PyObject *self, PyObject *args)
1256 PyObject *s;
1257 if (!PyArg_ParseTuple(args, "S:intern", &s))
1258 return NULL;
1259 if (!PyString_CheckExact(s)) {
1260 PyErr_SetString(PyExc_TypeError,
1261 "can't intern subclass of string");
1262 return NULL;
1264 Py_INCREF(s);
1265 PyString_InternInPlace(&s);
1266 return s;
1269 PyDoc_STRVAR(intern_doc,
1270 "intern(string) -> string\n\
1272 ``Intern'' the given string. This enters the string in the (global)\n\
1273 table of interned strings whose purpose is to speed up dictionary lookups.\n\
1274 Return the string itself or the previously interned string object with the\n\
1275 same value.");
1278 static PyObject *
1279 builtin_iter(PyObject *self, PyObject *args)
1281 PyObject *v, *w = NULL;
1283 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
1284 return NULL;
1285 if (w == NULL)
1286 return PyObject_GetIter(v);
1287 if (!PyCallable_Check(v)) {
1288 PyErr_SetString(PyExc_TypeError,
1289 "iter(v, w): v must be callable");
1290 return NULL;
1292 return PyCallIter_New(v, w);
1295 PyDoc_STRVAR(iter_doc,
1296 "iter(collection) -> iterator\n\
1297 iter(callable, sentinel) -> iterator\n\
1299 Get an iterator from an object. In the first form, the argument must\n\
1300 supply its own iterator, or be a sequence.\n\
1301 In the second form, the callable is called until it returns the sentinel.");
1304 static PyObject *
1305 builtin_len(PyObject *self, PyObject *v)
1307 Py_ssize_t res;
1309 res = PyObject_Size(v);
1310 if (res < 0 && PyErr_Occurred())
1311 return NULL;
1312 return PyInt_FromSsize_t(res);
1315 PyDoc_STRVAR(len_doc,
1316 "len(object) -> integer\n\
1318 Return the number of items of a sequence or mapping.");
1321 static PyObject *
1322 builtin_locals(PyObject *self)
1324 PyObject *d;
1326 d = PyEval_GetLocals();
1327 Py_XINCREF(d);
1328 return d;
1331 PyDoc_STRVAR(locals_doc,
1332 "locals() -> dictionary\n\
1334 Update and return a dictionary containing the current scope's local variables.");
1337 static PyObject *
1338 min_max(PyObject *args, PyObject *kwds, int op)
1340 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
1341 const char *name = op == Py_LT ? "min" : "max";
1343 if (PyTuple_Size(args) > 1)
1344 v = args;
1345 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
1346 return NULL;
1348 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1349 keyfunc = PyDict_GetItemString(kwds, "key");
1350 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
1351 PyErr_Format(PyExc_TypeError,
1352 "%s() got an unexpected keyword argument", name);
1353 return NULL;
1355 Py_INCREF(keyfunc);
1358 it = PyObject_GetIter(v);
1359 if (it == NULL) {
1360 Py_XDECREF(keyfunc);
1361 return NULL;
1364 maxitem = NULL; /* the result */
1365 maxval = NULL; /* the value associated with the result */
1366 while (( item = PyIter_Next(it) )) {
1367 /* get the value from the key function */
1368 if (keyfunc != NULL) {
1369 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1370 if (val == NULL)
1371 goto Fail_it_item;
1373 /* no key function; the value is the item */
1374 else {
1375 val = item;
1376 Py_INCREF(val);
1379 /* maximum value and item are unset; set them */
1380 if (maxval == NULL) {
1381 maxitem = item;
1382 maxval = val;
1384 /* maximum value and item are set; update them as necessary */
1385 else {
1386 int cmp = PyObject_RichCompareBool(val, maxval, op);
1387 if (cmp < 0)
1388 goto Fail_it_item_and_val;
1389 else if (cmp > 0) {
1390 Py_DECREF(maxval);
1391 Py_DECREF(maxitem);
1392 maxval = val;
1393 maxitem = item;
1395 else {
1396 Py_DECREF(item);
1397 Py_DECREF(val);
1401 if (PyErr_Occurred())
1402 goto Fail_it;
1403 if (maxval == NULL) {
1404 PyErr_Format(PyExc_ValueError,
1405 "%s() arg is an empty sequence", name);
1406 assert(maxitem == NULL);
1408 else
1409 Py_DECREF(maxval);
1410 Py_DECREF(it);
1411 Py_XDECREF(keyfunc);
1412 return maxitem;
1414 Fail_it_item_and_val:
1415 Py_DECREF(val);
1416 Fail_it_item:
1417 Py_DECREF(item);
1418 Fail_it:
1419 Py_XDECREF(maxval);
1420 Py_XDECREF(maxitem);
1421 Py_DECREF(it);
1422 Py_XDECREF(keyfunc);
1423 return NULL;
1426 static PyObject *
1427 builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
1429 return min_max(args, kwds, Py_LT);
1432 PyDoc_STRVAR(min_doc,
1433 "min(iterable[, key=func]) -> value\n\
1434 min(a, b, c, ...[, key=func]) -> value\n\
1436 With a single iterable argument, return its smallest item.\n\
1437 With two or more arguments, return the smallest argument.");
1440 static PyObject *
1441 builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
1443 return min_max(args, kwds, Py_GT);
1446 PyDoc_STRVAR(max_doc,
1447 "max(iterable[, key=func]) -> value\n\
1448 max(a, b, c, ...[, key=func]) -> value\n\
1450 With a single iterable argument, return its largest item.\n\
1451 With two or more arguments, return the largest argument.");
1454 static PyObject *
1455 builtin_oct(PyObject *self, PyObject *v)
1457 PyNumberMethods *nb;
1458 PyObject *res;
1460 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1461 nb->nb_oct == NULL) {
1462 PyErr_SetString(PyExc_TypeError,
1463 "oct() argument can't be converted to oct");
1464 return NULL;
1466 res = (*nb->nb_oct)(v);
1467 if (res && !PyString_Check(res)) {
1468 PyErr_Format(PyExc_TypeError,
1469 "__oct__ returned non-string (type %.200s)",
1470 res->ob_type->tp_name);
1471 Py_DECREF(res);
1472 return NULL;
1474 return res;
1477 PyDoc_STRVAR(oct_doc,
1478 "oct(number) -> string\n\
1480 Return the octal representation of an integer or long integer.");
1483 static PyObject *
1484 builtin_open(PyObject *self, PyObject *args, PyObject *kwds)
1486 return PyObject_Call((PyObject*)&PyFile_Type, args, kwds);
1489 PyDoc_STRVAR(open_doc,
1490 "open(name[, mode[, buffering]]) -> file object\n\
1492 Open a file using the file() type, returns a file object. This is the\n\
1493 preferred way to open a file. See file.__doc__ for further information.");
1496 static PyObject *
1497 builtin_ord(PyObject *self, PyObject* obj)
1499 long ord;
1500 Py_ssize_t size;
1502 if (PyString_Check(obj)) {
1503 size = PyString_GET_SIZE(obj);
1504 if (size == 1) {
1505 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
1506 return PyInt_FromLong(ord);
1508 } else if (PyByteArray_Check(obj)) {
1509 size = PyByteArray_GET_SIZE(obj);
1510 if (size == 1) {
1511 ord = (long)((unsigned char)*PyByteArray_AS_STRING(obj));
1512 return PyInt_FromLong(ord);
1515 #ifdef Py_USING_UNICODE
1516 } else if (PyUnicode_Check(obj)) {
1517 size = PyUnicode_GET_SIZE(obj);
1518 if (size == 1) {
1519 ord = (long)*PyUnicode_AS_UNICODE(obj);
1520 return PyInt_FromLong(ord);
1522 #endif
1523 } else {
1524 PyErr_Format(PyExc_TypeError,
1525 "ord() expected string of length 1, but " \
1526 "%.200s found", obj->ob_type->tp_name);
1527 return NULL;
1530 PyErr_Format(PyExc_TypeError,
1531 "ord() expected a character, "
1532 "but string of length %zd found",
1533 size);
1534 return NULL;
1537 PyDoc_STRVAR(ord_doc,
1538 "ord(c) -> integer\n\
1540 Return the integer ordinal of a one-character string.");
1543 static PyObject *
1544 builtin_pow(PyObject *self, PyObject *args)
1546 PyObject *v, *w, *z = Py_None;
1548 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
1549 return NULL;
1550 return PyNumber_Power(v, w, z);
1553 PyDoc_STRVAR(pow_doc,
1554 "pow(x, y[, z]) -> number\n\
1556 With two arguments, equivalent to x**y. With three arguments,\n\
1557 equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
1560 static PyObject *
1561 builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1563 static char *kwlist[] = {"sep", "end", "file", 0};
1564 static PyObject *dummy_args = NULL;
1565 static PyObject *unicode_newline = NULL, *unicode_space = NULL;
1566 static PyObject *str_newline = NULL, *str_space = NULL;
1567 PyObject *newline, *space;
1568 PyObject *sep = NULL, *end = NULL, *file = NULL;
1569 int i, err, use_unicode = 0;
1571 if (dummy_args == NULL) {
1572 if (!(dummy_args = PyTuple_New(0)))
1573 return NULL;
1575 if (str_newline == NULL) {
1576 str_newline = PyString_FromString("\n");
1577 if (str_newline == NULL)
1578 return NULL;
1579 str_space = PyString_FromString(" ");
1580 if (str_space == NULL) {
1581 Py_CLEAR(str_newline);
1582 return NULL;
1584 unicode_newline = PyUnicode_FromString("\n");
1585 if (unicode_newline == NULL) {
1586 Py_CLEAR(str_newline);
1587 Py_CLEAR(str_space);
1588 return NULL;
1590 unicode_space = PyUnicode_FromString(" ");
1591 if (unicode_space == NULL) {
1592 Py_CLEAR(str_newline);
1593 Py_CLEAR(str_space);
1594 Py_CLEAR(unicode_space);
1595 return NULL;
1598 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
1599 kwlist, &sep, &end, &file))
1600 return NULL;
1601 if (file == NULL || file == Py_None) {
1602 file = PySys_GetObject("stdout");
1603 /* sys.stdout may be None when FILE* stdout isn't connected */
1604 if (file == Py_None)
1605 Py_RETURN_NONE;
1607 if (sep == Py_None) {
1608 sep = NULL;
1610 else if (sep) {
1611 if (PyUnicode_Check(sep)) {
1612 use_unicode = 1;
1614 else if (!PyString_Check(sep)) {
1615 PyErr_Format(PyExc_TypeError,
1616 "sep must be None, str or unicode, not %.200s",
1617 sep->ob_type->tp_name);
1618 return NULL;
1621 if (end == Py_None)
1622 end = NULL;
1623 else if (end) {
1624 if (PyUnicode_Check(end)) {
1625 use_unicode = 1;
1627 else if (!PyString_Check(end)) {
1628 PyErr_Format(PyExc_TypeError,
1629 "end must be None, str or unicode, not %.200s",
1630 end->ob_type->tp_name);
1631 return NULL;
1635 if (!use_unicode) {
1636 for (i = 0; i < PyTuple_Size(args); i++) {
1637 if (PyUnicode_Check(PyTuple_GET_ITEM(args, i))) {
1638 use_unicode = 1;
1639 break;
1643 if (use_unicode) {
1644 newline = unicode_newline;
1645 space = unicode_space;
1647 else {
1648 newline = str_newline;
1649 space = str_space;
1652 for (i = 0; i < PyTuple_Size(args); i++) {
1653 if (i > 0) {
1654 if (sep == NULL)
1655 err = PyFile_WriteObject(space, file,
1656 Py_PRINT_RAW);
1657 else
1658 err = PyFile_WriteObject(sep, file,
1659 Py_PRINT_RAW);
1660 if (err)
1661 return NULL;
1663 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1664 Py_PRINT_RAW);
1665 if (err)
1666 return NULL;
1669 if (end == NULL)
1670 err = PyFile_WriteObject(newline, file, Py_PRINT_RAW);
1671 else
1672 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1673 if (err)
1674 return NULL;
1676 Py_RETURN_NONE;
1679 PyDoc_STRVAR(print_doc,
1680 "print(value, ..., sep=' ', end='\\n', file=sys.stdout)\n\
1682 Prints the values to a stream, or to sys.stdout by default.\n\
1683 Optional keyword arguments:\n\
1684 file: a file-like object (stream); defaults to the current sys.stdout.\n\
1685 sep: string inserted between values, default a space.\n\
1686 end: string appended after the last value, default a newline.");
1689 /* Return number of items in range (lo, hi, step), when arguments are
1690 * PyInt or PyLong objects. step > 0 required. Return a value < 0 if
1691 * & only if the true value is too large to fit in a signed long.
1692 * Arguments MUST return 1 with either PyInt_Check() or
1693 * PyLong_Check(). Return -1 when there is an error.
1695 static long
1696 get_len_of_range_longs(PyObject *lo, PyObject *hi, PyObject *step)
1698 /* -------------------------------------------------------------
1699 Algorithm is equal to that of get_len_of_range(), but it operates
1700 on PyObjects (which are assumed to be PyLong or PyInt objects).
1701 ---------------------------------------------------------------*/
1702 long n;
1703 PyObject *diff = NULL;
1704 PyObject *one = NULL;
1705 PyObject *tmp1 = NULL, *tmp2 = NULL, *tmp3 = NULL;
1706 /* holds sub-expression evaluations */
1708 /* if (lo >= hi), return length of 0. */
1709 if (PyObject_Compare(lo, hi) >= 0)
1710 return 0;
1712 if ((one = PyLong_FromLong(1L)) == NULL)
1713 goto Fail;
1715 if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL)
1716 goto Fail;
1718 if ((diff = PyNumber_Subtract(tmp1, one)) == NULL)
1719 goto Fail;
1721 if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL)
1722 goto Fail;
1724 if ((tmp3 = PyNumber_Add(tmp2, one)) == NULL)
1725 goto Fail;
1727 n = PyLong_AsLong(tmp3);
1728 if (PyErr_Occurred()) { /* Check for Overflow */
1729 PyErr_Clear();
1730 goto Fail;
1733 Py_DECREF(tmp3);
1734 Py_DECREF(tmp2);
1735 Py_DECREF(diff);
1736 Py_DECREF(tmp1);
1737 Py_DECREF(one);
1738 return n;
1740 Fail:
1741 Py_XDECREF(tmp3);
1742 Py_XDECREF(tmp2);
1743 Py_XDECREF(diff);
1744 Py_XDECREF(tmp1);
1745 Py_XDECREF(one);
1746 return -1;
1749 /* An extension of builtin_range() that handles the case when PyLong
1750 * arguments are given. */
1751 static PyObject *
1752 handle_range_longs(PyObject *self, PyObject *args)
1754 PyObject *ilow;
1755 PyObject *ihigh = NULL;
1756 PyObject *istep = NULL;
1758 PyObject *curnum = NULL;
1759 PyObject *v = NULL;
1760 long bign;
1761 Py_ssize_t i, n;
1762 int cmp_result;
1764 PyObject *zero = PyLong_FromLong(0);
1766 if (zero == NULL)
1767 return NULL;
1769 if (!PyArg_UnpackTuple(args, "range", 1, 3, &ilow, &ihigh, &istep)) {
1770 Py_DECREF(zero);
1771 return NULL;
1774 /* Figure out which way we were called, supply defaults, and be
1775 * sure to incref everything so that the decrefs at the end
1776 * are correct.
1778 assert(ilow != NULL);
1779 if (ihigh == NULL) {
1780 /* only 1 arg -- it's the upper limit */
1781 ihigh = ilow;
1782 ilow = NULL;
1784 assert(ihigh != NULL);
1785 Py_INCREF(ihigh);
1787 /* ihigh correct now; do ilow */
1788 if (ilow == NULL)
1789 ilow = zero;
1790 Py_INCREF(ilow);
1792 /* ilow and ihigh correct now; do istep */
1793 if (istep == NULL) {
1794 istep = PyLong_FromLong(1L);
1795 if (istep == NULL)
1796 goto Fail;
1798 else {
1799 Py_INCREF(istep);
1802 if (!PyInt_Check(ilow) && !PyLong_Check(ilow)) {
1803 PyErr_Format(PyExc_TypeError,
1804 "range() integer start argument expected, got %s.",
1805 ilow->ob_type->tp_name);
1806 goto Fail;
1809 if (!PyInt_Check(ihigh) && !PyLong_Check(ihigh)) {
1810 PyErr_Format(PyExc_TypeError,
1811 "range() integer end argument expected, got %s.",
1812 ihigh->ob_type->tp_name);
1813 goto Fail;
1816 if (!PyInt_Check(istep) && !PyLong_Check(istep)) {
1817 PyErr_Format(PyExc_TypeError,
1818 "range() integer step argument expected, got %s.",
1819 istep->ob_type->tp_name);
1820 goto Fail;
1823 if (PyObject_Cmp(istep, zero, &cmp_result) == -1)
1824 goto Fail;
1825 if (cmp_result == 0) {
1826 PyErr_SetString(PyExc_ValueError,
1827 "range() step argument must not be zero");
1828 goto Fail;
1831 if (cmp_result > 0)
1832 bign = get_len_of_range_longs(ilow, ihigh, istep);
1833 else {
1834 PyObject *neg_istep = PyNumber_Negative(istep);
1835 if (neg_istep == NULL)
1836 goto Fail;
1837 bign = get_len_of_range_longs(ihigh, ilow, neg_istep);
1838 Py_DECREF(neg_istep);
1841 n = (Py_ssize_t)bign;
1842 if (bign < 0 || (long)n != bign) {
1843 PyErr_SetString(PyExc_OverflowError,
1844 "range() result has too many items");
1845 goto Fail;
1848 v = PyList_New(n);
1849 if (v == NULL)
1850 goto Fail;
1852 curnum = ilow;
1853 Py_INCREF(curnum);
1855 for (i = 0; i < n; i++) {
1856 PyObject *w = PyNumber_Long(curnum);
1857 PyObject *tmp_num;
1858 if (w == NULL)
1859 goto Fail;
1861 PyList_SET_ITEM(v, i, w);
1863 tmp_num = PyNumber_Add(curnum, istep);
1864 if (tmp_num == NULL)
1865 goto Fail;
1867 Py_DECREF(curnum);
1868 curnum = tmp_num;
1870 Py_DECREF(ilow);
1871 Py_DECREF(ihigh);
1872 Py_DECREF(istep);
1873 Py_DECREF(zero);
1874 Py_DECREF(curnum);
1875 return v;
1877 Fail:
1878 Py_DECREF(ilow);
1879 Py_DECREF(ihigh);
1880 Py_XDECREF(istep);
1881 Py_DECREF(zero);
1882 Py_XDECREF(curnum);
1883 Py_XDECREF(v);
1884 return NULL;
1887 /* Return number of items in range/xrange (lo, hi, step). step > 0
1888 * required. Return a value < 0 if & only if the true value is too
1889 * large to fit in a signed long.
1891 static long
1892 get_len_of_range(long lo, long hi, long step)
1894 /* -------------------------------------------------------------
1895 If lo >= hi, the range is empty.
1896 Else if n values are in the range, the last one is
1897 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1898 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1899 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1900 the RHS is non-negative and so truncation is the same as the
1901 floor. Letting M be the largest positive long, the worst case
1902 for the RHS numerator is hi=M, lo=-M-1, and then
1903 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1904 precision to compute the RHS exactly.
1905 ---------------------------------------------------------------*/
1906 long n = 0;
1907 if (lo < hi) {
1908 unsigned long uhi = (unsigned long)hi;
1909 unsigned long ulo = (unsigned long)lo;
1910 unsigned long diff = uhi - ulo - 1;
1911 n = (long)(diff / (unsigned long)step + 1);
1913 return n;
1916 static PyObject *
1917 builtin_range(PyObject *self, PyObject *args)
1919 long ilow = 0, ihigh = 0, istep = 1;
1920 long bign;
1921 Py_ssize_t i, n;
1923 PyObject *v;
1925 if (PyTuple_Size(args) <= 1) {
1926 if (!PyArg_ParseTuple(args,
1927 "l;range() requires 1-3 int arguments",
1928 &ihigh)) {
1929 PyErr_Clear();
1930 return handle_range_longs(self, args);
1933 else {
1934 if (!PyArg_ParseTuple(args,
1935 "ll|l;range() requires 1-3 int arguments",
1936 &ilow, &ihigh, &istep)) {
1937 PyErr_Clear();
1938 return handle_range_longs(self, args);
1941 if (istep == 0) {
1942 PyErr_SetString(PyExc_ValueError,
1943 "range() step argument must not be zero");
1944 return NULL;
1946 if (istep > 0)
1947 bign = get_len_of_range(ilow, ihigh, istep);
1948 else
1949 bign = get_len_of_range(ihigh, ilow, -istep);
1950 n = (Py_ssize_t)bign;
1951 if (bign < 0 || (long)n != bign) {
1952 PyErr_SetString(PyExc_OverflowError,
1953 "range() result has too many items");
1954 return NULL;
1956 v = PyList_New(n);
1957 if (v == NULL)
1958 return NULL;
1959 for (i = 0; i < n; i++) {
1960 PyObject *w = PyInt_FromLong(ilow);
1961 if (w == NULL) {
1962 Py_DECREF(v);
1963 return NULL;
1965 PyList_SET_ITEM(v, i, w);
1966 ilow += istep;
1968 return v;
1971 PyDoc_STRVAR(range_doc,
1972 "range([start,] stop[, step]) -> list of integers\n\
1974 Return a list containing an arithmetic progression of integers.\n\
1975 range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1976 When step is given, it specifies the increment (or decrement).\n\
1977 For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
1978 These are exactly the valid indices for a list of 4 elements.");
1981 static PyObject *
1982 builtin_raw_input(PyObject *self, PyObject *args)
1984 PyObject *v = NULL;
1985 PyObject *fin = PySys_GetObject("stdin");
1986 PyObject *fout = PySys_GetObject("stdout");
1988 if (!PyArg_UnpackTuple(args, "[raw_]input", 0, 1, &v))
1989 return NULL;
1991 if (fin == NULL) {
1992 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdin");
1993 return NULL;
1995 if (fout == NULL) {
1996 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdout");
1997 return NULL;
1999 if (PyFile_SoftSpace(fout, 0)) {
2000 if (PyFile_WriteString(" ", fout) != 0)
2001 return NULL;
2003 if (PyFile_AsFile(fin) && PyFile_AsFile(fout)
2004 && isatty(fileno(PyFile_AsFile(fin)))
2005 && isatty(fileno(PyFile_AsFile(fout)))) {
2006 PyObject *po;
2007 char *prompt;
2008 char *s;
2009 PyObject *result;
2010 if (v != NULL) {
2011 po = PyObject_Str(v);
2012 if (po == NULL)
2013 return NULL;
2014 prompt = PyString_AsString(po);
2015 if (prompt == NULL)
2016 return NULL;
2018 else {
2019 po = NULL;
2020 prompt = "";
2022 s = PyOS_Readline(PyFile_AsFile(fin), PyFile_AsFile(fout),
2023 prompt);
2024 Py_XDECREF(po);
2025 if (s == NULL) {
2026 if (!PyErr_Occurred())
2027 PyErr_SetNone(PyExc_KeyboardInterrupt);
2028 return NULL;
2030 if (*s == '\0') {
2031 PyErr_SetNone(PyExc_EOFError);
2032 result = NULL;
2034 else { /* strip trailing '\n' */
2035 size_t len = strlen(s);
2036 if (len > PY_SSIZE_T_MAX) {
2037 PyErr_SetString(PyExc_OverflowError,
2038 "[raw_]input: input too long");
2039 result = NULL;
2041 else {
2042 result = PyString_FromStringAndSize(s, len-1);
2045 PyMem_FREE(s);
2046 return result;
2048 if (v != NULL) {
2049 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
2050 return NULL;
2052 return PyFile_GetLine(fin, -1);
2055 PyDoc_STRVAR(raw_input_doc,
2056 "raw_input([prompt]) -> string\n\
2058 Read a string from standard input. The trailing newline is stripped.\n\
2059 If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
2060 On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
2061 is printed without a trailing newline before reading.");
2064 static PyObject *
2065 builtin_reduce(PyObject *self, PyObject *args)
2067 static PyObject *functools_reduce = NULL;
2069 if (PyErr_WarnPy3k("reduce() not supported in 3.x; "
2070 "use functools.reduce()", 1) < 0)
2071 return NULL;
2073 if (functools_reduce == NULL) {
2074 PyObject *functools = PyImport_ImportModule("functools");
2075 if (functools == NULL)
2076 return NULL;
2077 functools_reduce = PyObject_GetAttrString(functools, "reduce");
2078 Py_DECREF(functools);
2079 if (functools_reduce == NULL)
2080 return NULL;
2082 return PyObject_Call(functools_reduce, args, NULL);
2085 PyDoc_STRVAR(reduce_doc,
2086 "reduce(function, sequence[, initial]) -> value\n\
2088 Apply a function of two arguments cumulatively to the items of a sequence,\n\
2089 from left to right, so as to reduce the sequence to a single value.\n\
2090 For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
2091 ((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
2092 of the sequence in the calculation, and serves as a default when the\n\
2093 sequence is empty.");
2096 static PyObject *
2097 builtin_reload(PyObject *self, PyObject *v)
2099 if (PyErr_WarnPy3k("In 3.x, reload() is renamed to imp.reload()",
2100 1) < 0)
2101 return NULL;
2103 return PyImport_ReloadModule(v);
2106 PyDoc_STRVAR(reload_doc,
2107 "reload(module) -> module\n\
2109 Reload the module. The module must have been successfully imported before.");
2112 static PyObject *
2113 builtin_repr(PyObject *self, PyObject *v)
2115 return PyObject_Repr(v);
2118 PyDoc_STRVAR(repr_doc,
2119 "repr(object) -> string\n\
2121 Return the canonical string representation of the object.\n\
2122 For most object types, eval(repr(object)) == object.");
2125 static PyObject *
2126 builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
2128 double x;
2129 PyObject *o_ndigits = NULL;
2130 Py_ssize_t ndigits;
2131 static char *kwlist[] = {"number", "ndigits", 0};
2133 if (!PyArg_ParseTupleAndKeywords(args, kwds, "d|O:round",
2134 kwlist, &x, &o_ndigits))
2135 return NULL;
2137 if (o_ndigits == NULL) {
2138 /* second argument defaults to 0 */
2139 ndigits = 0;
2141 else {
2142 /* interpret 2nd argument as a Py_ssize_t; clip on overflow */
2143 ndigits = PyNumber_AsSsize_t(o_ndigits, NULL);
2144 if (ndigits == -1 && PyErr_Occurred())
2145 return NULL;
2148 /* nans, infinities and zeros round to themselves */
2149 if (!Py_IS_FINITE(x) || x == 0.0)
2150 return PyFloat_FromDouble(x);
2152 /* Deal with extreme values for ndigits. For ndigits > NDIGITS_MAX, x
2153 always rounds to itself. For ndigits < NDIGITS_MIN, x always
2154 rounds to +-0.0. Here 0.30103 is an upper bound for log10(2). */
2155 #define NDIGITS_MAX ((int)((DBL_MANT_DIG-DBL_MIN_EXP) * 0.30103))
2156 #define NDIGITS_MIN (-(int)((DBL_MAX_EXP + 1) * 0.30103))
2157 if (ndigits > NDIGITS_MAX)
2158 /* return x */
2159 return PyFloat_FromDouble(x);
2160 else if (ndigits < NDIGITS_MIN)
2161 /* return 0.0, but with sign of x */
2162 return PyFloat_FromDouble(0.0*x);
2163 else
2164 /* finite x, and ndigits is not unreasonably large */
2165 /* _Py_double_round is defined in floatobject.c */
2166 return _Py_double_round(x, (int)ndigits);
2167 #undef NDIGITS_MAX
2168 #undef NDIGITS_MIN
2171 PyDoc_STRVAR(round_doc,
2172 "round(number[, ndigits]) -> floating point number\n\
2174 Round a number to a given precision in decimal digits (default 0 digits).\n\
2175 This always returns a floating point number. Precision may be negative.");
2177 static PyObject *
2178 builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
2180 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
2181 PyObject *callable;
2182 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
2183 int reverse;
2185 /* args 1-4 should match listsort in Objects/listobject.c */
2186 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
2187 kwlist, &seq, &compare, &keyfunc, &reverse))
2188 return NULL;
2190 newlist = PySequence_List(seq);
2191 if (newlist == NULL)
2192 return NULL;
2194 callable = PyObject_GetAttrString(newlist, "sort");
2195 if (callable == NULL) {
2196 Py_DECREF(newlist);
2197 return NULL;
2200 newargs = PyTuple_GetSlice(args, 1, 4);
2201 if (newargs == NULL) {
2202 Py_DECREF(newlist);
2203 Py_DECREF(callable);
2204 return NULL;
2207 v = PyObject_Call(callable, newargs, kwds);
2208 Py_DECREF(newargs);
2209 Py_DECREF(callable);
2210 if (v == NULL) {
2211 Py_DECREF(newlist);
2212 return NULL;
2214 Py_DECREF(v);
2215 return newlist;
2218 PyDoc_STRVAR(sorted_doc,
2219 "sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
2221 static PyObject *
2222 builtin_vars(PyObject *self, PyObject *args)
2224 PyObject *v = NULL;
2225 PyObject *d;
2227 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
2228 return NULL;
2229 if (v == NULL) {
2230 d = PyEval_GetLocals();
2231 if (d == NULL) {
2232 if (!PyErr_Occurred())
2233 PyErr_SetString(PyExc_SystemError,
2234 "vars(): no locals!?");
2236 else
2237 Py_INCREF(d);
2239 else {
2240 d = PyObject_GetAttrString(v, "__dict__");
2241 if (d == NULL) {
2242 PyErr_SetString(PyExc_TypeError,
2243 "vars() argument must have __dict__ attribute");
2244 return NULL;
2247 return d;
2250 PyDoc_STRVAR(vars_doc,
2251 "vars([object]) -> dictionary\n\
2253 Without arguments, equivalent to locals().\n\
2254 With an argument, equivalent to object.__dict__.");
2257 static PyObject*
2258 builtin_sum(PyObject *self, PyObject *args)
2260 PyObject *seq;
2261 PyObject *result = NULL;
2262 PyObject *temp, *item, *iter;
2264 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
2265 return NULL;
2267 iter = PyObject_GetIter(seq);
2268 if (iter == NULL)
2269 return NULL;
2271 if (result == NULL) {
2272 result = PyInt_FromLong(0);
2273 if (result == NULL) {
2274 Py_DECREF(iter);
2275 return NULL;
2277 } else {
2278 /* reject string values for 'start' parameter */
2279 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
2280 PyErr_SetString(PyExc_TypeError,
2281 "sum() can't sum strings [use ''.join(seq) instead]");
2282 Py_DECREF(iter);
2283 return NULL;
2285 Py_INCREF(result);
2288 #ifndef SLOW_SUM
2289 /* Fast addition by keeping temporary sums in C instead of new Python objects.
2290 Assumes all inputs are the same type. If the assumption fails, default
2291 to the more general routine.
2293 if (PyInt_CheckExact(result)) {
2294 long i_result = PyInt_AS_LONG(result);
2295 Py_DECREF(result);
2296 result = NULL;
2297 while(result == NULL) {
2298 item = PyIter_Next(iter);
2299 if (item == NULL) {
2300 Py_DECREF(iter);
2301 if (PyErr_Occurred())
2302 return NULL;
2303 return PyInt_FromLong(i_result);
2305 if (PyInt_CheckExact(item)) {
2306 long b = PyInt_AS_LONG(item);
2307 long x = i_result + b;
2308 if ((x^i_result) >= 0 || (x^b) >= 0) {
2309 i_result = x;
2310 Py_DECREF(item);
2311 continue;
2314 /* Either overflowed or is not an int. Restore real objects and process normally */
2315 result = PyInt_FromLong(i_result);
2316 temp = PyNumber_Add(result, item);
2317 Py_DECREF(result);
2318 Py_DECREF(item);
2319 result = temp;
2320 if (result == NULL) {
2321 Py_DECREF(iter);
2322 return NULL;
2327 if (PyFloat_CheckExact(result)) {
2328 double f_result = PyFloat_AS_DOUBLE(result);
2329 Py_DECREF(result);
2330 result = NULL;
2331 while(result == NULL) {
2332 item = PyIter_Next(iter);
2333 if (item == NULL) {
2334 Py_DECREF(iter);
2335 if (PyErr_Occurred())
2336 return NULL;
2337 return PyFloat_FromDouble(f_result);
2339 if (PyFloat_CheckExact(item)) {
2340 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2341 f_result += PyFloat_AS_DOUBLE(item);
2342 PyFPE_END_PROTECT(f_result)
2343 Py_DECREF(item);
2344 continue;
2346 if (PyInt_CheckExact(item)) {
2347 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2348 f_result += (double)PyInt_AS_LONG(item);
2349 PyFPE_END_PROTECT(f_result)
2350 Py_DECREF(item);
2351 continue;
2353 result = PyFloat_FromDouble(f_result);
2354 temp = PyNumber_Add(result, item);
2355 Py_DECREF(result);
2356 Py_DECREF(item);
2357 result = temp;
2358 if (result == NULL) {
2359 Py_DECREF(iter);
2360 return NULL;
2364 #endif
2366 for(;;) {
2367 item = PyIter_Next(iter);
2368 if (item == NULL) {
2369 /* error, or end-of-sequence */
2370 if (PyErr_Occurred()) {
2371 Py_DECREF(result);
2372 result = NULL;
2374 break;
2376 /* It's tempting to use PyNumber_InPlaceAdd instead of
2377 PyNumber_Add here, to avoid quadratic running time
2378 when doing 'sum(list_of_lists, [])'. However, this
2379 would produce a change in behaviour: a snippet like
2381 empty = []
2382 sum([[x] for x in range(10)], empty)
2384 would change the value of empty. */
2385 temp = PyNumber_Add(result, item);
2386 Py_DECREF(result);
2387 Py_DECREF(item);
2388 result = temp;
2389 if (result == NULL)
2390 break;
2392 Py_DECREF(iter);
2393 return result;
2396 PyDoc_STRVAR(sum_doc,
2397 "sum(sequence[, start]) -> value\n\
2399 Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
2400 of parameter 'start' (which defaults to 0). When the sequence is\n\
2401 empty, returns start.");
2404 static PyObject *
2405 builtin_isinstance(PyObject *self, PyObject *args)
2407 PyObject *inst;
2408 PyObject *cls;
2409 int retval;
2411 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
2412 return NULL;
2414 retval = PyObject_IsInstance(inst, cls);
2415 if (retval < 0)
2416 return NULL;
2417 return PyBool_FromLong(retval);
2420 PyDoc_STRVAR(isinstance_doc,
2421 "isinstance(object, class-or-type-or-tuple) -> bool\n\
2423 Return whether an object is an instance of a class or of a subclass thereof.\n\
2424 With a type as second argument, return whether that is the object's type.\n\
2425 The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
2426 isinstance(x, A) or isinstance(x, B) or ... (etc.).");
2429 static PyObject *
2430 builtin_issubclass(PyObject *self, PyObject *args)
2432 PyObject *derived;
2433 PyObject *cls;
2434 int retval;
2436 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
2437 return NULL;
2439 retval = PyObject_IsSubclass(derived, cls);
2440 if (retval < 0)
2441 return NULL;
2442 return PyBool_FromLong(retval);
2445 PyDoc_STRVAR(issubclass_doc,
2446 "issubclass(C, B) -> bool\n\
2448 Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2449 When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2450 is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
2453 static PyObject*
2454 builtin_zip(PyObject *self, PyObject *args)
2456 PyObject *ret;
2457 const Py_ssize_t itemsize = PySequence_Length(args);
2458 Py_ssize_t i;
2459 PyObject *itlist; /* tuple of iterators */
2460 Py_ssize_t len; /* guess at result length */
2462 if (itemsize == 0)
2463 return PyList_New(0);
2465 /* args must be a tuple */
2466 assert(PyTuple_Check(args));
2468 /* Guess at result length: the shortest of the input lengths.
2469 If some argument refuses to say, we refuse to guess too, lest
2470 an argument like xrange(sys.maxint) lead us astray.*/
2471 len = -1; /* unknown */
2472 for (i = 0; i < itemsize; ++i) {
2473 PyObject *item = PyTuple_GET_ITEM(args, i);
2474 Py_ssize_t thislen = _PyObject_LengthHint(item, -2);
2475 if (thislen < 0) {
2476 if (thislen == -1)
2477 return NULL;
2478 len = -1;
2479 break;
2481 else if (len < 0 || thislen < len)
2482 len = thislen;
2485 /* allocate result list */
2486 if (len < 0)
2487 len = 10; /* arbitrary */
2488 if ((ret = PyList_New(len)) == NULL)
2489 return NULL;
2491 /* obtain iterators */
2492 itlist = PyTuple_New(itemsize);
2493 if (itlist == NULL)
2494 goto Fail_ret;
2495 for (i = 0; i < itemsize; ++i) {
2496 PyObject *item = PyTuple_GET_ITEM(args, i);
2497 PyObject *it = PyObject_GetIter(item);
2498 if (it == NULL) {
2499 if (PyErr_ExceptionMatches(PyExc_TypeError))
2500 PyErr_Format(PyExc_TypeError,
2501 "zip argument #%zd must support iteration",
2502 i+1);
2503 goto Fail_ret_itlist;
2505 PyTuple_SET_ITEM(itlist, i, it);
2508 /* build result into ret list */
2509 for (i = 0; ; ++i) {
2510 int j;
2511 PyObject *next = PyTuple_New(itemsize);
2512 if (!next)
2513 goto Fail_ret_itlist;
2515 for (j = 0; j < itemsize; j++) {
2516 PyObject *it = PyTuple_GET_ITEM(itlist, j);
2517 PyObject *item = PyIter_Next(it);
2518 if (!item) {
2519 if (PyErr_Occurred()) {
2520 Py_DECREF(ret);
2521 ret = NULL;
2523 Py_DECREF(next);
2524 Py_DECREF(itlist);
2525 goto Done;
2527 PyTuple_SET_ITEM(next, j, item);
2530 if (i < len)
2531 PyList_SET_ITEM(ret, i, next);
2532 else {
2533 int status = PyList_Append(ret, next);
2534 Py_DECREF(next);
2535 ++len;
2536 if (status < 0)
2537 goto Fail_ret_itlist;
2541 Done:
2542 if (ret != NULL && i < len) {
2543 /* The list is too big. */
2544 if (PyList_SetSlice(ret, i, len, NULL) < 0)
2545 return NULL;
2547 return ret;
2549 Fail_ret_itlist:
2550 Py_DECREF(itlist);
2551 Fail_ret:
2552 Py_DECREF(ret);
2553 return NULL;
2557 PyDoc_STRVAR(zip_doc,
2558 "zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
2560 Return a list of tuples, where each tuple contains the i-th element\n\
2561 from each of the argument sequences. The returned list is truncated\n\
2562 in length to the length of the shortest argument sequence.");
2565 static PyMethodDef builtin_methods[] = {
2566 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
2567 {"abs", builtin_abs, METH_O, abs_doc},
2568 {"all", builtin_all, METH_O, all_doc},
2569 {"any", builtin_any, METH_O, any_doc},
2570 {"apply", builtin_apply, METH_VARARGS, apply_doc},
2571 {"bin", builtin_bin, METH_O, bin_doc},
2572 {"callable", builtin_callable, METH_O, callable_doc},
2573 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2574 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
2575 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
2576 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
2577 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2578 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2579 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2580 {"eval", builtin_eval, METH_VARARGS, eval_doc},
2581 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
2582 {"filter", builtin_filter, METH_VARARGS, filter_doc},
2583 {"format", builtin_format, METH_VARARGS, format_doc},
2584 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2585 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2586 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2587 {"hash", builtin_hash, METH_O, hash_doc},
2588 {"hex", builtin_hex, METH_O, hex_doc},
2589 {"id", builtin_id, METH_O, id_doc},
2590 {"input", builtin_input, METH_VARARGS, input_doc},
2591 {"intern", builtin_intern, METH_VARARGS, intern_doc},
2592 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2593 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2594 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2595 {"len", builtin_len, METH_O, len_doc},
2596 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2597 {"map", builtin_map, METH_VARARGS, map_doc},
2598 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2599 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
2600 {"next", builtin_next, METH_VARARGS, next_doc},
2601 {"oct", builtin_oct, METH_O, oct_doc},
2602 {"open", (PyCFunction)builtin_open, METH_VARARGS | METH_KEYWORDS, open_doc},
2603 {"ord", builtin_ord, METH_O, ord_doc},
2604 {"pow", builtin_pow, METH_VARARGS, pow_doc},
2605 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
2606 {"range", builtin_range, METH_VARARGS, range_doc},
2607 {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc},
2608 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
2609 {"reload", builtin_reload, METH_O, reload_doc},
2610 {"repr", builtin_repr, METH_O, repr_doc},
2611 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
2612 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
2613 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
2614 {"sum", builtin_sum, METH_VARARGS, sum_doc},
2615 #ifdef Py_USING_UNICODE
2616 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
2617 #endif
2618 {"vars", builtin_vars, METH_VARARGS, vars_doc},
2619 {"zip", builtin_zip, METH_VARARGS, zip_doc},
2620 {NULL, NULL},
2623 PyDoc_STRVAR(builtin_doc,
2624 "Built-in functions, exceptions, and other objects.\n\
2626 Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
2628 PyObject *
2629 _PyBuiltin_Init(void)
2631 PyObject *mod, *dict, *debug;
2632 mod = Py_InitModule4("__builtin__", builtin_methods,
2633 builtin_doc, (PyObject *)NULL,
2634 PYTHON_API_VERSION);
2635 if (mod == NULL)
2636 return NULL;
2637 dict = PyModule_GetDict(mod);
2639 #ifdef Py_TRACE_REFS
2640 /* __builtin__ exposes a number of statically allocated objects
2641 * that, before this code was added in 2.3, never showed up in
2642 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2643 * result, programs leaking references to None and False (etc)
2644 * couldn't be diagnosed by examining sys.getobjects(0).
2646 #define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2647 #else
2648 #define ADD_TO_ALL(OBJECT) (void)0
2649 #endif
2651 #define SETBUILTIN(NAME, OBJECT) \
2652 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2653 return NULL; \
2654 ADD_TO_ALL(OBJECT)
2656 SETBUILTIN("None", Py_None);
2657 SETBUILTIN("Ellipsis", Py_Ellipsis);
2658 SETBUILTIN("NotImplemented", Py_NotImplemented);
2659 SETBUILTIN("False", Py_False);
2660 SETBUILTIN("True", Py_True);
2661 SETBUILTIN("basestring", &PyBaseString_Type);
2662 SETBUILTIN("bool", &PyBool_Type);
2663 SETBUILTIN("memoryview", &PyMemoryView_Type);
2664 SETBUILTIN("bytearray", &PyByteArray_Type);
2665 SETBUILTIN("bytes", &PyString_Type);
2666 SETBUILTIN("buffer", &PyBuffer_Type);
2667 SETBUILTIN("classmethod", &PyClassMethod_Type);
2668 #ifndef WITHOUT_COMPLEX
2669 SETBUILTIN("complex", &PyComplex_Type);
2670 #endif
2671 SETBUILTIN("dict", &PyDict_Type);
2672 SETBUILTIN("enumerate", &PyEnum_Type);
2673 SETBUILTIN("file", &PyFile_Type);
2674 SETBUILTIN("float", &PyFloat_Type);
2675 SETBUILTIN("frozenset", &PyFrozenSet_Type);
2676 SETBUILTIN("property", &PyProperty_Type);
2677 SETBUILTIN("int", &PyInt_Type);
2678 SETBUILTIN("list", &PyList_Type);
2679 SETBUILTIN("long", &PyLong_Type);
2680 SETBUILTIN("object", &PyBaseObject_Type);
2681 SETBUILTIN("reversed", &PyReversed_Type);
2682 SETBUILTIN("set", &PySet_Type);
2683 SETBUILTIN("slice", &PySlice_Type);
2684 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2685 SETBUILTIN("str", &PyString_Type);
2686 SETBUILTIN("super", &PySuper_Type);
2687 SETBUILTIN("tuple", &PyTuple_Type);
2688 SETBUILTIN("type", &PyType_Type);
2689 SETBUILTIN("xrange", &PyRange_Type);
2690 #ifdef Py_USING_UNICODE
2691 SETBUILTIN("unicode", &PyUnicode_Type);
2692 #endif
2693 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
2694 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2695 Py_XDECREF(debug);
2696 return NULL;
2698 Py_XDECREF(debug);
2700 return mod;
2701 #undef ADD_TO_ALL
2702 #undef SETBUILTIN
2705 /* Helper for filter(): filter a tuple through a function */
2707 static PyObject *
2708 filtertuple(PyObject *func, PyObject *tuple)
2710 PyObject *result;
2711 Py_ssize_t i, j;
2712 Py_ssize_t len = PyTuple_Size(tuple);
2714 if (len == 0) {
2715 if (PyTuple_CheckExact(tuple))
2716 Py_INCREF(tuple);
2717 else
2718 tuple = PyTuple_New(0);
2719 return tuple;
2722 if ((result = PyTuple_New(len)) == NULL)
2723 return NULL;
2725 for (i = j = 0; i < len; ++i) {
2726 PyObject *item, *good;
2727 int ok;
2729 if (tuple->ob_type->tp_as_sequence &&
2730 tuple->ob_type->tp_as_sequence->sq_item) {
2731 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
2732 if (item == NULL)
2733 goto Fail_1;
2734 } else {
2735 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
2736 goto Fail_1;
2738 if (func == Py_None) {
2739 Py_INCREF(item);
2740 good = item;
2742 else {
2743 PyObject *arg = PyTuple_Pack(1, item);
2744 if (arg == NULL) {
2745 Py_DECREF(item);
2746 goto Fail_1;
2748 good = PyEval_CallObject(func, arg);
2749 Py_DECREF(arg);
2750 if (good == NULL) {
2751 Py_DECREF(item);
2752 goto Fail_1;
2755 ok = PyObject_IsTrue(good);
2756 Py_DECREF(good);
2757 if (ok) {
2758 if (PyTuple_SetItem(result, j++, item) < 0)
2759 goto Fail_1;
2761 else
2762 Py_DECREF(item);
2765 if (_PyTuple_Resize(&result, j) < 0)
2766 return NULL;
2768 return result;
2770 Fail_1:
2771 Py_DECREF(result);
2772 return NULL;
2776 /* Helper for filter(): filter a string through a function */
2778 static PyObject *
2779 filterstring(PyObject *func, PyObject *strobj)
2781 PyObject *result;
2782 Py_ssize_t i, j;
2783 Py_ssize_t len = PyString_Size(strobj);
2784 Py_ssize_t outlen = len;
2786 if (func == Py_None) {
2787 /* If it's a real string we can return the original,
2788 * as no character is ever false and __getitem__
2789 * does return this character. If it's a subclass
2790 * we must go through the __getitem__ loop */
2791 if (PyString_CheckExact(strobj)) {
2792 Py_INCREF(strobj);
2793 return strobj;
2796 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
2797 return NULL;
2799 for (i = j = 0; i < len; ++i) {
2800 PyObject *item;
2801 int ok;
2803 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2804 if (item == NULL)
2805 goto Fail_1;
2806 if (func==Py_None) {
2807 ok = 1;
2808 } else {
2809 PyObject *arg, *good;
2810 arg = PyTuple_Pack(1, item);
2811 if (arg == NULL) {
2812 Py_DECREF(item);
2813 goto Fail_1;
2815 good = PyEval_CallObject(func, arg);
2816 Py_DECREF(arg);
2817 if (good == NULL) {
2818 Py_DECREF(item);
2819 goto Fail_1;
2821 ok = PyObject_IsTrue(good);
2822 Py_DECREF(good);
2824 if (ok) {
2825 Py_ssize_t reslen;
2826 if (!PyString_Check(item)) {
2827 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2828 " __getitem__ returned different type");
2829 Py_DECREF(item);
2830 goto Fail_1;
2832 reslen = PyString_GET_SIZE(item);
2833 if (reslen == 1) {
2834 PyString_AS_STRING(result)[j++] =
2835 PyString_AS_STRING(item)[0];
2836 } else {
2837 /* do we need more space? */
2838 Py_ssize_t need = j;
2840 /* calculate space requirements while checking for overflow */
2841 if (need > PY_SSIZE_T_MAX - reslen) {
2842 Py_DECREF(item);
2843 goto Fail_1;
2846 need += reslen;
2848 if (need > PY_SSIZE_T_MAX - len) {
2849 Py_DECREF(item);
2850 goto Fail_1;
2853 need += len;
2855 if (need <= i) {
2856 Py_DECREF(item);
2857 goto Fail_1;
2860 need = need - i - 1;
2862 assert(need >= 0);
2863 assert(outlen >= 0);
2865 if (need > outlen) {
2866 /* overallocate, to avoid reallocations */
2867 if (outlen > PY_SSIZE_T_MAX / 2) {
2868 Py_DECREF(item);
2869 return NULL;
2872 if (need<2*outlen) {
2873 need = 2*outlen;
2875 if (_PyString_Resize(&result, need)) {
2876 Py_DECREF(item);
2877 return NULL;
2879 outlen = need;
2881 memcpy(
2882 PyString_AS_STRING(result) + j,
2883 PyString_AS_STRING(item),
2884 reslen
2886 j += reslen;
2889 Py_DECREF(item);
2892 if (j < outlen)
2893 _PyString_Resize(&result, j);
2895 return result;
2897 Fail_1:
2898 Py_DECREF(result);
2899 return NULL;
2902 #ifdef Py_USING_UNICODE
2903 /* Helper for filter(): filter a Unicode object through a function */
2905 static PyObject *
2906 filterunicode(PyObject *func, PyObject *strobj)
2908 PyObject *result;
2909 register Py_ssize_t i, j;
2910 Py_ssize_t len = PyUnicode_GetSize(strobj);
2911 Py_ssize_t outlen = len;
2913 if (func == Py_None) {
2914 /* If it's a real string we can return the original,
2915 * as no character is ever false and __getitem__
2916 * does return this character. If it's a subclass
2917 * we must go through the __getitem__ loop */
2918 if (PyUnicode_CheckExact(strobj)) {
2919 Py_INCREF(strobj);
2920 return strobj;
2923 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2924 return NULL;
2926 for (i = j = 0; i < len; ++i) {
2927 PyObject *item, *arg, *good;
2928 int ok;
2930 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2931 if (item == NULL)
2932 goto Fail_1;
2933 if (func == Py_None) {
2934 ok = 1;
2935 } else {
2936 arg = PyTuple_Pack(1, item);
2937 if (arg == NULL) {
2938 Py_DECREF(item);
2939 goto Fail_1;
2941 good = PyEval_CallObject(func, arg);
2942 Py_DECREF(arg);
2943 if (good == NULL) {
2944 Py_DECREF(item);
2945 goto Fail_1;
2947 ok = PyObject_IsTrue(good);
2948 Py_DECREF(good);
2950 if (ok) {
2951 Py_ssize_t reslen;
2952 if (!PyUnicode_Check(item)) {
2953 PyErr_SetString(PyExc_TypeError,
2954 "can't filter unicode to unicode:"
2955 " __getitem__ returned different type");
2956 Py_DECREF(item);
2957 goto Fail_1;
2959 reslen = PyUnicode_GET_SIZE(item);
2960 if (reslen == 1)
2961 PyUnicode_AS_UNICODE(result)[j++] =
2962 PyUnicode_AS_UNICODE(item)[0];
2963 else {
2964 /* do we need more space? */
2965 Py_ssize_t need = j + reslen + len - i - 1;
2967 /* check that didnt overflow */
2968 if ((j > PY_SSIZE_T_MAX - reslen) ||
2969 ((j + reslen) > PY_SSIZE_T_MAX - len) ||
2970 ((j + reslen + len) < i) ||
2971 ((j + reslen + len - i) <= 0)) {
2972 Py_DECREF(item);
2973 return NULL;
2976 assert(need >= 0);
2977 assert(outlen >= 0);
2979 if (need > outlen) {
2980 /* overallocate,
2981 to avoid reallocations */
2982 if (need < 2 * outlen) {
2983 if (outlen > PY_SSIZE_T_MAX / 2) {
2984 Py_DECREF(item);
2985 return NULL;
2986 } else {
2987 need = 2 * outlen;
2991 if (PyUnicode_Resize(
2992 &result, need) < 0) {
2993 Py_DECREF(item);
2994 goto Fail_1;
2996 outlen = need;
2998 memcpy(PyUnicode_AS_UNICODE(result) + j,
2999 PyUnicode_AS_UNICODE(item),
3000 reslen*sizeof(Py_UNICODE));
3001 j += reslen;
3004 Py_DECREF(item);
3007 if (j < outlen)
3008 PyUnicode_Resize(&result, j);
3010 return result;
3012 Fail_1:
3013 Py_DECREF(result);
3014 return NULL;
3016 #endif