source: python/vendor/current/Python/bltinmodule.c

Last change on this file was 388, checked in by dmik, 11 years ago

python: Update vendor to 2.7.6.

  • Property svn:eol-style set to native
File size: 87.0 KB
Line 
1/* Built-in functions */
2
3#include "Python.h"
4#include "Python-ast.h"
5
6#include "node.h"
7#include "code.h"
8#include "eval.h"
9
10#include <ctype.h>
11#include <float.h> /* for DBL_MANT_DIG and friends */
12
13#ifdef RISCOS
14#include "unixstuff.h"
15#endif
16
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
19*/
20#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
21const char *Py_FileSystemDefaultEncoding = "mbcs";
22#elif defined(__APPLE__)
23const char *Py_FileSystemDefaultEncoding = "utf-8";
24#else
25const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
26#endif
27
28/* Forward */
29static PyObject *filterstring(PyObject *, PyObject *);
30#ifdef Py_USING_UNICODE
31static PyObject *filterunicode(PyObject *, PyObject *);
32#endif
33static PyObject *filtertuple (PyObject *, PyObject *);
34
35static PyObject *
36builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
37{
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;
45
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);
51}
52
53PyDoc_STRVAR(import_doc,
54"__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module\n\
55\n\
56Import a module. Because this function is meant for use by the Python\n\
57interpreter and not for general use it is better to use\n\
58importlib.import_module() to programmatically import a module.\n\
59\n\
60The globals argument is only used to determine the context;\n\
61they are not modified. The locals argument is unused. The fromlist\n\
62should be a list of names to emulate ``from name import ...'', or an\n\
63empty list to emulate ``import name''.\n\
64When importing a module from a package, note that __import__('A.B', ...)\n\
65returns package A when fromlist is empty, but its submodule B when\n\
66fromlist is not empty. Level is used to determine whether to perform \n\
67absolute or relative imports. -1 is the original strategy of attempting\n\
68both absolute and relative imports, 0 is absolute, a positive number\n\
69is the number of parent directories to search relative to the current module.");
70
71
72static PyObject *
73builtin_abs(PyObject *self, PyObject *v)
74{
75 return PyNumber_Absolute(v);
76}
77
78PyDoc_STRVAR(abs_doc,
79"abs(number) -> number\n\
80\n\
81Return the absolute value of the argument.");
82
83static PyObject *
84builtin_all(PyObject *self, PyObject *v)
85{
86 PyObject *it, *item;
87 PyObject *(*iternext)(PyObject *);
88 int cmp;
89
90 it = PyObject_GetIter(v);
91 if (it == NULL)
92 return NULL;
93 iternext = *Py_TYPE(it)->tp_iternext;
94
95 for (;;) {
96 item = iternext(it);
97 if (item == NULL)
98 break;
99 cmp = PyObject_IsTrue(item);
100 Py_DECREF(item);
101 if (cmp < 0) {
102 Py_DECREF(it);
103 return NULL;
104 }
105 if (cmp == 0) {
106 Py_DECREF(it);
107 Py_RETURN_FALSE;
108 }
109 }
110 Py_DECREF(it);
111 if (PyErr_Occurred()) {
112 if (PyErr_ExceptionMatches(PyExc_StopIteration))
113 PyErr_Clear();
114 else
115 return NULL;
116 }
117 Py_RETURN_TRUE;
118}
119
120PyDoc_STRVAR(all_doc,
121"all(iterable) -> bool\n\
122\n\
123Return True if bool(x) is True for all values x in the iterable.\n\
124If the iterable is empty, return True.");
125
126static PyObject *
127builtin_any(PyObject *self, PyObject *v)
128{
129 PyObject *it, *item;
130 PyObject *(*iternext)(PyObject *);
131 int cmp;
132
133 it = PyObject_GetIter(v);
134 if (it == NULL)
135 return NULL;
136 iternext = *Py_TYPE(it)->tp_iternext;
137
138 for (;;) {
139 item = iternext(it);
140 if (item == NULL)
141 break;
142 cmp = PyObject_IsTrue(item);
143 Py_DECREF(item);
144 if (cmp < 0) {
145 Py_DECREF(it);
146 return NULL;
147 }
148 if (cmp == 1) {
149 Py_DECREF(it);
150 Py_RETURN_TRUE;
151 }
152 }
153 Py_DECREF(it);
154 if (PyErr_Occurred()) {
155 if (PyErr_ExceptionMatches(PyExc_StopIteration))
156 PyErr_Clear();
157 else
158 return NULL;
159 }
160 Py_RETURN_FALSE;
161}
162
163PyDoc_STRVAR(any_doc,
164"any(iterable) -> bool\n\
165\n\
166Return True if bool(x) is True for any x in the iterable.\n\
167If the iterable is empty, return False.");
168
169static PyObject *
170builtin_apply(PyObject *self, PyObject *args)
171{
172 PyObject *func, *alist = NULL, *kwdict = NULL;
173 PyObject *t = NULL, *retval = NULL;
174
175 if (PyErr_WarnPy3k("apply() not supported in 3.x; "
176 "use func(*args, **kwargs)", 1) < 0)
177 return NULL;
178
179 if (!PyArg_UnpackTuple(args, "apply", 1, 3, &func, &alist, &kwdict))
180 return NULL;
181 if (alist != NULL) {
182 if (!PyTuple_Check(alist)) {
183 if (!PySequence_Check(alist)) {
184 PyErr_Format(PyExc_TypeError,
185 "apply() arg 2 expected sequence, found %s",
186 alist->ob_type->tp_name);
187 return NULL;
188 }
189 t = PySequence_Tuple(alist);
190 if (t == NULL)
191 return NULL;
192 alist = t;
193 }
194 }
195 if (kwdict != NULL && !PyDict_Check(kwdict)) {
196 PyErr_Format(PyExc_TypeError,
197 "apply() arg 3 expected dictionary, found %s",
198 kwdict->ob_type->tp_name);
199 goto finally;
200 }
201 retval = PyEval_CallObjectWithKeywords(func, alist, kwdict);
202 finally:
203 Py_XDECREF(t);
204 return retval;
205}
206
207PyDoc_STRVAR(apply_doc,
208"apply(object[, args[, kwargs]]) -> value\n\
209\n\
210Call a callable object with positional arguments taken from the tuple args,\n\
211and keyword arguments taken from the optional dictionary kwargs.\n\
212Note that classes are callable, as are instances with a __call__() method.\n\
213\n\
214Deprecated since release 2.3. Instead, use the extended call syntax:\n\
215 function(*args, **keywords).");
216
217
218static PyObject *
219builtin_bin(PyObject *self, PyObject *v)
220{
221 return PyNumber_ToBase(v, 2);
222}
223
224PyDoc_STRVAR(bin_doc,
225"bin(number) -> string\n\
226\n\
227Return the binary representation of an integer or long integer.");
228
229
230static PyObject *
231builtin_callable(PyObject *self, PyObject *v)
232{
233 return PyBool_FromLong((long)PyCallable_Check(v));
234}
235
236PyDoc_STRVAR(callable_doc,
237"callable(object) -> bool\n\
238\n\
239Return whether the object is callable (i.e., some kind of function).\n\
240Note that classes are callable, as are instances with a __call__() method.");
241
242
243static PyObject *
244builtin_filter(PyObject *self, PyObject *args)
245{
246 PyObject *func, *seq, *result, *it, *arg;
247 Py_ssize_t len; /* guess for result list size */
248 register Py_ssize_t j;
249
250 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
251 return NULL;
252
253 /* Strings and tuples return a result of the same type. */
254 if (PyString_Check(seq))
255 return filterstring(func, seq);
256#ifdef Py_USING_UNICODE
257 if (PyUnicode_Check(seq))
258 return filterunicode(func, seq);
259#endif
260 if (PyTuple_Check(seq))
261 return filtertuple(func, seq);
262
263 /* Pre-allocate argument list tuple. */
264 arg = PyTuple_New(1);
265 if (arg == NULL)
266 return NULL;
267
268 /* Get iterator. */
269 it = PyObject_GetIter(seq);
270 if (it == NULL)
271 goto Fail_arg;
272
273 /* Guess a result list size. */
274 len = _PyObject_LengthHint(seq, 8);
275 if (len == -1)
276 goto Fail_it;
277
278 /* Get a result list. */
279 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
280 /* Eww - can modify the list in-place. */
281 Py_INCREF(seq);
282 result = seq;
283 }
284 else {
285 result = PyList_New(len);
286 if (result == NULL)
287 goto Fail_it;
288 }
289
290 /* Build the result list. */
291 j = 0;
292 for (;;) {
293 PyObject *item;
294 int ok;
295
296 item = PyIter_Next(it);
297 if (item == NULL) {
298 if (PyErr_Occurred())
299 goto Fail_result_it;
300 break;
301 }
302
303 if (func == (PyObject *)&PyBool_Type || func == Py_None) {
304 ok = PyObject_IsTrue(item);
305 }
306 else {
307 PyObject *good;
308 PyTuple_SET_ITEM(arg, 0, item);
309 good = PyObject_Call(func, arg, NULL);
310 PyTuple_SET_ITEM(arg, 0, NULL);
311 if (good == NULL) {
312 Py_DECREF(item);
313 goto Fail_result_it;
314 }
315 ok = PyObject_IsTrue(good);
316 Py_DECREF(good);
317 }
318 if (ok > 0) {
319 if (j < len)
320 PyList_SET_ITEM(result, j, item);
321 else {
322 int status = PyList_Append(result, item);
323 Py_DECREF(item);
324 if (status < 0)
325 goto Fail_result_it;
326 }
327 ++j;
328 }
329 else {
330 Py_DECREF(item);
331 if (ok < 0)
332 goto Fail_result_it;
333 }
334 }
335
336
337 /* Cut back result list if len is too big. */
338 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
339 goto Fail_result_it;
340
341 Py_DECREF(it);
342 Py_DECREF(arg);
343 return result;
344
345Fail_result_it:
346 Py_DECREF(result);
347Fail_it:
348 Py_DECREF(it);
349Fail_arg:
350 Py_DECREF(arg);
351 return NULL;
352}
353
354PyDoc_STRVAR(filter_doc,
355"filter(function or None, sequence) -> list, tuple, or string\n"
356"\n"
357"Return those items of sequence for which function(item) is true. If\n"
358"function is None, return the items that are true. If sequence is a tuple\n"
359"or string, return the same type, else return a list.");
360
361static PyObject *
362builtin_format(PyObject *self, PyObject *args)
363{
364 PyObject *value;
365 PyObject *format_spec = NULL;
366
367 if (!PyArg_ParseTuple(args, "O|O:format", &value, &format_spec))
368 return NULL;
369
370 return PyObject_Format(value, format_spec);
371}
372
373PyDoc_STRVAR(format_doc,
374"format(value[, format_spec]) -> string\n\
375\n\
376Returns value.__format__(format_spec)\n\
377format_spec defaults to \"\"");
378
379static PyObject *
380builtin_chr(PyObject *self, PyObject *args)
381{
382 long x;
383 char s[1];
384
385 if (!PyArg_ParseTuple(args, "l:chr", &x))
386 return NULL;
387 if (x < 0 || x >= 256) {
388 PyErr_SetString(PyExc_ValueError,
389 "chr() arg not in range(256)");
390 return NULL;
391 }
392 s[0] = (char)x;
393 return PyString_FromStringAndSize(s, 1);
394}
395
396PyDoc_STRVAR(chr_doc,
397"chr(i) -> character\n\
398\n\
399Return a string of one character with ordinal i; 0 <= i < 256.");
400
401
402#ifdef Py_USING_UNICODE
403static PyObject *
404builtin_unichr(PyObject *self, PyObject *args)
405{
406 int x;
407
408 if (!PyArg_ParseTuple(args, "i:unichr", &x))
409 return NULL;
410
411 return PyUnicode_FromOrdinal(x);
412}
413
414PyDoc_STRVAR(unichr_doc,
415"unichr(i) -> Unicode character\n\
416\n\
417Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.");
418#endif
419
420
421static PyObject *
422builtin_cmp(PyObject *self, PyObject *args)
423{
424 PyObject *a, *b;
425 int c;
426
427 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
428 return NULL;
429 if (PyObject_Cmp(a, b, &c) < 0)
430 return NULL;
431 return PyInt_FromLong((long)c);
432}
433
434PyDoc_STRVAR(cmp_doc,
435"cmp(x, y) -> integer\n\
436\n\
437Return negative if x<y, zero if x==y, positive if x>y.");
438
439
440static PyObject *
441builtin_coerce(PyObject *self, PyObject *args)
442{
443 PyObject *v, *w;
444 PyObject *res;
445
446 if (PyErr_WarnPy3k("coerce() not supported in 3.x", 1) < 0)
447 return NULL;
448
449 if (!PyArg_UnpackTuple(args, "coerce", 2, 2, &v, &w))
450 return NULL;
451 if (PyNumber_Coerce(&v, &w) < 0)
452 return NULL;
453 res = PyTuple_Pack(2, v, w);
454 Py_DECREF(v);
455 Py_DECREF(w);
456 return res;
457}
458
459PyDoc_STRVAR(coerce_doc,
460"coerce(x, y) -> (x1, y1)\n\
461\n\
462Return a tuple consisting of the two numeric arguments converted to\n\
463a common type, using the same rules as used by arithmetic operations.\n\
464If coercion is not possible, raise TypeError.");
465
466static PyObject *
467builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
468{
469 char *str;
470 char *filename;
471 char *startstr;
472 int mode = -1;
473 int dont_inherit = 0;
474 int supplied_flags = 0;
475 int is_ast;
476 PyCompilerFlags cf;
477 PyObject *result = NULL, *cmd, *tmp = NULL;
478 Py_ssize_t length;
479 static char *kwlist[] = {"source", "filename", "mode", "flags",
480 "dont_inherit", NULL};
481 int start[] = {Py_file_input, Py_eval_input, Py_single_input};
482
483 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
484 kwlist, &cmd, &filename, &startstr,
485 &supplied_flags, &dont_inherit))
486 return NULL;
487
488 cf.cf_flags = supplied_flags;
489
490 if (supplied_flags &
491 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
492 {
493 PyErr_SetString(PyExc_ValueError,
494 "compile(): unrecognised flags");
495 return NULL;
496 }
497 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
498
499 if (!dont_inherit) {
500 PyEval_MergeCompilerFlags(&cf);
501 }
502
503 if (strcmp(startstr, "exec") == 0)
504 mode = 0;
505 else if (strcmp(startstr, "eval") == 0)
506 mode = 1;
507 else if (strcmp(startstr, "single") == 0)
508 mode = 2;
509 else {
510 PyErr_SetString(PyExc_ValueError,
511 "compile() arg 3 must be 'exec', 'eval' or 'single'");
512 return NULL;
513 }
514
515 is_ast = PyAST_Check(cmd);
516 if (is_ast == -1)
517 return NULL;
518 if (is_ast) {
519 if (supplied_flags & PyCF_ONLY_AST) {
520 Py_INCREF(cmd);
521 result = cmd;
522 }
523 else {
524 PyArena *arena;
525 mod_ty mod;
526
527 arena = PyArena_New();
528 if (arena == NULL)
529 return NULL;
530 mod = PyAST_obj2mod(cmd, arena, mode);
531 if (mod == NULL) {
532 PyArena_Free(arena);
533 return NULL;
534 }
535 result = (PyObject*)PyAST_Compile(mod, filename,
536 &cf, arena);
537 PyArena_Free(arena);
538 }
539 return result;
540 }
541
542#ifdef Py_USING_UNICODE
543 if (PyUnicode_Check(cmd)) {
544 tmp = PyUnicode_AsUTF8String(cmd);
545 if (tmp == NULL)
546 return NULL;
547 cmd = tmp;
548 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
549 }
550#endif
551
552 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &length))
553 goto cleanup;
554 if ((size_t)length != strlen(str)) {
555 PyErr_SetString(PyExc_TypeError,
556 "compile() expected string without null bytes");
557 goto cleanup;
558 }
559 result = Py_CompileStringFlags(str, filename, start[mode], &cf);
560cleanup:
561 Py_XDECREF(tmp);
562 return result;
563}
564
565PyDoc_STRVAR(compile_doc,
566"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
567\n\
568Compile the source string (a Python module, statement or expression)\n\
569into a code object that can be executed by the exec statement or eval().\n\
570The filename will be used for run-time error messages.\n\
571The mode must be 'exec' to compile a module, 'single' to compile a\n\
572single (interactive) statement, or 'eval' to compile an expression.\n\
573The flags argument, if present, controls which future statements influence\n\
574the compilation of the code.\n\
575The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
576the effects of any future statements in effect in the code calling\n\
577compile; if absent or zero these statements do influence the compilation,\n\
578in addition to any features explicitly specified.");
579
580static PyObject *
581builtin_dir(PyObject *self, PyObject *args)
582{
583 PyObject *arg = NULL;
584
585 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
586 return NULL;
587 return PyObject_Dir(arg);
588}
589
590PyDoc_STRVAR(dir_doc,
591"dir([object]) -> list of strings\n"
592"\n"
593"If called without an argument, return the names in the current scope.\n"
594"Else, return an alphabetized list of names comprising (some of) the attributes\n"
595"of the given object, and of attributes reachable from it.\n"
596"If the object supplies a method named __dir__, it will be used; otherwise\n"
597"the default dir() logic is used and returns:\n"
598" for a module object: the module's attributes.\n"
599" for a class object: its attributes, and recursively the attributes\n"
600" of its bases.\n"
601" for any other object: its attributes, its class's attributes, and\n"
602" recursively the attributes of its class's base classes.");
603
604static PyObject *
605builtin_divmod(PyObject *self, PyObject *args)
606{
607 PyObject *v, *w;
608
609 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
610 return NULL;
611 return PyNumber_Divmod(v, w);
612}
613
614PyDoc_STRVAR(divmod_doc,
615"divmod(x, y) -> (quotient, remainder)\n\
616\n\
617Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
618
619
620static PyObject *
621builtin_eval(PyObject *self, PyObject *args)
622{
623 PyObject *cmd, *result, *tmp = NULL;
624 PyObject *globals = Py_None, *locals = Py_None;
625 char *str;
626 PyCompilerFlags cf;
627
628 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
629 return NULL;
630 if (locals != Py_None && !PyMapping_Check(locals)) {
631 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
632 return NULL;
633 }
634 if (globals != Py_None && !PyDict_Check(globals)) {
635 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
636 "globals must be a real dict; try eval(expr, {}, mapping)"
637 : "globals must be a dict");
638 return NULL;
639 }
640 if (globals == Py_None) {
641 globals = PyEval_GetGlobals();
642 if (locals == Py_None)
643 locals = PyEval_GetLocals();
644 }
645 else if (locals == Py_None)
646 locals = globals;
647
648 if (globals == NULL || locals == NULL) {
649 PyErr_SetString(PyExc_TypeError,
650 "eval must be given globals and locals "
651 "when called without a frame");
652 return NULL;
653 }
654
655 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
656 if (PyDict_SetItemString(globals, "__builtins__",
657 PyEval_GetBuiltins()) != 0)
658 return NULL;
659 }
660
661 if (PyCode_Check(cmd)) {
662 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
663 PyErr_SetString(PyExc_TypeError,
664 "code object passed to eval() may not contain free variables");
665 return NULL;
666 }
667 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
668 }
669
670 if (!PyString_Check(cmd) &&
671 !PyUnicode_Check(cmd)) {
672 PyErr_SetString(PyExc_TypeError,
673 "eval() arg 1 must be a string or code object");
674 return NULL;
675 }
676 cf.cf_flags = 0;
677
678#ifdef Py_USING_UNICODE
679 if (PyUnicode_Check(cmd)) {
680 tmp = PyUnicode_AsUTF8String(cmd);
681 if (tmp == NULL)
682 return NULL;
683 cmd = tmp;
684 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
685 }
686#endif
687 if (PyString_AsStringAndSize(cmd, &str, NULL)) {
688 Py_XDECREF(tmp);
689 return NULL;
690 }
691 while (*str == ' ' || *str == '\t')
692 str++;
693
694 (void)PyEval_MergeCompilerFlags(&cf);
695 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
696 Py_XDECREF(tmp);
697 return result;
698}
699
700PyDoc_STRVAR(eval_doc,
701"eval(source[, globals[, locals]]) -> value\n\
702\n\
703Evaluate the source in the context of globals and locals.\n\
704The source may be a string representing a Python expression\n\
705or a code object as returned by compile().\n\
706The globals must be a dictionary and locals can be any mapping,\n\
707defaulting to the current globals and locals.\n\
708If only globals is given, locals defaults to it.\n");
709
710
711static PyObject *
712builtin_execfile(PyObject *self, PyObject *args)
713{
714 char *filename;
715 PyObject *globals = Py_None, *locals = Py_None;
716 PyObject *res;
717 FILE* fp = NULL;
718 PyCompilerFlags cf;
719 int exists;
720
721 if (PyErr_WarnPy3k("execfile() not supported in 3.x; use exec()",
722 1) < 0)
723 return NULL;
724
725 if (!PyArg_ParseTuple(args, "s|O!O:execfile",
726 &filename,
727 &PyDict_Type, &globals,
728 &locals))
729 return NULL;
730 if (locals != Py_None && !PyMapping_Check(locals)) {
731 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
732 return NULL;
733 }
734 if (globals == Py_None) {
735 globals = PyEval_GetGlobals();
736 if (locals == Py_None)
737 locals = PyEval_GetLocals();
738 }
739 else if (locals == Py_None)
740 locals = globals;
741 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
742 if (PyDict_SetItemString(globals, "__builtins__",
743 PyEval_GetBuiltins()) != 0)
744 return NULL;
745 }
746
747 exists = 0;
748 /* Test for existence or directory. */
749#if defined(PLAN9)
750 {
751 Dir *d;
752
753 if ((d = dirstat(filename))!=nil) {
754 if(d->mode & DMDIR)
755 werrstr("is a directory");
756 else
757 exists = 1;
758 free(d);
759 }
760 }
761#elif defined(RISCOS)
762 if (object_exists(filename)) {
763 if (isdir(filename))
764 errno = EISDIR;
765 else
766 exists = 1;
767 }
768#else /* standard Posix */
769 {
770 struct stat s;
771 if (stat(filename, &s) == 0) {
772 if (S_ISDIR(s.st_mode))
773# if defined(PYOS_OS2) && defined(PYCC_VACPP)
774 errno = EOS2ERR;
775# else
776 errno = EISDIR;
777# endif
778 else
779 exists = 1;
780 }
781 }
782#endif
783
784 if (exists) {
785 Py_BEGIN_ALLOW_THREADS
786 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
787 Py_END_ALLOW_THREADS
788
789 if (fp == NULL) {
790 exists = 0;
791 }
792 }
793
794 if (!exists) {
795 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
796 return NULL;
797 }
798 cf.cf_flags = 0;
799 if (PyEval_MergeCompilerFlags(&cf))
800 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
801 locals, 1, &cf);
802 else
803 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
804 locals, 1);
805 return res;
806}
807
808PyDoc_STRVAR(execfile_doc,
809"execfile(filename[, globals[, locals]])\n\
810\n\
811Read and execute a Python script from a file.\n\
812The globals and locals are dictionaries, defaulting to the current\n\
813globals and locals. If only globals is given, locals defaults to it.");
814
815
816static PyObject *
817builtin_getattr(PyObject *self, PyObject *args)
818{
819 PyObject *v, *result, *dflt = NULL;
820 PyObject *name;
821
822 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
823 return NULL;
824#ifdef Py_USING_UNICODE
825 if (PyUnicode_Check(name)) {
826 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
827 if (name == NULL)
828 return NULL;
829 }
830#endif
831
832 if (!PyString_Check(name)) {
833 PyErr_SetString(PyExc_TypeError,
834 "getattr(): attribute name must be string");
835 return NULL;
836 }
837 result = PyObject_GetAttr(v, name);
838 if (result == NULL && dflt != NULL &&
839 PyErr_ExceptionMatches(PyExc_AttributeError))
840 {
841 PyErr_Clear();
842 Py_INCREF(dflt);
843 result = dflt;
844 }
845 return result;
846}
847
848PyDoc_STRVAR(getattr_doc,
849"getattr(object, name[, default]) -> value\n\
850\n\
851Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
852When a default argument is given, it is returned when the attribute doesn't\n\
853exist; without it, an exception is raised in that case.");
854
855
856static PyObject *
857builtin_globals(PyObject *self)
858{
859 PyObject *d;
860
861 d = PyEval_GetGlobals();
862 Py_XINCREF(d);
863 return d;
864}
865
866PyDoc_STRVAR(globals_doc,
867"globals() -> dictionary\n\
868\n\
869Return the dictionary containing the current scope's global variables.");
870
871
872static PyObject *
873builtin_hasattr(PyObject *self, PyObject *args)
874{
875 PyObject *v;
876 PyObject *name;
877
878 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
879 return NULL;
880#ifdef Py_USING_UNICODE
881 if (PyUnicode_Check(name)) {
882 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
883 if (name == NULL)
884 return NULL;
885 }
886#endif
887
888 if (!PyString_Check(name)) {
889 PyErr_SetString(PyExc_TypeError,
890 "hasattr(): attribute name must be string");
891 return NULL;
892 }
893 v = PyObject_GetAttr(v, name);
894 if (v == NULL) {
895 if (!PyErr_ExceptionMatches(PyExc_Exception))
896 return NULL;
897 else {
898 PyErr_Clear();
899 Py_INCREF(Py_False);
900 return Py_False;
901 }
902 }
903 Py_DECREF(v);
904 Py_INCREF(Py_True);
905 return Py_True;
906}
907
908PyDoc_STRVAR(hasattr_doc,
909"hasattr(object, name) -> bool\n\
910\n\
911Return whether the object has an attribute with the given name.\n\
912(This is done by calling getattr(object, name) and catching exceptions.)");
913
914
915static PyObject *
916builtin_id(PyObject *self, PyObject *v)
917{
918 return PyLong_FromVoidPtr(v);
919}
920
921PyDoc_STRVAR(id_doc,
922"id(object) -> integer\n\
923\n\
924Return the identity of an object. This is guaranteed to be unique among\n\
925simultaneously existing objects. (Hint: it's the object's memory address.)");
926
927
928static PyObject *
929builtin_map(PyObject *self, PyObject *args)
930{
931 typedef struct {
932 PyObject *it; /* the iterator object */
933 int saw_StopIteration; /* bool: did the iterator end? */
934 } sequence;
935
936 PyObject *func, *result;
937 sequence *seqs = NULL, *sqp;
938 Py_ssize_t n, len;
939 register int i, j;
940
941 n = PyTuple_Size(args);
942 if (n < 2) {
943 PyErr_SetString(PyExc_TypeError,
944 "map() requires at least two args");
945 return NULL;
946 }
947
948 func = PyTuple_GetItem(args, 0);
949 n--;
950
951 if (func == Py_None) {
952 if (PyErr_WarnPy3k("map(None, ...) not supported in 3.x; "
953 "use list(...)", 1) < 0)
954 return NULL;
955 if (n == 1) {
956 /* map(None, S) is the same as list(S). */
957 return PySequence_List(PyTuple_GetItem(args, 1));
958 }
959 }
960
961 /* Get space for sequence descriptors. Must NULL out the iterator
962 * pointers so that jumping to Fail_2 later doesn't see trash.
963 */
964 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
965 PyErr_NoMemory();
966 return NULL;
967 }
968 for (i = 0; i < n; ++i) {
969 seqs[i].it = (PyObject*)NULL;
970 seqs[i].saw_StopIteration = 0;
971 }
972
973 /* Do a first pass to obtain iterators for the arguments, and set len
974 * to the largest of their lengths.
975 */
976 len = 0;
977 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
978 PyObject *curseq;
979 Py_ssize_t curlen;
980
981 /* Get iterator. */
982 curseq = PyTuple_GetItem(args, i+1);
983 sqp->it = PyObject_GetIter(curseq);
984 if (sqp->it == NULL) {
985 static char errmsg[] =
986 "argument %d to map() must support iteration";
987 char errbuf[sizeof(errmsg) + 25];
988 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
989 PyErr_SetString(PyExc_TypeError, errbuf);
990 goto Fail_2;
991 }
992
993 /* Update len. */
994 curlen = _PyObject_LengthHint(curseq, 8);
995 if (curlen > len)
996 len = curlen;
997 }
998
999 /* Get space for the result list. */
1000 if ((result = (PyObject *) PyList_New(len)) == NULL)
1001 goto Fail_2;
1002
1003 /* Iterate over the sequences until all have stopped. */
1004 for (i = 0; ; ++i) {
1005 PyObject *alist, *item=NULL, *value;
1006 int numactive = 0;
1007
1008 if (func == Py_None && n == 1)
1009 alist = NULL;
1010 else if ((alist = PyTuple_New(n)) == NULL)
1011 goto Fail_1;
1012
1013 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
1014 if (sqp->saw_StopIteration) {
1015 Py_INCREF(Py_None);
1016 item = Py_None;
1017 }
1018 else {
1019 item = PyIter_Next(sqp->it);
1020 if (item)
1021 ++numactive;
1022 else {
1023 if (PyErr_Occurred()) {
1024 Py_XDECREF(alist);
1025 goto Fail_1;
1026 }
1027 Py_INCREF(Py_None);
1028 item = Py_None;
1029 sqp->saw_StopIteration = 1;
1030 }
1031 }
1032 if (alist)
1033 PyTuple_SET_ITEM(alist, j, item);
1034 else
1035 break;
1036 }
1037
1038 if (!alist)
1039 alist = item;
1040
1041 if (numactive == 0) {
1042 Py_DECREF(alist);
1043 break;
1044 }
1045
1046 if (func == Py_None)
1047 value = alist;
1048 else {
1049 value = PyEval_CallObject(func, alist);
1050 Py_DECREF(alist);
1051 if (value == NULL)
1052 goto Fail_1;
1053 }
1054 if (i >= len) {
1055 int status = PyList_Append(result, value);
1056 Py_DECREF(value);
1057 if (status < 0)
1058 goto Fail_1;
1059 }
1060 else if (PyList_SetItem(result, i, value) < 0)
1061 goto Fail_1;
1062 }
1063
1064 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
1065 goto Fail_1;
1066
1067 goto Succeed;
1068
1069Fail_1:
1070 Py_DECREF(result);
1071Fail_2:
1072 result = NULL;
1073Succeed:
1074 assert(seqs);
1075 for (i = 0; i < n; ++i)
1076 Py_XDECREF(seqs[i].it);
1077 PyMem_DEL(seqs);
1078 return result;
1079}
1080
1081PyDoc_STRVAR(map_doc,
1082"map(function, sequence[, sequence, ...]) -> list\n\
1083\n\
1084Return a list of the results of applying the function to the items of\n\
1085the argument sequence(s). If more than one sequence is given, the\n\
1086function is called with an argument list consisting of the corresponding\n\
1087item of each sequence, substituting None for missing values when not all\n\
1088sequences have the same length. If the function is None, return a list of\n\
1089the items of the sequence (or a list of tuples if more than one sequence).");
1090
1091
1092static PyObject *
1093builtin_next(PyObject *self, PyObject *args)
1094{
1095 PyObject *it, *res;
1096 PyObject *def = NULL;
1097
1098 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1099 return NULL;
1100 if (!PyIter_Check(it)) {
1101 PyErr_Format(PyExc_TypeError,
1102 "%.200s object is not an iterator",
1103 it->ob_type->tp_name);
1104 return NULL;
1105 }
1106
1107 res = (*it->ob_type->tp_iternext)(it);
1108 if (res != NULL) {
1109 return res;
1110 } else if (def != NULL) {
1111 if (PyErr_Occurred()) {
1112 if (!PyErr_ExceptionMatches(PyExc_StopIteration))
1113 return NULL;
1114 PyErr_Clear();
1115 }
1116 Py_INCREF(def);
1117 return def;
1118 } else if (PyErr_Occurred()) {
1119 return NULL;
1120 } else {
1121 PyErr_SetNone(PyExc_StopIteration);
1122 return NULL;
1123 }
1124}
1125
1126PyDoc_STRVAR(next_doc,
1127"next(iterator[, default])\n\
1128\n\
1129Return the next item from the iterator. If default is given and the iterator\n\
1130is exhausted, it is returned instead of raising StopIteration.");
1131
1132
1133static PyObject *
1134builtin_setattr(PyObject *self, PyObject *args)
1135{
1136 PyObject *v;
1137 PyObject *name;
1138 PyObject *value;
1139
1140 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
1141 return NULL;
1142 if (PyObject_SetAttr(v, name, value) != 0)
1143 return NULL;
1144 Py_INCREF(Py_None);
1145 return Py_None;
1146}
1147
1148PyDoc_STRVAR(setattr_doc,
1149"setattr(object, name, value)\n\
1150\n\
1151Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
1152``x.y = v''.");
1153
1154
1155static PyObject *
1156builtin_delattr(PyObject *self, PyObject *args)
1157{
1158 PyObject *v;
1159 PyObject *name;
1160
1161 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
1162 return NULL;
1163 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
1164 return NULL;
1165 Py_INCREF(Py_None);
1166 return Py_None;
1167}
1168
1169PyDoc_STRVAR(delattr_doc,
1170"delattr(object, name)\n\
1171\n\
1172Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
1173``del x.y''.");
1174
1175
1176static PyObject *
1177builtin_hash(PyObject *self, PyObject *v)
1178{
1179 long x;
1180
1181 x = PyObject_Hash(v);
1182 if (x == -1)
1183 return NULL;
1184 return PyInt_FromLong(x);
1185}
1186
1187PyDoc_STRVAR(hash_doc,
1188"hash(object) -> integer\n\
1189\n\
1190Return a hash value for the object. Two objects with the same value have\n\
1191the same hash value. The reverse is not necessarily true, but likely.");
1192
1193
1194static PyObject *
1195builtin_hex(PyObject *self, PyObject *v)
1196{
1197 PyNumberMethods *nb;
1198 PyObject *res;
1199
1200 if ((nb = v->ob_type->tp_as_number) == NULL ||
1201 nb->nb_hex == NULL) {
1202 PyErr_SetString(PyExc_TypeError,
1203 "hex() argument can't be converted to hex");
1204 return NULL;
1205 }
1206 res = (*nb->nb_hex)(v);
1207 if (res && !PyString_Check(res)) {
1208 PyErr_Format(PyExc_TypeError,
1209 "__hex__ returned non-string (type %.200s)",
1210 res->ob_type->tp_name);
1211 Py_DECREF(res);
1212 return NULL;
1213 }
1214 return res;
1215}
1216
1217PyDoc_STRVAR(hex_doc,
1218"hex(number) -> string\n\
1219\n\
1220Return the hexadecimal representation of an integer or long integer.");
1221
1222
1223static PyObject *builtin_raw_input(PyObject *, PyObject *);
1224
1225static PyObject *
1226builtin_input(PyObject *self, PyObject *args)
1227{
1228 PyObject *line;
1229 char *str;
1230 PyObject *res;
1231 PyObject *globals, *locals;
1232 PyCompilerFlags cf;
1233
1234 line = builtin_raw_input(self, args);
1235 if (line == NULL)
1236 return line;
1237 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
1238 return NULL;
1239 while (*str == ' ' || *str == '\t')
1240 str++;
1241 globals = PyEval_GetGlobals();
1242 locals = PyEval_GetLocals();
1243 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
1244 if (PyDict_SetItemString(globals, "__builtins__",
1245 PyEval_GetBuiltins()) != 0)
1246 return NULL;
1247 }
1248 cf.cf_flags = 0;
1249 PyEval_MergeCompilerFlags(&cf);
1250 res = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
1251 Py_DECREF(line);
1252 return res;
1253}
1254
1255PyDoc_STRVAR(input_doc,
1256"input([prompt]) -> value\n\
1257\n\
1258Equivalent to eval(raw_input(prompt)).");
1259
1260
1261static PyObject *
1262builtin_intern(PyObject *self, PyObject *args)
1263{
1264 PyObject *s;
1265 if (!PyArg_ParseTuple(args, "S:intern", &s))
1266 return NULL;
1267 if (!PyString_CheckExact(s)) {
1268 PyErr_SetString(PyExc_TypeError,
1269 "can't intern subclass of string");
1270 return NULL;
1271 }
1272 Py_INCREF(s);
1273 PyString_InternInPlace(&s);
1274 return s;
1275}
1276
1277PyDoc_STRVAR(intern_doc,
1278"intern(string) -> string\n\
1279\n\
1280``Intern'' the given string. This enters the string in the (global)\n\
1281table of interned strings whose purpose is to speed up dictionary lookups.\n\
1282Return the string itself or the previously interned string object with the\n\
1283same value.");
1284
1285
1286static PyObject *
1287builtin_iter(PyObject *self, PyObject *args)
1288{
1289 PyObject *v, *w = NULL;
1290
1291 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
1292 return NULL;
1293 if (w == NULL)
1294 return PyObject_GetIter(v);
1295 if (!PyCallable_Check(v)) {
1296 PyErr_SetString(PyExc_TypeError,
1297 "iter(v, w): v must be callable");
1298 return NULL;
1299 }
1300 return PyCallIter_New(v, w);
1301}
1302
1303PyDoc_STRVAR(iter_doc,
1304"iter(collection) -> iterator\n\
1305iter(callable, sentinel) -> iterator\n\
1306\n\
1307Get an iterator from an object. In the first form, the argument must\n\
1308supply its own iterator, or be a sequence.\n\
1309In the second form, the callable is called until it returns the sentinel.");
1310
1311
1312static PyObject *
1313builtin_len(PyObject *self, PyObject *v)
1314{
1315 Py_ssize_t res;
1316
1317 res = PyObject_Size(v);
1318 if (res < 0 && PyErr_Occurred())
1319 return NULL;
1320 return PyInt_FromSsize_t(res);
1321}
1322
1323PyDoc_STRVAR(len_doc,
1324"len(object) -> integer\n\
1325\n\
1326Return the number of items of a sequence or mapping.");
1327
1328
1329static PyObject *
1330builtin_locals(PyObject *self)
1331{
1332 PyObject *d;
1333
1334 d = PyEval_GetLocals();
1335 Py_XINCREF(d);
1336 return d;
1337}
1338
1339PyDoc_STRVAR(locals_doc,
1340"locals() -> dictionary\n\
1341\n\
1342Update and return a dictionary containing the current scope's local variables.");
1343
1344
1345static PyObject *
1346min_max(PyObject *args, PyObject *kwds, int op)
1347{
1348 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
1349 const char *name = op == Py_LT ? "min" : "max";
1350
1351 if (PyTuple_Size(args) > 1)
1352 v = args;
1353 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
1354 return NULL;
1355
1356 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1357 keyfunc = PyDict_GetItemString(kwds, "key");
1358 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
1359 PyErr_Format(PyExc_TypeError,
1360 "%s() got an unexpected keyword argument", name);
1361 return NULL;
1362 }
1363 Py_INCREF(keyfunc);
1364 }
1365
1366 it = PyObject_GetIter(v);
1367 if (it == NULL) {
1368 Py_XDECREF(keyfunc);
1369 return NULL;
1370 }
1371
1372 maxitem = NULL; /* the result */
1373 maxval = NULL; /* the value associated with the result */
1374 while (( item = PyIter_Next(it) )) {
1375 /* get the value from the key function */
1376 if (keyfunc != NULL) {
1377 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1378 if (val == NULL)
1379 goto Fail_it_item;
1380 }
1381 /* no key function; the value is the item */
1382 else {
1383 val = item;
1384 Py_INCREF(val);
1385 }
1386
1387 /* maximum value and item are unset; set them */
1388 if (maxval == NULL) {
1389 maxitem = item;
1390 maxval = val;
1391 }
1392 /* maximum value and item are set; update them as necessary */
1393 else {
1394 int cmp = PyObject_RichCompareBool(val, maxval, op);
1395 if (cmp < 0)
1396 goto Fail_it_item_and_val;
1397 else if (cmp > 0) {
1398 Py_DECREF(maxval);
1399 Py_DECREF(maxitem);
1400 maxval = val;
1401 maxitem = item;
1402 }
1403 else {
1404 Py_DECREF(item);
1405 Py_DECREF(val);
1406 }
1407 }
1408 }
1409 if (PyErr_Occurred())
1410 goto Fail_it;
1411 if (maxval == NULL) {
1412 PyErr_Format(PyExc_ValueError,
1413 "%s() arg is an empty sequence", name);
1414 assert(maxitem == NULL);
1415 }
1416 else
1417 Py_DECREF(maxval);
1418 Py_DECREF(it);
1419 Py_XDECREF(keyfunc);
1420 return maxitem;
1421
1422Fail_it_item_and_val:
1423 Py_DECREF(val);
1424Fail_it_item:
1425 Py_DECREF(item);
1426Fail_it:
1427 Py_XDECREF(maxval);
1428 Py_XDECREF(maxitem);
1429 Py_DECREF(it);
1430 Py_XDECREF(keyfunc);
1431 return NULL;
1432}
1433
1434static PyObject *
1435builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
1436{
1437 return min_max(args, kwds, Py_LT);
1438}
1439
1440PyDoc_STRVAR(min_doc,
1441"min(iterable[, key=func]) -> value\n\
1442min(a, b, c, ...[, key=func]) -> value\n\
1443\n\
1444With a single iterable argument, return its smallest item.\n\
1445With two or more arguments, return the smallest argument.");
1446
1447
1448static PyObject *
1449builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
1450{
1451 return min_max(args, kwds, Py_GT);
1452}
1453
1454PyDoc_STRVAR(max_doc,
1455"max(iterable[, key=func]) -> value\n\
1456max(a, b, c, ...[, key=func]) -> value\n\
1457\n\
1458With a single iterable argument, return its largest item.\n\
1459With two or more arguments, return the largest argument.");
1460
1461
1462static PyObject *
1463builtin_oct(PyObject *self, PyObject *v)
1464{
1465 PyNumberMethods *nb;
1466 PyObject *res;
1467
1468 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1469 nb->nb_oct == NULL) {
1470 PyErr_SetString(PyExc_TypeError,
1471 "oct() argument can't be converted to oct");
1472 return NULL;
1473 }
1474 res = (*nb->nb_oct)(v);
1475 if (res && !PyString_Check(res)) {
1476 PyErr_Format(PyExc_TypeError,
1477 "__oct__ returned non-string (type %.200s)",
1478 res->ob_type->tp_name);
1479 Py_DECREF(res);
1480 return NULL;
1481 }
1482 return res;
1483}
1484
1485PyDoc_STRVAR(oct_doc,
1486"oct(number) -> string\n\
1487\n\
1488Return the octal representation of an integer or long integer.");
1489
1490
1491static PyObject *
1492builtin_open(PyObject *self, PyObject *args, PyObject *kwds)
1493{
1494 return PyObject_Call((PyObject*)&PyFile_Type, args, kwds);
1495}
1496
1497PyDoc_STRVAR(open_doc,
1498"open(name[, mode[, buffering]]) -> file object\n\
1499\n\
1500Open a file using the file() type, returns a file object. This is the\n\
1501preferred way to open a file. See file.__doc__ for further information.");
1502
1503
1504static PyObject *
1505builtin_ord(PyObject *self, PyObject* obj)
1506{
1507 long ord;
1508 Py_ssize_t size;
1509
1510 if (PyString_Check(obj)) {
1511 size = PyString_GET_SIZE(obj);
1512 if (size == 1) {
1513 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
1514 return PyInt_FromLong(ord);
1515 }
1516 } else if (PyByteArray_Check(obj)) {
1517 size = PyByteArray_GET_SIZE(obj);
1518 if (size == 1) {
1519 ord = (long)((unsigned char)*PyByteArray_AS_STRING(obj));
1520 return PyInt_FromLong(ord);
1521 }
1522
1523#ifdef Py_USING_UNICODE
1524 } else if (PyUnicode_Check(obj)) {
1525 size = PyUnicode_GET_SIZE(obj);
1526 if (size == 1) {
1527 ord = (long)*PyUnicode_AS_UNICODE(obj);
1528 return PyInt_FromLong(ord);
1529 }
1530#endif
1531 } else {
1532 PyErr_Format(PyExc_TypeError,
1533 "ord() expected string of length 1, but " \
1534 "%.200s found", obj->ob_type->tp_name);
1535 return NULL;
1536 }
1537
1538 PyErr_Format(PyExc_TypeError,
1539 "ord() expected a character, "
1540 "but string of length %zd found",
1541 size);
1542 return NULL;
1543}
1544
1545PyDoc_STRVAR(ord_doc,
1546"ord(c) -> integer\n\
1547\n\
1548Return the integer ordinal of a one-character string.");
1549
1550
1551static PyObject *
1552builtin_pow(PyObject *self, PyObject *args)
1553{
1554 PyObject *v, *w, *z = Py_None;
1555
1556 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
1557 return NULL;
1558 return PyNumber_Power(v, w, z);
1559}
1560
1561PyDoc_STRVAR(pow_doc,
1562"pow(x, y[, z]) -> number\n\
1563\n\
1564With two arguments, equivalent to x**y. With three arguments,\n\
1565equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
1566
1567
1568static PyObject *
1569builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1570{
1571 static char *kwlist[] = {"sep", "end", "file", 0};
1572 static PyObject *dummy_args = NULL;
1573 static PyObject *unicode_newline = NULL, *unicode_space = NULL;
1574 static PyObject *str_newline = NULL, *str_space = NULL;
1575 PyObject *newline, *space;
1576 PyObject *sep = NULL, *end = NULL, *file = NULL;
1577 int i, err, use_unicode = 0;
1578
1579 if (dummy_args == NULL) {
1580 if (!(dummy_args = PyTuple_New(0)))
1581 return NULL;
1582 }
1583 if (str_newline == NULL) {
1584 str_newline = PyString_FromString("\n");
1585 if (str_newline == NULL)
1586 return NULL;
1587 str_space = PyString_FromString(" ");
1588 if (str_space == NULL) {
1589 Py_CLEAR(str_newline);
1590 return NULL;
1591 }
1592#ifdef Py_USING_UNICODE
1593 unicode_newline = PyUnicode_FromString("\n");
1594 if (unicode_newline == NULL) {
1595 Py_CLEAR(str_newline);
1596 Py_CLEAR(str_space);
1597 return NULL;
1598 }
1599 unicode_space = PyUnicode_FromString(" ");
1600 if (unicode_space == NULL) {
1601 Py_CLEAR(str_newline);
1602 Py_CLEAR(str_space);
1603 Py_CLEAR(unicode_space);
1604 return NULL;
1605 }
1606#endif
1607 }
1608 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
1609 kwlist, &sep, &end, &file))
1610 return NULL;
1611 if (file == NULL || file == Py_None) {
1612 file = PySys_GetObject("stdout");
1613 /* sys.stdout may be None when FILE* stdout isn't connected */
1614 if (file == Py_None)
1615 Py_RETURN_NONE;
1616 }
1617 if (sep == Py_None) {
1618 sep = NULL;
1619 }
1620 else if (sep) {
1621 if (PyUnicode_Check(sep)) {
1622 use_unicode = 1;
1623 }
1624 else if (!PyString_Check(sep)) {
1625 PyErr_Format(PyExc_TypeError,
1626 "sep must be None, str or unicode, not %.200s",
1627 sep->ob_type->tp_name);
1628 return NULL;
1629 }
1630 }
1631 if (end == Py_None)
1632 end = NULL;
1633 else if (end) {
1634 if (PyUnicode_Check(end)) {
1635 use_unicode = 1;
1636 }
1637 else if (!PyString_Check(end)) {
1638 PyErr_Format(PyExc_TypeError,
1639 "end must be None, str or unicode, not %.200s",
1640 end->ob_type->tp_name);
1641 return NULL;
1642 }
1643 }
1644
1645 if (!use_unicode) {
1646 for (i = 0; i < PyTuple_Size(args); i++) {
1647 if (PyUnicode_Check(PyTuple_GET_ITEM(args, i))) {
1648 use_unicode = 1;
1649 break;
1650 }
1651 }
1652 }
1653 if (use_unicode) {
1654 newline = unicode_newline;
1655 space = unicode_space;
1656 }
1657 else {
1658 newline = str_newline;
1659 space = str_space;
1660 }
1661
1662 for (i = 0; i < PyTuple_Size(args); i++) {
1663 if (i > 0) {
1664 if (sep == NULL)
1665 err = PyFile_WriteObject(space, file,
1666 Py_PRINT_RAW);
1667 else
1668 err = PyFile_WriteObject(sep, file,
1669 Py_PRINT_RAW);
1670 if (err)
1671 return NULL;
1672 }
1673 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1674 Py_PRINT_RAW);
1675 if (err)
1676 return NULL;
1677 }
1678
1679 if (end == NULL)
1680 err = PyFile_WriteObject(newline, file, Py_PRINT_RAW);
1681 else
1682 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1683 if (err)
1684 return NULL;
1685
1686 Py_RETURN_NONE;
1687}
1688
1689PyDoc_STRVAR(print_doc,
1690"print(value, ..., sep=' ', end='\\n', file=sys.stdout)\n\
1691\n\
1692Prints the values to a stream, or to sys.stdout by default.\n\
1693Optional keyword arguments:\n\
1694file: a file-like object (stream); defaults to the current sys.stdout.\n\
1695sep: string inserted between values, default a space.\n\
1696end: string appended after the last value, default a newline.");
1697
1698
1699/* Return number of items in range (lo, hi, step), when arguments are
1700 * PyInt or PyLong objects. step > 0 required. Return a value < 0 if
1701 * & only if the true value is too large to fit in a signed long.
1702 * Arguments MUST return 1 with either PyInt_Check() or
1703 * PyLong_Check(). Return -1 when there is an error.
1704 */
1705static long
1706get_len_of_range_longs(PyObject *lo, PyObject *hi, PyObject *step)
1707{
1708 /* -------------------------------------------------------------
1709 Algorithm is equal to that of get_len_of_range(), but it operates
1710 on PyObjects (which are assumed to be PyLong or PyInt objects).
1711 ---------------------------------------------------------------*/
1712 long n;
1713 PyObject *diff = NULL;
1714 PyObject *one = NULL;
1715 PyObject *tmp1 = NULL, *tmp2 = NULL, *tmp3 = NULL;
1716 /* holds sub-expression evaluations */
1717
1718 /* if (lo >= hi), return length of 0. */
1719 if (PyObject_Compare(lo, hi) >= 0)
1720 return 0;
1721
1722 if ((one = PyLong_FromLong(1L)) == NULL)
1723 goto Fail;
1724
1725 if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL)
1726 goto Fail;
1727
1728 if ((diff = PyNumber_Subtract(tmp1, one)) == NULL)
1729 goto Fail;
1730
1731 if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL)
1732 goto Fail;
1733
1734 if ((tmp3 = PyNumber_Add(tmp2, one)) == NULL)
1735 goto Fail;
1736
1737 n = PyLong_AsLong(tmp3);
1738 if (PyErr_Occurred()) { /* Check for Overflow */
1739 PyErr_Clear();
1740 goto Fail;
1741 }
1742
1743 Py_DECREF(tmp3);
1744 Py_DECREF(tmp2);
1745 Py_DECREF(diff);
1746 Py_DECREF(tmp1);
1747 Py_DECREF(one);
1748 return n;
1749
1750 Fail:
1751 Py_XDECREF(tmp3);
1752 Py_XDECREF(tmp2);
1753 Py_XDECREF(diff);
1754 Py_XDECREF(tmp1);
1755 Py_XDECREF(one);
1756 return -1;
1757}
1758
1759/* Helper function for handle_range_longs. If arg is int or long
1760 object, returns it with incremented reference count. If arg is
1761 float, raises type error. As a last resort, creates a new int by
1762 calling arg type's nb_int method if it is defined. Returns NULL
1763 and sets exception on error.
1764
1765 Returns a new reference to an int object. */
1766static PyObject *
1767get_range_long_argument(PyObject *arg, const char *name)
1768{
1769 PyObject *v;
1770 PyNumberMethods *nb;
1771 if (PyInt_Check(arg) || PyLong_Check(arg)) {
1772 Py_INCREF(arg);
1773 return arg;
1774 }
1775 if (PyFloat_Check(arg) ||
1776 (nb = Py_TYPE(arg)->tp_as_number) == NULL ||
1777 nb->nb_int == NULL) {
1778 PyErr_Format(PyExc_TypeError,
1779 "range() integer %s argument expected, got %s.",
1780 name, arg->ob_type->tp_name);
1781 return NULL;
1782 }
1783 v = nb->nb_int(arg);
1784 if (v == NULL)
1785 return NULL;
1786 if (PyInt_Check(v) || PyLong_Check(v))
1787 return v;
1788 Py_DECREF(v);
1789 PyErr_SetString(PyExc_TypeError,
1790 "__int__ should return int object");
1791 return NULL;
1792}
1793
1794/* An extension of builtin_range() that handles the case when PyLong
1795 * arguments are given. */
1796static PyObject *
1797handle_range_longs(PyObject *self, PyObject *args)
1798{
1799 PyObject *ilow = NULL;
1800 PyObject *ihigh = NULL;
1801 PyObject *istep = NULL;
1802
1803 PyObject *low = NULL;
1804 PyObject *high = NULL;
1805 PyObject *step = NULL;
1806
1807 PyObject *curnum = NULL;
1808 PyObject *v = NULL;
1809 long bign;
1810 Py_ssize_t i, n;
1811 int cmp_result;
1812
1813 PyObject *zero = PyLong_FromLong(0);
1814
1815 if (zero == NULL)
1816 return NULL;
1817
1818 if (!PyArg_UnpackTuple(args, "range", 1, 3, &ilow, &ihigh, &istep)) {
1819 Py_DECREF(zero);
1820 return NULL;
1821 }
1822
1823 /* Figure out which way we were called, supply defaults, and be
1824 * sure to incref everything so that the decrefs at the end
1825 * are correct. NB: ilow, ihigh and istep are borrowed references.
1826 */
1827 assert(ilow != NULL);
1828 if (ihigh == NULL) {
1829 /* only 1 arg -- it's the upper limit */
1830 ihigh = ilow;
1831 ilow = NULL;
1832 }
1833
1834 /* convert ihigh if necessary */
1835 assert(ihigh != NULL);
1836 high = get_range_long_argument(ihigh, "end");
1837 if (high == NULL)
1838 goto Fail;
1839
1840 /* ihigh correct now; do ilow */
1841 if (ilow == NULL) {
1842 Py_INCREF(zero);
1843 low = zero;
1844 }
1845 else {
1846 low = get_range_long_argument(ilow, "start");
1847 if (low == NULL)
1848 goto Fail;
1849 }
1850
1851 /* ilow and ihigh correct now; do istep */
1852 if (istep == NULL)
1853 step = PyLong_FromLong(1);
1854 else
1855 step = get_range_long_argument(istep, "step");
1856 if (step == NULL)
1857 goto Fail;
1858
1859 if (PyObject_Cmp(step, zero, &cmp_result) == -1)
1860 goto Fail;
1861
1862 if (cmp_result == 0) {
1863 PyErr_SetString(PyExc_ValueError,
1864 "range() step argument must not be zero");
1865 goto Fail;
1866 }
1867
1868 if (cmp_result > 0)
1869 bign = get_len_of_range_longs(low, high, step);
1870 else {
1871 PyObject *neg_step = PyNumber_Negative(step);
1872 if (neg_step == NULL)
1873 goto Fail;
1874 bign = get_len_of_range_longs(high, low, neg_step);
1875 Py_DECREF(neg_step);
1876 }
1877
1878 n = (Py_ssize_t)bign;
1879 if (bign < 0 || (long)n != bign) {
1880 PyErr_SetString(PyExc_OverflowError,
1881 "range() result has too many items");
1882 goto Fail;
1883 }
1884
1885 v = PyList_New(n);
1886 if (v == NULL)
1887 goto Fail;
1888
1889 curnum = low;
1890 Py_INCREF(curnum);
1891
1892 for (i = 0; i < n; i++) {
1893 PyObject *w = PyNumber_Long(curnum);
1894 PyObject *tmp_num;
1895 if (w == NULL)
1896 goto Fail;
1897
1898 PyList_SET_ITEM(v, i, w);
1899
1900 tmp_num = PyNumber_Add(curnum, step);
1901 if (tmp_num == NULL)
1902 goto Fail;
1903
1904 Py_DECREF(curnum);
1905 curnum = tmp_num;
1906 }
1907 Py_DECREF(low);
1908 Py_DECREF(high);
1909 Py_DECREF(step);
1910 Py_DECREF(zero);
1911 Py_DECREF(curnum);
1912 return v;
1913
1914 Fail:
1915 Py_XDECREF(low);
1916 Py_XDECREF(high);
1917 Py_XDECREF(step);
1918 Py_DECREF(zero);
1919 Py_XDECREF(curnum);
1920 Py_XDECREF(v);
1921 return NULL;
1922}
1923
1924/* Return number of items in range/xrange (lo, hi, step). step > 0
1925 * required. Return a value < 0 if & only if the true value is too
1926 * large to fit in a signed long.
1927 */
1928static long
1929get_len_of_range(long lo, long hi, long step)
1930{
1931 /* -------------------------------------------------------------
1932 If lo >= hi, the range is empty.
1933 Else if n values are in the range, the last one is
1934 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1935 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1936 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1937 the RHS is non-negative and so truncation is the same as the
1938 floor. Letting M be the largest positive long, the worst case
1939 for the RHS numerator is hi=M, lo=-M-1, and then
1940 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1941 precision to compute the RHS exactly.
1942 ---------------------------------------------------------------*/
1943 long n = 0;
1944 if (lo < hi) {
1945 unsigned long uhi = (unsigned long)hi;
1946 unsigned long ulo = (unsigned long)lo;
1947 unsigned long diff = uhi - ulo - 1;
1948 n = (long)(diff / (unsigned long)step + 1);
1949 }
1950 return n;
1951}
1952
1953static PyObject *
1954builtin_range(PyObject *self, PyObject *args)
1955{
1956 long ilow = 0, ihigh = 0, istep = 1;
1957 long bign;
1958 Py_ssize_t i, n;
1959
1960 PyObject *v;
1961
1962 if (PyTuple_Size(args) <= 1) {
1963 if (!PyArg_ParseTuple(args,
1964 "l;range() requires 1-3 int arguments",
1965 &ihigh)) {
1966 PyErr_Clear();
1967 return handle_range_longs(self, args);
1968 }
1969 }
1970 else {
1971 if (!PyArg_ParseTuple(args,
1972 "ll|l;range() requires 1-3 int arguments",
1973 &ilow, &ihigh, &istep)) {
1974 PyErr_Clear();
1975 return handle_range_longs(self, args);
1976 }
1977 }
1978 if (istep == 0) {
1979 PyErr_SetString(PyExc_ValueError,
1980 "range() step argument must not be zero");
1981 return NULL;
1982 }
1983 if (istep > 0)
1984 bign = get_len_of_range(ilow, ihigh, istep);
1985 else
1986 bign = get_len_of_range(ihigh, ilow, -istep);
1987 n = (Py_ssize_t)bign;
1988 if (bign < 0 || (long)n != bign) {
1989 PyErr_SetString(PyExc_OverflowError,
1990 "range() result has too many items");
1991 return NULL;
1992 }
1993 v = PyList_New(n);
1994 if (v == NULL)
1995 return NULL;
1996 for (i = 0; i < n; i++) {
1997 PyObject *w = PyInt_FromLong(ilow);
1998 if (w == NULL) {
1999 Py_DECREF(v);
2000 return NULL;
2001 }
2002 PyList_SET_ITEM(v, i, w);
2003 ilow += istep;
2004 }
2005 return v;
2006}
2007
2008PyDoc_STRVAR(range_doc,
2009"range(stop) -> list of integers\n\
2010range(start, stop[, step]) -> list of integers\n\
2011\n\
2012Return a list containing an arithmetic progression of integers.\n\
2013range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
2014When step is given, it specifies the increment (or decrement).\n\
2015For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
2016These are exactly the valid indices for a list of 4 elements.");
2017
2018
2019static PyObject *
2020builtin_raw_input(PyObject *self, PyObject *args)
2021{
2022 PyObject *v = NULL;
2023 PyObject *fin = PySys_GetObject("stdin");
2024 PyObject *fout = PySys_GetObject("stdout");
2025
2026 if (!PyArg_UnpackTuple(args, "[raw_]input", 0, 1, &v))
2027 return NULL;
2028
2029 if (fin == NULL) {
2030 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdin");
2031 return NULL;
2032 }
2033 if (fout == NULL) {
2034 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdout");
2035 return NULL;
2036 }
2037 if (PyFile_SoftSpace(fout, 0)) {
2038 if (PyFile_WriteString(" ", fout) != 0)
2039 return NULL;
2040 }
2041 if (PyFile_AsFile(fin) && PyFile_AsFile(fout)
2042 && isatty(fileno(PyFile_AsFile(fin)))
2043 && isatty(fileno(PyFile_AsFile(fout)))) {
2044 PyObject *po;
2045 char *prompt;
2046 char *s;
2047 PyObject *result;
2048 if (v != NULL) {
2049 po = PyObject_Str(v);
2050 if (po == NULL)
2051 return NULL;
2052 prompt = PyString_AsString(po);
2053 if (prompt == NULL)
2054 return NULL;
2055 }
2056 else {
2057 po = NULL;
2058 prompt = "";
2059 }
2060 s = PyOS_Readline(PyFile_AsFile(fin), PyFile_AsFile(fout),
2061 prompt);
2062 Py_XDECREF(po);
2063 if (s == NULL) {
2064 if (!PyErr_Occurred())
2065 PyErr_SetNone(PyExc_KeyboardInterrupt);
2066 return NULL;
2067 }
2068 if (*s == '\0') {
2069 PyErr_SetNone(PyExc_EOFError);
2070 result = NULL;
2071 }
2072 else { /* strip trailing '\n' */
2073 size_t len = strlen(s);
2074 if (len > PY_SSIZE_T_MAX) {
2075 PyErr_SetString(PyExc_OverflowError,
2076 "[raw_]input: input too long");
2077 result = NULL;
2078 }
2079 else {
2080 result = PyString_FromStringAndSize(s, len-1);
2081 }
2082 }
2083 PyMem_FREE(s);
2084 return result;
2085 }
2086 if (v != NULL) {
2087 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
2088 return NULL;
2089 }
2090 return PyFile_GetLine(fin, -1);
2091}
2092
2093PyDoc_STRVAR(raw_input_doc,
2094"raw_input([prompt]) -> string\n\
2095\n\
2096Read a string from standard input. The trailing newline is stripped.\n\
2097If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
2098On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
2099is printed without a trailing newline before reading.");
2100
2101
2102static PyObject *
2103builtin_reduce(PyObject *self, PyObject *args)
2104{
2105 static PyObject *functools_reduce = NULL;
2106
2107 if (PyErr_WarnPy3k("reduce() not supported in 3.x; "
2108 "use functools.reduce()", 1) < 0)
2109 return NULL;
2110
2111 if (functools_reduce == NULL) {
2112 PyObject *functools = PyImport_ImportModule("functools");
2113 if (functools == NULL)
2114 return NULL;
2115 functools_reduce = PyObject_GetAttrString(functools, "reduce");
2116 Py_DECREF(functools);
2117 if (functools_reduce == NULL)
2118 return NULL;
2119 }
2120 return PyObject_Call(functools_reduce, args, NULL);
2121}
2122
2123PyDoc_STRVAR(reduce_doc,
2124"reduce(function, sequence[, initial]) -> value\n\
2125\n\
2126Apply a function of two arguments cumulatively to the items of a sequence,\n\
2127from left to right, so as to reduce the sequence to a single value.\n\
2128For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
2129((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
2130of the sequence in the calculation, and serves as a default when the\n\
2131sequence is empty.");
2132
2133
2134static PyObject *
2135builtin_reload(PyObject *self, PyObject *v)
2136{
2137 if (PyErr_WarnPy3k("In 3.x, reload() is renamed to imp.reload()",
2138 1) < 0)
2139 return NULL;
2140
2141 return PyImport_ReloadModule(v);
2142}
2143
2144PyDoc_STRVAR(reload_doc,
2145"reload(module) -> module\n\
2146\n\
2147Reload the module. The module must have been successfully imported before.");
2148
2149
2150static PyObject *
2151builtin_repr(PyObject *self, PyObject *v)
2152{
2153 return PyObject_Repr(v);
2154}
2155
2156PyDoc_STRVAR(repr_doc,
2157"repr(object) -> string\n\
2158\n\
2159Return the canonical string representation of the object.\n\
2160For most object types, eval(repr(object)) == object.");
2161
2162
2163static PyObject *
2164builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
2165{
2166 double x;
2167 PyObject *o_ndigits = NULL;
2168 Py_ssize_t ndigits;
2169 static char *kwlist[] = {"number", "ndigits", 0};
2170
2171 if (!PyArg_ParseTupleAndKeywords(args, kwds, "d|O:round",
2172 kwlist, &x, &o_ndigits))
2173 return NULL;
2174
2175 if (o_ndigits == NULL) {
2176 /* second argument defaults to 0 */
2177 ndigits = 0;
2178 }
2179 else {
2180 /* interpret 2nd argument as a Py_ssize_t; clip on overflow */
2181 ndigits = PyNumber_AsSsize_t(o_ndigits, NULL);
2182 if (ndigits == -1 && PyErr_Occurred())
2183 return NULL;
2184 }
2185
2186 /* nans, infinities and zeros round to themselves */
2187 if (!Py_IS_FINITE(x) || x == 0.0)
2188 return PyFloat_FromDouble(x);
2189
2190 /* Deal with extreme values for ndigits. For ndigits > NDIGITS_MAX, x
2191 always rounds to itself. For ndigits < NDIGITS_MIN, x always
2192 rounds to +-0.0. Here 0.30103 is an upper bound for log10(2). */
2193#define NDIGITS_MAX ((int)((DBL_MANT_DIG-DBL_MIN_EXP) * 0.30103))
2194#define NDIGITS_MIN (-(int)((DBL_MAX_EXP + 1) * 0.30103))
2195 if (ndigits > NDIGITS_MAX)
2196 /* return x */
2197 return PyFloat_FromDouble(x);
2198 else if (ndigits < NDIGITS_MIN)
2199 /* return 0.0, but with sign of x */
2200 return PyFloat_FromDouble(0.0*x);
2201 else
2202 /* finite x, and ndigits is not unreasonably large */
2203 /* _Py_double_round is defined in floatobject.c */
2204 return _Py_double_round(x, (int)ndigits);
2205#undef NDIGITS_MAX
2206#undef NDIGITS_MIN
2207}
2208
2209PyDoc_STRVAR(round_doc,
2210"round(number[, ndigits]) -> floating point number\n\
2211\n\
2212Round a number to a given precision in decimal digits (default 0 digits).\n\
2213This always returns a floating point number. Precision may be negative.");
2214
2215static PyObject *
2216builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
2217{
2218 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
2219 PyObject *callable;
2220 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
2221 int reverse;
2222
2223 /* args 1-4 should match listsort in Objects/listobject.c */
2224 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
2225 kwlist, &seq, &compare, &keyfunc, &reverse))
2226 return NULL;
2227
2228 newlist = PySequence_List(seq);
2229 if (newlist == NULL)
2230 return NULL;
2231
2232 callable = PyObject_GetAttrString(newlist, "sort");
2233 if (callable == NULL) {
2234 Py_DECREF(newlist);
2235 return NULL;
2236 }
2237
2238 newargs = PyTuple_GetSlice(args, 1, 4);
2239 if (newargs == NULL) {
2240 Py_DECREF(newlist);
2241 Py_DECREF(callable);
2242 return NULL;
2243 }
2244
2245 v = PyObject_Call(callable, newargs, kwds);
2246 Py_DECREF(newargs);
2247 Py_DECREF(callable);
2248 if (v == NULL) {
2249 Py_DECREF(newlist);
2250 return NULL;
2251 }
2252 Py_DECREF(v);
2253 return newlist;
2254}
2255
2256PyDoc_STRVAR(sorted_doc,
2257"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
2258
2259static PyObject *
2260builtin_vars(PyObject *self, PyObject *args)
2261{
2262 PyObject *v = NULL;
2263 PyObject *d;
2264
2265 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
2266 return NULL;
2267 if (v == NULL) {
2268 d = PyEval_GetLocals();
2269 if (d == NULL) {
2270 if (!PyErr_Occurred())
2271 PyErr_SetString(PyExc_SystemError,
2272 "vars(): no locals!?");
2273 }
2274 else
2275 Py_INCREF(d);
2276 }
2277 else {
2278 d = PyObject_GetAttrString(v, "__dict__");
2279 if (d == NULL) {
2280 PyErr_SetString(PyExc_TypeError,
2281 "vars() argument must have __dict__ attribute");
2282 return NULL;
2283 }
2284 }
2285 return d;
2286}
2287
2288PyDoc_STRVAR(vars_doc,
2289"vars([object]) -> dictionary\n\
2290\n\
2291Without arguments, equivalent to locals().\n\
2292With an argument, equivalent to object.__dict__.");
2293
2294
2295static PyObject*
2296builtin_sum(PyObject *self, PyObject *args)
2297{
2298 PyObject *seq;
2299 PyObject *result = NULL;
2300 PyObject *temp, *item, *iter;
2301
2302 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
2303 return NULL;
2304
2305 iter = PyObject_GetIter(seq);
2306 if (iter == NULL)
2307 return NULL;
2308
2309 if (result == NULL) {
2310 result = PyInt_FromLong(0);
2311 if (result == NULL) {
2312 Py_DECREF(iter);
2313 return NULL;
2314 }
2315 } else {
2316 /* reject string values for 'start' parameter */
2317 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
2318 PyErr_SetString(PyExc_TypeError,
2319 "sum() can't sum strings [use ''.join(seq) instead]");
2320 Py_DECREF(iter);
2321 return NULL;
2322 }
2323 Py_INCREF(result);
2324 }
2325
2326#ifndef SLOW_SUM
2327 /* Fast addition by keeping temporary sums in C instead of new Python objects.
2328 Assumes all inputs are the same type. If the assumption fails, default
2329 to the more general routine.
2330 */
2331 if (PyInt_CheckExact(result)) {
2332 long i_result = PyInt_AS_LONG(result);
2333 Py_DECREF(result);
2334 result = NULL;
2335 while(result == NULL) {
2336 item = PyIter_Next(iter);
2337 if (item == NULL) {
2338 Py_DECREF(iter);
2339 if (PyErr_Occurred())
2340 return NULL;
2341 return PyInt_FromLong(i_result);
2342 }
2343 if (PyInt_CheckExact(item)) {
2344 long b = PyInt_AS_LONG(item);
2345 long x = i_result + b;
2346 if ((x^i_result) >= 0 || (x^b) >= 0) {
2347 i_result = x;
2348 Py_DECREF(item);
2349 continue;
2350 }
2351 }
2352 /* Either overflowed or is not an int. Restore real objects and process normally */
2353 result = PyInt_FromLong(i_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;
2361 }
2362 }
2363 }
2364
2365 if (PyFloat_CheckExact(result)) {
2366 double f_result = PyFloat_AS_DOUBLE(result);
2367 Py_DECREF(result);
2368 result = NULL;
2369 while(result == NULL) {
2370 item = PyIter_Next(iter);
2371 if (item == NULL) {
2372 Py_DECREF(iter);
2373 if (PyErr_Occurred())
2374 return NULL;
2375 return PyFloat_FromDouble(f_result);
2376 }
2377 if (PyFloat_CheckExact(item)) {
2378 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2379 f_result += PyFloat_AS_DOUBLE(item);
2380 PyFPE_END_PROTECT(f_result)
2381 Py_DECREF(item);
2382 continue;
2383 }
2384 if (PyInt_CheckExact(item)) {
2385 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2386 f_result += (double)PyInt_AS_LONG(item);
2387 PyFPE_END_PROTECT(f_result)
2388 Py_DECREF(item);
2389 continue;
2390 }
2391 result = PyFloat_FromDouble(f_result);
2392 temp = PyNumber_Add(result, item);
2393 Py_DECREF(result);
2394 Py_DECREF(item);
2395 result = temp;
2396 if (result == NULL) {
2397 Py_DECREF(iter);
2398 return NULL;
2399 }
2400 }
2401 }
2402#endif
2403
2404 for(;;) {
2405 item = PyIter_Next(iter);
2406 if (item == NULL) {
2407 /* error, or end-of-sequence */
2408 if (PyErr_Occurred()) {
2409 Py_DECREF(result);
2410 result = NULL;
2411 }
2412 break;
2413 }
2414 /* It's tempting to use PyNumber_InPlaceAdd instead of
2415 PyNumber_Add here, to avoid quadratic running time
2416 when doing 'sum(list_of_lists, [])'. However, this
2417 would produce a change in behaviour: a snippet like
2418
2419 empty = []
2420 sum([[x] for x in range(10)], empty)
2421
2422 would change the value of empty. */
2423 temp = PyNumber_Add(result, item);
2424 Py_DECREF(result);
2425 Py_DECREF(item);
2426 result = temp;
2427 if (result == NULL)
2428 break;
2429 }
2430 Py_DECREF(iter);
2431 return result;
2432}
2433
2434PyDoc_STRVAR(sum_doc,
2435"sum(sequence[, start]) -> value\n\
2436\n\
2437Return the sum of a sequence of numbers (NOT strings) plus the value\n\
2438of parameter 'start' (which defaults to 0). When the sequence is\n\
2439empty, return start.");
2440
2441
2442static PyObject *
2443builtin_isinstance(PyObject *self, PyObject *args)
2444{
2445 PyObject *inst;
2446 PyObject *cls;
2447 int retval;
2448
2449 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
2450 return NULL;
2451
2452 retval = PyObject_IsInstance(inst, cls);
2453 if (retval < 0)
2454 return NULL;
2455 return PyBool_FromLong(retval);
2456}
2457
2458PyDoc_STRVAR(isinstance_doc,
2459"isinstance(object, class-or-type-or-tuple) -> bool\n\
2460\n\
2461Return whether an object is an instance of a class or of a subclass thereof.\n\
2462With a type as second argument, return whether that is the object's type.\n\
2463The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
2464isinstance(x, A) or isinstance(x, B) or ... (etc.).");
2465
2466
2467static PyObject *
2468builtin_issubclass(PyObject *self, PyObject *args)
2469{
2470 PyObject *derived;
2471 PyObject *cls;
2472 int retval;
2473
2474 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
2475 return NULL;
2476
2477 retval = PyObject_IsSubclass(derived, cls);
2478 if (retval < 0)
2479 return NULL;
2480 return PyBool_FromLong(retval);
2481}
2482
2483PyDoc_STRVAR(issubclass_doc,
2484"issubclass(C, B) -> bool\n\
2485\n\
2486Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2487When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2488is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
2489
2490
2491static PyObject*
2492builtin_zip(PyObject *self, PyObject *args)
2493{
2494 PyObject *ret;
2495 const Py_ssize_t itemsize = PySequence_Length(args);
2496 Py_ssize_t i;
2497 PyObject *itlist; /* tuple of iterators */
2498 Py_ssize_t len; /* guess at result length */
2499
2500 if (itemsize == 0)
2501 return PyList_New(0);
2502
2503 /* args must be a tuple */
2504 assert(PyTuple_Check(args));
2505
2506 /* Guess at result length: the shortest of the input lengths.
2507 If some argument refuses to say, we refuse to guess too, lest
2508 an argument like xrange(sys.maxint) lead us astray.*/
2509 len = -1; /* unknown */
2510 for (i = 0; i < itemsize; ++i) {
2511 PyObject *item = PyTuple_GET_ITEM(args, i);
2512 Py_ssize_t thislen = _PyObject_LengthHint(item, -2);
2513 if (thislen < 0) {
2514 if (thislen == -1)
2515 return NULL;
2516 len = -1;
2517 break;
2518 }
2519 else if (len < 0 || thislen < len)
2520 len = thislen;
2521 }
2522
2523 /* allocate result list */
2524 if (len < 0)
2525 len = 10; /* arbitrary */
2526 if ((ret = PyList_New(len)) == NULL)
2527 return NULL;
2528
2529 /* obtain iterators */
2530 itlist = PyTuple_New(itemsize);
2531 if (itlist == NULL)
2532 goto Fail_ret;
2533 for (i = 0; i < itemsize; ++i) {
2534 PyObject *item = PyTuple_GET_ITEM(args, i);
2535 PyObject *it = PyObject_GetIter(item);
2536 if (it == NULL) {
2537 if (PyErr_ExceptionMatches(PyExc_TypeError))
2538 PyErr_Format(PyExc_TypeError,
2539 "zip argument #%zd must support iteration",
2540 i+1);
2541 goto Fail_ret_itlist;
2542 }
2543 PyTuple_SET_ITEM(itlist, i, it);
2544 }
2545
2546 /* build result into ret list */
2547 for (i = 0; ; ++i) {
2548 int j;
2549 PyObject *next = PyTuple_New(itemsize);
2550 if (!next)
2551 goto Fail_ret_itlist;
2552
2553 for (j = 0; j < itemsize; j++) {
2554 PyObject *it = PyTuple_GET_ITEM(itlist, j);
2555 PyObject *item = PyIter_Next(it);
2556 if (!item) {
2557 if (PyErr_Occurred()) {
2558 Py_DECREF(ret);
2559 ret = NULL;
2560 }
2561 Py_DECREF(next);
2562 Py_DECREF(itlist);
2563 goto Done;
2564 }
2565 PyTuple_SET_ITEM(next, j, item);
2566 }
2567
2568 if (i < len)
2569 PyList_SET_ITEM(ret, i, next);
2570 else {
2571 int status = PyList_Append(ret, next);
2572 Py_DECREF(next);
2573 ++len;
2574 if (status < 0)
2575 goto Fail_ret_itlist;
2576 }
2577 }
2578
2579Done:
2580 if (ret != NULL && i < len) {
2581 /* The list is too big. */
2582 if (PyList_SetSlice(ret, i, len, NULL) < 0)
2583 return NULL;
2584 }
2585 return ret;
2586
2587Fail_ret_itlist:
2588 Py_DECREF(itlist);
2589Fail_ret:
2590 Py_DECREF(ret);
2591 return NULL;
2592}
2593
2594
2595PyDoc_STRVAR(zip_doc,
2596"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
2597\n\
2598Return a list of tuples, where each tuple contains the i-th element\n\
2599from each of the argument sequences. The returned list is truncated\n\
2600in length to the length of the shortest argument sequence.");
2601
2602
2603static PyMethodDef builtin_methods[] = {
2604 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
2605 {"abs", builtin_abs, METH_O, abs_doc},
2606 {"all", builtin_all, METH_O, all_doc},
2607 {"any", builtin_any, METH_O, any_doc},
2608 {"apply", builtin_apply, METH_VARARGS, apply_doc},
2609 {"bin", builtin_bin, METH_O, bin_doc},
2610 {"callable", builtin_callable, METH_O, callable_doc},
2611 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2612 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
2613 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
2614 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
2615 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2616 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2617 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2618 {"eval", builtin_eval, METH_VARARGS, eval_doc},
2619 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
2620 {"filter", builtin_filter, METH_VARARGS, filter_doc},
2621 {"format", builtin_format, METH_VARARGS, format_doc},
2622 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2623 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2624 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2625 {"hash", builtin_hash, METH_O, hash_doc},
2626 {"hex", builtin_hex, METH_O, hex_doc},
2627 {"id", builtin_id, METH_O, id_doc},
2628 {"input", builtin_input, METH_VARARGS, input_doc},
2629 {"intern", builtin_intern, METH_VARARGS, intern_doc},
2630 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2631 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2632 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2633 {"len", builtin_len, METH_O, len_doc},
2634 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2635 {"map", builtin_map, METH_VARARGS, map_doc},
2636 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2637 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
2638 {"next", builtin_next, METH_VARARGS, next_doc},
2639 {"oct", builtin_oct, METH_O, oct_doc},
2640 {"open", (PyCFunction)builtin_open, METH_VARARGS | METH_KEYWORDS, open_doc},
2641 {"ord", builtin_ord, METH_O, ord_doc},
2642 {"pow", builtin_pow, METH_VARARGS, pow_doc},
2643 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
2644 {"range", builtin_range, METH_VARARGS, range_doc},
2645 {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc},
2646 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
2647 {"reload", builtin_reload, METH_O, reload_doc},
2648 {"repr", builtin_repr, METH_O, repr_doc},
2649 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
2650 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
2651 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
2652 {"sum", builtin_sum, METH_VARARGS, sum_doc},
2653#ifdef Py_USING_UNICODE
2654 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
2655#endif
2656 {"vars", builtin_vars, METH_VARARGS, vars_doc},
2657 {"zip", builtin_zip, METH_VARARGS, zip_doc},
2658 {NULL, NULL},
2659};
2660
2661PyDoc_STRVAR(builtin_doc,
2662"Built-in functions, exceptions, and other objects.\n\
2663\n\
2664Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
2665
2666PyObject *
2667_PyBuiltin_Init(void)
2668{
2669 PyObject *mod, *dict, *debug;
2670 mod = Py_InitModule4("__builtin__", builtin_methods,
2671 builtin_doc, (PyObject *)NULL,
2672 PYTHON_API_VERSION);
2673 if (mod == NULL)
2674 return NULL;
2675 dict = PyModule_GetDict(mod);
2676
2677#ifdef Py_TRACE_REFS
2678 /* __builtin__ exposes a number of statically allocated objects
2679 * that, before this code was added in 2.3, never showed up in
2680 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2681 * result, programs leaking references to None and False (etc)
2682 * couldn't be diagnosed by examining sys.getobjects(0).
2683 */
2684#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2685#else
2686#define ADD_TO_ALL(OBJECT) (void)0
2687#endif
2688
2689#define SETBUILTIN(NAME, OBJECT) \
2690 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2691 return NULL; \
2692 ADD_TO_ALL(OBJECT)
2693
2694 SETBUILTIN("None", Py_None);
2695 SETBUILTIN("Ellipsis", Py_Ellipsis);
2696 SETBUILTIN("NotImplemented", Py_NotImplemented);
2697 SETBUILTIN("False", Py_False);
2698 SETBUILTIN("True", Py_True);
2699 SETBUILTIN("basestring", &PyBaseString_Type);
2700 SETBUILTIN("bool", &PyBool_Type);
2701 SETBUILTIN("memoryview", &PyMemoryView_Type);
2702 SETBUILTIN("bytearray", &PyByteArray_Type);
2703 SETBUILTIN("bytes", &PyString_Type);
2704 SETBUILTIN("buffer", &PyBuffer_Type);
2705 SETBUILTIN("classmethod", &PyClassMethod_Type);
2706#ifndef WITHOUT_COMPLEX
2707 SETBUILTIN("complex", &PyComplex_Type);
2708#endif
2709 SETBUILTIN("dict", &PyDict_Type);
2710 SETBUILTIN("enumerate", &PyEnum_Type);
2711 SETBUILTIN("file", &PyFile_Type);
2712 SETBUILTIN("float", &PyFloat_Type);
2713 SETBUILTIN("frozenset", &PyFrozenSet_Type);
2714 SETBUILTIN("property", &PyProperty_Type);
2715 SETBUILTIN("int", &PyInt_Type);
2716 SETBUILTIN("list", &PyList_Type);
2717 SETBUILTIN("long", &PyLong_Type);
2718 SETBUILTIN("object", &PyBaseObject_Type);
2719 SETBUILTIN("reversed", &PyReversed_Type);
2720 SETBUILTIN("set", &PySet_Type);
2721 SETBUILTIN("slice", &PySlice_Type);
2722 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2723 SETBUILTIN("str", &PyString_Type);
2724 SETBUILTIN("super", &PySuper_Type);
2725 SETBUILTIN("tuple", &PyTuple_Type);
2726 SETBUILTIN("type", &PyType_Type);
2727 SETBUILTIN("xrange", &PyRange_Type);
2728#ifdef Py_USING_UNICODE
2729 SETBUILTIN("unicode", &PyUnicode_Type);
2730#endif
2731 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
2732 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2733 Py_XDECREF(debug);
2734 return NULL;
2735 }
2736 Py_XDECREF(debug);
2737
2738 return mod;
2739#undef ADD_TO_ALL
2740#undef SETBUILTIN
2741}
2742
2743/* Helper for filter(): filter a tuple through a function */
2744
2745static PyObject *
2746filtertuple(PyObject *func, PyObject *tuple)
2747{
2748 PyObject *result;
2749 Py_ssize_t i, j;
2750 Py_ssize_t len = PyTuple_Size(tuple);
2751
2752 if (len == 0) {
2753 if (PyTuple_CheckExact(tuple))
2754 Py_INCREF(tuple);
2755 else
2756 tuple = PyTuple_New(0);
2757 return tuple;
2758 }
2759
2760 if ((result = PyTuple_New(len)) == NULL)
2761 return NULL;
2762
2763 for (i = j = 0; i < len; ++i) {
2764 PyObject *item, *good;
2765 int ok;
2766
2767 if (tuple->ob_type->tp_as_sequence &&
2768 tuple->ob_type->tp_as_sequence->sq_item) {
2769 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
2770 if (item == NULL)
2771 goto Fail_1;
2772 } else {
2773 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
2774 goto Fail_1;
2775 }
2776 if (func == Py_None) {
2777 Py_INCREF(item);
2778 good = item;
2779 }
2780 else {
2781 PyObject *arg = PyTuple_Pack(1, item);
2782 if (arg == NULL) {
2783 Py_DECREF(item);
2784 goto Fail_1;
2785 }
2786 good = PyEval_CallObject(func, arg);
2787 Py_DECREF(arg);
2788 if (good == NULL) {
2789 Py_DECREF(item);
2790 goto Fail_1;
2791 }
2792 }
2793 ok = PyObject_IsTrue(good);
2794 Py_DECREF(good);
2795 if (ok > 0) {
2796 if (PyTuple_SetItem(result, j++, item) < 0)
2797 goto Fail_1;
2798 }
2799 else {
2800 Py_DECREF(item);
2801 if (ok < 0)
2802 goto Fail_1;
2803 }
2804 }
2805
2806 if (_PyTuple_Resize(&result, j) < 0)
2807 return NULL;
2808
2809 return result;
2810
2811Fail_1:
2812 Py_DECREF(result);
2813 return NULL;
2814}
2815
2816
2817/* Helper for filter(): filter a string through a function */
2818
2819static PyObject *
2820filterstring(PyObject *func, PyObject *strobj)
2821{
2822 PyObject *result;
2823 Py_ssize_t i, j;
2824 Py_ssize_t len = PyString_Size(strobj);
2825 Py_ssize_t outlen = len;
2826
2827 if (func == Py_None) {
2828 /* If it's a real string we can return the original,
2829 * as no character is ever false and __getitem__
2830 * does return this character. If it's a subclass
2831 * we must go through the __getitem__ loop */
2832 if (PyString_CheckExact(strobj)) {
2833 Py_INCREF(strobj);
2834 return strobj;
2835 }
2836 }
2837 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
2838 return NULL;
2839
2840 for (i = j = 0; i < len; ++i) {
2841 PyObject *item;
2842 int ok;
2843
2844 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2845 if (item == NULL)
2846 goto Fail_1;
2847 if (func==Py_None) {
2848 ok = 1;
2849 } else {
2850 PyObject *arg, *good;
2851 arg = PyTuple_Pack(1, item);
2852 if (arg == NULL) {
2853 Py_DECREF(item);
2854 goto Fail_1;
2855 }
2856 good = PyEval_CallObject(func, arg);
2857 Py_DECREF(arg);
2858 if (good == NULL) {
2859 Py_DECREF(item);
2860 goto Fail_1;
2861 }
2862 ok = PyObject_IsTrue(good);
2863 Py_DECREF(good);
2864 }
2865 if (ok > 0) {
2866 Py_ssize_t reslen;
2867 if (!PyString_Check(item)) {
2868 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2869 " __getitem__ returned different type");
2870 Py_DECREF(item);
2871 goto Fail_1;
2872 }
2873 reslen = PyString_GET_SIZE(item);
2874 if (reslen == 1) {
2875 PyString_AS_STRING(result)[j++] =
2876 PyString_AS_STRING(item)[0];
2877 } else {
2878 /* do we need more space? */
2879 Py_ssize_t need = j;
2880
2881 /* calculate space requirements while checking for overflow */
2882 if (need > PY_SSIZE_T_MAX - reslen) {
2883 Py_DECREF(item);
2884 goto Fail_1;
2885 }
2886
2887 need += reslen;
2888
2889 if (need > PY_SSIZE_T_MAX - len) {
2890 Py_DECREF(item);
2891 goto Fail_1;
2892 }
2893
2894 need += len;
2895
2896 if (need <= i) {
2897 Py_DECREF(item);
2898 goto Fail_1;
2899 }
2900
2901 need = need - i - 1;
2902
2903 assert(need >= 0);
2904 assert(outlen >= 0);
2905
2906 if (need > outlen) {
2907 /* overallocate, to avoid reallocations */
2908 if (outlen > PY_SSIZE_T_MAX / 2) {
2909 Py_DECREF(item);
2910 return NULL;
2911 }
2912
2913 if (need<2*outlen) {
2914 need = 2*outlen;
2915 }
2916 if (_PyString_Resize(&result, need)) {
2917 Py_DECREF(item);
2918 return NULL;
2919 }
2920 outlen = need;
2921 }
2922 memcpy(
2923 PyString_AS_STRING(result) + j,
2924 PyString_AS_STRING(item),
2925 reslen
2926 );
2927 j += reslen;
2928 }
2929 }
2930 Py_DECREF(item);
2931 if (ok < 0)
2932 goto Fail_1;
2933 }
2934
2935 if (j < outlen)
2936 _PyString_Resize(&result, j);
2937
2938 return result;
2939
2940Fail_1:
2941 Py_DECREF(result);
2942 return NULL;
2943}
2944
2945#ifdef Py_USING_UNICODE
2946/* Helper for filter(): filter a Unicode object through a function */
2947
2948static PyObject *
2949filterunicode(PyObject *func, PyObject *strobj)
2950{
2951 PyObject *result;
2952 register Py_ssize_t i, j;
2953 Py_ssize_t len = PyUnicode_GetSize(strobj);
2954 Py_ssize_t outlen = len;
2955
2956 if (func == Py_None) {
2957 /* If it's a real string we can return the original,
2958 * as no character is ever false and __getitem__
2959 * does return this character. If it's a subclass
2960 * we must go through the __getitem__ loop */
2961 if (PyUnicode_CheckExact(strobj)) {
2962 Py_INCREF(strobj);
2963 return strobj;
2964 }
2965 }
2966 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2967 return NULL;
2968
2969 for (i = j = 0; i < len; ++i) {
2970 PyObject *item, *arg, *good;
2971 int ok;
2972
2973 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2974 if (item == NULL)
2975 goto Fail_1;
2976 if (func == Py_None) {
2977 ok = 1;
2978 } else {
2979 arg = PyTuple_Pack(1, item);
2980 if (arg == NULL) {
2981 Py_DECREF(item);
2982 goto Fail_1;
2983 }
2984 good = PyEval_CallObject(func, arg);
2985 Py_DECREF(arg);
2986 if (good == NULL) {
2987 Py_DECREF(item);
2988 goto Fail_1;
2989 }
2990 ok = PyObject_IsTrue(good);
2991 Py_DECREF(good);
2992 }
2993 if (ok > 0) {
2994 Py_ssize_t reslen;
2995 if (!PyUnicode_Check(item)) {
2996 PyErr_SetString(PyExc_TypeError,
2997 "can't filter unicode to unicode:"
2998 " __getitem__ returned different type");
2999 Py_DECREF(item);
3000 goto Fail_1;
3001 }
3002 reslen = PyUnicode_GET_SIZE(item);
3003 if (reslen == 1)
3004 PyUnicode_AS_UNICODE(result)[j++] =
3005 PyUnicode_AS_UNICODE(item)[0];
3006 else {
3007 /* do we need more space? */
3008 Py_ssize_t need = j + reslen + len - i - 1;
3009
3010 /* check that didnt overflow */
3011 if ((j > PY_SSIZE_T_MAX - reslen) ||
3012 ((j + reslen) > PY_SSIZE_T_MAX - len) ||
3013 ((j + reslen + len) < i) ||
3014 ((j + reslen + len - i) <= 0)) {
3015 Py_DECREF(item);
3016 return NULL;
3017 }
3018
3019 assert(need >= 0);
3020 assert(outlen >= 0);
3021
3022 if (need > outlen) {
3023 /* overallocate,
3024 to avoid reallocations */
3025 if (need < 2 * outlen) {
3026 if (outlen > PY_SSIZE_T_MAX / 2) {
3027 Py_DECREF(item);
3028 return NULL;
3029 } else {
3030 need = 2 * outlen;
3031 }
3032 }
3033
3034 if (PyUnicode_Resize(
3035 &result, need) < 0) {
3036 Py_DECREF(item);
3037 goto Fail_1;
3038 }
3039 outlen = need;
3040 }
3041 memcpy(PyUnicode_AS_UNICODE(result) + j,
3042 PyUnicode_AS_UNICODE(item),
3043 reslen*sizeof(Py_UNICODE));
3044 j += reslen;
3045 }
3046 }
3047 Py_DECREF(item);
3048 if (ok < 0)
3049 goto Fail_1;
3050 }
3051
3052 if (j < outlen)
3053 PyUnicode_Resize(&result, j);
3054
3055 return result;
3056
3057Fail_1:
3058 Py_DECREF(result);
3059 return NULL;
3060}
3061#endif
Note: See TracBrowser for help on using the repository browser.