annotate Python/bltinmodule.c @ 47787:b32101c19bf8 legacy-trunk

Grammar fixes
author Andrew M. Kuchling <amk@amk.ca>
date Fri, 20 Jun 2008 23:14:32 +0000
parents edc701d00b62
children 3ada46f2321d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 /* Built-in functions */
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
2
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
3 #include "Python.h"
46162
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
4 #include "Python-ast.h"
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
5
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
6 #include "node.h"
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35636
diff changeset
7 #include "code.h"
1263
65a1e4e9cd54 * Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
8 #include "eval.h"
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
9
5317
c72c7e1930b3 Keep gcc -Wall and Microsoft VC happy.
Guido van Rossum <guido@python.org>
parents: 5223
diff changeset
10 #include <ctype.h>
c72c7e1930b3 Keep gcc -Wall and Microsoft VC happy.
Guido van Rossum <guido@python.org>
parents: 5223
diff changeset
11
20654
edd9d0b3c47e SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents: 20471
diff changeset
12 #ifdef RISCOS
edd9d0b3c47e SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents: 20471
diff changeset
13 #include "unixstuff.h"
edd9d0b3c47e SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents: 20471
diff changeset
14 #endif
edd9d0b3c47e SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents: 20471
diff changeset
15
17822
50376d470648 Fix the Py_FileSystemDefaultEncoding checkin - declare the variable in a fileobject.h, and initialize it in bltinmodule.
Mark Hammond <mhammond@skippinet.com.au>
parents: 17817
diff changeset
16 /* The default encoding used by the platform file system APIs
50376d470648 Fix the Py_FileSystemDefaultEncoding checkin - declare the variable in a fileobject.h, and initialize it in bltinmodule.
Mark Hammond <mhammond@skippinet.com.au>
parents: 17817
diff changeset
17 Can remain NULL for all platforms that don't have such a concept
50376d470648 Fix the Py_FileSystemDefaultEncoding checkin - declare the variable in a fileobject.h, and initialize it in bltinmodule.
Mark Hammond <mhammond@skippinet.com.au>
parents: 17817
diff changeset
18 */
24071
8142f8d668a0 Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents: 23868
diff changeset
19 #if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
17822
50376d470648 Fix the Py_FileSystemDefaultEncoding checkin - declare the variable in a fileobject.h, and initialize it in bltinmodule.
Mark Hammond <mhammond@skippinet.com.au>
parents: 17817
diff changeset
20 const char *Py_FileSystemDefaultEncoding = "mbcs";
27782
904f0e769820 My previous checkin caused compile() to no longer accept buffers, as noted
Just van Rossum <just@letterror.com>
parents: 27781
diff changeset
21 #elif defined(__APPLE__)
904f0e769820 My previous checkin caused compile() to no longer accept buffers, as noted
Just van Rossum <just@letterror.com>
parents: 27781
diff changeset
22 const char *Py_FileSystemDefaultEncoding = "utf-8";
17822
50376d470648 Fix the Py_FileSystemDefaultEncoding checkin - declare the variable in a fileobject.h, and initialize it in bltinmodule.
Mark Hammond <mhammond@skippinet.com.au>
parents: 17817
diff changeset
23 #else
50376d470648 Fix the Py_FileSystemDefaultEncoding checkin - declare the variable in a fileobject.h, and initialize it in bltinmodule.
Mark Hammond <mhammond@skippinet.com.au>
parents: 17817
diff changeset
24 const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
50376d470648 Fix the Py_FileSystemDefaultEncoding checkin - declare the variable in a fileobject.h, and initialize it in bltinmodule.
Mark Hammond <mhammond@skippinet.com.au>
parents: 17817
diff changeset
25 #endif
17817
f7c385226f65 Add support for Windows using "mbcs" as the default Unicode encoding when dealing with the file system. As discussed on python-dev and in patch 410465.
Mark Hammond <mhammond@skippinet.com.au>
parents: 17694
diff changeset
26
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
27 /* Forward */
13447
a89f7f268de4 Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents: 13446
diff changeset
28 static PyObject *filterstring(PyObject *, PyObject *);
27385
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
29 #ifdef Py_USING_UNICODE
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
30 static PyObject *filterunicode(PyObject *, PyObject *);
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
31 #endif
13447
a89f7f268de4 Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents: 13446
diff changeset
32 static PyObject *filtertuple (PyObject *, PyObject *);
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
33
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
34 static PyObject *
37411
ea9a03b8b9f6 Accept keyword arguments for __import__ and doc the addition of the level param from PEP 328.
Neal Norwitz <nnorwitz@gmail.com>
parents: 37344
diff changeset
35 builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
36 {
37411
ea9a03b8b9f6 Accept keyword arguments for __import__ and doc the addition of the level param from PEP 328.
Neal Norwitz <nnorwitz@gmail.com>
parents: 37344
diff changeset
37 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
ea9a03b8b9f6 Accept keyword arguments for __import__ and doc the addition of the level param from PEP 328.
Neal Norwitz <nnorwitz@gmail.com>
parents: 37344
diff changeset
38 "level", 0};
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
39 char *name;
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
40 PyObject *globals = NULL;
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
41 PyObject *locals = NULL;
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
42 PyObject *fromlist = NULL;
36712
5c36c222e7ca SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents: 36675
diff changeset
43 int level = -1;
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
44
37411
ea9a03b8b9f6 Accept keyword arguments for __import__ and doc the addition of the level param from PEP 328.
Neal Norwitz <nnorwitz@gmail.com>
parents: 37344
diff changeset
45 if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|OOOi:__import__",
ea9a03b8b9f6 Accept keyword arguments for __import__ and doc the addition of the level param from PEP 328.
Neal Norwitz <nnorwitz@gmail.com>
parents: 37344
diff changeset
46 kwlist, &name, &globals, &locals, &fromlist, &level))
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
47 return NULL;
36712
5c36c222e7ca SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents: 36675
diff changeset
48 return PyImport_ImportModuleLevel(name, globals, locals,
5c36c222e7ca SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents: 36675
diff changeset
49 fromlist, level);
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
50 }
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
51
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
52 PyDoc_STRVAR(import_doc,
37411
ea9a03b8b9f6 Accept keyword arguments for __import__ and doc the addition of the level param from PEP 328.
Neal Norwitz <nnorwitz@gmail.com>
parents: 37344
diff changeset
53 "__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module\n\
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
54 \n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
55 Import a module. The globals are only used to determine the context;\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
56 they are not modified. The locals are currently unused. The fromlist\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
57 should be a list of names to emulate ``from name import ...'', or an\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
58 empty list to emulate ``import name''.\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
59 When importing a module from a package, note that __import__('A.B', ...)\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
60 returns package A when fromlist is empty, but its submodule B when\n\
37411
ea9a03b8b9f6 Accept keyword arguments for __import__ and doc the addition of the level param from PEP 328.
Neal Norwitz <nnorwitz@gmail.com>
parents: 37344
diff changeset
61 fromlist is not empty. Level is used to determine whether to perform \n\
ea9a03b8b9f6 Accept keyword arguments for __import__ and doc the addition of the level param from PEP 328.
Neal Norwitz <nnorwitz@gmail.com>
parents: 37344
diff changeset
62 absolute or relative imports. -1 is the original strategy of attempting\n\
ea9a03b8b9f6 Accept keyword arguments for __import__ and doc the addition of the level param from PEP 328.
Neal Norwitz <nnorwitz@gmail.com>
parents: 37344
diff changeset
63 both absolute and relative imports, 0 is absolute, a positive number\n\
ea9a03b8b9f6 Accept keyword arguments for __import__ and doc the addition of the level param from PEP 328.
Neal Norwitz <nnorwitz@gmail.com>
parents: 37344
diff changeset
64 is the number of parent directories to search relative to the current module.");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
65
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
66
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
67 static PyObject *
19301
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
68 builtin_abs(PyObject *self, PyObject *v)
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
69 {
8402
0cb0394c2edc A bunch of functions are now properly implemented in abstract.c, and
Guido van Rossum <guido@python.org>
parents: 8287
diff changeset
70 return PyNumber_Absolute(v);
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
71 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
72
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
73 PyDoc_STRVAR(abs_doc,
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
74 "abs(number) -> number\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
75 \n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
76 Return the absolute value of the argument.");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
77
34736
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
78 static PyObject *
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
79 builtin_all(PyObject *self, PyObject *v)
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
80 {
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
81 PyObject *it, *item;
44367
eaefb93b5ed4 Improve performance of built-in any()/all() by avoiding PyIter_Next() --
Guido van Rossum <guido@python.org>
parents: 44222
diff changeset
82 PyObject *(*iternext)(PyObject *);
eaefb93b5ed4 Improve performance of built-in any()/all() by avoiding PyIter_Next() --
Guido van Rossum <guido@python.org>
parents: 44222
diff changeset
83 int cmp;
34736
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
84
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
85 it = PyObject_GetIter(v);
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
86 if (it == NULL)
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
87 return NULL;
44367
eaefb93b5ed4 Improve performance of built-in any()/all() by avoiding PyIter_Next() --
Guido van Rossum <guido@python.org>
parents: 44222
diff changeset
88 iternext = *Py_TYPE(it)->tp_iternext;
34736
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
89
44367
eaefb93b5ed4 Improve performance of built-in any()/all() by avoiding PyIter_Next() --
Guido van Rossum <guido@python.org>
parents: 44222
diff changeset
90 for (;;) {
eaefb93b5ed4 Improve performance of built-in any()/all() by avoiding PyIter_Next() --
Guido van Rossum <guido@python.org>
parents: 44222
diff changeset
91 item = iternext(it);
eaefb93b5ed4 Improve performance of built-in any()/all() by avoiding PyIter_Next() --
Guido van Rossum <guido@python.org>
parents: 44222
diff changeset
92 if (item == NULL)
eaefb93b5ed4 Improve performance of built-in any()/all() by avoiding PyIter_Next() --
Guido van Rossum <guido@python.org>
parents: 44222
diff changeset
93 break;
eaefb93b5ed4 Improve performance of built-in any()/all() by avoiding PyIter_Next() --
Guido van Rossum <guido@python.org>
parents: 44222
diff changeset
94 cmp = PyObject_IsTrue(item);
34736
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
95 Py_DECREF(item);
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
96 if (cmp < 0) {
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
97 Py_DECREF(it);
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
98 return NULL;
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
99 }
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
100 if (cmp == 0) {
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
101 Py_DECREF(it);
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
102 Py_RETURN_FALSE;
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
103 }
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
104 }
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
105 Py_DECREF(it);
44367
eaefb93b5ed4 Improve performance of built-in any()/all() by avoiding PyIter_Next() --
Guido van Rossum <guido@python.org>
parents: 44222
diff changeset
106 if (PyErr_Occurred()) {
eaefb93b5ed4 Improve performance of built-in any()/all() by avoiding PyIter_Next() --
Guido van Rossum <guido@python.org>
parents: 44222
diff changeset
107 if (PyErr_ExceptionMatches(PyExc_StopIteration))
eaefb93b5ed4 Improve performance of built-in any()/all() by avoiding PyIter_Next() --
Guido van Rossum <guido@python.org>
parents: 44222
diff changeset
108 PyErr_Clear();
eaefb93b5ed4 Improve performance of built-in any()/all() by avoiding PyIter_Next() --
Guido van Rossum <guido@python.org>
parents: 44222
diff changeset
109 else
eaefb93b5ed4 Improve performance of built-in any()/all() by avoiding PyIter_Next() --
Guido van Rossum <guido@python.org>
parents: 44222
diff changeset
110 return NULL;
eaefb93b5ed4 Improve performance of built-in any()/all() by avoiding PyIter_Next() --
Guido van Rossum <guido@python.org>
parents: 44222
diff changeset
111 }
34736
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
112 Py_RETURN_TRUE;
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
113 }
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
114
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
115 PyDoc_STRVAR(all_doc,
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
116 "all(iterable) -> bool\n\
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
117 \n\
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
118 Return True if bool(x) is True for all values x in the iterable.");
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
119
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
120 static PyObject *
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
121 builtin_any(PyObject *self, PyObject *v)
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
122 {
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
123 PyObject *it, *item;
44367
eaefb93b5ed4 Improve performance of built-in any()/all() by avoiding PyIter_Next() --
Guido van Rossum <guido@python.org>
parents: 44222
diff changeset
124 PyObject *(*iternext)(PyObject *);
eaefb93b5ed4 Improve performance of built-in any()/all() by avoiding PyIter_Next() --
Guido van Rossum <guido@python.org>
parents: 44222
diff changeset
125 int cmp;
34736
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
126
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
127 it = PyObject_GetIter(v);
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
128 if (it == NULL)
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
129 return NULL;
44367
eaefb93b5ed4 Improve performance of built-in any()/all() by avoiding PyIter_Next() --
Guido van Rossum <guido@python.org>
parents: 44222
diff changeset
130 iternext = *Py_TYPE(it)->tp_iternext;
34736
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
131
44367
eaefb93b5ed4 Improve performance of built-in any()/all() by avoiding PyIter_Next() --
Guido van Rossum <guido@python.org>
parents: 44222
diff changeset
132 for (;;) {
eaefb93b5ed4 Improve performance of built-in any()/all() by avoiding PyIter_Next() --
Guido van Rossum <guido@python.org>
parents: 44222
diff changeset
133 item = iternext(it);
eaefb93b5ed4 Improve performance of built-in any()/all() by avoiding PyIter_Next() --
Guido van Rossum <guido@python.org>
parents: 44222
diff changeset
134 if (item == NULL)
eaefb93b5ed4 Improve performance of built-in any()/all() by avoiding PyIter_Next() --
Guido van Rossum <guido@python.org>
parents: 44222
diff changeset
135 break;
eaefb93b5ed4 Improve performance of built-in any()/all() by avoiding PyIter_Next() --
Guido van Rossum <guido@python.org>
parents: 44222
diff changeset
136 cmp = PyObject_IsTrue(item);
34736
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
137 Py_DECREF(item);
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
138 if (cmp < 0) {
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
139 Py_DECREF(it);
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
140 return NULL;
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
141 }
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
142 if (cmp == 1) {
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
143 Py_DECREF(it);
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
144 Py_RETURN_TRUE;
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
145 }
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
146 }
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
147 Py_DECREF(it);
44367
eaefb93b5ed4 Improve performance of built-in any()/all() by avoiding PyIter_Next() --
Guido van Rossum <guido@python.org>
parents: 44222
diff changeset
148 if (PyErr_Occurred()) {
eaefb93b5ed4 Improve performance of built-in any()/all() by avoiding PyIter_Next() --
Guido van Rossum <guido@python.org>
parents: 44222
diff changeset
149 if (PyErr_ExceptionMatches(PyExc_StopIteration))
eaefb93b5ed4 Improve performance of built-in any()/all() by avoiding PyIter_Next() --
Guido van Rossum <guido@python.org>
parents: 44222
diff changeset
150 PyErr_Clear();
eaefb93b5ed4 Improve performance of built-in any()/all() by avoiding PyIter_Next() --
Guido van Rossum <guido@python.org>
parents: 44222
diff changeset
151 else
eaefb93b5ed4 Improve performance of built-in any()/all() by avoiding PyIter_Next() --
Guido van Rossum <guido@python.org>
parents: 44222
diff changeset
152 return NULL;
eaefb93b5ed4 Improve performance of built-in any()/all() by avoiding PyIter_Next() --
Guido van Rossum <guido@python.org>
parents: 44222
diff changeset
153 }
34736
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
154 Py_RETURN_FALSE;
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
155 }
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
156
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
157 PyDoc_STRVAR(any_doc,
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
158 "any(iterable) -> bool\n\
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
159 \n\
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
160 Return True if bool(x) is True for any x in the iterable.");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
161
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
162 static PyObject *
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13576
diff changeset
163 builtin_apply(PyObject *self, PyObject *args)
480
c64c6702549d Added "apply"; added "SyntaxError"; changed table lay-out.
Guido van Rossum <guido@python.org>
parents: 463
diff changeset
164 {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
165 PyObject *func, *alist = NULL, *kwdict = NULL;
9188
a1672e775f33 builtin_apply(): Second argument type check is relaxed to allow any sequence.
Barry Warsaw <barry@python.org>
parents: 9112
diff changeset
166 PyObject *t = NULL, *retval = NULL;
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
167
46573
aef3501d8e77 Use PyErr_WarnPy3k throughout
Benjamin Peterson <benjamin@python.org>
parents: 46193
diff changeset
168 if (PyErr_WarnPy3k("apply() not supported in 3.x; "
46578
7670005da8c5 A little reformating of Py3k warnings
Benjamin Peterson <benjamin@python.org>
parents: 46573
diff changeset
169 "use func(*args, **kwargs)", 1) < 0)
41832
a0ee3b2ba361 Add -3 option to the interpreter to warn about features that are
Neal Norwitz <nnorwitz@gmail.com>
parents: 41168
diff changeset
170 return NULL;
a0ee3b2ba361 Add -3 option to the interpreter to warn about features that are
Neal Norwitz <nnorwitz@gmail.com>
parents: 41168
diff changeset
171
26818
e094a03a80ff SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents: 26612
diff changeset
172 if (!PyArg_UnpackTuple(args, "apply", 1, 3, &func, &alist, &kwdict))
480
c64c6702549d Added "apply"; added "SyntaxError"; changed table lay-out.
Guido van Rossum <guido@python.org>
parents: 463
diff changeset
173 return NULL;
9188
a1672e775f33 builtin_apply(): Second argument type check is relaxed to allow any sequence.
Barry Warsaw <barry@python.org>
parents: 9112
diff changeset
174 if (alist != NULL) {
a1672e775f33 builtin_apply(): Second argument type check is relaxed to allow any sequence.
Barry Warsaw <barry@python.org>
parents: 9112
diff changeset
175 if (!PyTuple_Check(alist)) {
a1672e775f33 builtin_apply(): Second argument type check is relaxed to allow any sequence.
Barry Warsaw <barry@python.org>
parents: 9112
diff changeset
176 if (!PySequence_Check(alist)) {
16017
7234d7c3c29f clearer error messages for apply() and "no locals"
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16011
diff changeset
177 PyErr_Format(PyExc_TypeError,
28740
d3297e298211 some more error-message enhancements
Alex Martelli <aleaxit@gmail.com>
parents: 28738
diff changeset
178 "apply() arg 2 expected sequence, found %s",
16017
7234d7c3c29f clearer error messages for apply() and "no locals"
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16011
diff changeset
179 alist->ob_type->tp_name);
9188
a1672e775f33 builtin_apply(): Second argument type check is relaxed to allow any sequence.
Barry Warsaw <barry@python.org>
parents: 9112
diff changeset
180 return NULL;
a1672e775f33 builtin_apply(): Second argument type check is relaxed to allow any sequence.
Barry Warsaw <barry@python.org>
parents: 9112
diff changeset
181 }
a1672e775f33 builtin_apply(): Second argument type check is relaxed to allow any sequence.
Barry Warsaw <barry@python.org>
parents: 9112
diff changeset
182 t = PySequence_Tuple(alist);
a1672e775f33 builtin_apply(): Second argument type check is relaxed to allow any sequence.
Barry Warsaw <barry@python.org>
parents: 9112
diff changeset
183 if (t == NULL)
a1672e775f33 builtin_apply(): Second argument type check is relaxed to allow any sequence.
Barry Warsaw <barry@python.org>
parents: 9112
diff changeset
184 return NULL;
a1672e775f33 builtin_apply(): Second argument type check is relaxed to allow any sequence.
Barry Warsaw <barry@python.org>
parents: 9112
diff changeset
185 alist = t;
a1672e775f33 builtin_apply(): Second argument type check is relaxed to allow any sequence.
Barry Warsaw <barry@python.org>
parents: 9112
diff changeset
186 }
1840
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
187 }
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
188 if (kwdict != NULL && !PyDict_Check(kwdict)) {
16017
7234d7c3c29f clearer error messages for apply() and "no locals"
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16011
diff changeset
189 PyErr_Format(PyExc_TypeError,
7234d7c3c29f clearer error messages for apply() and "no locals"
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16011
diff changeset
190 "apply() arg 3 expected dictionary, found %s",
7234d7c3c29f clearer error messages for apply() and "no locals"
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16011
diff changeset
191 kwdict->ob_type->tp_name);
9188
a1672e775f33 builtin_apply(): Second argument type check is relaxed to allow any sequence.
Barry Warsaw <barry@python.org>
parents: 9112
diff changeset
192 goto finally;
2844
0261bf5b3819 keyword arguments and faster calls
Guido van Rossum <guido@python.org>
parents: 2824
diff changeset
193 }
9188
a1672e775f33 builtin_apply(): Second argument type check is relaxed to allow any sequence.
Barry Warsaw <barry@python.org>
parents: 9112
diff changeset
194 retval = PyEval_CallObjectWithKeywords(func, alist, kwdict);
a1672e775f33 builtin_apply(): Second argument type check is relaxed to allow any sequence.
Barry Warsaw <barry@python.org>
parents: 9112
diff changeset
195 finally:
a1672e775f33 builtin_apply(): Second argument type check is relaxed to allow any sequence.
Barry Warsaw <barry@python.org>
parents: 9112
diff changeset
196 Py_XDECREF(t);
a1672e775f33 builtin_apply(): Second argument type check is relaxed to allow any sequence.
Barry Warsaw <barry@python.org>
parents: 9112
diff changeset
197 return retval;
480
c64c6702549d Added "apply"; added "SyntaxError"; changed table lay-out.
Guido van Rossum <guido@python.org>
parents: 463
diff changeset
198 }
c64c6702549d Added "apply"; added "SyntaxError"; changed table lay-out.
Guido van Rossum <guido@python.org>
parents: 463
diff changeset
199
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
200 PyDoc_STRVAR(apply_doc,
15832
0ae389e935fc Update the docstring for apply() so that "args" is marked as optional
Fred Drake <fdrake@acm.org>
parents: 15829
diff changeset
201 "apply(object[, args[, kwargs]]) -> value\n\
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
202 \n\
11621
0ec803cbd872 Adjusted apply() docstring based on comments from Gerrit Holl
Fred Drake <fdrake@acm.org>
parents: 11383
diff changeset
203 Call a callable object with positional arguments taken from the tuple args,\n\
0ec803cbd872 Adjusted apply() docstring based on comments from Gerrit Holl
Fred Drake <fdrake@acm.org>
parents: 11383
diff changeset
204 and keyword arguments taken from the optional dictionary kwargs.\n\
28513
90c77b8af1a4 SF patch #701494: more apply removals
Raymond Hettinger <python@rcn.com>
parents: 28396
diff changeset
205 Note that classes are callable, as are instances with a __call__() method.\n\
90c77b8af1a4 SF patch #701494: more apply removals
Raymond Hettinger <python@rcn.com>
parents: 28396
diff changeset
206 \n\
90c77b8af1a4 SF patch #701494: more apply removals
Raymond Hettinger <python@rcn.com>
parents: 28396
diff changeset
207 Deprecated since release 2.3. Instead, use the extended call syntax:\n\
90c77b8af1a4 SF patch #701494: more apply removals
Raymond Hettinger <python@rcn.com>
parents: 28396
diff changeset
208 function(*args, **keywords).");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
209
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
210
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
211 static PyObject *
45433
4a9522fd75a6 Added bin() builtin. I'm going to check in the tests in a seperate checkin, because the builtin doesn't need to be ported to py3k, but the tests are missing in py3k and need to be merged there.
Eric Smith <eric@trueblade.com>
parents: 45381
diff changeset
212 builtin_bin(PyObject *self, PyObject *v)
4a9522fd75a6 Added bin() builtin. I'm going to check in the tests in a seperate checkin, because the builtin doesn't need to be ported to py3k, but the tests are missing in py3k and need to be merged there.
Eric Smith <eric@trueblade.com>
parents: 45381
diff changeset
213 {
47779
edc701d00b62 Make bin() implementation parallel oct() and hex() so that int/long subclasses can override or so that other classes can support.
Raymond Hettinger <python@rcn.com>
parents: 47587
diff changeset
214 PyNumberMethods *nb;
edc701d00b62 Make bin() implementation parallel oct() and hex() so that int/long subclasses can override or so that other classes can support.
Raymond Hettinger <python@rcn.com>
parents: 47587
diff changeset
215 PyObject *res;
edc701d00b62 Make bin() implementation parallel oct() and hex() so that int/long subclasses can override or so that other classes can support.
Raymond Hettinger <python@rcn.com>
parents: 47587
diff changeset
216
edc701d00b62 Make bin() implementation parallel oct() and hex() so that int/long subclasses can override or so that other classes can support.
Raymond Hettinger <python@rcn.com>
parents: 47587
diff changeset
217 if ((nb = v->ob_type->tp_as_number) == NULL ||
edc701d00b62 Make bin() implementation parallel oct() and hex() so that int/long subclasses can override or so that other classes can support.
Raymond Hettinger <python@rcn.com>
parents: 47587
diff changeset
218 nb->nb_hex == NULL) {
edc701d00b62 Make bin() implementation parallel oct() and hex() so that int/long subclasses can override or so that other classes can support.
Raymond Hettinger <python@rcn.com>
parents: 47587
diff changeset
219 PyErr_SetString(PyExc_TypeError,
edc701d00b62 Make bin() implementation parallel oct() and hex() so that int/long subclasses can override or so that other classes can support.
Raymond Hettinger <python@rcn.com>
parents: 47587
diff changeset
220 "bin() argument can't be converted to hex");
edc701d00b62 Make bin() implementation parallel oct() and hex() so that int/long subclasses can override or so that other classes can support.
Raymond Hettinger <python@rcn.com>
parents: 47587
diff changeset
221 return NULL;
edc701d00b62 Make bin() implementation parallel oct() and hex() so that int/long subclasses can override or so that other classes can support.
Raymond Hettinger <python@rcn.com>
parents: 47587
diff changeset
222 }
edc701d00b62 Make bin() implementation parallel oct() and hex() so that int/long subclasses can override or so that other classes can support.
Raymond Hettinger <python@rcn.com>
parents: 47587
diff changeset
223 res = (*nb->nb_bin)(v);
edc701d00b62 Make bin() implementation parallel oct() and hex() so that int/long subclasses can override or so that other classes can support.
Raymond Hettinger <python@rcn.com>
parents: 47587
diff changeset
224 if (res && !PyString_Check(res)) {
edc701d00b62 Make bin() implementation parallel oct() and hex() so that int/long subclasses can override or so that other classes can support.
Raymond Hettinger <python@rcn.com>
parents: 47587
diff changeset
225 PyErr_Format(PyExc_TypeError,
edc701d00b62 Make bin() implementation parallel oct() and hex() so that int/long subclasses can override or so that other classes can support.
Raymond Hettinger <python@rcn.com>
parents: 47587
diff changeset
226 "__bin__ returned non-string (type %.200s)",
edc701d00b62 Make bin() implementation parallel oct() and hex() so that int/long subclasses can override or so that other classes can support.
Raymond Hettinger <python@rcn.com>
parents: 47587
diff changeset
227 res->ob_type->tp_name);
edc701d00b62 Make bin() implementation parallel oct() and hex() so that int/long subclasses can override or so that other classes can support.
Raymond Hettinger <python@rcn.com>
parents: 47587
diff changeset
228 Py_DECREF(res);
edc701d00b62 Make bin() implementation parallel oct() and hex() so that int/long subclasses can override or so that other classes can support.
Raymond Hettinger <python@rcn.com>
parents: 47587
diff changeset
229 return NULL;
edc701d00b62 Make bin() implementation parallel oct() and hex() so that int/long subclasses can override or so that other classes can support.
Raymond Hettinger <python@rcn.com>
parents: 47587
diff changeset
230 }
edc701d00b62 Make bin() implementation parallel oct() and hex() so that int/long subclasses can override or so that other classes can support.
Raymond Hettinger <python@rcn.com>
parents: 47587
diff changeset
231 return res;
45433
4a9522fd75a6 Added bin() builtin. I'm going to check in the tests in a seperate checkin, because the builtin doesn't need to be ported to py3k, but the tests are missing in py3k and need to be merged there.
Eric Smith <eric@trueblade.com>
parents: 45381
diff changeset
232 }
4a9522fd75a6 Added bin() builtin. I'm going to check in the tests in a seperate checkin, because the builtin doesn't need to be ported to py3k, but the tests are missing in py3k and need to be merged there.
Eric Smith <eric@trueblade.com>
parents: 45381
diff changeset
233
4a9522fd75a6 Added bin() builtin. I'm going to check in the tests in a seperate checkin, because the builtin doesn't need to be ported to py3k, but the tests are missing in py3k and need to be merged there.
Eric Smith <eric@trueblade.com>
parents: 45381
diff changeset
234 PyDoc_STRVAR(bin_doc,
4a9522fd75a6 Added bin() builtin. I'm going to check in the tests in a seperate checkin, because the builtin doesn't need to be ported to py3k, but the tests are missing in py3k and need to be merged there.
Eric Smith <eric@trueblade.com>
parents: 45381
diff changeset
235 "bin(number) -> string\n\
4a9522fd75a6 Added bin() builtin. I'm going to check in the tests in a seperate checkin, because the builtin doesn't need to be ported to py3k, but the tests are missing in py3k and need to be merged there.
Eric Smith <eric@trueblade.com>
parents: 45381
diff changeset
236 \n\
4a9522fd75a6 Added bin() builtin. I'm going to check in the tests in a seperate checkin, because the builtin doesn't need to be ported to py3k, but the tests are missing in py3k and need to be merged there.
Eric Smith <eric@trueblade.com>
parents: 45381
diff changeset
237 Return the binary representation of an integer or long integer.");
4a9522fd75a6 Added bin() builtin. I'm going to check in the tests in a seperate checkin, because the builtin doesn't need to be ported to py3k, but the tests are missing in py3k and need to be merged there.
Eric Smith <eric@trueblade.com>
parents: 45381
diff changeset
238
4a9522fd75a6 Added bin() builtin. I'm going to check in the tests in a seperate checkin, because the builtin doesn't need to be ported to py3k, but the tests are missing in py3k and need to be merged there.
Eric Smith <eric@trueblade.com>
parents: 45381
diff changeset
239
4a9522fd75a6 Added bin() builtin. I'm going to check in the tests in a seperate checkin, because the builtin doesn't need to be ported to py3k, but the tests are missing in py3k and need to be merged there.
Eric Smith <eric@trueblade.com>
parents: 45381
diff changeset
240 static PyObject *
19301
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
241 builtin_callable(PyObject *self, PyObject *v)
1840
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
242 {
46573
aef3501d8e77 Use PyErr_WarnPy3k throughout
Benjamin Peterson <benjamin@python.org>
parents: 46193
diff changeset
243 if (PyErr_WarnPy3k("callable() not supported in 3.x; "
46578
7670005da8c5 A little reformating of Py3k warnings
Benjamin Peterson <benjamin@python.org>
parents: 46573
diff changeset
244 "use hasattr(o, '__call__')", 1) < 0)
41834
9a447514855f Add a bunch more deprecation warnings for builtins that are going away in 3.0
Neal Norwitz <nnorwitz@gmail.com>
parents: 41832
diff changeset
245 return NULL;
22785
aa8d59823add Add the 'bool' type and its values 'False' and 'True', as described in
Guido van Rossum <guido@python.org>
parents: 22205
diff changeset
246 return PyBool_FromLong((long)PyCallable_Check(v));
1840
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
247 }
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
248
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
249 PyDoc_STRVAR(callable_doc,
22785
aa8d59823add Add the 'bool' type and its values 'False' and 'True', as described in
Guido van Rossum <guido@python.org>
parents: 22205
diff changeset
250 "callable(object) -> bool\n\
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
251 \n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
252 Return whether the object is callable (i.e., some kind of function).\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
253 Note that classes are callable, as are instances with a __call__() method.");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
254
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
255
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
256 static PyObject *
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13576
diff changeset
257 builtin_filter(PyObject *self, PyObject *args)
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
258 {
24863
a3ebd1233c00 A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents: 24817
diff changeset
259 PyObject *func, *seq, *result, *it, *arg;
36521
30aef3ce2b26 Use Py_ssize_t to count the
Martin v. Löwis <martin@v.loewis.de>
parents: 36501
diff changeset
260 Py_ssize_t len; /* guess for result list size */
30aef3ce2b26 Use Py_ssize_t to count the
Martin v. Löwis <martin@v.loewis.de>
parents: 36501
diff changeset
261 register Py_ssize_t j;
1375
f3a325662d39 * listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents: 1369
diff changeset
262
26818
e094a03a80ff SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents: 26612
diff changeset
263 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
1375
f3a325662d39 * listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents: 1369
diff changeset
264 return NULL;
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
265
17654
a97e18e499a9 Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents: 17641
diff changeset
266 /* Strings and tuples return a result of the same type. */
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47385
diff changeset
267 if (PyString_Check(seq))
17654
a97e18e499a9 Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents: 17641
diff changeset
268 return filterstring(func, seq);
27385
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
269 #ifdef Py_USING_UNICODE
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
270 if (PyUnicode_Check(seq))
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
271 return filterunicode(func, seq);
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
272 #endif
17654
a97e18e499a9 Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents: 17641
diff changeset
273 if (PyTuple_Check(seq))
a97e18e499a9 Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents: 17641
diff changeset
274 return filtertuple(func, seq);
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
275
35264
b431ed7bcdc2 Fix cleanup DECREF logic in builtin_filter function.
Georg Brandl <georg@python.org>
parents: 34736
diff changeset
276 /* Pre-allocate argument list tuple. */
b431ed7bcdc2 Fix cleanup DECREF logic in builtin_filter function.
Georg Brandl <georg@python.org>
parents: 34736
diff changeset
277 arg = PyTuple_New(1);
b431ed7bcdc2 Fix cleanup DECREF logic in builtin_filter function.
Georg Brandl <georg@python.org>
parents: 34736
diff changeset
278 if (arg == NULL)
b431ed7bcdc2 Fix cleanup DECREF logic in builtin_filter function.
Georg Brandl <georg@python.org>
parents: 34736
diff changeset
279 return NULL;
b431ed7bcdc2 Fix cleanup DECREF logic in builtin_filter function.
Georg Brandl <georg@python.org>
parents: 34736
diff changeset
280
17654
a97e18e499a9 Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents: 17641
diff changeset
281 /* Get iterator. */
a97e18e499a9 Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents: 17641
diff changeset
282 it = PyObject_GetIter(seq);
a97e18e499a9 Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents: 17641
diff changeset
283 if (it == NULL)
35264
b431ed7bcdc2 Fix cleanup DECREF logic in builtin_filter function.
Georg Brandl <georg@python.org>
parents: 34736
diff changeset
284 goto Fail_arg;
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
285
17654
a97e18e499a9 Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents: 17641
diff changeset
286 /* Guess a result list size. */
44193
44c090c74202 Fix Issue 1045.
Raymond Hettinger <python@rcn.com>
parents: 43675
diff changeset
287 len = _PyObject_LengthHint(seq, 8);
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
288
17654
a97e18e499a9 Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents: 17641
diff changeset
289 /* Get a result list. */
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
290 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
17654
a97e18e499a9 Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents: 17641
diff changeset
291 /* Eww - can modify the list in-place. */
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
292 Py_INCREF(seq);
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
293 result = seq;
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
294 }
1375
f3a325662d39 * listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents: 1369
diff changeset
295 else {
17654
a97e18e499a9 Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents: 17641
diff changeset
296 result = PyList_New(len);
a97e18e499a9 Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents: 17641
diff changeset
297 if (result == NULL)
a97e18e499a9 Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents: 17641
diff changeset
298 goto Fail_it;
1375
f3a325662d39 * listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents: 1369
diff changeset
299 }
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
300
17654
a97e18e499a9 Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents: 17641
diff changeset
301 /* Build the result list. */
17683
e9a4e27e8d4e Make PyIter_Next() a little smarter (wrt its knowledge of iterator
Tim Peters <tim.peters@gmail.com>
parents: 17677
diff changeset
302 j = 0;
e9a4e27e8d4e Make PyIter_Next() a little smarter (wrt its knowledge of iterator
Tim Peters <tim.peters@gmail.com>
parents: 17677
diff changeset
303 for (;;) {
24863
a3ebd1233c00 A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents: 24817
diff changeset
304 PyObject *item;
1375
f3a325662d39 * listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents: 1369
diff changeset
305 int ok;
f3a325662d39 * listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents: 1369
diff changeset
306
17654
a97e18e499a9 Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents: 17641
diff changeset
307 item = PyIter_Next(it);
a97e18e499a9 Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents: 17641
diff changeset
308 if (item == NULL) {
17683
e9a4e27e8d4e Make PyIter_Next() a little smarter (wrt its knowledge of iterator
Tim Peters <tim.peters@gmail.com>
parents: 17677
diff changeset
309 if (PyErr_Occurred())
e9a4e27e8d4e Make PyIter_Next() a little smarter (wrt its knowledge of iterator
Tim Peters <tim.peters@gmail.com>
parents: 17677
diff changeset
310 goto Fail_result_it;
17654
a97e18e499a9 Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents: 17641
diff changeset
311 break;
1840
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
312 }
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
313
30151
9f53e53f3880 Make filter(bool, ...) as fast as filter(None, ...).
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 30037
diff changeset
314 if (func == (PyObject *)&PyBool_Type || func == Py_None) {
24863
a3ebd1233c00 A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents: 24817
diff changeset
315 ok = PyObject_IsTrue(item);
1375
f3a325662d39 * listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents: 1369
diff changeset
316 }
f3a325662d39 * listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents: 1369
diff changeset
317 else {
24863
a3ebd1233c00 A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents: 24817
diff changeset
318 PyObject *good;
a3ebd1233c00 A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents: 24817
diff changeset
319 PyTuple_SET_ITEM(arg, 0, item);
a3ebd1233c00 A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents: 24817
diff changeset
320 good = PyObject_Call(func, arg, NULL);
a3ebd1233c00 A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents: 24817
diff changeset
321 PyTuple_SET_ITEM(arg, 0, NULL);
2120
84b61fe44573 fix subtle refcount big in filter() -- Tim MacKenzie
Guido van Rossum <guido@python.org>
parents: 2113
diff changeset
322 if (good == NULL) {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
323 Py_DECREF(item);
17654
a97e18e499a9 Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents: 17641
diff changeset
324 goto Fail_result_it;
2120
84b61fe44573 fix subtle refcount big in filter() -- Tim MacKenzie
Guido van Rossum <guido@python.org>
parents: 2113
diff changeset
325 }
24863
a3ebd1233c00 A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents: 24817
diff changeset
326 ok = PyObject_IsTrue(good);
a3ebd1233c00 A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents: 24817
diff changeset
327 Py_DECREF(good);
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
328 }
1375
f3a325662d39 * listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents: 1369
diff changeset
329 if (ok) {
17654
a97e18e499a9 Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents: 17641
diff changeset
330 if (j < len)
a97e18e499a9 Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents: 17641
diff changeset
331 PyList_SET_ITEM(result, j, item);
1840
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
332 else {
9991
ddbbed8cb830 builtin_map(): A better fix for the previous leak plug (remember
Barry Warsaw <barry@python.org>
parents: 9980
diff changeset
333 int status = PyList_Append(result, item);
ddbbed8cb830 builtin_map(): A better fix for the previous leak plug (remember
Barry Warsaw <barry@python.org>
parents: 9980
diff changeset
334 Py_DECREF(item);
ddbbed8cb830 builtin_map(): A better fix for the previous leak plug (remember
Barry Warsaw <barry@python.org>
parents: 9980
diff changeset
335 if (status < 0)
17654
a97e18e499a9 Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents: 17641
diff changeset
336 goto Fail_result_it;
1840
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
337 }
17654
a97e18e499a9 Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents: 17641
diff changeset
338 ++j;
a97e18e499a9 Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents: 17641
diff changeset
339 }
a97e18e499a9 Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents: 17641
diff changeset
340 else
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
341 Py_DECREF(item);
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
342 }
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
343
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
344
17654
a97e18e499a9 Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents: 17641
diff changeset
345 /* Cut back result list if len is too big. */
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
346 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
17654
a97e18e499a9 Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents: 17641
diff changeset
347 goto Fail_result_it;
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
348
17874
eb03c6fc31e5 SF bug #425836: Reference leak in filter().
Tim Peters <tim.peters@gmail.com>
parents: 17822
diff changeset
349 Py_DECREF(it);
24863
a3ebd1233c00 A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents: 24817
diff changeset
350 Py_DECREF(arg);
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
351 return result;
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
352
17654
a97e18e499a9 Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents: 17641
diff changeset
353 Fail_result_it:
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
354 Py_DECREF(result);
17654
a97e18e499a9 Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents: 17641
diff changeset
355 Fail_it:
a97e18e499a9 Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents: 17641
diff changeset
356 Py_DECREF(it);
24863
a3ebd1233c00 A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents: 24817
diff changeset
357 Fail_arg:
a3ebd1233c00 A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents: 24817
diff changeset
358 Py_DECREF(arg);
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
359 return NULL;
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
360 }
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
361
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
362 PyDoc_STRVAR(filter_doc,
22225
67a5e25dc88b backport tim_one's checkin of
Michael W. Hudson <mwh@python.net>
parents: 21712
diff changeset
363 "filter(function or None, sequence) -> list, tuple, or string\n"
67a5e25dc88b backport tim_one's checkin of
Michael W. Hudson <mwh@python.net>
parents: 21712
diff changeset
364 "\n"
67a5e25dc88b backport tim_one's checkin of
Michael W. Hudson <mwh@python.net>
parents: 21712
diff changeset
365 "Return those items of sequence for which function(item) is true. If\n"
67a5e25dc88b backport tim_one's checkin of
Michael W. Hudson <mwh@python.net>
parents: 21712
diff changeset
366 "function is None, return the items that are true. If sequence is a tuple\n"
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
367 "or string, return the same type, else return a list.");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
368
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
369 static PyObject *
45381
b7231bf6bfb7 Backport of PEP 3101, Advanced String Formatting, from py3k.
Eric Smith <eric@trueblade.com>
parents: 45079
diff changeset
370 builtin_format(PyObject *self, PyObject *args)
b7231bf6bfb7 Backport of PEP 3101, Advanced String Formatting, from py3k.
Eric Smith <eric@trueblade.com>
parents: 45079
diff changeset
371 {
b7231bf6bfb7 Backport of PEP 3101, Advanced String Formatting, from py3k.
Eric Smith <eric@trueblade.com>
parents: 45079
diff changeset
372 PyObject *value;
b7231bf6bfb7 Backport of PEP 3101, Advanced String Formatting, from py3k.
Eric Smith <eric@trueblade.com>
parents: 45079
diff changeset
373 PyObject *format_spec = NULL;
b7231bf6bfb7 Backport of PEP 3101, Advanced String Formatting, from py3k.
Eric Smith <eric@trueblade.com>
parents: 45079
diff changeset
374
b7231bf6bfb7 Backport of PEP 3101, Advanced String Formatting, from py3k.
Eric Smith <eric@trueblade.com>
parents: 45079
diff changeset
375 if (!PyArg_ParseTuple(args, "O|O:format", &value, &format_spec))
b7231bf6bfb7 Backport of PEP 3101, Advanced String Formatting, from py3k.
Eric Smith <eric@trueblade.com>
parents: 45079
diff changeset
376 return NULL;
b7231bf6bfb7 Backport of PEP 3101, Advanced String Formatting, from py3k.
Eric Smith <eric@trueblade.com>
parents: 45079
diff changeset
377
b7231bf6bfb7 Backport of PEP 3101, Advanced String Formatting, from py3k.
Eric Smith <eric@trueblade.com>
parents: 45079
diff changeset
378 return PyObject_Format(value, format_spec);
b7231bf6bfb7 Backport of PEP 3101, Advanced String Formatting, from py3k.
Eric Smith <eric@trueblade.com>
parents: 45079
diff changeset
379 }
b7231bf6bfb7 Backport of PEP 3101, Advanced String Formatting, from py3k.
Eric Smith <eric@trueblade.com>
parents: 45079
diff changeset
380
b7231bf6bfb7 Backport of PEP 3101, Advanced String Formatting, from py3k.
Eric Smith <eric@trueblade.com>
parents: 45079
diff changeset
381 PyDoc_STRVAR(format_doc,
b7231bf6bfb7 Backport of PEP 3101, Advanced String Formatting, from py3k.
Eric Smith <eric@trueblade.com>
parents: 45079
diff changeset
382 "format(value[, format_spec]) -> string\n\
b7231bf6bfb7 Backport of PEP 3101, Advanced String Formatting, from py3k.
Eric Smith <eric@trueblade.com>
parents: 45079
diff changeset
383 \n\
b7231bf6bfb7 Backport of PEP 3101, Advanced String Formatting, from py3k.
Eric Smith <eric@trueblade.com>
parents: 45079
diff changeset
384 Returns value.__format__(format_spec)\n\
b7231bf6bfb7 Backport of PEP 3101, Advanced String Formatting, from py3k.
Eric Smith <eric@trueblade.com>
parents: 45079
diff changeset
385 format_spec defaults to \"\"");
b7231bf6bfb7 Backport of PEP 3101, Advanced String Formatting, from py3k.
Eric Smith <eric@trueblade.com>
parents: 45079
diff changeset
386
b7231bf6bfb7 Backport of PEP 3101, Advanced String Formatting, from py3k.
Eric Smith <eric@trueblade.com>
parents: 45079
diff changeset
387 static PyObject *
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13576
diff changeset
388 builtin_chr(PyObject *self, PyObject *args)
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
389 {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
390 long x;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
391 char s[1];
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
392
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
393 if (!PyArg_ParseTuple(args, "l:chr", &x))
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
394 return NULL;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
395 if (x < 0 || x >= 256) {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
396 PyErr_SetString(PyExc_ValueError,
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
397 "chr() arg not in range(256)");
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
398 return NULL;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
399 }
5317
c72c7e1930b3 Keep gcc -Wall and Microsoft VC happy.
Guido van Rossum <guido@python.org>
parents: 5223
diff changeset
400 s[0] = (char)x;
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47385
diff changeset
401 return PyString_FromStringAndSize(s, 1);
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
402 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
403
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
404 PyDoc_STRVAR(chr_doc,
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
405 "chr(i) -> character\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
406 \n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
407 Return a string of one character with ordinal i; 0 <= i < 256.");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
408
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
409
19343
7257e87e0720 Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents: 19301
diff changeset
410 #ifdef Py_USING_UNICODE
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
411 static PyObject *
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13576
diff changeset
412 builtin_unichr(PyObject *self, PyObject *args)
11973
8bdc25d22925 Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents: 11882
diff changeset
413 {
8bdc25d22925 Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents: 11882
diff changeset
414 long x;
8bdc25d22925 Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents: 11882
diff changeset
415
8bdc25d22925 Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents: 11882
diff changeset
416 if (!PyArg_ParseTuple(args, "l:unichr", &x))
8bdc25d22925 Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents: 11882
diff changeset
417 return NULL;
18282
f38923ce3c6b more unicode tweaks: make unichr(0xdddddddd) behave like u"\Udddddddd"
Fredrik Lundh <fredrik@pythonware.com>
parents: 18281
diff changeset
418
24737
eaa87632b1e8 Add C API PyUnicode_FromOrdinal() which exposes unichr() at C level.
Marc-André Lemburg <mal@egenix.com>
parents: 24071
diff changeset
419 return PyUnicode_FromOrdinal(x);
11973
8bdc25d22925 Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents: 11882
diff changeset
420 }
8bdc25d22925 Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents: 11882
diff changeset
421
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
422 PyDoc_STRVAR(unichr_doc,
12386
32e9d0e78935 When refering to Unicode characters in exception messages and
Fred Drake <fdrake@acm.org>
parents: 12384
diff changeset
423 "unichr(i) -> Unicode character\n\
11973
8bdc25d22925 Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents: 11882
diff changeset
424 \n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
425 Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.");
19343
7257e87e0720 Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents: 19301
diff changeset
426 #endif
11973
8bdc25d22925 Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents: 11882
diff changeset
427
8bdc25d22925 Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents: 11882
diff changeset
428
8bdc25d22925 Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents: 11882
diff changeset
429 static PyObject *
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13576
diff changeset
430 builtin_cmp(PyObject *self, PyObject *args)
1079
e4c6a0dd5c2b * bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents: 1073
diff changeset
431 {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
432 PyObject *a, *b;
8402
0cb0394c2edc A bunch of functions are now properly implemented in abstract.c, and
Guido van Rossum <guido@python.org>
parents: 8287
diff changeset
433 int c;
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
434
26818
e094a03a80ff SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents: 26612
diff changeset
435 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
1079
e4c6a0dd5c2b * bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents: 1073
diff changeset
436 return NULL;
8402
0cb0394c2edc A bunch of functions are now properly implemented in abstract.c, and
Guido van Rossum <guido@python.org>
parents: 8287
diff changeset
437 if (PyObject_Cmp(a, b, &c) < 0)
5610
10e9cfa010f0 PyObject_Compare can raise an exception now.
Guido van Rossum <guido@python.org>
parents: 5471
diff changeset
438 return NULL;
8402
0cb0394c2edc A bunch of functions are now properly implemented in abstract.c, and
Guido van Rossum <guido@python.org>
parents: 8287
diff changeset
439 return PyInt_FromLong((long)c);
1079
e4c6a0dd5c2b * bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents: 1073
diff changeset
440 }
e4c6a0dd5c2b * bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents: 1073
diff changeset
441
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
442 PyDoc_STRVAR(cmp_doc,
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
443 "cmp(x, y) -> integer\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
444 \n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
445 Return negative if x<y, zero if x==y, positive if x>y.");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
446
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
447
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
448 static PyObject *
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13576
diff changeset
449 builtin_coerce(PyObject *self, PyObject *args)
2113
76c860a18d82 move coerce() from bltinmodule.c to object.c and implement builtin_coerce() differently
Guido van Rossum <guido@python.org>
parents: 2106
diff changeset
450 {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
451 PyObject *v, *w;
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
452 PyObject *res;
2113
76c860a18d82 move coerce() from bltinmodule.c to object.c and implement builtin_coerce() differently
Guido van Rossum <guido@python.org>
parents: 2106
diff changeset
453
46573
aef3501d8e77 Use PyErr_WarnPy3k throughout
Benjamin Peterson <benjamin@python.org>
parents: 46193
diff changeset
454 if (PyErr_WarnPy3k("coerce() not supported in 3.x", 1) < 0)
41834
9a447514855f Add a bunch more deprecation warnings for builtins that are going away in 3.0
Neal Norwitz <nnorwitz@gmail.com>
parents: 41832
diff changeset
455 return NULL;
9a447514855f Add a bunch more deprecation warnings for builtins that are going away in 3.0
Neal Norwitz <nnorwitz@gmail.com>
parents: 41832
diff changeset
456
26818
e094a03a80ff SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents: 26612
diff changeset
457 if (!PyArg_UnpackTuple(args, "coerce", 2, 2, &v, &w))
2113
76c860a18d82 move coerce() from bltinmodule.c to object.c and implement builtin_coerce() differently
Guido van Rossum <guido@python.org>
parents: 2106
diff changeset
458 return NULL;
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
459 if (PyNumber_Coerce(&v, &w) < 0)
944
222f04f55083 Changes so that user-defined classes can implement operations invoked
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
460 return NULL;
30683
3b59fa5d25b1 Simplify and speedup uses of Py_BuildValue():
Raymond Hettinger <python@rcn.com>
parents: 30430
diff changeset
461 res = PyTuple_Pack(2, v, w);
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
462 Py_DECREF(v);
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
463 Py_DECREF(w);
944
222f04f55083 Changes so that user-defined classes can implement operations invoked
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
464 return res;
222f04f55083 Changes so that user-defined classes can implement operations invoked
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
465 }
222f04f55083 Changes so that user-defined classes can implement operations invoked
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
466
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
467 PyDoc_STRVAR(coerce_doc,
33261
1cf7d7225a99 Patch #1015021: Stop claiming that coerce can return None.
Martin v. Löwis <martin@v.loewis.de>
parents: 33099
diff changeset
468 "coerce(x, y) -> (x1, y1)\n\
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
469 \n\
33261
1cf7d7225a99 Patch #1015021: Stop claiming that coerce can return None.
Martin v. Löwis <martin@v.loewis.de>
parents: 33099
diff changeset
470 Return a tuple consisting of the two numeric arguments converted to\n\
1cf7d7225a99 Patch #1015021: Stop claiming that coerce can return None.
Martin v. Löwis <martin@v.loewis.de>
parents: 33099
diff changeset
471 a common type, using the same rules as used by arithmetic operations.\n\
1cf7d7225a99 Patch #1015021: Stop claiming that coerce can return None.
Martin v. Löwis <martin@v.loewis.de>
parents: 33099
diff changeset
472 If coercion is not possible, raise TypeError.");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
473
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
474 static PyObject *
41168
78686c7a23a7 Patch #1444529: the builtin compile() now accepts keyword arguments.
Georg Brandl <georg@python.org>
parents: 41140
diff changeset
475 builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
1263
65a1e4e9cd54 * Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
476 {
65a1e4e9cd54 * Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
477 char *str;
65a1e4e9cd54 * Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
478 char *filename;
65a1e4e9cd54 * Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
479 char *startstr;
46193
b0bf06d49647 Properly check for consistency with the third argument of
Georg Brandl <georg@python.org>
parents: 46162
diff changeset
480 int mode = -1;
19355
d5acff178ad5 A fiddled version of the rest of Michael Hudson's SF patch
Tim Peters <tim.peters@gmail.com>
parents: 19343
diff changeset
481 int dont_inherit = 0;
d5acff178ad5 A fiddled version of the rest of Michael Hudson's SF patch
Tim Peters <tim.peters@gmail.com>
parents: 19343
diff changeset
482 int supplied_flags = 0;
18611
fdb36a0c7e6e Part way to allowing "from __future__ import generators" to communicate
Tim Peters <tim.peters@gmail.com>
parents: 18436
diff changeset
483 PyCompilerFlags cf;
35960
658444baeba3 Fix memory leaks
Neal Norwitz <nnorwitz@gmail.com>
parents: 35766
diff changeset
484 PyObject *result = NULL, *cmd, *tmp = NULL;
36501
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 36484
diff changeset
485 Py_ssize_t length;
41168
78686c7a23a7 Patch #1444529: the builtin compile() now accepts keyword arguments.
Georg Brandl <georg@python.org>
parents: 41140
diff changeset
486 static char *kwlist[] = {"source", "filename", "mode", "flags",
78686c7a23a7 Patch #1444529: the builtin compile() now accepts keyword arguments.
Georg Brandl <georg@python.org>
parents: 41140
diff changeset
487 "dont_inherit", NULL};
46193
b0bf06d49647 Properly check for consistency with the third argument of
Georg Brandl <georg@python.org>
parents: 46162
diff changeset
488 int start[] = {Py_file_input, Py_eval_input, Py_single_input};
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
489
41168
78686c7a23a7 Patch #1444529: the builtin compile() now accepts keyword arguments.
Georg Brandl <georg@python.org>
parents: 41140
diff changeset
490 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
78686c7a23a7 Patch #1444529: the builtin compile() now accepts keyword arguments.
Georg Brandl <georg@python.org>
parents: 41140
diff changeset
491 kwlist, &cmd, &filename, &startstr,
78686c7a23a7 Patch #1444529: the builtin compile() now accepts keyword arguments.
Georg Brandl <georg@python.org>
parents: 41140
diff changeset
492 &supplied_flags, &dont_inherit))
1263
65a1e4e9cd54 * Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
493 return NULL;
19355
d5acff178ad5 A fiddled version of the rest of Michael Hudson's SF patch
Tim Peters <tim.peters@gmail.com>
parents: 19343
diff changeset
494
27781
cc01fb654ce3 patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents: 27681
diff changeset
495 cf.cf_flags = supplied_flags;
cc01fb654ce3 patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents: 27681
diff changeset
496
46162
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
497 if (supplied_flags &
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
498 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
499 {
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
500 PyErr_SetString(PyExc_ValueError,
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
501 "compile(): unrecognised flags");
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
502 return NULL;
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
503 }
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
504 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
505
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
506 if (!dont_inherit) {
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
507 PyEval_MergeCompilerFlags(&cf);
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
508 }
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
509
46193
b0bf06d49647 Properly check for consistency with the third argument of
Georg Brandl <georg@python.org>
parents: 46162
diff changeset
510 if (strcmp(startstr, "exec") == 0)
b0bf06d49647 Properly check for consistency with the third argument of
Georg Brandl <georg@python.org>
parents: 46162
diff changeset
511 mode = 0;
b0bf06d49647 Properly check for consistency with the third argument of
Georg Brandl <georg@python.org>
parents: 46162
diff changeset
512 else if (strcmp(startstr, "eval") == 0)
b0bf06d49647 Properly check for consistency with the third argument of
Georg Brandl <georg@python.org>
parents: 46162
diff changeset
513 mode = 1;
b0bf06d49647 Properly check for consistency with the third argument of
Georg Brandl <georg@python.org>
parents: 46162
diff changeset
514 else if (strcmp(startstr, "single") == 0)
b0bf06d49647 Properly check for consistency with the third argument of
Georg Brandl <georg@python.org>
parents: 46162
diff changeset
515 mode = 2;
b0bf06d49647 Properly check for consistency with the third argument of
Georg Brandl <georg@python.org>
parents: 46162
diff changeset
516 else {
b0bf06d49647 Properly check for consistency with the third argument of
Georg Brandl <georg@python.org>
parents: 46162
diff changeset
517 PyErr_SetString(PyExc_ValueError,
b0bf06d49647 Properly check for consistency with the third argument of
Georg Brandl <georg@python.org>
parents: 46162
diff changeset
518 "compile() arg 3 must be 'exec', 'eval' or 'single'");
b0bf06d49647 Properly check for consistency with the third argument of
Georg Brandl <georg@python.org>
parents: 46162
diff changeset
519 return NULL;
b0bf06d49647 Properly check for consistency with the third argument of
Georg Brandl <georg@python.org>
parents: 46162
diff changeset
520 }
b0bf06d49647 Properly check for consistency with the third argument of
Georg Brandl <georg@python.org>
parents: 46162
diff changeset
521
46162
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
522 if (PyAST_Check(cmd)) {
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
523 if (supplied_flags & PyCF_ONLY_AST) {
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
524 Py_INCREF(cmd);
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
525 result = cmd;
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
526 }
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
527 else {
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
528 PyArena *arena;
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
529 mod_ty mod;
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
530
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
531 arena = PyArena_New();
46193
b0bf06d49647 Properly check for consistency with the third argument of
Georg Brandl <georg@python.org>
parents: 46162
diff changeset
532 mod = PyAST_obj2mod(cmd, arena, mode);
46162
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
533 if (mod == NULL) {
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
534 PyArena_Free(arena);
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
535 return NULL;
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
536 }
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
537 result = (PyObject*)PyAST_Compile(mod, filename,
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
538 &cf, arena);
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
539 PyArena_Free(arena);
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
540 }
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
541 return result;
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
542 }
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
543
27781
cc01fb654ce3 patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents: 27681
diff changeset
544 #ifdef Py_USING_UNICODE
cc01fb654ce3 patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents: 27681
diff changeset
545 if (PyUnicode_Check(cmd)) {
cc01fb654ce3 patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents: 27681
diff changeset
546 tmp = PyUnicode_AsUTF8String(cmd);
cc01fb654ce3 patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents: 27681
diff changeset
547 if (tmp == NULL)
cc01fb654ce3 patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents: 27681
diff changeset
548 return NULL;
cc01fb654ce3 patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents: 27681
diff changeset
549 cmd = tmp;
cc01fb654ce3 patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents: 27681
diff changeset
550 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
cc01fb654ce3 patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents: 27681
diff changeset
551 }
cc01fb654ce3 patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents: 27681
diff changeset
552 #endif
19355
d5acff178ad5 A fiddled version of the rest of Michael Hudson's SF patch
Tim Peters <tim.peters@gmail.com>
parents: 19343
diff changeset
553
46162
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
554 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &length))
35960
658444baeba3 Fix memory leaks
Neal Norwitz <nnorwitz@gmail.com>
parents: 35766
diff changeset
555 goto cleanup;
46162
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
556 if ((size_t)length != strlen(str)) {
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
557 PyErr_SetString(PyExc_TypeError,
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
558 "compile() expected string without null bytes");
ca38f7a4b4c9 Patch #1810 by Thomas Lee, reviewed by myself:
Georg Brandl <georg@python.org>
parents: 46107
diff changeset
559 goto cleanup;
19355
d5acff178ad5 A fiddled version of the rest of Michael Hudson's SF patch
Tim Peters <tim.peters@gmail.com>
parents: 19343
diff changeset
560 }
46193
b0bf06d49647 Properly check for consistency with the third argument of
Georg Brandl <georg@python.org>
parents: 46162
diff changeset
561 result = Py_CompileStringFlags(str, filename, start[mode], &cf);
35960
658444baeba3 Fix memory leaks
Neal Norwitz <nnorwitz@gmail.com>
parents: 35766
diff changeset
562 cleanup:
27781
cc01fb654ce3 patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents: 27681
diff changeset
563 Py_XDECREF(tmp);
cc01fb654ce3 patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents: 27681
diff changeset
564 return result;
1263
65a1e4e9cd54 * Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
565 }
65a1e4e9cd54 * Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
566
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
567 PyDoc_STRVAR(compile_doc,
19355
d5acff178ad5 A fiddled version of the rest of Michael Hudson's SF patch
Tim Peters <tim.peters@gmail.com>
parents: 19343
diff changeset
568 "compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
569 \n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
570 Compile the source string (a Python module, statement or expression)\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
571 into a code object that can be executed by the exec statement or eval().\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
572 The filename will be used for run-time error messages.\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
573 The mode must be 'exec' to compile a module, 'single' to compile a\n\
19355
d5acff178ad5 A fiddled version of the rest of Michael Hudson's SF patch
Tim Peters <tim.peters@gmail.com>
parents: 19343
diff changeset
574 single (interactive) statement, or 'eval' to compile an expression.\n\
d5acff178ad5 A fiddled version of the rest of Michael Hudson's SF patch
Tim Peters <tim.peters@gmail.com>
parents: 19343
diff changeset
575 The flags argument, if present, controls which future statements influence\n\
d5acff178ad5 A fiddled version of the rest of Michael Hudson's SF patch
Tim Peters <tim.peters@gmail.com>
parents: 19343
diff changeset
576 the compilation of the code.\n\
d5acff178ad5 A fiddled version of the rest of Michael Hudson's SF patch
Tim Peters <tim.peters@gmail.com>
parents: 19343
diff changeset
577 The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
d5acff178ad5 A fiddled version of the rest of Michael Hudson's SF patch
Tim Peters <tim.peters@gmail.com>
parents: 19343
diff changeset
578 the effects of any future statements in effect in the code calling\n\
d5acff178ad5 A fiddled version of the rest of Michael Hudson's SF patch
Tim Peters <tim.peters@gmail.com>
parents: 19343
diff changeset
579 compile; if absent or zero these statements do influence the compilation,\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
580 in addition to any features explicitly specified.");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
581
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
582 static PyObject *
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13576
diff changeset
583 builtin_dir(PyObject *self, PyObject *args)
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
584 {
19665
08c3c9edd99b Make dir() wordier (see the new docstring). The new behavior is a mixed
Tim Peters <tim.peters@gmail.com>
parents: 19471
diff changeset
585 PyObject *arg = NULL;
08c3c9edd99b Make dir() wordier (see the new docstring). The new behavior is a mixed
Tim Peters <tim.peters@gmail.com>
parents: 19471
diff changeset
586
26818
e094a03a80ff SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents: 26612
diff changeset
587 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
19665
08c3c9edd99b Make dir() wordier (see the new docstring). The new behavior is a mixed
Tim Peters <tim.peters@gmail.com>
parents: 19471
diff changeset
588 return NULL;
19705
b7f6fbc087a7 At Guido's suggestion, here's a new C API function, PyObject_Dir(), like
Tim Peters <tim.peters@gmail.com>
parents: 19670
diff changeset
589 return PyObject_Dir(arg);
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
590 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
591
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
592 PyDoc_STRVAR(dir_doc,
19665
08c3c9edd99b Make dir() wordier (see the new docstring). The new behavior is a mixed
Tim Peters <tim.peters@gmail.com>
parents: 19471
diff changeset
593 "dir([object]) -> list of strings\n"
08c3c9edd99b Make dir() wordier (see the new docstring). The new behavior is a mixed
Tim Peters <tim.peters@gmail.com>
parents: 19471
diff changeset
594 "\n"
41125
717bc2a4eee7 Backport from Py3k branch:
Georg Brandl <georg@python.org>
parents: 40113
diff changeset
595 "If called without an argument, return the names in the current scope.\n"
717bc2a4eee7 Backport from Py3k branch:
Georg Brandl <georg@python.org>
parents: 40113
diff changeset
596 "Else, return an alphabetized list of names comprising (some of) the attributes\n"
717bc2a4eee7 Backport from Py3k branch:
Georg Brandl <georg@python.org>
parents: 40113
diff changeset
597 "of the given object, and of attributes reachable from it.\n"
717bc2a4eee7 Backport from Py3k branch:
Georg Brandl <georg@python.org>
parents: 40113
diff changeset
598 "If the object supplies a method named __dir__, it will be used; otherwise\n"
717bc2a4eee7 Backport from Py3k branch:
Georg Brandl <georg@python.org>
parents: 40113
diff changeset
599 "the default dir() logic is used and returns:\n"
717bc2a4eee7 Backport from Py3k branch:
Georg Brandl <georg@python.org>
parents: 40113
diff changeset
600 " for a module object: the module's attributes.\n"
717bc2a4eee7 Backport from Py3k branch:
Georg Brandl <georg@python.org>
parents: 40113
diff changeset
601 " for a class object: its attributes, and recursively the attributes\n"
717bc2a4eee7 Backport from Py3k branch:
Georg Brandl <georg@python.org>
parents: 40113
diff changeset
602 " of its bases.\n"
41140
7286d832ad27 Typo and grammar fixes.
Georg Brandl <georg@python.org>
parents: 41125
diff changeset
603 " for any other object: its attributes, its class's attributes, and\n"
41125
717bc2a4eee7 Backport from Py3k branch:
Georg Brandl <georg@python.org>
parents: 40113
diff changeset
604 " recursively the attributes of its class's base classes.");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
605
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
606 static PyObject *
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13576
diff changeset
607 builtin_divmod(PyObject *self, PyObject *args)
2087
65146b52f16b * Python/bltinmodule.c: restructured coerce(), divmod(), pow() to
Guido van Rossum <guido@python.org>
parents: 2062
diff changeset
608 {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
609 PyObject *v, *w;
2087
65146b52f16b * Python/bltinmodule.c: restructured coerce(), divmod(), pow() to
Guido van Rossum <guido@python.org>
parents: 2062
diff changeset
610
26818
e094a03a80ff SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents: 26612
diff changeset
611 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
2087
65146b52f16b * Python/bltinmodule.c: restructured coerce(), divmod(), pow() to
Guido van Rossum <guido@python.org>
parents: 2062
diff changeset
612 return NULL;
8402
0cb0394c2edc A bunch of functions are now properly implemented in abstract.c, and
Guido van Rossum <guido@python.org>
parents: 8287
diff changeset
613 return PyNumber_Divmod(v, w);
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
614 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
615
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
616 PyDoc_STRVAR(divmod_doc,
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
617 "divmod(x, y) -> (div, mod)\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
618 \n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
619 Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
620
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
621
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
622 static PyObject *
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13576
diff changeset
623 builtin_eval(PyObject *self, PyObject *args)
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
624 {
27781
cc01fb654ce3 patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents: 27681
diff changeset
625 PyObject *cmd, *result, *tmp = NULL;
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
626 PyObject *globals = Py_None, *locals = Py_None;
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
627 char *str;
19357
be9b50704e4c Fix for bug [#452230] future division isn't propagated.
Tim Peters <tim.peters@gmail.com>
parents: 19355
diff changeset
628 PyCompilerFlags cf;
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
629
32463
d4a59230e93a SF Bug #215126: Over restricted type checking on eval() function
Raymond Hettinger <python@rcn.com>
parents: 31837
diff changeset
630 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
631 return NULL;
32463
d4a59230e93a SF Bug #215126: Over restricted type checking on eval() function
Raymond Hettinger <python@rcn.com>
parents: 31837
diff changeset
632 if (locals != Py_None && !PyMapping_Check(locals)) {
d4a59230e93a SF Bug #215126: Over restricted type checking on eval() function
Raymond Hettinger <python@rcn.com>
parents: 31837
diff changeset
633 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
32507
682f74088602 * Fix missing return after error message is set.
Raymond Hettinger <python@rcn.com>
parents: 32463
diff changeset
634 return NULL;
32463
d4a59230e93a SF Bug #215126: Over restricted type checking on eval() function
Raymond Hettinger <python@rcn.com>
parents: 31837
diff changeset
635 }
d4a59230e93a SF Bug #215126: Over restricted type checking on eval() function
Raymond Hettinger <python@rcn.com>
parents: 31837
diff changeset
636 if (globals != Py_None && !PyDict_Check(globals)) {
35500
8fa83a9ebc6e Whitespace normalization.
Georg Brandl <georg@python.org>
parents: 35364
diff changeset
637 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
32463
d4a59230e93a SF Bug #215126: Over restricted type checking on eval() function
Raymond Hettinger <python@rcn.com>
parents: 31837
diff changeset
638 "globals must be a real dict; try eval(expr, {}, mapping)"
d4a59230e93a SF Bug #215126: Over restricted type checking on eval() function
Raymond Hettinger <python@rcn.com>
parents: 31837
diff changeset
639 : "globals must be a dict");
32507
682f74088602 * Fix missing return after error message is set.
Raymond Hettinger <python@rcn.com>
parents: 32463
diff changeset
640 return NULL;
32463
d4a59230e93a SF Bug #215126: Over restricted type checking on eval() function
Raymond Hettinger <python@rcn.com>
parents: 31837
diff changeset
641 }
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
642 if (globals == Py_None) {
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
643 globals = PyEval_GetGlobals();
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
644 if (locals == Py_None)
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
645 locals = PyEval_GetLocals();
2098
b7be0382f9ee __builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents: 2087
diff changeset
646 }
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
647 else if (locals == Py_None)
2098
b7be0382f9ee __builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents: 2087
diff changeset
648 locals = globals;
19357
be9b50704e4c Fix for bug [#452230] future division isn't propagated.
Tim Peters <tim.peters@gmail.com>
parents: 19355
diff changeset
649
35567
fa0881fd49b7 bug [ 868706 ] Calling builtin function 'eval' from C causes seg fault.
Georg Brandl <georg@python.org>
parents: 35500
diff changeset
650 if (globals == NULL || locals == NULL) {
fa0881fd49b7 bug [ 868706 ] Calling builtin function 'eval' from C causes seg fault.
Georg Brandl <georg@python.org>
parents: 35500
diff changeset
651 PyErr_SetString(PyExc_TypeError,
fa0881fd49b7 bug [ 868706 ] Calling builtin function 'eval' from C causes seg fault.
Georg Brandl <georg@python.org>
parents: 35500
diff changeset
652 "eval must be given globals and locals "
fa0881fd49b7 bug [ 868706 ] Calling builtin function 'eval' from C causes seg fault.
Georg Brandl <georg@python.org>
parents: 35500
diff changeset
653 "when called without a frame");
fa0881fd49b7 bug [ 868706 ] Calling builtin function 'eval' from C causes seg fault.
Georg Brandl <georg@python.org>
parents: 35500
diff changeset
654 return NULL;
fa0881fd49b7 bug [ 868706 ] Calling builtin function 'eval' from C causes seg fault.
Georg Brandl <georg@python.org>
parents: 35500
diff changeset
655 }
fa0881fd49b7 bug [ 868706 ] Calling builtin function 'eval' from C causes seg fault.
Georg Brandl <georg@python.org>
parents: 35500
diff changeset
656
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
657 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
658 if (PyDict_SetItemString(globals, "__builtins__",
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
659 PyEval_GetBuiltins()) != 0)
2098
b7be0382f9ee __builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents: 2087
diff changeset
660 return NULL;
b7be0382f9ee __builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents: 2087
diff changeset
661 }
19357
be9b50704e4c Fix for bug [#452230] future division isn't propagated.
Tim Peters <tim.peters@gmail.com>
parents: 19355
diff changeset
662
18885
22456d0ee737 Fix for SF bug [ #443866 ] Evaluating func_code causing core dump
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18836
diff changeset
663 if (PyCode_Check(cmd)) {
21398
de125792bfaa Fix for SF bug [ #492403 ] exec() segfaults on closure's func_code
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 21077
diff changeset
664 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
18885
22456d0ee737 Fix for SF bug [ #443866 ] Evaluating func_code causing core dump
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18836
diff changeset
665 PyErr_SetString(PyExc_TypeError,
22456d0ee737 Fix for SF bug [ #443866 ] Evaluating func_code causing core dump
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18836
diff changeset
666 "code object passed to eval() may not contain free variables");
22456d0ee737 Fix for SF bug [ #443866 ] Evaluating func_code causing core dump
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18836
diff changeset
667 return NULL;
22456d0ee737 Fix for SF bug [ #443866 ] Evaluating func_code causing core dump
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18836
diff changeset
668 }
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
669 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
18885
22456d0ee737 Fix for SF bug [ #443866 ] Evaluating func_code causing core dump
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18836
diff changeset
670 }
19357
be9b50704e4c Fix for bug [#452230] future division isn't propagated.
Tim Peters <tim.peters@gmail.com>
parents: 19355
diff changeset
671
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47385
diff changeset
672 if (!PyString_Check(cmd) &&
14696
85038a024b19 This patch adds a new Python C API called PyString_AsStringAndSize()
Marc-André Lemburg <mal@egenix.com>
parents: 14662
diff changeset
673 !PyUnicode_Check(cmd)) {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
674 PyErr_SetString(PyExc_TypeError,
15318
8aa947e1eee8 Ka-Ping Yee <ping@lfw.org>:
Fred Drake <fdrake@acm.org>
parents: 14869
diff changeset
675 "eval() arg 1 must be a string or code object");
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
676 return NULL;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
677 }
27781
cc01fb654ce3 patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents: 27681
diff changeset
678 cf.cf_flags = 0;
cc01fb654ce3 patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents: 27681
diff changeset
679
cc01fb654ce3 patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents: 27681
diff changeset
680 #ifdef Py_USING_UNICODE
cc01fb654ce3 patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents: 27681
diff changeset
681 if (PyUnicode_Check(cmd)) {
cc01fb654ce3 patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents: 27681
diff changeset
682 tmp = PyUnicode_AsUTF8String(cmd);
cc01fb654ce3 patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents: 27681
diff changeset
683 if (tmp == NULL)
cc01fb654ce3 patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents: 27681
diff changeset
684 return NULL;
cc01fb654ce3 patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents: 27681
diff changeset
685 cmd = tmp;
cc01fb654ce3 patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents: 27681
diff changeset
686 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
cc01fb654ce3 patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents: 27681
diff changeset
687 }
cc01fb654ce3 patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents: 27681
diff changeset
688 #endif
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47385
diff changeset
689 if (PyString_AsStringAndSize(cmd, &str, NULL)) {
35960
658444baeba3 Fix memory leaks
Neal Norwitz <nnorwitz@gmail.com>
parents: 35766
diff changeset
690 Py_XDECREF(tmp);
959
68b302ad84a1 use getargs() in more cases;
Guido van Rossum <guido@python.org>
parents: 955
diff changeset
691 return NULL;
35960
658444baeba3 Fix memory leaks
Neal Norwitz <nnorwitz@gmail.com>
parents: 35766
diff changeset
692 }
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
693 while (*str == ' ' || *str == '\t')
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
694 str++;
19357
be9b50704e4c Fix for bug [#452230] future division isn't propagated.
Tim Peters <tim.peters@gmail.com>
parents: 19355
diff changeset
695
be9b50704e4c Fix for bug [#452230] future division isn't propagated.
Tim Peters <tim.peters@gmail.com>
parents: 19355
diff changeset
696 (void)PyEval_MergeCompilerFlags(&cf);
27781
cc01fb654ce3 patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents: 27681
diff changeset
697 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
cc01fb654ce3 patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents: 27681
diff changeset
698 Py_XDECREF(tmp);
cc01fb654ce3 patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents: 27681
diff changeset
699 return result;
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
700 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
701
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
702 PyDoc_STRVAR(eval_doc,
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
703 "eval(source[, globals[, locals]]) -> value\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
704 \n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
705 Evaluate the source in the context of globals and locals.\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
706 The source may be a string representing a Python expression\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
707 or a code object as returned by compile().\n\
39746
97d3eab8cda2 Fix SF #1552093, eval docstring typo (3 ps in mapping)
Neal Norwitz <nnorwitz@gmail.com>
parents: 39447
diff changeset
708 The globals must be a dictionary and locals can be any mapping,\n\
32463
d4a59230e93a SF Bug #215126: Over restricted type checking on eval() function
Raymond Hettinger <python@rcn.com>
parents: 31837
diff changeset
709 defaulting to the current globals and locals.\n\
d4a59230e93a SF Bug #215126: Over restricted type checking on eval() function
Raymond Hettinger <python@rcn.com>
parents: 31837
diff changeset
710 If only globals is given, locals defaults to it.\n");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
711
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
712
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
713 static PyObject *
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13576
diff changeset
714 builtin_execfile(PyObject *self, PyObject *args)
673
71d496259ad3 Added execfile().
Guido van Rossum <guido@python.org>
parents: 662
diff changeset
715 {
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
716 char *filename;
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
717 PyObject *globals = Py_None, *locals = Py_None;
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
718 PyObject *res;
19726
5487d9d53a0e builtin_execfile(): initialize another local that the GCC on leroy
Guido van Rossum <guido@python.org>
parents: 19705
diff changeset
719 FILE* fp = NULL;
18611
fdb36a0c7e6e Part way to allowing "from __future__ import generators" to communicate
Tim Peters <tim.peters@gmail.com>
parents: 18436
diff changeset
720 PyCompilerFlags cf;
19053
2bb242dc69d8 Patch #448227: Raise an exception when a directory is passed to execfile.
Martin v. Löwis <martin@v.loewis.de>
parents: 18933
diff changeset
721 int exists;
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
722
46573
aef3501d8e77 Use PyErr_WarnPy3k throughout
Benjamin Peterson <benjamin@python.org>
parents: 46193
diff changeset
723 if (PyErr_WarnPy3k("execfile() not supported in 3.x; use exec()",
46578
7670005da8c5 A little reformating of Py3k warnings
Benjamin Peterson <benjamin@python.org>
parents: 46573
diff changeset
724 1) < 0)
41834
9a447514855f Add a bunch more deprecation warnings for builtins that are going away in 3.0
Neal Norwitz <nnorwitz@gmail.com>
parents: 41832
diff changeset
725 return NULL;
9a447514855f Add a bunch more deprecation warnings for builtins that are going away in 3.0
Neal Norwitz <nnorwitz@gmail.com>
parents: 41832
diff changeset
726
32890
b8c2aa2be19a Completed the patch for Bug #215126.
Raymond Hettinger <python@rcn.com>
parents: 32759
diff changeset
727 if (!PyArg_ParseTuple(args, "s|O!O:execfile",
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
728 &filename,
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
729 &PyDict_Type, &globals,
32890
b8c2aa2be19a Completed the patch for Bug #215126.
Raymond Hettinger <python@rcn.com>
parents: 32759
diff changeset
730 &locals))
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
731 return NULL;
32890
b8c2aa2be19a Completed the patch for Bug #215126.
Raymond Hettinger <python@rcn.com>
parents: 32759
diff changeset
732 if (locals != Py_None && !PyMapping_Check(locals)) {
b8c2aa2be19a Completed the patch for Bug #215126.
Raymond Hettinger <python@rcn.com>
parents: 32759
diff changeset
733 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
b8c2aa2be19a Completed the patch for Bug #215126.
Raymond Hettinger <python@rcn.com>
parents: 32759
diff changeset
734 return NULL;
b8c2aa2be19a Completed the patch for Bug #215126.
Raymond Hettinger <python@rcn.com>
parents: 32759
diff changeset
735 }
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
736 if (globals == Py_None) {
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
737 globals = PyEval_GetGlobals();
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
738 if (locals == Py_None)
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
739 locals = PyEval_GetLocals();
2098
b7be0382f9ee __builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents: 2087
diff changeset
740 }
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
741 else if (locals == Py_None)
2098
b7be0382f9ee __builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents: 2087
diff changeset
742 locals = globals;
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
743 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
744 if (PyDict_SetItemString(globals, "__builtins__",
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
745 PyEval_GetBuiltins()) != 0)
2098
b7be0382f9ee __builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents: 2087
diff changeset
746 return NULL;
b7be0382f9ee __builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents: 2087
diff changeset
747 }
19053
2bb242dc69d8 Patch #448227: Raise an exception when a directory is passed to execfile.
Martin v. Löwis <martin@v.loewis.de>
parents: 18933
diff changeset
748
2bb242dc69d8 Patch #448227: Raise an exception when a directory is passed to execfile.
Martin v. Löwis <martin@v.loewis.de>
parents: 18933
diff changeset
749 exists = 0;
2bb242dc69d8 Patch #448227: Raise an exception when a directory is passed to execfile.
Martin v. Löwis <martin@v.loewis.de>
parents: 18933
diff changeset
750 /* Test for existence or directory. */
22205
f4487350c537 Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents: 22225
diff changeset
751 #if defined(PLAN9)
f4487350c537 Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents: 22225
diff changeset
752 {
f4487350c537 Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents: 22225
diff changeset
753 Dir *d;
f4487350c537 Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents: 22225
diff changeset
754
f4487350c537 Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents: 22225
diff changeset
755 if ((d = dirstat(filename))!=nil) {
f4487350c537 Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents: 22225
diff changeset
756 if(d->mode & DMDIR)
f4487350c537 Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents: 22225
diff changeset
757 werrstr("is a directory");
f4487350c537 Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents: 22225
diff changeset
758 else
f4487350c537 Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents: 22225
diff changeset
759 exists = 1;
f4487350c537 Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents: 22225
diff changeset
760 free(d);
f4487350c537 Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents: 22225
diff changeset
761 }
19053
2bb242dc69d8 Patch #448227: Raise an exception when a directory is passed to execfile.
Martin v. Löwis <martin@v.loewis.de>
parents: 18933
diff changeset
762 }
22205
f4487350c537 Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents: 22225
diff changeset
763 #elif defined(RISCOS)
20654
edd9d0b3c47e SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents: 20471
diff changeset
764 if (object_exists(filename)) {
edd9d0b3c47e SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents: 20471
diff changeset
765 if (isdir(filename))
edd9d0b3c47e SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents: 20471
diff changeset
766 errno = EISDIR;
edd9d0b3c47e SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents: 20471
diff changeset
767 else
edd9d0b3c47e SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents: 20471
diff changeset
768 exists = 1;
edd9d0b3c47e SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents: 20471
diff changeset
769 }
22205
f4487350c537 Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents: 22225
diff changeset
770 #else /* standard Posix */
f4487350c537 Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents: 22225
diff changeset
771 {
f4487350c537 Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents: 22225
diff changeset
772 struct stat s;
f4487350c537 Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents: 22225
diff changeset
773 if (stat(filename, &s) == 0) {
f4487350c537 Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents: 22225
diff changeset
774 if (S_ISDIR(s.st_mode))
31837
81117923ae8f OS/2 VACPP build updates/fixes
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents: 31445
diff changeset
775 # if defined(PYOS_OS2) && defined(PYCC_VACPP)
22205
f4487350c537 Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents: 22225
diff changeset
776 errno = EOS2ERR;
f4487350c537 Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents: 22225
diff changeset
777 # else
f4487350c537 Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents: 22225
diff changeset
778 errno = EISDIR;
f4487350c537 Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents: 22225
diff changeset
779 # endif
f4487350c537 Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents: 22225
diff changeset
780 else
f4487350c537 Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents: 22225
diff changeset
781 exists = 1;
f4487350c537 Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents: 22225
diff changeset
782 }
f4487350c537 Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents: 22225
diff changeset
783 }
f4487350c537 Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents: 22225
diff changeset
784 #endif
19053
2bb242dc69d8 Patch #448227: Raise an exception when a directory is passed to execfile.
Martin v. Löwis <martin@v.loewis.de>
parents: 18933
diff changeset
785
2bb242dc69d8 Patch #448227: Raise an exception when a directory is passed to execfile.
Martin v. Löwis <martin@v.loewis.de>
parents: 18933
diff changeset
786 if (exists) {
2bb242dc69d8 Patch #448227: Raise an exception when a directory is passed to execfile.
Martin v. Löwis <martin@v.loewis.de>
parents: 18933
diff changeset
787 Py_BEGIN_ALLOW_THREADS
23029
8291473fde3e Mass checkin of universal newline support.
Jack Jansen <jack.jansen@cwi.nl>
parents: 22785
diff changeset
788 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
19053
2bb242dc69d8 Patch #448227: Raise an exception when a directory is passed to execfile.
Martin v. Löwis <martin@v.loewis.de>
parents: 18933
diff changeset
789 Py_END_ALLOW_THREADS
2bb242dc69d8 Patch #448227: Raise an exception when a directory is passed to execfile.
Martin v. Löwis <martin@v.loewis.de>
parents: 18933
diff changeset
790
2bb242dc69d8 Patch #448227: Raise an exception when a directory is passed to execfile.
Martin v. Löwis <martin@v.loewis.de>
parents: 18933
diff changeset
791 if (fp == NULL) {
2bb242dc69d8 Patch #448227: Raise an exception when a directory is passed to execfile.
Martin v. Löwis <martin@v.loewis.de>
parents: 18933
diff changeset
792 exists = 0;
2bb242dc69d8 Patch #448227: Raise an exception when a directory is passed to execfile.
Martin v. Löwis <martin@v.loewis.de>
parents: 18933
diff changeset
793 }
2bb242dc69d8 Patch #448227: Raise an exception when a directory is passed to execfile.
Martin v. Löwis <martin@v.loewis.de>
parents: 18933
diff changeset
794 }
2bb242dc69d8 Patch #448227: Raise an exception when a directory is passed to execfile.
Martin v. Löwis <martin@v.loewis.de>
parents: 18933
diff changeset
795
2bb242dc69d8 Patch #448227: Raise an exception when a directory is passed to execfile.
Martin v. Löwis <martin@v.loewis.de>
parents: 18933
diff changeset
796 if (!exists) {
25046
434bc1dea4f8 execfile should call PyErr_SetFromErrnoWithFilename instead of
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 24863
diff changeset
797 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
673
71d496259ad3 Added execfile().
Guido van Rossum <guido@python.org>
parents: 662
diff changeset
798 return NULL;
71d496259ad3 Added execfile().
Guido van Rossum <guido@python.org>
parents: 662
diff changeset
799 }
18611
fdb36a0c7e6e Part way to allowing "from __future__ import generators" to communicate
Tim Peters <tim.peters@gmail.com>
parents: 18436
diff changeset
800 cf.cf_flags = 0;
fdb36a0c7e6e Part way to allowing "from __future__ import generators" to communicate
Tim Peters <tim.peters@gmail.com>
parents: 18436
diff changeset
801 if (PyEval_MergeCompilerFlags(&cf))
17641
9be7758a8c94 Fix buglet reported on c.l.py: map(fnc, file.xreadlines()) blows up.
Tim Peters <tim.peters@gmail.com>
parents: 17597
diff changeset
802 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
17125
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17111
diff changeset
803 locals, 1, &cf);
18611
fdb36a0c7e6e Part way to allowing "from __future__ import generators" to communicate
Tim Peters <tim.peters@gmail.com>
parents: 18436
diff changeset
804 else
17641
9be7758a8c94 Fix buglet reported on c.l.py: map(fnc, file.xreadlines()) blows up.
Tim Peters <tim.peters@gmail.com>
parents: 17597
diff changeset
805 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
17125
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17111
diff changeset
806 locals, 1);
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
807 return res;
673
71d496259ad3 Added execfile().
Guido van Rossum <guido@python.org>
parents: 662
diff changeset
808 }
71d496259ad3 Added execfile().
Guido van Rossum <guido@python.org>
parents: 662
diff changeset
809
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
810 PyDoc_STRVAR(execfile_doc,
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
811 "execfile(filename[, globals[, locals]])\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
812 \n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
813 Read and execute a Python script from a file.\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
814 The globals and locals are dictionaries, defaulting to the current\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
815 globals and locals. If only globals is given, locals defaults to it.");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
816
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
817
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
818 static PyObject *
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13576
diff changeset
819 builtin_getattr(PyObject *self, PyObject *args)
644
59f9325bb8ec Added getattr and setattr built-in functions.
Guido van Rossum <guido@python.org>
parents: 606
diff changeset
820 {
8581
221667f89064 Experimental feature: add default argument to getattr().
Guido van Rossum <guido@python.org>
parents: 8561
diff changeset
821 PyObject *v, *result, *dflt = NULL;
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
822 PyObject *name;
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
823
26818
e094a03a80ff SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents: 26612
diff changeset
824 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
644
59f9325bb8ec Added getattr and setattr built-in functions.
Guido van Rossum <guido@python.org>
parents: 606
diff changeset
825 return NULL;
19343
7257e87e0720 Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents: 19301
diff changeset
826 #ifdef Py_USING_UNICODE
18888
f12e1a766a14 Fix for SF byg [ #420304 ] getattr function w/ default
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18885
diff changeset
827 if (PyUnicode_Check(name)) {
f12e1a766a14 Fix for SF byg [ #420304 ] getattr function w/ default
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18885
diff changeset
828 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
f12e1a766a14 Fix for SF byg [ #420304 ] getattr function w/ default
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18885
diff changeset
829 if (name == NULL)
f12e1a766a14 Fix for SF byg [ #420304 ] getattr function w/ default
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18885
diff changeset
830 return NULL;
f12e1a766a14 Fix for SF byg [ #420304 ] getattr function w/ default
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18885
diff changeset
831 }
19343
7257e87e0720 Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents: 19301
diff changeset
832 #endif
18888
f12e1a766a14 Fix for SF byg [ #420304 ] getattr function w/ default
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18885
diff changeset
833
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47385
diff changeset
834 if (!PyString_Check(name)) {
18888
f12e1a766a14 Fix for SF byg [ #420304 ] getattr function w/ default
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18885
diff changeset
835 PyErr_SetString(PyExc_TypeError,
28740
d3297e298211 some more error-message enhancements
Alex Martelli <aleaxit@gmail.com>
parents: 28738
diff changeset
836 "getattr(): attribute name must be string");
18888
f12e1a766a14 Fix for SF byg [ #420304 ] getattr function w/ default
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18885
diff changeset
837 return NULL;
f12e1a766a14 Fix for SF byg [ #420304 ] getattr function w/ default
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18885
diff changeset
838 }
8581
221667f89064 Experimental feature: add default argument to getattr().
Guido van Rossum <guido@python.org>
parents: 8561
diff changeset
839 result = PyObject_GetAttr(v, name);
20471
bbdc0abfbb13 SF patch #471852 (anonymous) notes that getattr(obj, name, default)
Guido van Rossum <guido@python.org>
parents: 20307
diff changeset
840 if (result == NULL && dflt != NULL &&
bbdc0abfbb13 SF patch #471852 (anonymous) notes that getattr(obj, name, default)
Guido van Rossum <guido@python.org>
parents: 20307
diff changeset
841 PyErr_ExceptionMatches(PyExc_AttributeError))
bbdc0abfbb13 SF patch #471852 (anonymous) notes that getattr(obj, name, default)
Guido van Rossum <guido@python.org>
parents: 20307
diff changeset
842 {
8581
221667f89064 Experimental feature: add default argument to getattr().
Guido van Rossum <guido@python.org>
parents: 8561
diff changeset
843 PyErr_Clear();
221667f89064 Experimental feature: add default argument to getattr().
Guido van Rossum <guido@python.org>
parents: 8561
diff changeset
844 Py_INCREF(dflt);
221667f89064 Experimental feature: add default argument to getattr().
Guido van Rossum <guido@python.org>
parents: 8561
diff changeset
845 result = dflt;
221667f89064 Experimental feature: add default argument to getattr().
Guido van Rossum <guido@python.org>
parents: 8561
diff changeset
846 }
221667f89064 Experimental feature: add default argument to getattr().
Guido van Rossum <guido@python.org>
parents: 8561
diff changeset
847 return result;
1257
1cabc2b6c970 * Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents: 1252
diff changeset
848 }
1cabc2b6c970 * Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents: 1252
diff changeset
849
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
850 PyDoc_STRVAR(getattr_doc,
8581
221667f89064 Experimental feature: add default argument to getattr().
Guido van Rossum <guido@python.org>
parents: 8561
diff changeset
851 "getattr(object, name[, default]) -> value\n\
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
852 \n\
8581
221667f89064 Experimental feature: add default argument to getattr().
Guido van Rossum <guido@python.org>
parents: 8561
diff changeset
853 Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
221667f89064 Experimental feature: add default argument to getattr().
Guido van Rossum <guido@python.org>
parents: 8561
diff changeset
854 When a default argument is given, it is returned when the attribute doesn't\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
855 exist; without it, an exception is raised in that case.");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
856
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
857
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
858 static PyObject *
19301
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
859 builtin_globals(PyObject *self)
2808
9318ac51691e added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents: 2375
diff changeset
860 {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
861 PyObject *d;
2808
9318ac51691e added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents: 2375
diff changeset
862
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
863 d = PyEval_GetGlobals();
39447
71b0ac80a135 It's highly unlikely, though possible for PyEval_Get*() to return NULLs.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39385
diff changeset
864 Py_XINCREF(d);
2808
9318ac51691e added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents: 2375
diff changeset
865 return d;
9318ac51691e added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents: 2375
diff changeset
866 }
9318ac51691e added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents: 2375
diff changeset
867
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
868 PyDoc_STRVAR(globals_doc,
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
869 "globals() -> dictionary\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
870 \n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
871 Return the dictionary containing the current scope's global variables.");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
872
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
873
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
874 static PyObject *
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13576
diff changeset
875 builtin_hasattr(PyObject *self, PyObject *args)
1257
1cabc2b6c970 * Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents: 1252
diff changeset
876 {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
877 PyObject *v;
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
878 PyObject *name;
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
879
26818
e094a03a80ff SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents: 26612
diff changeset
880 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
1257
1cabc2b6c970 * Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents: 1252
diff changeset
881 return NULL;
19343
7257e87e0720 Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents: 19301
diff changeset
882 #ifdef Py_USING_UNICODE
18890
fb837c5ae5d3 Do for hasattr() what was done for getattr()
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18888
diff changeset
883 if (PyUnicode_Check(name)) {
fb837c5ae5d3 Do for hasattr() what was done for getattr()
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18888
diff changeset
884 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
fb837c5ae5d3 Do for hasattr() what was done for getattr()
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18888
diff changeset
885 if (name == NULL)
fb837c5ae5d3 Do for hasattr() what was done for getattr()
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18888
diff changeset
886 return NULL;
fb837c5ae5d3 Do for hasattr() what was done for getattr()
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18888
diff changeset
887 }
19343
7257e87e0720 Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents: 19301
diff changeset
888 #endif
18890
fb837c5ae5d3 Do for hasattr() what was done for getattr()
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18888
diff changeset
889
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47385
diff changeset
890 if (!PyString_Check(name)) {
18890
fb837c5ae5d3 Do for hasattr() what was done for getattr()
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18888
diff changeset
891 PyErr_SetString(PyExc_TypeError,
28740
d3297e298211 some more error-message enhancements
Alex Martelli <aleaxit@gmail.com>
parents: 28738
diff changeset
892 "hasattr(): attribute name must be string");
18890
fb837c5ae5d3 Do for hasattr() what was done for getattr()
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18888
diff changeset
893 return NULL;
fb837c5ae5d3 Do for hasattr() what was done for getattr()
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18888
diff changeset
894 }
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
895 v = PyObject_GetAttr(v, name);
1257
1cabc2b6c970 * Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents: 1252
diff changeset
896 if (v == NULL) {
46925
4c8375574aa9 #2196 hasattr now allows SystemExit and KeyboardInterrupt to propagate
Benjamin Peterson <benjamin@python.org>
parents: 46607
diff changeset
897 if (!PyErr_ExceptionMatches(PyExc_Exception))
4c8375574aa9 #2196 hasattr now allows SystemExit and KeyboardInterrupt to propagate
Benjamin Peterson <benjamin@python.org>
parents: 46607
diff changeset
898 return NULL;
4c8375574aa9 #2196 hasattr now allows SystemExit and KeyboardInterrupt to propagate
Benjamin Peterson <benjamin@python.org>
parents: 46607
diff changeset
899 else {
4c8375574aa9 #2196 hasattr now allows SystemExit and KeyboardInterrupt to propagate
Benjamin Peterson <benjamin@python.org>
parents: 46607
diff changeset
900 PyErr_Clear();
4c8375574aa9 #2196 hasattr now allows SystemExit and KeyboardInterrupt to propagate
Benjamin Peterson <benjamin@python.org>
parents: 46607
diff changeset
901 Py_INCREF(Py_False);
4c8375574aa9 #2196 hasattr now allows SystemExit and KeyboardInterrupt to propagate
Benjamin Peterson <benjamin@python.org>
parents: 46607
diff changeset
902 return Py_False;
4c8375574aa9 #2196 hasattr now allows SystemExit and KeyboardInterrupt to propagate
Benjamin Peterson <benjamin@python.org>
parents: 46607
diff changeset
903 }
1257
1cabc2b6c970 * Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents: 1252
diff changeset
904 }
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
905 Py_DECREF(v);
8402
0cb0394c2edc A bunch of functions are now properly implemented in abstract.c, and
Guido van Rossum <guido@python.org>
parents: 8287
diff changeset
906 Py_INCREF(Py_True);
0cb0394c2edc A bunch of functions are now properly implemented in abstract.c, and
Guido van Rossum <guido@python.org>
parents: 8287
diff changeset
907 return Py_True;
644
59f9325bb8ec Added getattr and setattr built-in functions.
Guido van Rossum <guido@python.org>
parents: 606
diff changeset
908 }
59f9325bb8ec Added getattr and setattr built-in functions.
Guido van Rossum <guido@python.org>
parents: 606
diff changeset
909
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
910 PyDoc_STRVAR(hasattr_doc,
22785
aa8d59823add Add the 'bool' type and its values 'False' and 'True', as described in
Guido van Rossum <guido@python.org>
parents: 22205
diff changeset
911 "hasattr(object, name) -> bool\n\
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
912 \n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
913 Return whether the object has an attribute with the given name.\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
914 (This is done by calling getattr(object, name) and catching exceptions.)");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
915
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
916
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
917 static PyObject *
19301
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
918 builtin_id(PyObject *self, PyObject *v)
1263
65a1e4e9cd54 * Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
919 {
13078
1d0407960953 Trent Mick:
Guido van Rossum <guido@python.org>
parents: 12961
diff changeset
920 return PyLong_FromVoidPtr(v);
1263
65a1e4e9cd54 * Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
921 }
65a1e4e9cd54 * Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
922
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
923 PyDoc_STRVAR(id_doc,
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
924 "id(object) -> integer\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
925 \n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
926 Return the identity of an object. This is guaranteed to be unique among\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
927 simultaneously existing objects. (Hint: it's the object's memory address.)");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
928
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
929
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
930 static PyObject *
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13576
diff changeset
931 builtin_map(PyObject *self, PyObject *args)
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
932 {
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
933 typedef struct {
17675
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
934 PyObject *it; /* the iterator object */
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
935 int saw_StopIteration; /* bool: did the iterator end? */
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
936 } sequence;
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
937
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
938 PyObject *func, *result;
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
939 sequence *seqs = NULL, *sqp;
36501
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 36484
diff changeset
940 Py_ssize_t n, len;
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
941 register int i, j;
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
942
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
943 n = PyTuple_Size(args);
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
944 if (n < 2) {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
945 PyErr_SetString(PyExc_TypeError,
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
946 "map() requires at least two args");
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
947 return NULL;
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
948 }
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
949
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
950 func = PyTuple_GetItem(args, 0);
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
951 n--;
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
952
45496
002a5ac792b1 map(None, ...) is not supported in 3.0.
Neal Norwitz <nnorwitz@gmail.com>
parents: 45433
diff changeset
953 if (func == Py_None) {
46573
aef3501d8e77 Use PyErr_WarnPy3k throughout
Benjamin Peterson <benjamin@python.org>
parents: 46193
diff changeset
954 if (PyErr_WarnPy3k("map(None, ...) not supported in 3.x; "
46578
7670005da8c5 A little reformating of Py3k warnings
Benjamin Peterson <benjamin@python.org>
parents: 46573
diff changeset
955 "use list(...)", 1) < 0)
45496
002a5ac792b1 map(None, ...) is not supported in 3.0.
Neal Norwitz <nnorwitz@gmail.com>
parents: 45433
diff changeset
956 return NULL;
002a5ac792b1 map(None, ...) is not supported in 3.0.
Neal Norwitz <nnorwitz@gmail.com>
parents: 45433
diff changeset
957 if (n == 1) {
002a5ac792b1 map(None, ...) is not supported in 3.0.
Neal Norwitz <nnorwitz@gmail.com>
parents: 45433
diff changeset
958 /* map(None, S) is the same as list(S). */
002a5ac792b1 map(None, ...) is not supported in 3.0.
Neal Norwitz <nnorwitz@gmail.com>
parents: 45433
diff changeset
959 return PySequence_List(PyTuple_GetItem(args, 1));
002a5ac792b1 map(None, ...) is not supported in 3.0.
Neal Norwitz <nnorwitz@gmail.com>
parents: 45433
diff changeset
960 }
8661
30fbf18af29e Small changes to map() and filter():
Guido van Rossum <guido@python.org>
parents: 8589
diff changeset
961 }
30fbf18af29e Small changes to map() and filter():
Guido van Rossum <guido@python.org>
parents: 8589
diff changeset
962
17675
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
963 /* Get space for sequence descriptors. Must NULL out the iterator
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
964 * pointers so that jumping to Fail_2 later doesn't see trash.
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
965 */
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
966 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
967 PyErr_NoMemory();
17675
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
968 return NULL;
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
969 }
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
970 for (i = 0; i < n; ++i) {
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
971 seqs[i].it = (PyObject*)NULL;
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
972 seqs[i].saw_StopIteration = 0;
1375
f3a325662d39 * listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents: 1369
diff changeset
973 }
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
974
17675
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
975 /* Do a first pass to obtain iterators for the arguments, and set len
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
976 * to the largest of their lengths.
17641
9be7758a8c94 Fix buglet reported on c.l.py: map(fnc, file.xreadlines()) blows up.
Tim Peters <tim.peters@gmail.com>
parents: 17597
diff changeset
977 */
17675
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
978 len = 0;
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
979 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
980 PyObject *curseq;
36521
30aef3ce2b26 Use Py_ssize_t to count the
Martin v. Löwis <martin@v.loewis.de>
parents: 36501
diff changeset
981 Py_ssize_t curlen;
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
982
17675
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
983 /* Get iterator. */
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
984 curseq = PyTuple_GetItem(args, i+1);
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
985 sqp->it = PyObject_GetIter(curseq);
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
986 if (sqp->it == NULL) {
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
987 static char errmsg[] =
17675
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
988 "argument %d to map() must support iteration";
5388
13a30cea8dbf Avoid sprintf buffer overflow if more than 9999 arguments.
Guido van Rossum <guido@python.org>
parents: 5373
diff changeset
989 char errbuf[sizeof(errmsg) + 25];
21077
379fc66f4c96 Use PyOS_snprintf instead of sprintf.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20871
diff changeset
990 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
991 PyErr_SetString(PyExc_TypeError, errbuf);
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
992 goto Fail_2;
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
993 }
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
994
17675
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
995 /* Update len. */
44193
44c090c74202 Fix Issue 1045.
Raymond Hettinger <python@rcn.com>
parents: 43675
diff changeset
996 curlen = _PyObject_LengthHint(curseq, 8);
31343
0c1d2062dee3 Apply map/zip pre-sizing optimization to a broader class of objects.
Raymond Hettinger <python@rcn.com>
parents: 31210
diff changeset
997 if (curlen > len)
0c1d2062dee3 Apply map/zip pre-sizing optimization to a broader class of objects.
Raymond Hettinger <python@rcn.com>
parents: 31210
diff changeset
998 len = curlen;
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
999 }
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
1000
17675
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
1001 /* Get space for the result list. */
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1002 if ((result = (PyObject *) PyList_New(len)) == NULL)
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
1003 goto Fail_2;
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
1004
17675
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
1005 /* Iterate over the sequences until all have stopped. */
1840
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
1006 for (i = 0; ; ++i) {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1007 PyObject *alist, *item=NULL, *value;
17675
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
1008 int numactive = 0;
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
1009
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1010 if (func == Py_None && n == 1)
2824
65c7105868f8 rename arglist to alist (conflict with new grammar symbol)
Guido van Rossum <guido@python.org>
parents: 2808
diff changeset
1011 alist = NULL;
17675
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
1012 else if ((alist = PyTuple_New(n)) == NULL)
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
1013 goto Fail_1;
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
1014
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
1015 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
17675
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
1016 if (sqp->saw_StopIteration) {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1017 Py_INCREF(Py_None);
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1018 item = Py_None;
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
1019 }
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
1020 else {
17675
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
1021 item = PyIter_Next(sqp->it);
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
1022 if (item)
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
1023 ++numactive;
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
1024 else {
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
1025 if (PyErr_Occurred()) {
17683
e9a4e27e8d4e Make PyIter_Next() a little smarter (wrt its knowledge of iterator
Tim Peters <tim.peters@gmail.com>
parents: 17677
diff changeset
1026 Py_XDECREF(alist);
e9a4e27e8d4e Make PyIter_Next() a little smarter (wrt its knowledge of iterator
Tim Peters <tim.peters@gmail.com>
parents: 17677
diff changeset
1027 goto Fail_1;
1840
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
1028 }
17675
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
1029 Py_INCREF(Py_None);
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
1030 item = Py_None;
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
1031 sqp->saw_StopIteration = 1;
1840
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
1032 }
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
1033 }
17675
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
1034 if (alist)
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
1035 PyTuple_SET_ITEM(alist, j, item);
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
1036 else
1840
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
1037 break;
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
1038 }
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
1039
2824
65c7105868f8 rename arglist to alist (conflict with new grammar symbol)
Guido van Rossum <guido@python.org>
parents: 2808
diff changeset
1040 if (!alist)
65c7105868f8 rename arglist to alist (conflict with new grammar symbol)
Guido van Rossum <guido@python.org>
parents: 2808
diff changeset
1041 alist = item;
1840
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
1042
17675
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
1043 if (numactive == 0) {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1044 Py_DECREF(alist);
1840
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
1045 break;
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
1046 }
1840
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
1047
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1048 if (func == Py_None)
2824
65c7105868f8 rename arglist to alist (conflict with new grammar symbol)
Guido van Rossum <guido@python.org>
parents: 2808
diff changeset
1049 value = alist;
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
1050 else {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1051 value = PyEval_CallObject(func, alist);
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1052 Py_DECREF(alist);
1375
f3a325662d39 * listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents: 1369
diff changeset
1053 if (value == NULL)
f3a325662d39 * listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents: 1369
diff changeset
1054 goto Fail_1;
1840
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
1055 }
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
1056 if (i >= len) {
9991
ddbbed8cb830 builtin_map(): A better fix for the previous leak plug (remember
Barry Warsaw <barry@python.org>
parents: 9980
diff changeset
1057 int status = PyList_Append(result, value);
ddbbed8cb830 builtin_map(): A better fix for the previous leak plug (remember
Barry Warsaw <barry@python.org>
parents: 9980
diff changeset
1058 Py_DECREF(value);
ddbbed8cb830 builtin_map(): A better fix for the previous leak plug (remember
Barry Warsaw <barry@python.org>
parents: 9980
diff changeset
1059 if (status < 0)
1840
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
1060 goto Fail_1;
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
1061 }
17675
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
1062 else if (PyList_SetItem(result, i, value) < 0)
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
1063 goto Fail_1;
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
1064 }
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
1065
8661
30fbf18af29e Small changes to map() and filter():
Guido van Rossum <guido@python.org>
parents: 8589
diff changeset
1066 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
30fbf18af29e Small changes to map() and filter():
Guido van Rossum <guido@python.org>
parents: 8589
diff changeset
1067 goto Fail_1;
30fbf18af29e Small changes to map() and filter():
Guido van Rossum <guido@python.org>
parents: 8589
diff changeset
1068
17675
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
1069 goto Succeed;
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
1070
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
1071 Fail_1:
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1072 Py_DECREF(result);
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
1073 Fail_2:
17675
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
1074 result = NULL;
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
1075 Succeed:
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
1076 assert(seqs);
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
1077 for (i = 0; i < n; ++i)
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
1078 Py_XDECREF(seqs[i].it);
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
1079 PyMem_DEL(seqs);
0be277039d93 Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17667
diff changeset
1080 return result;
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
1081 }
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
1082
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
1083 PyDoc_STRVAR(map_doc,
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1084 "map(function, sequence[, sequence, ...]) -> list\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1085 \n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1086 Return a list of the results of applying the function to the items of\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1087 the argument sequence(s). If more than one sequence is given, the\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1088 function is called with an argument list consisting of the corresponding\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1089 item of each sequence, substituting None for missing values when not all\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1090 sequences have the same length. If the function is None, return a list of\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
1091 the items of the sequence (or a list of tuples if more than one sequence).");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1092
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1093
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1094 static PyObject *
46607
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1095 builtin_next(PyObject *self, PyObject *args)
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1096 {
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1097 PyObject *it, *res;
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1098 PyObject *def = NULL;
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1099
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1100 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1101 return NULL;
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1102 if (!PyIter_Check(it)) {
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1103 PyErr_Format(PyExc_TypeError,
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1104 "%.200s object is not an iterator",
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1105 it->ob_type->tp_name);
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1106 return NULL;
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1107 }
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1108
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1109 res = (*it->ob_type->tp_iternext)(it);
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1110 if (res != NULL) {
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1111 return res;
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1112 } else if (def != NULL) {
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1113 if (PyErr_Occurred()) {
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1114 if (!PyErr_ExceptionMatches(PyExc_StopIteration))
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1115 return NULL;
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1116 PyErr_Clear();
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1117 }
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1118 Py_INCREF(def);
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1119 return def;
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1120 } else if (PyErr_Occurred()) {
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1121 return NULL;
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1122 } else {
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1123 PyErr_SetNone(PyExc_StopIteration);
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1124 return NULL;
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1125 }
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1126 }
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1127
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1128 PyDoc_STRVAR(next_doc,
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1129 "next(iterator[, default])\n\
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1130 \n\
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1131 Return the next item from the iterator. If default is given and the iterator\n\
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1132 is exhausted, it is returned instead of raising StopIteration.");
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1133
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1134
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
1135 static PyObject *
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13576
diff changeset
1136 builtin_setattr(PyObject *self, PyObject *args)
644
59f9325bb8ec Added getattr and setattr built-in functions.
Guido van Rossum <guido@python.org>
parents: 606
diff changeset
1137 {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1138 PyObject *v;
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1139 PyObject *name;
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1140 PyObject *value;
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
1141
26818
e094a03a80ff SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents: 26612
diff changeset
1142 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
644
59f9325bb8ec Added getattr and setattr built-in functions.
Guido van Rossum <guido@python.org>
parents: 606
diff changeset
1143 return NULL;
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1144 if (PyObject_SetAttr(v, name, value) != 0)
644
59f9325bb8ec Added getattr and setattr built-in functions.
Guido van Rossum <guido@python.org>
parents: 606
diff changeset
1145 return NULL;
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1146 Py_INCREF(Py_None);
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1147 return Py_None;
644
59f9325bb8ec Added getattr and setattr built-in functions.
Guido van Rossum <guido@python.org>
parents: 606
diff changeset
1148 }
59f9325bb8ec Added getattr and setattr built-in functions.
Guido van Rossum <guido@python.org>
parents: 606
diff changeset
1149
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
1150 PyDoc_STRVAR(setattr_doc,
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1151 "setattr(object, name, value)\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1152 \n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1153 Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
1154 ``x.y = v''.");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1155
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1156
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1157 static PyObject *
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13576
diff changeset
1158 builtin_delattr(PyObject *self, PyObject *args)
1843
8294bbd94535 Added delattr()
Guido van Rossum <guido@python.org>
parents: 1842
diff changeset
1159 {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1160 PyObject *v;
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1161 PyObject *name;
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
1162
26818
e094a03a80ff SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents: 26612
diff changeset
1163 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
1843
8294bbd94535 Added delattr()
Guido van Rossum <guido@python.org>
parents: 1842
diff changeset
1164 return NULL;
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1165 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
1843
8294bbd94535 Added delattr()
Guido van Rossum <guido@python.org>
parents: 1842
diff changeset
1166 return NULL;
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1167 Py_INCREF(Py_None);
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1168 return Py_None;
1843
8294bbd94535 Added delattr()
Guido van Rossum <guido@python.org>
parents: 1842
diff changeset
1169 }
8294bbd94535 Added delattr()
Guido van Rossum <guido@python.org>
parents: 1842
diff changeset
1170
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
1171 PyDoc_STRVAR(delattr_doc,
9514
a126107c433a Fix cosmetic bug in delattr docstring discovered by JvR.
Guido van Rossum <guido@python.org>
parents: 9188
diff changeset
1172 "delattr(object, name)\n\
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1173 \n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1174 Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
1175 ``del x.y''.");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1176
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1177
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1178 static PyObject *
19301
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
1179 builtin_hash(PyObject *self, PyObject *v)
1257
1cabc2b6c970 * Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents: 1252
diff changeset
1180 {
1cabc2b6c970 * Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents: 1252
diff changeset
1181 long x;
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
1182
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1183 x = PyObject_Hash(v);
1257
1cabc2b6c970 * Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents: 1252
diff changeset
1184 if (x == -1)
1cabc2b6c970 * Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents: 1252
diff changeset
1185 return NULL;
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1186 return PyInt_FromLong(x);
1257
1cabc2b6c970 * Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents: 1252
diff changeset
1187 }
1cabc2b6c970 * Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents: 1252
diff changeset
1188
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
1189 PyDoc_STRVAR(hash_doc,
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1190 "hash(object) -> integer\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1191 \n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1192 Return a hash value for the object. Two objects with the same value have\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
1193 the same hash value. The reverse is not necessarily true, but likely.");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1194
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1195
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1196 static PyObject *
19301
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
1197 builtin_hex(PyObject *self, PyObject *v)
404
9cd38d1ac391 Made dir() more robust.
Guido van Rossum <guido@python.org>
parents: 385
diff changeset
1198 {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1199 PyNumberMethods *nb;
32759
d1777f51923b Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 32526
diff changeset
1200 PyObject *res;
47139
d953ea58cc8b revert 63425 over Guido's Febuary message about this, that I missed
Benjamin Peterson <benjamin@python.org>
parents: 47137
diff changeset
1201
d953ea58cc8b revert 63425 over Guido's Febuary message about this, that I missed
Benjamin Peterson <benjamin@python.org>
parents: 47137
diff changeset
1202 if ((nb = v->ob_type->tp_as_number) == NULL ||
d953ea58cc8b revert 63425 over Guido's Febuary message about this, that I missed
Benjamin Peterson <benjamin@python.org>
parents: 47137
diff changeset
1203 nb->nb_hex == NULL) {
d953ea58cc8b revert 63425 over Guido's Febuary message about this, that I missed
Benjamin Peterson <benjamin@python.org>
parents: 47137
diff changeset
1204 PyErr_SetString(PyExc_TypeError,
d953ea58cc8b revert 63425 over Guido's Febuary message about this, that I missed
Benjamin Peterson <benjamin@python.org>
parents: 47137
diff changeset
1205 "hex() argument can't be converted to hex");
d953ea58cc8b revert 63425 over Guido's Febuary message about this, that I missed
Benjamin Peterson <benjamin@python.org>
parents: 47137
diff changeset
1206 return NULL;
404
9cd38d1ac391 Made dir() more robust.
Guido van Rossum <guido@python.org>
parents: 385
diff changeset
1207 }
47139
d953ea58cc8b revert 63425 over Guido's Febuary message about this, that I missed
Benjamin Peterson <benjamin@python.org>
parents: 47137
diff changeset
1208 res = (*nb->nb_hex)(v);
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47385
diff changeset
1209 if (res && !PyString_Check(res)) {
47139
d953ea58cc8b revert 63425 over Guido's Febuary message about this, that I missed
Benjamin Peterson <benjamin@python.org>
parents: 47137
diff changeset
1210 PyErr_Format(PyExc_TypeError,
d953ea58cc8b revert 63425 over Guido's Febuary message about this, that I missed
Benjamin Peterson <benjamin@python.org>
parents: 47137
diff changeset
1211 "__hex__ returned non-string (type %.200s)",
d953ea58cc8b revert 63425 over Guido's Febuary message about this, that I missed
Benjamin Peterson <benjamin@python.org>
parents: 47137
diff changeset
1212 res->ob_type->tp_name);
d953ea58cc8b revert 63425 over Guido's Febuary message about this, that I missed
Benjamin Peterson <benjamin@python.org>
parents: 47137
diff changeset
1213 Py_DECREF(res);
d953ea58cc8b revert 63425 over Guido's Febuary message about this, that I missed
Benjamin Peterson <benjamin@python.org>
parents: 47137
diff changeset
1214 return NULL;
d953ea58cc8b revert 63425 over Guido's Febuary message about this, that I missed
Benjamin Peterson <benjamin@python.org>
parents: 47137
diff changeset
1215 }
d953ea58cc8b revert 63425 over Guido's Febuary message about this, that I missed
Benjamin Peterson <benjamin@python.org>
parents: 47137
diff changeset
1216 return res;
404
9cd38d1ac391 Made dir() more robust.
Guido van Rossum <guido@python.org>
parents: 385
diff changeset
1217 }
9cd38d1ac391 Made dir() more robust.
Guido van Rossum <guido@python.org>
parents: 385
diff changeset
1218
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
1219 PyDoc_STRVAR(hex_doc,
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1220 "hex(number) -> string\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1221 \n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
1222 Return the hexadecimal representation of an integer or long integer.");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1223
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1224
13447
a89f7f268de4 Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents: 13446
diff changeset
1225 static PyObject *builtin_raw_input(PyObject *, PyObject *);
1073
2c0432fcc270 Modified most (but not yet all) I/O to always go through sys.stdout or
Guido van Rossum <guido@python.org>
parents: 1049
diff changeset
1226
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1227 static PyObject *
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13576
diff changeset
1228 builtin_input(PyObject *self, PyObject *args)
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
1229 {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1230 PyObject *line;
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
1231 char *str;
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1232 PyObject *res;
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1233 PyObject *globals, *locals;
31445
1219f1162d1d Fix input() builtin function to respect compiler flags.
Hye-Shik Chang <hyeshik@gmail.com>
parents: 31345
diff changeset
1234 PyCompilerFlags cf;
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
1235
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
1236 line = builtin_raw_input(self, args);
1073
2c0432fcc270 Modified most (but not yet all) I/O to always go through sys.stdout or
Guido van Rossum <guido@python.org>
parents: 1049
diff changeset
1237 if (line == NULL)
2c0432fcc270 Modified most (but not yet all) I/O to always go through sys.stdout or
Guido van Rossum <guido@python.org>
parents: 1049
diff changeset
1238 return line;
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1239 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
1240 return NULL;
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
1241 while (*str == ' ' || *str == '\t')
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
1242 str++;
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1243 globals = PyEval_GetGlobals();
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1244 locals = PyEval_GetLocals();
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1245 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1246 if (PyDict_SetItemString(globals, "__builtins__",
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1247 PyEval_GetBuiltins()) != 0)
2098
b7be0382f9ee __builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents: 2087
diff changeset
1248 return NULL;
b7be0382f9ee __builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents: 2087
diff changeset
1249 }
31445
1219f1162d1d Fix input() builtin function to respect compiler flags.
Hye-Shik Chang <hyeshik@gmail.com>
parents: 31345
diff changeset
1250 cf.cf_flags = 0;
1219f1162d1d Fix input() builtin function to respect compiler flags.
Hye-Shik Chang <hyeshik@gmail.com>
parents: 31345
diff changeset
1251 PyEval_MergeCompilerFlags(&cf);
1219f1162d1d Fix input() builtin function to respect compiler flags.
Hye-Shik Chang <hyeshik@gmail.com>
parents: 31345
diff changeset
1252 res = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1253 Py_DECREF(line);
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
1254 return res;
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
1255 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
1256
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
1257 PyDoc_STRVAR(input_doc,
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1258 "input([prompt]) -> value\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1259 \n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
1260 Equivalent to eval(raw_input(prompt)).");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1261
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1262
5092
cb7aadd9d9f2 Added intern() function.
Guido van Rossum <guido@python.org>
parents: 5010
diff changeset
1263 static PyObject *
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13576
diff changeset
1264 builtin_intern(PyObject *self, PyObject *args)
5092
cb7aadd9d9f2 Added intern() function.
Guido van Rossum <guido@python.org>
parents: 5010
diff changeset
1265 {
cb7aadd9d9f2 Added intern() function.
Guido van Rossum <guido@python.org>
parents: 5010
diff changeset
1266 PyObject *s;
11882
dc65c5f6ad7c Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents: 11800
diff changeset
1267 if (!PyArg_ParseTuple(args, "S:intern", &s))
5092
cb7aadd9d9f2 Added intern() function.
Guido van Rossum <guido@python.org>
parents: 5010
diff changeset
1268 return NULL;
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47385
diff changeset
1269 if (!PyString_CheckExact(s)) {
33019
5218bff56449 Subclasses of string can no longer be interned. The semantics of
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 32896
diff changeset
1270 PyErr_SetString(PyExc_TypeError,
5218bff56449 Subclasses of string can no longer be interned. The semantics of
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 32896
diff changeset
1271 "can't intern subclass of string");
5218bff56449 Subclasses of string can no longer be interned. The semantics of
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 32896
diff changeset
1272 return NULL;
5218bff56449 Subclasses of string can no longer be interned. The semantics of
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 32896
diff changeset
1273 }
5092
cb7aadd9d9f2 Added intern() function.
Guido van Rossum <guido@python.org>
parents: 5010
diff changeset
1274 Py_INCREF(s);
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47385
diff changeset
1275 PyString_InternInPlace(&s);
5092
cb7aadd9d9f2 Added intern() function.
Guido van Rossum <guido@python.org>
parents: 5010
diff changeset
1276 return s;
cb7aadd9d9f2 Added intern() function.
Guido van Rossum <guido@python.org>
parents: 5010
diff changeset
1277 }
cb7aadd9d9f2 Added intern() function.
Guido van Rossum <guido@python.org>
parents: 5010
diff changeset
1278
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
1279 PyDoc_STRVAR(intern_doc,
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1280 "intern(string) -> string\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1281 \n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1282 ``Intern'' the given string. This enters the string in the (global)\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1283 table of interned strings whose purpose is to speed up dictionary lookups.\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1284 Return the string itself or the previously interned string object with the\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
1285 same value.");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1286
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1287
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1288 static PyObject *
17597
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 17337
diff changeset
1289 builtin_iter(PyObject *self, PyObject *args)
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 17337
diff changeset
1290 {
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 17337
diff changeset
1291 PyObject *v, *w = NULL;
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 17337
diff changeset
1292
26818
e094a03a80ff SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents: 26612
diff changeset
1293 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
17597
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 17337
diff changeset
1294 return NULL;
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 17337
diff changeset
1295 if (w == NULL)
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 17337
diff changeset
1296 return PyObject_GetIter(v);
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 17337
diff changeset
1297 if (!PyCallable_Check(v)) {
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 17337
diff changeset
1298 PyErr_SetString(PyExc_TypeError,
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 17337
diff changeset
1299 "iter(v, w): v must be callable");
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 17337
diff changeset
1300 return NULL;
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 17337
diff changeset
1301 }
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 17337
diff changeset
1302 return PyCallIter_New(v, w);
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 17337
diff changeset
1303 }
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 17337
diff changeset
1304
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
1305 PyDoc_STRVAR(iter_doc,
17597
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 17337
diff changeset
1306 "iter(collection) -> iterator\n\
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 17337
diff changeset
1307 iter(callable, sentinel) -> iterator\n\
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 17337
diff changeset
1308 \n\
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 17337
diff changeset
1309 Get an iterator from an object. In the first form, the argument must\n\
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 17337
diff changeset
1310 supply its own iterator, or be a sequence.\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
1311 In the second form, the callable is called until it returns the sentinel.");
17597
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 17337
diff changeset
1312
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 17337
diff changeset
1313
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 17337
diff changeset
1314 static PyObject *
19301
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
1315 builtin_len(PyObject *self, PyObject *v)
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
1316 {
36501
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 36484
diff changeset
1317 Py_ssize_t res;
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
1318
13576
61e4c29d53d8 replace PyXXX_Length calls with PyXXX_Size calls
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 13447
diff changeset
1319 res = PyObject_Size(v);
8589
97dc6aa532e7 Fix a stupid little bug: len() of an unsized returns -1 and leaves an
Guido van Rossum <guido@python.org>
parents: 8581
diff changeset
1320 if (res < 0 && PyErr_Occurred())
97dc6aa532e7 Fix a stupid little bug: len() of an unsized returns -1 and leaves an
Guido van Rossum <guido@python.org>
parents: 8581
diff changeset
1321 return NULL;
36501
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 36484
diff changeset
1322 return PyInt_FromSsize_t(res);
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
1323 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
1324
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
1325 PyDoc_STRVAR(len_doc,
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1326 "len(object) -> integer\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1327 \n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
1328 Return the number of items of a sequence or mapping.");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1329
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1330
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1331 static PyObject *
19301
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
1332 builtin_locals(PyObject *self)
2808
9318ac51691e added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents: 2375
diff changeset
1333 {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1334 PyObject *d;
2808
9318ac51691e added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents: 2375
diff changeset
1335
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1336 d = PyEval_GetLocals();
39447
71b0ac80a135 It's highly unlikely, though possible for PyEval_Get*() to return NULLs.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39385
diff changeset
1337 Py_XINCREF(d);
2808
9318ac51691e added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents: 2375
diff changeset
1338 return d;
9318ac51691e added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents: 2375
diff changeset
1339 }
9318ac51691e added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents: 2375
diff changeset
1340
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
1341 PyDoc_STRVAR(locals_doc,
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1342 "locals() -> dictionary\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1343 \n\
27076
753306f9b0a0 SF bug #655271: Slightly modify locals() doc
Raymond Hettinger <python@rcn.com>
parents: 26824
diff changeset
1344 Update and return a dictionary containing the current scope's local variables.");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1345
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1346
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1347 static PyObject *
34085
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1348 min_max(PyObject *args, PyObject *kwds, int op)
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
1349 {
34085
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1350 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
33099
ce016d0ec701 Patch #1005468: Disambiguate "min() or max()" exception string.
Martin v. Löwis <martin@v.loewis.de>
parents: 33019
diff changeset
1351 const char *name = op == Py_LT ? "min" : "max";
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
1352
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1353 if (PyTuple_Size(args) > 1)
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
1354 v = args;
33099
ce016d0ec701 Patch #1005468: Disambiguate "min() or max()" exception string.
Martin v. Löwis <martin@v.loewis.de>
parents: 33019
diff changeset
1355 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
1356 return NULL;
23305
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
1357
34085
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1358 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1359 keyfunc = PyDict_GetItemString(kwds, "key");
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1360 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
35500
8fa83a9ebc6e Whitespace normalization.
Georg Brandl <georg@python.org>
parents: 35364
diff changeset
1361 PyErr_Format(PyExc_TypeError,
34085
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1362 "%s() got an unexpected keyword argument", name);
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1363 return NULL;
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1364 }
44894
4c8308ac20cd Fix two crashers.
Guido van Rossum <guido@python.org>
parents: 44747
diff changeset
1365 Py_INCREF(keyfunc);
35500
8fa83a9ebc6e Whitespace normalization.
Georg Brandl <georg@python.org>
parents: 35364
diff changeset
1366 }
34085
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1367
17667
76ee8b62ee2a Generalize max(seq) and min(seq) to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17654
diff changeset
1368 it = PyObject_GetIter(v);
44894
4c8308ac20cd Fix two crashers.
Guido van Rossum <guido@python.org>
parents: 44747
diff changeset
1369 if (it == NULL) {
4c8308ac20cd Fix two crashers.
Guido van Rossum <guido@python.org>
parents: 44747
diff changeset
1370 Py_XDECREF(keyfunc);
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
1371 return NULL;
44894
4c8308ac20cd Fix two crashers.
Guido van Rossum <guido@python.org>
parents: 44747
diff changeset
1372 }
17667
76ee8b62ee2a Generalize max(seq) and min(seq) to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17654
diff changeset
1373
34085
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1374 maxitem = NULL; /* the result */
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1375 maxval = NULL; /* the value associated with the result */
34123
4e8fb12f8378 Put parentheses around the assignment in the 'while' loop conditional
Brett Cannon <bcannon@gmail.com>
parents: 34085
diff changeset
1376 while (( item = PyIter_Next(it) )) {
34085
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1377 /* get the value from the key function */
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1378 if (keyfunc != NULL) {
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1379 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1380 if (val == NULL)
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1381 goto Fail_it_item;
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1382 }
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1383 /* no key function; the value is the item */
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1384 else {
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1385 val = item;
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1386 Py_INCREF(val);
1840
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
1387 }
17667
76ee8b62ee2a Generalize max(seq) and min(seq) to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17654
diff changeset
1388
34085
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1389 /* maximum value and item are unset; set them */
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1390 if (maxval == NULL) {
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1391 maxitem = item;
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1392 maxval = val;
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1393 }
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1394 /* maximum value and item are set; update them as necessary */
1840
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
1395 else {
34085
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1396 int cmp = PyObject_RichCompareBool(val, maxval, op);
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1397 if (cmp < 0)
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1398 goto Fail_it_item_and_val;
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1399 else if (cmp > 0) {
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1400 Py_DECREF(maxval);
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1401 Py_DECREF(maxitem);
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1402 maxval = val;
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1403 maxitem = item;
15949
76ad2a9a3e53 Use rich comparisons in min and max.
Guido van Rossum <guido@python.org>
parents: 15832
diff changeset
1404 }
34085
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1405 else {
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1406 Py_DECREF(item);
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1407 Py_DECREF(val);
5610
10e9cfa010f0 PyObject_Compare can raise an exception now.
Guido van Rossum <guido@python.org>
parents: 5471
diff changeset
1408 }
1840
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
1409 }
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
1410 }
34085
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1411 if (PyErr_Occurred())
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1412 goto Fail_it;
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1413 if (maxval == NULL) {
33099
ce016d0ec701 Patch #1005468: Disambiguate "min() or max()" exception string.
Martin v. Löwis <martin@v.loewis.de>
parents: 33019
diff changeset
1414 PyErr_Format(PyExc_ValueError,
ce016d0ec701 Patch #1005468: Disambiguate "min() or max()" exception string.
Martin v. Löwis <martin@v.loewis.de>
parents: 33019
diff changeset
1415 "%s() arg is an empty sequence", name);
34085
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1416 assert(maxitem == NULL);
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1417 }
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1418 else
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1419 Py_DECREF(maxval);
17667
76ee8b62ee2a Generalize max(seq) and min(seq) to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17654
diff changeset
1420 Py_DECREF(it);
44894
4c8308ac20cd Fix two crashers.
Guido van Rossum <guido@python.org>
parents: 44747
diff changeset
1421 Py_XDECREF(keyfunc);
34085
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1422 return maxitem;
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1423
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1424 Fail_it_item_and_val:
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1425 Py_DECREF(val);
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1426 Fail_it_item:
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1427 Py_DECREF(item);
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1428 Fail_it:
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1429 Py_XDECREF(maxval);
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1430 Py_XDECREF(maxitem);
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1431 Py_DECREF(it);
44894
4c8308ac20cd Fix two crashers.
Guido van Rossum <guido@python.org>
parents: 44747
diff changeset
1432 Py_XDECREF(keyfunc);
34085
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1433 return NULL;
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
1434 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
1435
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1436 static PyObject *
34085
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1437 builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
1438 {
34085
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1439 return min_max(args, kwds, Py_LT);
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
1440 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
1441
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
1442 PyDoc_STRVAR(min_doc,
34085
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1443 "min(iterable[, key=func]) -> value\n\
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1444 min(a, b, c, ...[, key=func]) -> value\n\
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1445 \n\
34085
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1446 With a single iterable argument, return its smallest item.\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
1447 With two or more arguments, return the smallest argument.");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1448
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1449
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1450 static PyObject *
34085
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1451 builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
1452 {
34085
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1453 return min_max(args, kwds, Py_GT);
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
1454 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
1455
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
1456 PyDoc_STRVAR(max_doc,
34085
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1457 "max(iterable[, key=func]) -> value\n\
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1458 max(a, b, c, ...[, key=func]) -> value\n\
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1459 \n\
34085
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
1460 With a single iterable argument, return its largest item.\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
1461 With two or more arguments, return the largest argument.");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1462
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1463
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1464 static PyObject *
19301
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
1465 builtin_oct(PyObject *self, PyObject *v)
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
1466 {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1467 PyNumberMethods *nb;
32759
d1777f51923b Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 32526
diff changeset
1468 PyObject *res;
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
1469
1049
2ed511171809 Made builtins int(), long(), float(), oct() and hex() more generic.
Guido van Rossum <guido@python.org>
parents: 972
diff changeset
1470 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
2ed511171809 Made builtins int(), long(), float(), oct() and hex() more generic.
Guido van Rossum <guido@python.org>
parents: 972
diff changeset
1471 nb->nb_oct == NULL) {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1472 PyErr_SetString(PyExc_TypeError,
1049
2ed511171809 Made builtins int(), long(), float(), oct() and hex() more generic.
Guido van Rossum <guido@python.org>
parents: 972
diff changeset
1473 "oct() argument can't be converted to oct");
2ed511171809 Made builtins int(), long(), float(), oct() and hex() more generic.
Guido van Rossum <guido@python.org>
parents: 972
diff changeset
1474 return NULL;
404
9cd38d1ac391 Made dir() more robust.
Guido van Rossum <guido@python.org>
parents: 385
diff changeset
1475 }
32759
d1777f51923b Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 32526
diff changeset
1476 res = (*nb->nb_oct)(v);
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47385
diff changeset
1477 if (res && !PyString_Check(res)) {
32759
d1777f51923b Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 32526
diff changeset
1478 PyErr_Format(PyExc_TypeError,
d1777f51923b Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 32526
diff changeset
1479 "__oct__ returned non-string (type %.200s)",
d1777f51923b Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 32526
diff changeset
1480 res->ob_type->tp_name);
d1777f51923b Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 32526
diff changeset
1481 Py_DECREF(res);
d1777f51923b Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 32526
diff changeset
1482 return NULL;
d1777f51923b Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 32526
diff changeset
1483 }
d1777f51923b Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 32526
diff changeset
1484 return res;
404
9cd38d1ac391 Made dir() more robust.
Guido van Rossum <guido@python.org>
parents: 385
diff changeset
1485 }
9cd38d1ac391 Made dir() more robust.
Guido van Rossum <guido@python.org>
parents: 385
diff changeset
1486
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
1487 PyDoc_STRVAR(oct_doc,
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1488 "oct(number) -> string\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1489 \n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
1490 Return the octal representation of an integer or long integer.");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1491
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1492
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1493 static PyObject *
38077
c9202f1c56c2 SF #1479181: split open() and file() from being aliases for each other.
Neal Norwitz <nnorwitz@gmail.com>
parents: 37673
diff changeset
1494 builtin_open(PyObject *self, PyObject *args, PyObject *kwds)
c9202f1c56c2 SF #1479181: split open() and file() from being aliases for each other.
Neal Norwitz <nnorwitz@gmail.com>
parents: 37673
diff changeset
1495 {
c9202f1c56c2 SF #1479181: split open() and file() from being aliases for each other.
Neal Norwitz <nnorwitz@gmail.com>
parents: 37673
diff changeset
1496 return PyObject_Call((PyObject*)&PyFile_Type, args, kwds);
c9202f1c56c2 SF #1479181: split open() and file() from being aliases for each other.
Neal Norwitz <nnorwitz@gmail.com>
parents: 37673
diff changeset
1497 }
c9202f1c56c2 SF #1479181: split open() and file() from being aliases for each other.
Neal Norwitz <nnorwitz@gmail.com>
parents: 37673
diff changeset
1498
c9202f1c56c2 SF #1479181: split open() and file() from being aliases for each other.
Neal Norwitz <nnorwitz@gmail.com>
parents: 37673
diff changeset
1499 PyDoc_STRVAR(open_doc,
c9202f1c56c2 SF #1479181: split open() and file() from being aliases for each other.
Neal Norwitz <nnorwitz@gmail.com>
parents: 37673
diff changeset
1500 "open(name[, mode[, buffering]]) -> file object\n\
c9202f1c56c2 SF #1479181: split open() and file() from being aliases for each other.
Neal Norwitz <nnorwitz@gmail.com>
parents: 37673
diff changeset
1501 \n\
44222
9a976a6ee936 Note that open() is the preferred way to open files (issue 1510).
Skip Montanaro <skip@pobox.com>
parents: 44193
diff changeset
1502 Open a file using the file() type, returns a file object. This is the\n\
9a976a6ee936 Note that open() is the preferred way to open files (issue 1510).
Skip Montanaro <skip@pobox.com>
parents: 44193
diff changeset
1503 preferred way to open a file.");
38077
c9202f1c56c2 SF #1479181: split open() and file() from being aliases for each other.
Neal Norwitz <nnorwitz@gmail.com>
parents: 37673
diff changeset
1504
c9202f1c56c2 SF #1479181: split open() and file() from being aliases for each other.
Neal Norwitz <nnorwitz@gmail.com>
parents: 37673
diff changeset
1505
c9202f1c56c2 SF #1479181: split open() and file() from being aliases for each other.
Neal Norwitz <nnorwitz@gmail.com>
parents: 37673
diff changeset
1506 static PyObject *
19301
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
1507 builtin_ord(PyObject *self, PyObject* obj)
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
1508 {
11973
8bdc25d22925 Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents: 11882
diff changeset
1509 long ord;
36521
30aef3ce2b26 Use Py_ssize_t to count the
Martin v. Löwis <martin@v.loewis.de>
parents: 36501
diff changeset
1510 Py_ssize_t size;
11973
8bdc25d22925 Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents: 11882
diff changeset
1511
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47385
diff changeset
1512 if (PyString_Check(obj)) {
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47385
diff changeset
1513 size = PyString_GET_SIZE(obj);
15635
838551869790 Patch #102955, fixing one of the warnings in bug #121479:
Andrew M. Kuchling <amk@amk.ca>
parents: 15478
diff changeset
1514 if (size == 1) {
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47385
diff changeset
1515 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
15635
838551869790 Patch #102955, fixing one of the warnings in bug #121479:
Andrew M. Kuchling <amk@amk.ca>
parents: 15478
diff changeset
1516 return PyInt_FromLong(ord);
838551869790 Patch #102955, fixing one of the warnings in bug #121479:
Andrew M. Kuchling <amk@amk.ca>
parents: 15478
diff changeset
1517 }
47291
04bd3690fb1f First step of the C API rename:
Christian Heimes <christian@cheimes.de>
parents: 47139
diff changeset
1518 } else if (PyByteArray_Check(obj)) {
04bd3690fb1f First step of the C API rename:
Christian Heimes <christian@cheimes.de>
parents: 47139
diff changeset
1519 size = PyByteArray_GET_SIZE(obj);
46107
5341b30b1812 Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46075
diff changeset
1520 if (size == 1) {
47291
04bd3690fb1f First step of the C API rename:
Christian Heimes <christian@cheimes.de>
parents: 47139
diff changeset
1521 ord = (long)((unsigned char)*PyByteArray_AS_STRING(obj));
46107
5341b30b1812 Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46075
diff changeset
1522 return PyInt_FromLong(ord);
5341b30b1812 Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46075
diff changeset
1523 }
5341b30b1812 Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46075
diff changeset
1524
19343
7257e87e0720 Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents: 19301
diff changeset
1525 #ifdef Py_USING_UNICODE
12384
aa013f2cf80b ord: provide better error messages
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 12368
diff changeset
1526 } else if (PyUnicode_Check(obj)) {
aa013f2cf80b ord: provide better error messages
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 12368
diff changeset
1527 size = PyUnicode_GET_SIZE(obj);
15635
838551869790 Patch #102955, fixing one of the warnings in bug #121479:
Andrew M. Kuchling <amk@amk.ca>
parents: 15478
diff changeset
1528 if (size == 1) {
12384
aa013f2cf80b ord: provide better error messages
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 12368
diff changeset
1529 ord = (long)*PyUnicode_AS_UNICODE(obj);
15635
838551869790 Patch #102955, fixing one of the warnings in bug #121479:
Andrew M. Kuchling <amk@amk.ca>
parents: 15478
diff changeset
1530 return PyInt_FromLong(ord);
838551869790 Patch #102955, fixing one of the warnings in bug #121479:
Andrew M. Kuchling <amk@amk.ca>
parents: 15478
diff changeset
1531 }
19343
7257e87e0720 Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents: 19301
diff changeset
1532 #endif
12384
aa013f2cf80b ord: provide better error messages
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 12368
diff changeset
1533 } else {
aa013f2cf80b ord: provide better error messages
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 12368
diff changeset
1534 PyErr_Format(PyExc_TypeError,
15654
6405f30aa08c CHange error messages for ord(), using "string" instead of "string or Unicode"
Andrew M. Kuchling <amk@amk.ca>
parents: 15637
diff changeset
1535 "ord() expected string of length 1, but " \
12384
aa013f2cf80b ord: provide better error messages
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 12368
diff changeset
1536 "%.200s found", obj->ob_type->tp_name);
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
1537 return NULL;
11973
8bdc25d22925 Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents: 11882
diff changeset
1538 }
8bdc25d22925 Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents: 11882
diff changeset
1539
15829
9308dc8c85e0 (Modified) patch by Ping - SF Patch #102681.
Guido van Rossum <guido@python.org>
parents: 15727
diff changeset
1540 PyErr_Format(PyExc_TypeError,
15654
6405f30aa08c CHange error messages for ord(), using "string" instead of "string or Unicode"
Andrew M. Kuchling <amk@amk.ca>
parents: 15637
diff changeset
1541 "ord() expected a character, "
36521
30aef3ce2b26 Use Py_ssize_t to count the
Martin v. Löwis <martin@v.loewis.de>
parents: 36501
diff changeset
1542 "but string of length %zd found",
12384
aa013f2cf80b ord: provide better error messages
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 12368
diff changeset
1543 size);
aa013f2cf80b ord: provide better error messages
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 12368
diff changeset
1544 return NULL;
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
1545 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
1546
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
1547 PyDoc_STRVAR(ord_doc,
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1548 "ord(c) -> integer\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1549 \n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
1550 Return the integer ordinal of a one-character string.");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1551
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1552
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1553 static PyObject *
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13576
diff changeset
1554 builtin_pow(PyObject *self, PyObject *args)
2087
65146b52f16b * Python/bltinmodule.c: restructured coerce(), divmod(), pow() to
Guido van Rossum <guido@python.org>
parents: 2062
diff changeset
1555 {
8402
0cb0394c2edc A bunch of functions are now properly implemented in abstract.c, and
Guido van Rossum <guido@python.org>
parents: 8287
diff changeset
1556 PyObject *v, *w, *z = Py_None;
2087
65146b52f16b * Python/bltinmodule.c: restructured coerce(), divmod(), pow() to
Guido van Rossum <guido@python.org>
parents: 2062
diff changeset
1557
26818
e094a03a80ff SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents: 26612
diff changeset
1558 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
2087
65146b52f16b * Python/bltinmodule.c: restructured coerce(), divmod(), pow() to
Guido van Rossum <guido@python.org>
parents: 2062
diff changeset
1559 return NULL;
8402
0cb0394c2edc A bunch of functions are now properly implemented in abstract.c, and
Guido van Rossum <guido@python.org>
parents: 8287
diff changeset
1560 return PyNumber_Power(v, w, z);
223
6693c5d87f3a Added long() and support for longs in int() and float();
Guido van Rossum <guido@python.org>
parents: 182
diff changeset
1561 }
6693c5d87f3a Added long() and support for longs in int() and float();
Guido van Rossum <guido@python.org>
parents: 182
diff changeset
1562
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
1563 PyDoc_STRVAR(pow_doc,
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1564 "pow(x, y[, z]) -> number\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1565 \n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1566 With two arguments, equivalent to x**y. With three arguments,\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
1567 equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1568
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1569
45891
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1570 static PyObject *
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1571 builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1572 {
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1573 static char *kwlist[] = {"sep", "end", "file", 0};
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1574 static PyObject *dummy_args;
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1575 PyObject *sep = NULL, *end = NULL, *file = NULL;
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1576 int i, err;
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1577
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1578 if (dummy_args == NULL) {
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1579 if (!(dummy_args = PyTuple_New(0)))
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1580 return NULL;
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1581 }
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1582 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1583 kwlist, &sep, &end, &file))
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1584 return NULL;
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1585 if (file == NULL || file == Py_None) {
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1586 file = PySys_GetObject("stdout");
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1587 /* sys.stdout may be None when FILE* stdout isn't connected */
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1588 if (file == Py_None)
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1589 Py_RETURN_NONE;
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1590 }
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1591
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47385
diff changeset
1592 if (sep && sep != Py_None && !PyString_Check(sep) &&
45891
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1593 !PyUnicode_Check(sep)) {
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1594 PyErr_Format(PyExc_TypeError,
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1595 "sep must be None, str or unicode, not %.200s",
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1596 sep->ob_type->tp_name);
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1597 return NULL;
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1598 }
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47385
diff changeset
1599 if (end && end != Py_None && !PyString_Check(end) &&
45891
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1600 !PyUnicode_Check(end)) {
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1601 PyErr_Format(PyExc_TypeError,
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1602 "end must be None, str or unicode, not %.200s",
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1603 end->ob_type->tp_name);
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1604 return NULL;
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1605 }
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1606
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1607 for (i = 0; i < PyTuple_Size(args); i++) {
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1608 if (i > 0) {
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1609 if (sep == NULL || sep == Py_None)
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1610 err = PyFile_WriteString(" ", file);
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1611 else
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1612 err = PyFile_WriteObject(sep, file,
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1613 Py_PRINT_RAW);
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1614 if (err)
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1615 return NULL;
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1616 }
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1617 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1618 Py_PRINT_RAW);
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1619 if (err)
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1620 return NULL;
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1621 }
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1622
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1623 if (end == NULL || end == Py_None)
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1624 err = PyFile_WriteString("\n", file);
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1625 else
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1626 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1627 if (err)
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1628 return NULL;
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1629
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1630 Py_RETURN_NONE;
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1631 }
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1632
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1633 PyDoc_STRVAR(print_doc,
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1634 "print(value, ..., sep=' ', end='\\n', file=sys.stdout)\n\
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1635 \n\
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1636 Prints the values to a stream, or to sys.stdout by default.\n\
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1637 Optional keyword arguments:\n\
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1638 file: a file-like object (stream); defaults to the current sys.stdout.\n\
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1639 sep: string inserted between values, default a space.\n\
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1640 end: string appended after the last value, default a newline.");
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
1641
28583
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1642
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1643 /* Return number of items in range (lo, hi, step), when arguments are
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1644 * PyInt or PyLong objects. step > 0 required. Return a value < 0 if
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1645 * & only if the true value is too large to fit in a signed long.
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1646 * Arguments MUST return 1 with either PyInt_Check() or
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1647 * PyLong_Check(). Return -1 when there is an error.
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1648 */
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1649 static long
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1650 get_len_of_range_longs(PyObject *lo, PyObject *hi, PyObject *step)
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1651 {
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1652 /* -------------------------------------------------------------
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1653 Algorithm is equal to that of get_len_of_range(), but it operates
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1654 on PyObjects (which are assumed to be PyLong or PyInt objects).
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1655 ---------------------------------------------------------------*/
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1656 long n;
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1657 PyObject *diff = NULL;
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1658 PyObject *one = NULL;
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1659 PyObject *tmp1 = NULL, *tmp2 = NULL, *tmp3 = NULL;
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1660 /* holds sub-expression evaluations */
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1661
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1662 /* if (lo >= hi), return length of 0. */
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1663 if (PyObject_Compare(lo, hi) >= 0)
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1664 return 0;
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1665
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1666 if ((one = PyLong_FromLong(1L)) == NULL)
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1667 goto Fail;
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1668
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1669 if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL)
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1670 goto Fail;
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1671
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1672 if ((diff = PyNumber_Subtract(tmp1, one)) == NULL)
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1673 goto Fail;
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1674
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1675 if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL)
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1676 goto Fail;
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1677
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1678 if ((tmp3 = PyNumber_Add(tmp2, one)) == NULL)
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1679 goto Fail;
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1680
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1681 n = PyLong_AsLong(tmp3);
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1682 if (PyErr_Occurred()) { /* Check for Overflow */
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1683 PyErr_Clear();
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1684 goto Fail;
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1685 }
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1686
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1687 Py_DECREF(tmp3);
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1688 Py_DECREF(tmp2);
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1689 Py_DECREF(diff);
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1690 Py_DECREF(tmp1);
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1691 Py_DECREF(one);
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1692 return n;
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1693
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1694 Fail:
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1695 Py_XDECREF(tmp3);
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1696 Py_XDECREF(tmp2);
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1697 Py_XDECREF(diff);
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1698 Py_XDECREF(tmp1);
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1699 Py_XDECREF(one);
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1700 return -1;
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1701 }
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1702
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1703 /* An extension of builtin_range() that handles the case when PyLong
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1704 * arguments are given. */
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1705 static PyObject *
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1706 handle_range_longs(PyObject *self, PyObject *args)
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1707 {
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1708 PyObject *ilow;
28597
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1709 PyObject *ihigh = NULL;
28583
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1710 PyObject *istep = NULL;
28597
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1711
28583
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1712 PyObject *curnum = NULL;
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1713 PyObject *v = NULL;
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1714 long bign;
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1715 int i, n;
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1716 int cmp_result;
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1717
28597
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1718 PyObject *zero = PyLong_FromLong(0);
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1719
28583
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1720 if (zero == NULL)
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1721 return NULL;
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1722
28597
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1723 if (!PyArg_UnpackTuple(args, "range", 1, 3, &ilow, &ihigh, &istep)) {
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1724 Py_DECREF(zero);
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1725 return NULL;
28583
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1726 }
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1727
28597
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1728 /* Figure out which way we were called, supply defaults, and be
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1729 * sure to incref everything so that the decrefs at the end
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1730 * are correct.
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1731 */
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1732 assert(ilow != NULL);
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1733 if (ihigh == NULL) {
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1734 /* only 1 arg -- it's the upper limit */
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1735 ihigh = ilow;
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1736 ilow = NULL;
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1737 }
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1738 assert(ihigh != NULL);
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1739 Py_INCREF(ihigh);
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1740
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1741 /* ihigh correct now; do ilow */
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1742 if (ilow == NULL)
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1743 ilow = zero;
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1744 Py_INCREF(ilow);
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1745
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1746 /* ilow and ihigh correct now; do istep */
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1747 if (istep == NULL) {
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1748 istep = PyLong_FromLong(1L);
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1749 if (istep == NULL)
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1750 goto Fail;
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1751 }
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1752 else {
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1753 Py_INCREF(istep);
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1754 }
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1755
28583
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1756 if (!PyInt_Check(ilow) && !PyLong_Check(ilow)) {
28612
0792caa6371c Some errors from range() should be TypeError, not ValueError.
Guido van Rossum <guido@python.org>
parents: 28604
diff changeset
1757 PyErr_Format(PyExc_TypeError,
28738
52f3d90c17e8 complete and clarify some error messages for range()
Alex Martelli <aleaxit@gmail.com>
parents: 28718
diff changeset
1758 "range() integer start argument expected, got %s.",
28604
eee4969adbae Prompted by Tim's comment, when handle_range_longs() sees an
Guido van Rossum <guido@python.org>
parents: 28597
diff changeset
1759 ilow->ob_type->tp_name);
28583
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1760 goto Fail;
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1761 }
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1762
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1763 if (!PyInt_Check(ihigh) && !PyLong_Check(ihigh)) {
28612
0792caa6371c Some errors from range() should be TypeError, not ValueError.
Guido van Rossum <guido@python.org>
parents: 28604
diff changeset
1764 PyErr_Format(PyExc_TypeError,
28738
52f3d90c17e8 complete and clarify some error messages for range()
Alex Martelli <aleaxit@gmail.com>
parents: 28718
diff changeset
1765 "range() integer end argument expected, got %s.",
28604
eee4969adbae Prompted by Tim's comment, when handle_range_longs() sees an
Guido van Rossum <guido@python.org>
parents: 28597
diff changeset
1766 ihigh->ob_type->tp_name);
28583
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1767 goto Fail;
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1768 }
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1769
28597
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1770 if (!PyInt_Check(istep) && !PyLong_Check(istep)) {
28612
0792caa6371c Some errors from range() should be TypeError, not ValueError.
Guido van Rossum <guido@python.org>
parents: 28604
diff changeset
1771 PyErr_Format(PyExc_TypeError,
28738
52f3d90c17e8 complete and clarify some error messages for range()
Alex Martelli <aleaxit@gmail.com>
parents: 28718
diff changeset
1772 "range() integer step argument expected, got %s.",
28604
eee4969adbae Prompted by Tim's comment, when handle_range_longs() sees an
Guido van Rossum <guido@python.org>
parents: 28597
diff changeset
1773 istep->ob_type->tp_name);
28583
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1774 goto Fail;
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1775 }
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1776
28597
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1777 if (PyObject_Cmp(istep, zero, &cmp_result) == -1)
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1778 goto Fail;
28583
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1779 if (cmp_result == 0) {
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1780 PyErr_SetString(PyExc_ValueError,
28738
52f3d90c17e8 complete and clarify some error messages for range()
Alex Martelli <aleaxit@gmail.com>
parents: 28718
diff changeset
1781 "range() step argument must not be zero");
28583
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1782 goto Fail;
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1783 }
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1784
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1785 if (cmp_result > 0)
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1786 bign = get_len_of_range_longs(ilow, ihigh, istep);
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1787 else {
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1788 PyObject *neg_istep = PyNumber_Negative(istep);
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1789 if (neg_istep == NULL)
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1790 goto Fail;
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1791 bign = get_len_of_range_longs(ihigh, ilow, neg_istep);
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1792 Py_DECREF(neg_istep);
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1793 }
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1794
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1795 n = (int)bign;
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1796 if (bign < 0 || (long)n != bign) {
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1797 PyErr_SetString(PyExc_OverflowError,
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1798 "range() result has too many items");
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1799 goto Fail;
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1800 }
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1801
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1802 v = PyList_New(n);
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1803 if (v == NULL)
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1804 goto Fail;
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1805
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1806 curnum = ilow;
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1807 Py_INCREF(curnum);
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1808
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1809 for (i = 0; i < n; i++) {
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1810 PyObject *w = PyNumber_Long(curnum);
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1811 PyObject *tmp_num;
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1812 if (w == NULL)
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1813 goto Fail;
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1814
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1815 PyList_SET_ITEM(v, i, w);
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1816
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1817 tmp_num = PyNumber_Add(curnum, istep);
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1818 if (tmp_num == NULL)
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1819 goto Fail;
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1820
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1821 Py_DECREF(curnum);
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1822 curnum = tmp_num;
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1823 }
28597
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1824 Py_DECREF(ilow);
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1825 Py_DECREF(ihigh);
28583
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1826 Py_DECREF(istep);
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1827 Py_DECREF(zero);
28597
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1828 Py_DECREF(curnum);
28583
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1829 return v;
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1830
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1831 Fail:
28597
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1832 Py_DECREF(ilow);
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1833 Py_DECREF(ihigh);
28583
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1834 Py_XDECREF(istep);
28597
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1835 Py_DECREF(zero);
d2d232e2427b handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents: 28583
diff changeset
1836 Py_XDECREF(curnum);
28583
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1837 Py_XDECREF(v);
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1838 return NULL;
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1839 }
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1840
10279
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1841 /* Return number of items in range/xrange (lo, hi, step). step > 0
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1842 * required. Return a value < 0 if & only if the true value is too
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1843 * large to fit in a signed long.
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1844 */
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1845 static long
13679
61f65de19e1e Another missed ansification.
Thomas Wouters <thomas@python.org>
parents: 13658
diff changeset
1846 get_len_of_range(long lo, long hi, long step)
10279
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1847 {
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1848 /* -------------------------------------------------------------
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1849 If lo >= hi, the range is empty.
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1850 Else if n values are in the range, the last one is
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1851 lo + (n-1)*step, which must be <= hi-1. Rearranging,
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1852 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1853 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1854 the RHS is non-negative and so truncation is the same as the
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1855 floor. Letting M be the largest positive long, the worst case
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1856 for the RHS numerator is hi=M, lo=-M-1, and then
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1857 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1858 precision to compute the RHS exactly.
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1859 ---------------------------------------------------------------*/
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1860 long n = 0;
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1861 if (lo < hi) {
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1862 unsigned long uhi = (unsigned long)hi;
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1863 unsigned long ulo = (unsigned long)lo;
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1864 unsigned long diff = uhi - ulo - 1;
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1865 n = (long)(diff / (unsigned long)step + 1);
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1866 }
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1867 return n;
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1868 }
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1869
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1870 static PyObject *
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13576
diff changeset
1871 builtin_range(PyObject *self, PyObject *args)
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
1872 {
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
1873 long ilow = 0, ihigh = 0, istep = 1;
10279
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1874 long bign;
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
1875 int i, n;
10279
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1876
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1877 PyObject *v;
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
1878
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1879 if (PyTuple_Size(args) <= 1) {
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1880 if (!PyArg_ParseTuple(args,
2153
e54b8654f938 fix Alpha bug in (x)range; different __builtins__ initialization
Guido van Rossum <guido@python.org>
parents: 2120
diff changeset
1881 "l;range() requires 1-3 int arguments",
28583
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1882 &ihigh)) {
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1883 PyErr_Clear();
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1884 return handle_range_longs(self, args);
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1885 }
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
1886 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
1887 else {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1888 if (!PyArg_ParseTuple(args,
2153
e54b8654f938 fix Alpha bug in (x)range; different __builtins__ initialization
Guido van Rossum <guido@python.org>
parents: 2120
diff changeset
1889 "ll|l;range() requires 1-3 int arguments",
28583
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1890 &ilow, &ihigh, &istep)) {
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1891 PyErr_Clear();
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1892 return handle_range_longs(self, args);
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1893 }
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
1894 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
1895 if (istep == 0) {
28583
a0c002050526 Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents: 28513
diff changeset
1896 PyErr_SetString(PyExc_ValueError,
28738
52f3d90c17e8 complete and clarify some error messages for range()
Alex Martelli <aleaxit@gmail.com>
parents: 28718
diff changeset
1897 "range() step argument must not be zero");
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
1898 return NULL;
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
1899 }
10279
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1900 if (istep > 0)
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1901 bign = get_len_of_range(ilow, ihigh, istep);
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1902 else
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1903 bign = get_len_of_range(ihigh, ilow, -istep);
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1904 n = (int)bign;
886ea255f381 Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents: 10020
diff changeset
1905 if (bign < 0 || (long)n != bign) {
9849
5e9ef9d8575b Avoid overflow if possible in calculations for range(); report
Guido van Rossum <guido@python.org>
parents: 9567
diff changeset
1906 PyErr_SetString(PyExc_OverflowError,
15318
8aa947e1eee8 Ka-Ping Yee <ping@lfw.org>:
Fred Drake <fdrake@acm.org>
parents: 14869
diff changeset
1907 "range() result has too many items");
9849
5e9ef9d8575b Avoid overflow if possible in calculations for range(); report
Guido van Rossum <guido@python.org>
parents: 9567
diff changeset
1908 return NULL;
5e9ef9d8575b Avoid overflow if possible in calculations for range(); report
Guido van Rossum <guido@python.org>
parents: 9567
diff changeset
1909 }
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1910 v = PyList_New(n);
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1911 if (v == NULL)
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1912 return NULL;
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1913 for (i = 0; i < n; i++) {
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1914 PyObject *w = PyInt_FromLong(ilow);
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1915 if (w == NULL) {
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1916 Py_DECREF(v);
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1917 return NULL;
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1918 }
8138
9d0310143600 Fred's right -- we need PyList_SET_ITEM().
Guido van Rossum <guido@python.org>
parents: 8132
diff changeset
1919 PyList_SET_ITEM(v, i, w);
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1920 ilow += istep;
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1921 }
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1922 return v;
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
1923 }
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
1924
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
1925 PyDoc_STRVAR(range_doc,
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1926 "range([start,] stop[, step]) -> list of integers\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1927 \n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1928 Return a list containing an arithmetic progression of integers.\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1929 range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1930 When step is given, it specifies the increment (or decrement).\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1931 For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
1932 These are exactly the valid indices for a list of 4 elements.");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1933
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
1934
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1935 static PyObject *
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13576
diff changeset
1936 builtin_raw_input(PyObject *self, PyObject *args)
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1937 {
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1938 PyObject *v = NULL;
24817
3ae8e3ff7e3f Patch #550192: Set softspace to 0 in raw_input().
Martin v. Löwis <martin@v.loewis.de>
parents: 24737
diff changeset
1939 PyObject *fin = PySys_GetObject("stdin");
3ae8e3ff7e3f Patch #550192: Set softspace to 0 in raw_input().
Martin v. Löwis <martin@v.loewis.de>
parents: 24737
diff changeset
1940 PyObject *fout = PySys_GetObject("stdout");
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1941
26818
e094a03a80ff SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents: 26612
diff changeset
1942 if (!PyArg_UnpackTuple(args, "[raw_]input", 0, 1, &v))
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1943 return NULL;
24817
3ae8e3ff7e3f Patch #550192: Set softspace to 0 in raw_input().
Martin v. Löwis <martin@v.loewis.de>
parents: 24737
diff changeset
1944
3ae8e3ff7e3f Patch #550192: Set softspace to 0 in raw_input().
Martin v. Löwis <martin@v.loewis.de>
parents: 24737
diff changeset
1945 if (fin == NULL) {
28740
d3297e298211 some more error-message enhancements
Alex Martelli <aleaxit@gmail.com>
parents: 28738
diff changeset
1946 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdin");
24817
3ae8e3ff7e3f Patch #550192: Set softspace to 0 in raw_input().
Martin v. Löwis <martin@v.loewis.de>
parents: 24737
diff changeset
1947 return NULL;
3ae8e3ff7e3f Patch #550192: Set softspace to 0 in raw_input().
Martin v. Löwis <martin@v.loewis.de>
parents: 24737
diff changeset
1948 }
3ae8e3ff7e3f Patch #550192: Set softspace to 0 in raw_input().
Martin v. Löwis <martin@v.loewis.de>
parents: 24737
diff changeset
1949 if (fout == NULL) {
28740
d3297e298211 some more error-message enhancements
Alex Martelli <aleaxit@gmail.com>
parents: 28738
diff changeset
1950 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdout");
24817
3ae8e3ff7e3f Patch #550192: Set softspace to 0 in raw_input().
Martin v. Löwis <martin@v.loewis.de>
parents: 24737
diff changeset
1951 return NULL;
3ae8e3ff7e3f Patch #550192: Set softspace to 0 in raw_input().
Martin v. Löwis <martin@v.loewis.de>
parents: 24737
diff changeset
1952 }
3ae8e3ff7e3f Patch #550192: Set softspace to 0 in raw_input().
Martin v. Löwis <martin@v.loewis.de>
parents: 24737
diff changeset
1953 if (PyFile_SoftSpace(fout, 0)) {
3ae8e3ff7e3f Patch #550192: Set softspace to 0 in raw_input().
Martin v. Löwis <martin@v.loewis.de>
parents: 24737
diff changeset
1954 if (PyFile_WriteString(" ", fout) != 0)
3ae8e3ff7e3f Patch #550192: Set softspace to 0 in raw_input().
Martin v. Löwis <martin@v.loewis.de>
parents: 24737
diff changeset
1955 return NULL;
3ae8e3ff7e3f Patch #550192: Set softspace to 0 in raw_input().
Martin v. Löwis <martin@v.loewis.de>
parents: 24737
diff changeset
1956 }
39385
5009de504f92 Bug #1535165: fixed a segfault in input() and raw_input() when
Georg Brandl <georg@python.org>
parents: 38077
diff changeset
1957 if (PyFile_AsFile(fin) && PyFile_AsFile(fout)
25924
dc4a0336a2a3 Patch #512981: Update readline input stream on sys.stdin/out change.
Martin v. Löwis <martin@v.loewis.de>
parents: 25046
diff changeset
1958 && isatty(fileno(PyFile_AsFile(fin)))
dc4a0336a2a3 Patch #512981: Update readline input stream on sys.stdin/out change.
Martin v. Löwis <martin@v.loewis.de>
parents: 25046
diff changeset
1959 && isatty(fileno(PyFile_AsFile(fout)))) {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1960 PyObject *po;
2808
9318ac51691e added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents: 2375
diff changeset
1961 char *prompt;
9318ac51691e added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents: 2375
diff changeset
1962 char *s;
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1963 PyObject *result;
2808
9318ac51691e added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents: 2375
diff changeset
1964 if (v != NULL) {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1965 po = PyObject_Str(v);
2808
9318ac51691e added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents: 2375
diff changeset
1966 if (po == NULL)
9318ac51691e added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents: 2375
diff changeset
1967 return NULL;
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47385
diff changeset
1968 prompt = PyString_AsString(po);
8560
46fd630dce63 In raw_input(prompt), make sure that str(prompt) really a string
Guido van Rossum <guido@python.org>
parents: 8451
diff changeset
1969 if (prompt == NULL)
46fd630dce63 In raw_input(prompt), make sure that str(prompt) really a string
Guido van Rossum <guido@python.org>
parents: 8451
diff changeset
1970 return NULL;
2808
9318ac51691e added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents: 2375
diff changeset
1971 }
9318ac51691e added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents: 2375
diff changeset
1972 else {
9318ac51691e added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents: 2375
diff changeset
1973 po = NULL;
9318ac51691e added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents: 2375
diff changeset
1974 prompt = "";
9318ac51691e added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents: 2375
diff changeset
1975 }
32896
a75815e31545 for some reason, the lack of adherence to Python's C whitespace rules
Michael W. Hudson <mwh@python.net>
parents: 32890
diff changeset
1976 s = PyOS_Readline(PyFile_AsFile(fin), PyFile_AsFile(fout),
25924
dc4a0336a2a3 Patch #512981: Update readline input stream on sys.stdin/out change.
Martin v. Löwis <martin@v.loewis.de>
parents: 25046
diff changeset
1977 prompt);
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1978 Py_XDECREF(po);
2808
9318ac51691e added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents: 2375
diff changeset
1979 if (s == NULL) {
32526
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32507
diff changeset
1980 if (!PyErr_Occurred())
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32507
diff changeset
1981 PyErr_SetNone(PyExc_KeyboardInterrupt);
2808
9318ac51691e added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents: 2375
diff changeset
1982 return NULL;
9318ac51691e added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents: 2375
diff changeset
1983 }
9318ac51691e added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents: 2375
diff changeset
1984 if (*s == '\0') {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
1985 PyErr_SetNone(PyExc_EOFError);
2808
9318ac51691e added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents: 2375
diff changeset
1986 result = NULL;
9318ac51691e added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents: 2375
diff changeset
1987 }
9318ac51691e added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents: 2375
diff changeset
1988 else { /* strip trailing '\n' */
13078
1d0407960953 Trent Mick:
Guido van Rossum <guido@python.org>
parents: 12961
diff changeset
1989 size_t len = strlen(s);
37673
606818c33e50 Replace INT_MAX with PY_SSIZE_T_MAX.
Martin v. Löwis <martin@v.loewis.de>
parents: 37411
diff changeset
1990 if (len > PY_SSIZE_T_MAX) {
24817
3ae8e3ff7e3f Patch #550192: Set softspace to 0 in raw_input().
Martin v. Löwis <martin@v.loewis.de>
parents: 24737
diff changeset
1991 PyErr_SetString(PyExc_OverflowError,
28740
d3297e298211 some more error-message enhancements
Alex Martelli <aleaxit@gmail.com>
parents: 28738
diff changeset
1992 "[raw_]input: input too long");
13078
1d0407960953 Trent Mick:
Guido van Rossum <guido@python.org>
parents: 12961
diff changeset
1993 result = NULL;
1d0407960953 Trent Mick:
Guido van Rossum <guido@python.org>
parents: 12961
diff changeset
1994 }
1d0407960953 Trent Mick:
Guido van Rossum <guido@python.org>
parents: 12961
diff changeset
1995 else {
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47385
diff changeset
1996 result = PyString_FromStringAndSize(s, len-1);
13078
1d0407960953 Trent Mick:
Guido van Rossum <guido@python.org>
parents: 12961
diff changeset
1997 }
2808
9318ac51691e added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents: 2375
diff changeset
1998 }
12576
1c7c2dd1beb1 Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents: 12572
diff changeset
1999 PyMem_FREE(s);
2808
9318ac51691e added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents: 2375
diff changeset
2000 return result;
9318ac51691e added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents: 2375
diff changeset
2001 }
284
6ac402023cac printobject now returns an error code
Guido van Rossum <guido@python.org>
parents: 253
diff changeset
2002 if (v != NULL) {
24817
3ae8e3ff7e3f Patch #550192: Set softspace to 0 in raw_input().
Martin v. Löwis <martin@v.loewis.de>
parents: 24737
diff changeset
2003 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
284
6ac402023cac printobject now returns an error code
Guido van Rossum <guido@python.org>
parents: 253
diff changeset
2004 return NULL;
6ac402023cac printobject now returns an error code
Guido van Rossum <guido@python.org>
parents: 253
diff changeset
2005 }
24817
3ae8e3ff7e3f Patch #550192: Set softspace to 0 in raw_input().
Martin v. Löwis <martin@v.loewis.de>
parents: 24737
diff changeset
2006 return PyFile_GetLine(fin, -1);
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
2007 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
2008
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
2009 PyDoc_STRVAR(raw_input_doc,
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2010 "raw_input([prompt]) -> string\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2011 \n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2012 Read a string from standard input. The trailing newline is stripped.\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2013 If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2014 On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
2015 is printed without a trailing newline before reading.");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2016
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2017
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2018 static PyObject *
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13576
diff changeset
2019 builtin_reduce(PyObject *self, PyObject *args)
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2020 {
17677
bf7f166d3c97 Generalize reduce() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17675
diff changeset
2021 PyObject *seq, *func, *result = NULL, *it;
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2022
46573
aef3501d8e77 Use PyErr_WarnPy3k throughout
Benjamin Peterson <benjamin@python.org>
parents: 46193
diff changeset
2023 if (PyErr_WarnPy3k("reduce() not supported in 3.x; "
46578
7670005da8c5 A little reformating of Py3k warnings
Benjamin Peterson <benjamin@python.org>
parents: 46573
diff changeset
2024 "use functools.reduce()", 1) < 0)
41834
9a447514855f Add a bunch more deprecation warnings for builtins that are going away in 3.0
Neal Norwitz <nnorwitz@gmail.com>
parents: 41832
diff changeset
2025 return NULL;
9a447514855f Add a bunch more deprecation warnings for builtins that are going away in 3.0
Neal Norwitz <nnorwitz@gmail.com>
parents: 41832
diff changeset
2026
26818
e094a03a80ff SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents: 26612
diff changeset
2027 if (!PyArg_UnpackTuple(args, "reduce", 2, 3, &func, &seq, &result))
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
2028 return NULL;
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
2029 if (result != NULL)
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2030 Py_INCREF(result);
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2031
17677
bf7f166d3c97 Generalize reduce() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17675
diff changeset
2032 it = PyObject_GetIter(seq);
bf7f166d3c97 Generalize reduce() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17675
diff changeset
2033 if (it == NULL) {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2034 PyErr_SetString(PyExc_TypeError,
17677
bf7f166d3c97 Generalize reduce() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17675
diff changeset
2035 "reduce() arg 2 must support iteration");
bf7f166d3c97 Generalize reduce() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17675
diff changeset
2036 Py_XDECREF(result);
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2037 return NULL;
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2038 }
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2039
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2040 if ((args = PyTuple_New(2)) == NULL)
1840
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
2041 goto Fail;
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2042
17677
bf7f166d3c97 Generalize reduce() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17675
diff changeset
2043 for (;;) {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2044 PyObject *op2;
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2045
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2046 if (args->ob_refcnt > 1) {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2047 Py_DECREF(args);
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2048 if ((args = PyTuple_New(2)) == NULL)
1840
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
2049 goto Fail;
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2050 }
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2051
17677
bf7f166d3c97 Generalize reduce() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17675
diff changeset
2052 op2 = PyIter_Next(it);
bf7f166d3c97 Generalize reduce() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17675
diff changeset
2053 if (op2 == NULL) {
17683
e9a4e27e8d4e Make PyIter_Next() a little smarter (wrt its knowledge of iterator
Tim Peters <tim.peters@gmail.com>
parents: 17677
diff changeset
2054 if (PyErr_Occurred())
e9a4e27e8d4e Make PyIter_Next() a little smarter (wrt its knowledge of iterator
Tim Peters <tim.peters@gmail.com>
parents: 17677
diff changeset
2055 goto Fail;
e9a4e27e8d4e Make PyIter_Next() a little smarter (wrt its knowledge of iterator
Tim Peters <tim.peters@gmail.com>
parents: 17677
diff changeset
2056 break;
1840
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
2057 }
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2058
1840
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
2059 if (result == NULL)
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
2060 result = op2;
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
2061 else {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2062 PyTuple_SetItem(args, 0, result);
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2063 PyTuple_SetItem(args, 1, op2);
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2064 if ((result = PyEval_CallObject(func, args)) == NULL)
1840
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
2065 goto Fail;
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
2066 }
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2067 }
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2068
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2069 Py_DECREF(args);
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2070
1840
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
2071 if (result == NULL)
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2072 PyErr_SetString(PyExc_TypeError,
15318
8aa947e1eee8 Ka-Ping Yee <ping@lfw.org>:
Fred Drake <fdrake@acm.org>
parents: 14869
diff changeset
2073 "reduce() of empty sequence with no initial value");
1840
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
2074
17677
bf7f166d3c97 Generalize reduce() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17675
diff changeset
2075 Py_DECREF(it);
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2076 return result;
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2077
1840
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
2078 Fail:
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2079 Py_XDECREF(args);
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2080 Py_XDECREF(result);
17677
bf7f166d3c97 Generalize reduce() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17675
diff changeset
2081 Py_DECREF(it);
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2082 return NULL;
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2083 }
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2084
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
2085 PyDoc_STRVAR(reduce_doc,
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2086 "reduce(function, sequence[, initial]) -> value\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2087 \n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2088 Apply a function of two arguments cumulatively to the items of a sequence,\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2089 from left to right, so as to reduce the sequence to a single value.\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2090 For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2091 ((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2092 of the sequence in the calculation, and serves as a default when the\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
2093 sequence is empty.");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2094
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2095
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2096 static PyObject *
19301
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2097 builtin_reload(PyObject *self, PyObject *v)
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
2098 {
46573
aef3501d8e77 Use PyErr_WarnPy3k throughout
Benjamin Peterson <benjamin@python.org>
parents: 46193
diff changeset
2099 if (PyErr_WarnPy3k("In 3.x, reload() is renamed to imp.reload()",
46578
7670005da8c5 A little reformating of Py3k warnings
Benjamin Peterson <benjamin@python.org>
parents: 46573
diff changeset
2100 1) < 0)
41834
9a447514855f Add a bunch more deprecation warnings for builtins that are going away in 3.0
Neal Norwitz <nnorwitz@gmail.com>
parents: 41832
diff changeset
2101 return NULL;
9a447514855f Add a bunch more deprecation warnings for builtins that are going away in 3.0
Neal Norwitz <nnorwitz@gmail.com>
parents: 41832
diff changeset
2102
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2103 return PyImport_ReloadModule(v);
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
2104 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
2105
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
2106 PyDoc_STRVAR(reload_doc,
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2107 "reload(module) -> module\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2108 \n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
2109 Reload the module. The module must have been successfully imported before.");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2110
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2111
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2112 static PyObject *
19301
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2113 builtin_repr(PyObject *self, PyObject *v)
1094
d2af6bdcb6d0 * config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents: 1079
diff changeset
2114 {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2115 return PyObject_Repr(v);
1094
d2af6bdcb6d0 * config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents: 1079
diff changeset
2116 }
d2af6bdcb6d0 * config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents: 1079
diff changeset
2117
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
2118 PyDoc_STRVAR(repr_doc,
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2119 "repr(object) -> string\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2120 \n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2121 Return the canonical string representation of the object.\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
2122 For most object types, eval(repr(object)) == object.");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2123
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2124
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2125 static PyObject *
37344
c6cf11acb41f Patch #1460496: round() now accepts keyword arguments.
Georg Brandl <georg@python.org>
parents: 36866
diff changeset
2126 builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
1215
9d6cf529bb71 bltinmodule.c: added round(x, [n]); coerce() of two class instances
Guido van Rossum <guido@python.org>
parents: 1096
diff changeset
2127 {
44488
94eeaeeb3ce9 Continue rolling back pep-3141 changes that changed behavior from 2.5. This
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 44432
diff changeset
2128 double number;
94eeaeeb3ce9 Continue rolling back pep-3141 changes that changed behavior from 2.5. This
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 44432
diff changeset
2129 double f;
94eeaeeb3ce9 Continue rolling back pep-3141 changes that changed behavior from 2.5. This
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 44432
diff changeset
2130 int ndigits = 0;
94eeaeeb3ce9 Continue rolling back pep-3141 changes that changed behavior from 2.5. This
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 44432
diff changeset
2131 int i;
37344
c6cf11acb41f Patch #1460496: round() now accepts keyword arguments.
Georg Brandl <georg@python.org>
parents: 36866
diff changeset
2132 static char *kwlist[] = {"number", "ndigits", 0};
44432
4f9723d9ca32 Backport PEP 3141 from the py3k branch to the trunk. This includes r50877 (just
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 44367
diff changeset
2133
44488
94eeaeeb3ce9 Continue rolling back pep-3141 changes that changed behavior from 2.5. This
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 44432
diff changeset
2134 if (!PyArg_ParseTupleAndKeywords(args, kwds, "d|i:round",
94eeaeeb3ce9 Continue rolling back pep-3141 changes that changed behavior from 2.5. This
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 44432
diff changeset
2135 kwlist, &number, &ndigits))
94eeaeeb3ce9 Continue rolling back pep-3141 changes that changed behavior from 2.5. This
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 44432
diff changeset
2136 return NULL;
94eeaeeb3ce9 Continue rolling back pep-3141 changes that changed behavior from 2.5. This
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 44432
diff changeset
2137 f = 1.0;
94eeaeeb3ce9 Continue rolling back pep-3141 changes that changed behavior from 2.5. This
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 44432
diff changeset
2138 i = abs(ndigits);
94eeaeeb3ce9 Continue rolling back pep-3141 changes that changed behavior from 2.5. This
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 44432
diff changeset
2139 while (--i >= 0)
94eeaeeb3ce9 Continue rolling back pep-3141 changes that changed behavior from 2.5. This
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 44432
diff changeset
2140 f = f*10.0;
94eeaeeb3ce9 Continue rolling back pep-3141 changes that changed behavior from 2.5. This
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 44432
diff changeset
2141 if (ndigits < 0)
94eeaeeb3ce9 Continue rolling back pep-3141 changes that changed behavior from 2.5. This
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 44432
diff changeset
2142 number /= f;
94eeaeeb3ce9 Continue rolling back pep-3141 changes that changed behavior from 2.5. This
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 44432
diff changeset
2143 else
94eeaeeb3ce9 Continue rolling back pep-3141 changes that changed behavior from 2.5. This
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 44432
diff changeset
2144 number *= f;
94eeaeeb3ce9 Continue rolling back pep-3141 changes that changed behavior from 2.5. This
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 44432
diff changeset
2145 if (number >= 0.0)
94eeaeeb3ce9 Continue rolling back pep-3141 changes that changed behavior from 2.5. This
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 44432
diff changeset
2146 number = floor(number + 0.5);
94eeaeeb3ce9 Continue rolling back pep-3141 changes that changed behavior from 2.5. This
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 44432
diff changeset
2147 else
94eeaeeb3ce9 Continue rolling back pep-3141 changes that changed behavior from 2.5. This
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 44432
diff changeset
2148 number = ceil(number - 0.5);
94eeaeeb3ce9 Continue rolling back pep-3141 changes that changed behavior from 2.5. This
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 44432
diff changeset
2149 if (ndigits < 0)
94eeaeeb3ce9 Continue rolling back pep-3141 changes that changed behavior from 2.5. This
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 44432
diff changeset
2150 number *= f;
94eeaeeb3ce9 Continue rolling back pep-3141 changes that changed behavior from 2.5. This
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 44432
diff changeset
2151 else
94eeaeeb3ce9 Continue rolling back pep-3141 changes that changed behavior from 2.5. This
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 44432
diff changeset
2152 number /= f;
94eeaeeb3ce9 Continue rolling back pep-3141 changes that changed behavior from 2.5. This
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 44432
diff changeset
2153 return PyFloat_FromDouble(number);
1215
9d6cf529bb71 bltinmodule.c: added round(x, [n]); coerce() of two class instances
Guido van Rossum <guido@python.org>
parents: 1096
diff changeset
2154 }
9d6cf529bb71 bltinmodule.c: added round(x, [n]); coerce() of two class instances
Guido van Rossum <guido@python.org>
parents: 1096
diff changeset
2155
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
2156 PyDoc_STRVAR(round_doc,
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2157 "round(number[, ndigits]) -> floating point number\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2158 \n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2159 Round a number to a given precision in decimal digits (default 0 digits).\n\
44488
94eeaeeb3ce9 Continue rolling back pep-3141 changes that changed behavior from 2.5. This
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 44432
diff changeset
2160 This always returns a floating point number. Precision may be negative.");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2161
31210
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2162 static PyObject *
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2163 builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2164 {
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2165 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2166 PyObject *callable;
36675
dba6494735d0 Revert backwards-incompatible const changes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36660
diff changeset
2167 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
36034
fdf0ac36eb74 Fix an int/long mismatch identified here:
Neal Norwitz <nnorwitz@gmail.com>
parents: 35999
diff changeset
2168 int reverse;
31210
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2169
36034
fdf0ac36eb74 Fix an int/long mismatch identified here:
Neal Norwitz <nnorwitz@gmail.com>
parents: 35999
diff changeset
2170 /* args 1-4 should match listsort in Objects/listobject.c */
35608
a670a5dd1fc6 Removed a check "if (args != NULL)" which is always True and makes no sense.
Armin Rigo <arigo@tunes.org>
parents: 35567
diff changeset
2171 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
a670a5dd1fc6 Removed a check "if (args != NULL)" which is always True and makes no sense.
Armin Rigo <arigo@tunes.org>
parents: 35567
diff changeset
2172 kwlist, &seq, &compare, &keyfunc, &reverse))
a670a5dd1fc6 Removed a check "if (args != NULL)" which is always True and makes no sense.
Armin Rigo <arigo@tunes.org>
parents: 35567
diff changeset
2173 return NULL;
31210
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2174
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2175 newlist = PySequence_List(seq);
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2176 if (newlist == NULL)
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2177 return NULL;
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2178
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2179 callable = PyObject_GetAttrString(newlist, "sort");
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2180 if (callable == NULL) {
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2181 Py_DECREF(newlist);
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2182 return NULL;
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2183 }
35500
8fa83a9ebc6e Whitespace normalization.
Georg Brandl <georg@python.org>
parents: 35364
diff changeset
2184
31210
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2185 newargs = PyTuple_GetSlice(args, 1, 4);
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2186 if (newargs == NULL) {
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2187 Py_DECREF(newlist);
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2188 Py_DECREF(callable);
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2189 return NULL;
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2190 }
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2191
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2192 v = PyObject_Call(callable, newargs, kwds);
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2193 Py_DECREF(newargs);
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2194 Py_DECREF(callable);
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2195 if (v == NULL) {
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2196 Py_DECREF(newlist);
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2197 return NULL;
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2198 }
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2199 Py_DECREF(v);
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2200 return newlist;
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2201 }
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2202
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2203 PyDoc_STRVAR(sorted_doc,
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2204 "sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2205
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2206 static PyObject *
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13576
diff changeset
2207 builtin_vars(PyObject *self, PyObject *args)
1840
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
2208 {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2209 PyObject *v = NULL;
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2210 PyObject *d;
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
2211
26818
e094a03a80ff SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents: 26612
diff changeset
2212 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2002
diff changeset
2213 return NULL;
1840
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
2214 if (v == NULL) {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2215 d = PyEval_GetLocals();
2857
eebbdbee54f9 be more suspicious of getlocals()
Guido van Rossum <guido@python.org>
parents: 2844
diff changeset
2216 if (d == NULL) {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2217 if (!PyErr_Occurred())
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2218 PyErr_SetString(PyExc_SystemError,
28740
d3297e298211 some more error-message enhancements
Alex Martelli <aleaxit@gmail.com>
parents: 28738
diff changeset
2219 "vars(): no locals!?");
2857
eebbdbee54f9 be more suspicious of getlocals()
Guido van Rossum <guido@python.org>
parents: 2844
diff changeset
2220 }
eebbdbee54f9 be more suspicious of getlocals()
Guido van Rossum <guido@python.org>
parents: 2844
diff changeset
2221 else
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2222 Py_INCREF(d);
1840
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
2223 }
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
2224 else {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2225 d = PyObject_GetAttrString(v, "__dict__");
1840
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
2226 if (d == NULL) {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2227 PyErr_SetString(PyExc_TypeError,
1840
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
2228 "vars() argument must have __dict__ attribute");
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
2229 return NULL;
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
2230 }
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
2231 }
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
2232 return d;
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
2233 }
bfd11620a2d8 * Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents: 1444
diff changeset
2234
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
2235 PyDoc_STRVAR(vars_doc,
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2236 "vars([object]) -> dictionary\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2237 \n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2238 Without arguments, equivalent to locals().\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
2239 With an argument, equivalent to object.__dict__.");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2240
28717
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2241
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2242 static PyObject*
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2243 builtin_sum(PyObject *self, PyObject *args)
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2244 {
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2245 PyObject *seq;
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2246 PyObject *result = NULL;
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2247 PyObject *temp, *item, *iter;
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2248
30774
2d98710f272e Use PyArg_UnpackTuple() where possible.
Raymond Hettinger <python@rcn.com>
parents: 30683
diff changeset
2249 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
28717
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2250 return NULL;
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2251
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2252 iter = PyObject_GetIter(seq);
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2253 if (iter == NULL)
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2254 return NULL;
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2255
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2256 if (result == NULL) {
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2257 result = PyInt_FromLong(0);
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2258 if (result == NULL) {
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2259 Py_DECREF(iter);
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2260 return NULL;
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2261 }
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2262 } else {
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2263 /* reject string values for 'start' parameter */
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2264 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2265 PyErr_SetString(PyExc_TypeError,
28740
d3297e298211 some more error-message enhancements
Alex Martelli <aleaxit@gmail.com>
parents: 28738
diff changeset
2266 "sum() can't sum strings [use ''.join(seq) instead]");
28717
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2267 Py_DECREF(iter);
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2268 return NULL;
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2269 }
28718
16ef5b9bc789 fixed a potential refcount bug (thanks Raymond!).
Alex Martelli <aleaxit@gmail.com>
parents: 28717
diff changeset
2270 Py_INCREF(result);
28717
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2271 }
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2272
43657
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2273 #ifndef SLOW_SUM
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2274 /* Fast addition by keeping temporary sums in C instead of new Python objects.
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2275 Assumes all inputs are the same type. If the assumption fails, default
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2276 to the more general routine.
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2277 */
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2278 if (PyInt_CheckExact(result)) {
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2279 long i_result = PyInt_AS_LONG(result);
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2280 Py_DECREF(result);
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2281 result = NULL;
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2282 while(result == NULL) {
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2283 item = PyIter_Next(iter);
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2284 if (item == NULL) {
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2285 Py_DECREF(iter);
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2286 if (PyErr_Occurred())
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2287 return NULL;
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2288 return PyInt_FromLong(i_result);
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2289 }
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2290 if (PyInt_CheckExact(item)) {
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2291 long b = PyInt_AS_LONG(item);
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2292 long x = i_result + b;
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2293 if ((x^i_result) >= 0 || (x^b) >= 0) {
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2294 i_result = x;
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2295 Py_DECREF(item);
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2296 continue;
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2297 }
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2298 }
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2299 /* Either overflowed or is not an int. Restore real objects and process normally */
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2300 result = PyInt_FromLong(i_result);
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2301 temp = PyNumber_Add(result, item);
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2302 Py_DECREF(result);
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2303 Py_DECREF(item);
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2304 result = temp;
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2305 if (result == NULL) {
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2306 Py_DECREF(iter);
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2307 return NULL;
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2308 }
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2309 }
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2310 }
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2311
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2312 if (PyFloat_CheckExact(result)) {
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2313 double f_result = PyFloat_AS_DOUBLE(result);
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2314 Py_DECREF(result);
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2315 result = NULL;
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2316 while(result == NULL) {
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2317 item = PyIter_Next(iter);
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2318 if (item == NULL) {
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2319 Py_DECREF(iter);
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2320 if (PyErr_Occurred())
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2321 return NULL;
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2322 return PyFloat_FromDouble(f_result);
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2323 }
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2324 if (PyFloat_CheckExact(item)) {
47385
1e1df892095a Issue 2784: fix leaks in exception exit.
Raymond Hettinger <python@rcn.com>
parents: 47294
diff changeset
2325 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
43657
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2326 f_result += PyFloat_AS_DOUBLE(item);
43658
7408e1ae98c4 Fixup error return and add support for intermixed ints and floats/
Raymond Hettinger <python@rcn.com>
parents: 43657
diff changeset
2327 PyFPE_END_PROTECT(f_result)
43675
35da915adedc Missing DECREFs
Raymond Hettinger <python@rcn.com>
parents: 43658
diff changeset
2328 Py_DECREF(item);
43658
7408e1ae98c4 Fixup error return and add support for intermixed ints and floats/
Raymond Hettinger <python@rcn.com>
parents: 43657
diff changeset
2329 continue;
7408e1ae98c4 Fixup error return and add support for intermixed ints and floats/
Raymond Hettinger <python@rcn.com>
parents: 43657
diff changeset
2330 }
7408e1ae98c4 Fixup error return and add support for intermixed ints and floats/
Raymond Hettinger <python@rcn.com>
parents: 43657
diff changeset
2331 if (PyInt_CheckExact(item)) {
47385
1e1df892095a Issue 2784: fix leaks in exception exit.
Raymond Hettinger <python@rcn.com>
parents: 47294
diff changeset
2332 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
43658
7408e1ae98c4 Fixup error return and add support for intermixed ints and floats/
Raymond Hettinger <python@rcn.com>
parents: 43657
diff changeset
2333 f_result += (double)PyInt_AS_LONG(item);
7408e1ae98c4 Fixup error return and add support for intermixed ints and floats/
Raymond Hettinger <python@rcn.com>
parents: 43657
diff changeset
2334 PyFPE_END_PROTECT(f_result)
43675
35da915adedc Missing DECREFs
Raymond Hettinger <python@rcn.com>
parents: 43658
diff changeset
2335 Py_DECREF(item);
43657
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2336 continue;
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2337 }
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2338 result = PyFloat_FromDouble(f_result);
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2339 temp = PyNumber_Add(result, item);
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2340 Py_DECREF(result);
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2341 Py_DECREF(item);
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2342 result = temp;
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2343 if (result == NULL) {
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2344 Py_DECREF(iter);
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2345 return NULL;
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2346 }
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2347 }
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2348 }
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2349 #endif
08ee256a9bd1 Optimize sum() for integer and float inputs.
Raymond Hettinger <python@rcn.com>
parents: 41834
diff changeset
2350
28717
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2351 for(;;) {
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2352 item = PyIter_Next(iter);
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2353 if (item == NULL) {
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2354 /* error, or end-of-sequence */
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2355 if (PyErr_Occurred()) {
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2356 Py_DECREF(result);
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2357 result = NULL;
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2358 }
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2359 break;
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2360 }
30784
37285a0346c1 regressing the performance bugfix -- Guido wants the performance bug left
Alex Martelli <aleaxit@gmail.com>
parents: 30776
diff changeset
2361 temp = PyNumber_Add(result, item);
28717
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2362 Py_DECREF(result);
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2363 Py_DECREF(item);
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2364 result = temp;
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2365 if (result == NULL)
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2366 break;
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2367 }
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2368 Py_DECREF(iter);
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2369 return result;
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2370 }
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2371
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2372 PyDoc_STRVAR(sum_doc,
40113
635438b29673 Bug #1283491: follow docstring convention wrt. keyword-able args in sum().
Georg Brandl <georg@python.org>
parents: 39746
diff changeset
2373 "sum(sequence[, start]) -> value\n\
28717
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2374 \n\
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2375 Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
40113
635438b29673 Bug #1283491: follow docstring convention wrt. keyword-able args in sum().
Georg Brandl <georg@python.org>
parents: 39746
diff changeset
2376 of parameter 'start' (which defaults to 0). When the sequence is\n\
635438b29673 Bug #1283491: follow docstring convention wrt. keyword-able args in sum().
Georg Brandl <georg@python.org>
parents: 39746
diff changeset
2377 empty, returns start.");
28717
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2378
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2379
6145
341fcb7bad90 Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents: 5926
diff changeset
2380 static PyObject *
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13576
diff changeset
2381 builtin_isinstance(PyObject *self, PyObject *args)
6145
341fcb7bad90 Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents: 5926
diff changeset
2382 {
341fcb7bad90 Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents: 5926
diff changeset
2383 PyObject *inst;
341fcb7bad90 Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents: 5926
diff changeset
2384 PyObject *cls;
17111
bf678a11c21a Move the code implementing isinstance() and issubclass() to new C
Guido van Rossum <guido@python.org>
parents: 16048
diff changeset
2385 int retval;
6145
341fcb7bad90 Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents: 5926
diff changeset
2386
26818
e094a03a80ff SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents: 26612
diff changeset
2387 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
6145
341fcb7bad90 Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents: 5926
diff changeset
2388 return NULL;
10995
0d186c10a70e Patch by Jim Fulton (code style tweaked a bit) to support
Guido van Rossum <guido@python.org>
parents: 10529
diff changeset
2389
17111
bf678a11c21a Move the code implementing isinstance() and issubclass() to new C
Guido van Rossum <guido@python.org>
parents: 16048
diff changeset
2390 retval = PyObject_IsInstance(inst, cls);
bf678a11c21a Move the code implementing isinstance() and issubclass() to new C
Guido van Rossum <guido@python.org>
parents: 16048
diff changeset
2391 if (retval < 0)
15829
9308dc8c85e0 (Modified) patch by Ping - SF Patch #102681.
Guido van Rossum <guido@python.org>
parents: 15727
diff changeset
2392 return NULL;
22785
aa8d59823add Add the 'bool' type and its values 'False' and 'True', as described in
Guido van Rossum <guido@python.org>
parents: 22205
diff changeset
2393 return PyBool_FromLong(retval);
6145
341fcb7bad90 Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents: 5926
diff changeset
2394 }
341fcb7bad90 Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents: 5926
diff changeset
2395
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
2396 PyDoc_STRVAR(isinstance_doc,
22785
aa8d59823add Add the 'bool' type and its values 'False' and 'True', as described in
Guido van Rossum <guido@python.org>
parents: 22205
diff changeset
2397 "isinstance(object, class-or-type-or-tuple) -> bool\n\
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2398 \n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2399 Return whether an object is an instance of a class or of a subclass thereof.\n\
20307
aa681345bfab Implement isinstance(x, (A, B, ...)). Note that we only allow tuples,
Guido van Rossum <guido@python.org>
parents: 19903
diff changeset
2400 With a type as second argument, return whether that is the object's type.\n\
aa681345bfab Implement isinstance(x, (A, B, ...)). Note that we only allow tuples,
Guido van Rossum <guido@python.org>
parents: 19903
diff changeset
2401 The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
2402 isinstance(x, A) or isinstance(x, B) or ... (etc.).");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2403
6145
341fcb7bad90 Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents: 5926
diff changeset
2404
341fcb7bad90 Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents: 5926
diff changeset
2405 static PyObject *
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13576
diff changeset
2406 builtin_issubclass(PyObject *self, PyObject *args)
6145
341fcb7bad90 Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents: 5926
diff changeset
2407 {
341fcb7bad90 Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents: 5926
diff changeset
2408 PyObject *derived;
341fcb7bad90 Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents: 5926
diff changeset
2409 PyObject *cls;
341fcb7bad90 Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents: 5926
diff changeset
2410 int retval;
341fcb7bad90 Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents: 5926
diff changeset
2411
26818
e094a03a80ff SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents: 26612
diff changeset
2412 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
6145
341fcb7bad90 Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents: 5926
diff changeset
2413 return NULL;
10995
0d186c10a70e Patch by Jim Fulton (code style tweaked a bit) to support
Guido van Rossum <guido@python.org>
parents: 10529
diff changeset
2414
17111
bf678a11c21a Move the code implementing isinstance() and issubclass() to new C
Guido van Rossum <guido@python.org>
parents: 16048
diff changeset
2415 retval = PyObject_IsSubclass(derived, cls);
bf678a11c21a Move the code implementing isinstance() and issubclass() to new C
Guido van Rossum <guido@python.org>
parents: 16048
diff changeset
2416 if (retval < 0)
bf678a11c21a Move the code implementing isinstance() and issubclass() to new C
Guido van Rossum <guido@python.org>
parents: 16048
diff changeset
2417 return NULL;
22785
aa8d59823add Add the 'bool' type and its values 'False' and 'True', as described in
Guido van Rossum <guido@python.org>
parents: 22205
diff changeset
2418 return PyBool_FromLong(retval);
6145
341fcb7bad90 Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents: 5926
diff changeset
2419 }
341fcb7bad90 Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents: 5926
diff changeset
2420
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
2421 PyDoc_STRVAR(issubclass_doc,
22785
aa8d59823add Add the 'bool' type and its values 'False' and 'True', as described in
Guido van Rossum <guido@python.org>
parents: 22205
diff changeset
2422 "issubclass(C, B) -> bool\n\
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2423 \n\
26612
97f83542f8ee Enhance issubclass() and PyObject_IsSubclass() so that a tuple is
Walter Dörwald <walter@livinglogic.de>
parents: 25924
diff changeset
2424 Return whether class C is a subclass (i.e., a derived class) of class B.\n\
97f83542f8ee Enhance issubclass() and PyObject_IsSubclass() so that a tuple is
Walter Dörwald <walter@livinglogic.de>
parents: 25924
diff changeset
2425 When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
97f83542f8ee Enhance issubclass() and PyObject_IsSubclass() so that a tuple is
Walter Dörwald <walter@livinglogic.de>
parents: 25924
diff changeset
2426 is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2427
6145
341fcb7bad90 Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents: 5926
diff changeset
2428
13822
c57b574e6766 Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents: 13761
diff changeset
2429 static PyObject*
c57b574e6766 Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents: 13761
diff changeset
2430 builtin_zip(PyObject *self, PyObject *args)
c57b574e6766 Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents: 13761
diff changeset
2431 {
c57b574e6766 Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents: 13761
diff changeset
2432 PyObject *ret;
36521
30aef3ce2b26 Use Py_ssize_t to count the
Martin v. Löwis <martin@v.loewis.de>
parents: 36501
diff changeset
2433 const Py_ssize_t itemsize = PySequence_Length(args);
30aef3ce2b26 Use Py_ssize_t to count the
Martin v. Löwis <martin@v.loewis.de>
parents: 36501
diff changeset
2434 Py_ssize_t i;
17694
aab6c1f19289 Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17683
diff changeset
2435 PyObject *itlist; /* tuple of iterators */
36521
30aef3ce2b26 Use Py_ssize_t to count the
Martin v. Löwis <martin@v.loewis.de>
parents: 36501
diff changeset
2436 Py_ssize_t len; /* guess at result length */
13822
c57b574e6766 Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents: 13761
diff changeset
2437
30037
0504ba8efbb6 As discussed on python-dev, changed builtin.zip() to handle zero arguments
Raymond Hettinger <python@rcn.com>
parents: 28740
diff changeset
2438 if (itemsize == 0)
0504ba8efbb6 As discussed on python-dev, changed builtin.zip() to handle zero arguments
Raymond Hettinger <python@rcn.com>
parents: 28740
diff changeset
2439 return PyList_New(0);
0504ba8efbb6 As discussed on python-dev, changed builtin.zip() to handle zero arguments
Raymond Hettinger <python@rcn.com>
parents: 28740
diff changeset
2440
13822
c57b574e6766 Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents: 13761
diff changeset
2441 /* args must be a tuple */
c57b574e6766 Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents: 13761
diff changeset
2442 assert(PyTuple_Check(args));
c57b574e6766 Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents: 13761
diff changeset
2443
23421
642a453e7a2e SF bug 555042: zip() may trigger MemoryError.
Tim Peters <tim.peters@gmail.com>
parents: 23305
diff changeset
2444 /* Guess at result length: the shortest of the input lengths.
642a453e7a2e SF bug 555042: zip() may trigger MemoryError.
Tim Peters <tim.peters@gmail.com>
parents: 23305
diff changeset
2445 If some argument refuses to say, we refuse to guess too, lest
642a453e7a2e SF bug 555042: zip() may trigger MemoryError.
Tim Peters <tim.peters@gmail.com>
parents: 23305
diff changeset
2446 an argument like xrange(sys.maxint) lead us astray.*/
23305
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
2447 len = -1; /* unknown */
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
2448 for (i = 0; i < itemsize; ++i) {
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
2449 PyObject *item = PyTuple_GET_ITEM(args, i);
44193
44c090c74202 Fix Issue 1045.
Raymond Hettinger <python@rcn.com>
parents: 43675
diff changeset
2450 Py_ssize_t thislen = _PyObject_LengthHint(item, -1);
23421
642a453e7a2e SF bug 555042: zip() may trigger MemoryError.
Tim Peters <tim.peters@gmail.com>
parents: 23305
diff changeset
2451 if (thislen < 0) {
642a453e7a2e SF bug 555042: zip() may trigger MemoryError.
Tim Peters <tim.peters@gmail.com>
parents: 23305
diff changeset
2452 len = -1;
642a453e7a2e SF bug 555042: zip() may trigger MemoryError.
Tim Peters <tim.peters@gmail.com>
parents: 23305
diff changeset
2453 break;
642a453e7a2e SF bug 555042: zip() may trigger MemoryError.
Tim Peters <tim.peters@gmail.com>
parents: 23305
diff changeset
2454 }
23305
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
2455 else if (len < 0 || thislen < len)
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
2456 len = thislen;
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
2457 }
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
2458
17694
aab6c1f19289 Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17683
diff changeset
2459 /* allocate result list */
23305
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
2460 if (len < 0)
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
2461 len = 10; /* arbitrary */
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
2462 if ((ret = PyList_New(len)) == NULL)
13822
c57b574e6766 Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents: 13761
diff changeset
2463 return NULL;
c57b574e6766 Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents: 13761
diff changeset
2464
17694
aab6c1f19289 Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17683
diff changeset
2465 /* obtain iterators */
aab6c1f19289 Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17683
diff changeset
2466 itlist = PyTuple_New(itemsize);
aab6c1f19289 Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17683
diff changeset
2467 if (itlist == NULL)
aab6c1f19289 Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17683
diff changeset
2468 goto Fail_ret;
aab6c1f19289 Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17683
diff changeset
2469 for (i = 0; i < itemsize; ++i) {
aab6c1f19289 Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17683
diff changeset
2470 PyObject *item = PyTuple_GET_ITEM(args, i);
aab6c1f19289 Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17683
diff changeset
2471 PyObject *it = PyObject_GetIter(item);
aab6c1f19289 Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17683
diff changeset
2472 if (it == NULL) {
aab6c1f19289 Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17683
diff changeset
2473 if (PyErr_ExceptionMatches(PyExc_TypeError))
aab6c1f19289 Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17683
diff changeset
2474 PyErr_Format(PyExc_TypeError,
36604
fe4ae0c417c7 Fix compiler warning (int vs Py_ssize_t mismatch
Neal Norwitz <nnorwitz@gmail.com>
parents: 36521
diff changeset
2475 "zip argument #%zd must support iteration",
17694
aab6c1f19289 Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17683
diff changeset
2476 i+1);
aab6c1f19289 Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17683
diff changeset
2477 goto Fail_ret_itlist;
13822
c57b574e6766 Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents: 13761
diff changeset
2478 }
17694
aab6c1f19289 Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17683
diff changeset
2479 PyTuple_SET_ITEM(itlist, i, it);
aab6c1f19289 Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17683
diff changeset
2480 }
13822
c57b574e6766 Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents: 13761
diff changeset
2481
17694
aab6c1f19289 Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17683
diff changeset
2482 /* build result into ret list */
23305
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
2483 for (i = 0; ; ++i) {
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
2484 int j;
17694
aab6c1f19289 Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17683
diff changeset
2485 PyObject *next = PyTuple_New(itemsize);
aab6c1f19289 Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17683
diff changeset
2486 if (!next)
aab6c1f19289 Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17683
diff changeset
2487 goto Fail_ret_itlist;
aab6c1f19289 Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17683
diff changeset
2488
23305
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
2489 for (j = 0; j < itemsize; j++) {
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
2490 PyObject *it = PyTuple_GET_ITEM(itlist, j);
17694
aab6c1f19289 Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17683
diff changeset
2491 PyObject *item = PyIter_Next(it);
13822
c57b574e6766 Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents: 13761
diff changeset
2492 if (!item) {
17694
aab6c1f19289 Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17683
diff changeset
2493 if (PyErr_Occurred()) {
aab6c1f19289 Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17683
diff changeset
2494 Py_DECREF(ret);
aab6c1f19289 Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17683
diff changeset
2495 ret = NULL;
13822
c57b574e6766 Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents: 13761
diff changeset
2496 }
c57b574e6766 Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents: 13761
diff changeset
2497 Py_DECREF(next);
17694
aab6c1f19289 Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17683
diff changeset
2498 Py_DECREF(itlist);
23305
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
2499 goto Done;
13822
c57b574e6766 Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents: 13761
diff changeset
2500 }
23305
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
2501 PyTuple_SET_ITEM(next, j, item);
13822
c57b574e6766 Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents: 13761
diff changeset
2502 }
17694
aab6c1f19289 Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17683
diff changeset
2503
23305
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
2504 if (i < len)
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
2505 PyList_SET_ITEM(ret, i, next);
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
2506 else {
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
2507 int status = PyList_Append(ret, next);
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
2508 Py_DECREF(next);
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
2509 ++len;
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
2510 if (status < 0)
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
2511 goto Fail_ret_itlist;
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
2512 }
13822
c57b574e6766 Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents: 13761
diff changeset
2513 }
17694
aab6c1f19289 Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17683
diff changeset
2514
23305
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
2515 Done:
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
2516 if (ret != NULL && i < len) {
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
2517 /* The list is too big. */
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
2518 if (PyList_SetSlice(ret, i, len, NULL) < 0)
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
2519 return NULL;
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
2520 }
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
2521 return ret;
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
2522
17694
aab6c1f19289 Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17683
diff changeset
2523 Fail_ret_itlist:
aab6c1f19289 Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17683
diff changeset
2524 Py_DECREF(itlist);
aab6c1f19289 Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17683
diff changeset
2525 Fail_ret:
aab6c1f19289 Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17683
diff changeset
2526 Py_DECREF(ret);
aab6c1f19289 Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents: 17683
diff changeset
2527 return NULL;
13822
c57b574e6766 Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents: 13761
diff changeset
2528 }
c57b574e6766 Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents: 13761
diff changeset
2529
c57b574e6766 Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents: 13761
diff changeset
2530
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
2531 PyDoc_STRVAR(zip_doc,
13822
c57b574e6766 Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents: 13761
diff changeset
2532 "zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
c57b574e6766 Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents: 13761
diff changeset
2533 \n\
c57b574e6766 Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents: 13761
diff changeset
2534 Return a list of tuples, where each tuple contains the i-th element\n\
c57b574e6766 Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents: 13761
diff changeset
2535 from each of the argument sequences. The returned list is truncated\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
2536 in length to the length of the shortest argument sequence.");
13822
c57b574e6766 Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents: 13761
diff changeset
2537
c57b574e6766 Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents: 13761
diff changeset
2538
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2539 static PyMethodDef builtin_methods[] = {
37411
ea9a03b8b9f6 Accept keyword arguments for __import__ and doc the addition of the level param from PEP 328.
Neal Norwitz <nnorwitz@gmail.com>
parents: 37344
diff changeset
2540 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
19301
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2541 {"abs", builtin_abs, METH_O, abs_doc},
34736
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
2542 {"all", builtin_all, METH_O, all_doc},
81b5a13fa38a Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents: 34123
diff changeset
2543 {"any", builtin_any, METH_O, any_doc},
19301
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2544 {"apply", builtin_apply, METH_VARARGS, apply_doc},
45433
4a9522fd75a6 Added bin() builtin. I'm going to check in the tests in a seperate checkin, because the builtin doesn't need to be ported to py3k, but the tests are missing in py3k and need to be merged there.
Eric Smith <eric@trueblade.com>
parents: 45381
diff changeset
2545 {"bin", builtin_bin, METH_O, bin_doc},
19301
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2546 {"callable", builtin_callable, METH_O, callable_doc},
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2547 {"chr", builtin_chr, METH_VARARGS, chr_doc},
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2548 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2549 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
41168
78686c7a23a7 Patch #1444529: the builtin compile() now accepts keyword arguments.
Georg Brandl <georg@python.org>
parents: 41140
diff changeset
2550 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
19301
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2551 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2552 {"dir", builtin_dir, METH_VARARGS, dir_doc},
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2553 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2554 {"eval", builtin_eval, METH_VARARGS, eval_doc},
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2555 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2556 {"filter", builtin_filter, METH_VARARGS, filter_doc},
45381
b7231bf6bfb7 Backport of PEP 3101, Advanced String Formatting, from py3k.
Eric Smith <eric@trueblade.com>
parents: 45079
diff changeset
2557 {"format", builtin_format, METH_VARARGS, format_doc},
19301
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2558 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2559 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2560 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2561 {"hash", builtin_hash, METH_O, hash_doc},
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2562 {"hex", builtin_hex, METH_O, hex_doc},
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2563 {"id", builtin_id, METH_O, id_doc},
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2564 {"input", builtin_input, METH_VARARGS, input_doc},
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2565 {"intern", builtin_intern, METH_VARARGS, intern_doc},
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2566 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2567 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2568 {"iter", builtin_iter, METH_VARARGS, iter_doc},
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2569 {"len", builtin_len, METH_O, len_doc},
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2570 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2571 {"map", builtin_map, METH_VARARGS, map_doc},
34085
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
2572 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
cc9ce6837ea9 SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents: 33261
diff changeset
2573 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
46607
7a6d7474ce6e #2719: backport next() from 3k.
Georg Brandl <georg@python.org>
parents: 46578
diff changeset
2574 {"next", builtin_next, METH_VARARGS, next_doc},
19301
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2575 {"oct", builtin_oct, METH_O, oct_doc},
38077
c9202f1c56c2 SF #1479181: split open() and file() from being aliases for each other.
Neal Norwitz <nnorwitz@gmail.com>
parents: 37673
diff changeset
2576 {"open", (PyCFunction)builtin_open, METH_VARARGS | METH_KEYWORDS, open_doc},
19301
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2577 {"ord", builtin_ord, METH_O, ord_doc},
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2578 {"pow", builtin_pow, METH_VARARGS, pow_doc},
45891
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45880
diff changeset
2579 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
19301
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2580 {"range", builtin_range, METH_VARARGS, range_doc},
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2581 {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc},
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2582 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2583 {"reload", builtin_reload, METH_O, reload_doc},
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2584 {"repr", builtin_repr, METH_O, repr_doc},
37344
c6cf11acb41f Patch #1460496: round() now accepts keyword arguments.
Georg Brandl <georg@python.org>
parents: 36866
diff changeset
2585 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
19301
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2586 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
31210
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31122
diff changeset
2587 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
28717
13d0a3c4e465 Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents: 28612
diff changeset
2588 {"sum", builtin_sum, METH_VARARGS, sum_doc},
19343
7257e87e0720 Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents: 19301
diff changeset
2589 #ifdef Py_USING_UNICODE
19301
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2590 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
19343
7257e87e0720 Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents: 19301
diff changeset
2591 #endif
19301
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2592 {"vars", builtin_vars, METH_VARARGS, vars_doc},
b9701538f827 Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents: 19061
diff changeset
2593 {"zip", builtin_zip, METH_VARARGS, zip_doc},
480
c64c6702549d Added "apply"; added "SyntaxError"; changed table lay-out.
Guido van Rossum <guido@python.org>
parents: 463
diff changeset
2594 {NULL, NULL},
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
2595 };
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
2596
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
2597 PyDoc_STRVAR(builtin_doc,
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2598 "Built-in functions, exceptions, and other objects.\n\
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2599 \n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23695
diff changeset
2600 Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2601
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5610
diff changeset
2602 PyObject *
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13576
diff changeset
2603 _PyBuiltin_Init(void)
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5610
diff changeset
2604 {
12961
eb911eca9ee9 Christopher Fandrich <cfandrich@8cs.com>:
Fred Drake <fdrake@acm.org>
parents: 12756
diff changeset
2605 PyObject *mod, *dict, *debug;
8561
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2606 mod = Py_InitModule4("__builtin__", builtin_methods,
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2607 builtin_doc, (PyObject *)NULL,
8973e7085cf4 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8560
diff changeset
2608 PYTHON_API_VERSION);
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5610
diff changeset
2609 if (mod == NULL)
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5610
diff changeset
2610 return NULL;
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5610
diff changeset
2611 dict = PyModule_GetDict(mod);
19902
de39956b5458 _PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents: 19894
diff changeset
2612
28396
d56282c28a1e Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents: 28027
diff changeset
2613 #ifdef Py_TRACE_REFS
d56282c28a1e Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents: 28027
diff changeset
2614 /* __builtin__ exposes a number of statically allocated objects
d56282c28a1e Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents: 28027
diff changeset
2615 * that, before this code was added in 2.3, never showed up in
d56282c28a1e Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents: 28027
diff changeset
2616 * the list of "all objects" maintained by Py_TRACE_REFS. As a
d56282c28a1e Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents: 28027
diff changeset
2617 * result, programs leaking references to None and False (etc)
d56282c28a1e Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents: 28027
diff changeset
2618 * couldn't be diagnosed by examining sys.getobjects(0).
d56282c28a1e Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents: 28027
diff changeset
2619 */
d56282c28a1e Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents: 28027
diff changeset
2620 #define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
d56282c28a1e Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents: 28027
diff changeset
2621 #else
d56282c28a1e Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents: 28027
diff changeset
2622 #define ADD_TO_ALL(OBJECT) (void)0
d56282c28a1e Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents: 28027
diff changeset
2623 #endif
d56282c28a1e Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents: 28027
diff changeset
2624
19902
de39956b5458 _PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents: 19894
diff changeset
2625 #define SETBUILTIN(NAME, OBJECT) \
28396
d56282c28a1e Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents: 28027
diff changeset
2626 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
d56282c28a1e Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents: 28027
diff changeset
2627 return NULL; \
d56282c28a1e Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents: 28027
diff changeset
2628 ADD_TO_ALL(OBJECT)
19902
de39956b5458 _PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents: 19894
diff changeset
2629
de39956b5458 _PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents: 19894
diff changeset
2630 SETBUILTIN("None", Py_None);
de39956b5458 _PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents: 19894
diff changeset
2631 SETBUILTIN("Ellipsis", Py_Ellipsis);
de39956b5458 _PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents: 19894
diff changeset
2632 SETBUILTIN("NotImplemented", Py_NotImplemented);
22785
aa8d59823add Add the 'bool' type and its values 'False' and 'True', as described in
Guido van Rossum <guido@python.org>
parents: 22205
diff changeset
2633 SETBUILTIN("False", Py_False);
aa8d59823add Add the 'bool' type and its values 'False' and 'True', as described in
Guido van Rossum <guido@python.org>
parents: 22205
diff changeset
2634 SETBUILTIN("True", Py_True);
23597
ed007e47b3a1 Change name from string to basestring
Neal Norwitz <nnorwitz@gmail.com>
parents: 23542
diff changeset
2635 SETBUILTIN("basestring", &PyBaseString_Type);
22785
aa8d59823add Add the 'bool' type and its values 'False' and 'True', as described in
Guido van Rossum <guido@python.org>
parents: 22205
diff changeset
2636 SETBUILTIN("bool", &PyBool_Type);
45832
5c0b5cabeec9 Finish backporting new buffer API to Python 2.6. Left to do: memoryview object and structmodule. But, these need to be finished in Python 3.0 first. No objects support the new buffer API in Python 2.6 as of yet, and except for the memoryview object, I don't think they will.
Travis E. Oliphant <oliphant@enthought.com>
parents: 45499
diff changeset
2637 /* SETBUILTIN("memoryview", &PyMemoryView_Type); */
47291
04bd3690fb1f First step of the C API rename:
Christian Heimes <christian@cheimes.de>
parents: 47139
diff changeset
2638 SETBUILTIN("bytearray", &PyByteArray_Type);
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47385
diff changeset
2639 SETBUILTIN("bytes", &PyString_Type);
23868
8e6760bf1884 SF patch 568629 by Oren Tirosh: types made callable.
Guido van Rossum <guido@python.org>
parents: 23832
diff changeset
2640 SETBUILTIN("buffer", &PyBuffer_Type);
19902
de39956b5458 _PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents: 19894
diff changeset
2641 SETBUILTIN("classmethod", &PyClassMethod_Type);
18933
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 18890
diff changeset
2642 #ifndef WITHOUT_COMPLEX
19902
de39956b5458 _PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents: 19894
diff changeset
2643 SETBUILTIN("complex", &PyComplex_Type);
18933
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 18890
diff changeset
2644 #endif
20754
272336648d1f Rename "dictionary" (type and constructor) to "dict".
Tim Peters <tim.peters@gmail.com>
parents: 20654
diff changeset
2645 SETBUILTIN("dict", &PyDict_Type);
23305
ef6e31f0cee1 builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents: 23295
diff changeset
2646 SETBUILTIN("enumerate", &PyEnum_Type);
38077
c9202f1c56c2 SF #1479181: split open() and file() from being aliases for each other.
Neal Norwitz <nnorwitz@gmail.com>
parents: 37673
diff changeset
2647 SETBUILTIN("file", &PyFile_Type);
19902
de39956b5458 _PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents: 19894
diff changeset
2648 SETBUILTIN("float", &PyFloat_Type);
30929
54ff68e973ee * Migrate set() and frozenset() from the sandbox.
Raymond Hettinger <python@rcn.com>
parents: 30865
diff changeset
2649 SETBUILTIN("frozenset", &PyFrozenSet_Type);
19902
de39956b5458 _PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents: 19894
diff changeset
2650 SETBUILTIN("property", &PyProperty_Type);
de39956b5458 _PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents: 19894
diff changeset
2651 SETBUILTIN("int", &PyInt_Type);
de39956b5458 _PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents: 19894
diff changeset
2652 SETBUILTIN("list", &PyList_Type);
de39956b5458 _PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents: 19894
diff changeset
2653 SETBUILTIN("long", &PyLong_Type);
de39956b5458 _PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents: 19894
diff changeset
2654 SETBUILTIN("object", &PyBaseObject_Type);
30865
41c4e143e6e6 Implement and apply PEP 322, reverse iteration
Raymond Hettinger <python@rcn.com>
parents: 30784
diff changeset
2655 SETBUILTIN("reversed", &PyReversed_Type);
30929
54ff68e973ee * Migrate set() and frozenset() from the sandbox.
Raymond Hettinger <python@rcn.com>
parents: 30865
diff changeset
2656 SETBUILTIN("set", &PySet_Type);
23868
8e6760bf1884 SF patch 568629 by Oren Tirosh: types made callable.
Guido van Rossum <guido@python.org>
parents: 23832
diff changeset
2657 SETBUILTIN("slice", &PySlice_Type);
19902
de39956b5458 _PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents: 19894
diff changeset
2658 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47385
diff changeset
2659 SETBUILTIN("str", &PyString_Type);
19902
de39956b5458 _PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents: 19894
diff changeset
2660 SETBUILTIN("super", &PySuper_Type);
de39956b5458 _PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents: 19894
diff changeset
2661 SETBUILTIN("tuple", &PyTuple_Type);
de39956b5458 _PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents: 19894
diff changeset
2662 SETBUILTIN("type", &PyType_Type);
23695
6266f1bd1ab9 Skip Montanaro's patch, SF 559833, exposing xrange type in builtins.
Raymond Hettinger <python@rcn.com>
parents: 23597
diff changeset
2663 SETBUILTIN("xrange", &PyRange_Type);
19343
7257e87e0720 Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents: 19301
diff changeset
2664 #ifdef Py_USING_UNICODE
19902
de39956b5458 _PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents: 19894
diff changeset
2665 SETBUILTIN("unicode", &PyUnicode_Type);
19343
7257e87e0720 Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents: 19301
diff changeset
2666 #endif
22785
aa8d59823add Add the 'bool' type and its values 'False' and 'True', as described in
Guido van Rossum <guido@python.org>
parents: 22205
diff changeset
2667 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
12961
eb911eca9ee9 Christopher Fandrich <cfandrich@8cs.com>:
Fred Drake <fdrake@acm.org>
parents: 12756
diff changeset
2668 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
eb911eca9ee9 Christopher Fandrich <cfandrich@8cs.com>:
Fred Drake <fdrake@acm.org>
parents: 12756
diff changeset
2669 Py_XDECREF(debug);
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5610
diff changeset
2670 return NULL;
12961
eb911eca9ee9 Christopher Fandrich <cfandrich@8cs.com>:
Fred Drake <fdrake@acm.org>
parents: 12756
diff changeset
2671 }
eb911eca9ee9 Christopher Fandrich <cfandrich@8cs.com>:
Fred Drake <fdrake@acm.org>
parents: 12756
diff changeset
2672 Py_XDECREF(debug);
6198
c43ca8dd0081 Removed obsolete exception PyExc_AccessError.
Barry Warsaw <barry@python.org>
parents: 6145
diff changeset
2673
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5610
diff changeset
2674 return mod;
28396
d56282c28a1e Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents: 28027
diff changeset
2675 #undef ADD_TO_ALL
19902
de39956b5458 _PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents: 19894
diff changeset
2676 #undef SETBUILTIN
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
2677 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents:
diff changeset
2678
1393
7d6a2d950f13 * nismodule.c: database keys and values can contain null bytes. be more
Guido van Rossum <guido@python.org>
parents: 1387
diff changeset
2679 /* Helper for filter(): filter a tuple through a function */
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2680
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2681 static PyObject *
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13576
diff changeset
2682 filtertuple(PyObject *func, PyObject *tuple)
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2683 {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2684 PyObject *result;
36501
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 36484
diff changeset
2685 Py_ssize_t i, j;
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 36484
diff changeset
2686 Py_ssize_t len = PyTuple_Size(tuple);
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2687
2890
04e1690fb4d1 avoid resize of 0-length tuple
Guido van Rossum <guido@python.org>
parents: 2857
diff changeset
2688 if (len == 0) {
27681
e5454fe1aafd Make sure filter() never returns tuple, str or unicode
Walter Dörwald <walter@livinglogic.de>
parents: 27675
diff changeset
2689 if (PyTuple_CheckExact(tuple))
e5454fe1aafd Make sure filter() never returns tuple, str or unicode
Walter Dörwald <walter@livinglogic.de>
parents: 27675
diff changeset
2690 Py_INCREF(tuple);
e5454fe1aafd Make sure filter() never returns tuple, str or unicode
Walter Dörwald <walter@livinglogic.de>
parents: 27675
diff changeset
2691 else
e5454fe1aafd Make sure filter() never returns tuple, str or unicode
Walter Dörwald <walter@livinglogic.de>
parents: 27675
diff changeset
2692 tuple = PyTuple_New(0);
2890
04e1690fb4d1 avoid resize of 0-length tuple
Guido van Rossum <guido@python.org>
parents: 2857
diff changeset
2693 return tuple;
04e1690fb4d1 avoid resize of 0-length tuple
Guido van Rossum <guido@python.org>
parents: 2857
diff changeset
2694 }
04e1690fb4d1 avoid resize of 0-length tuple
Guido van Rossum <guido@python.org>
parents: 2857
diff changeset
2695
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2696 if ((result = PyTuple_New(len)) == NULL)
1387
f992ac2a38d5 * rangeobject.{c,h}, bltinmodule.c: removed non-essential ops from range
Guido van Rossum <guido@python.org>
parents: 1380
diff changeset
2697 return NULL;
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2698
1375
f3a325662d39 * listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents: 1369
diff changeset
2699 for (i = j = 0; i < len; ++i) {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2700 PyObject *item, *good;
1375
f3a325662d39 * listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents: 1369
diff changeset
2701 int ok;
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2702
27795
2042e2051d97 Change filtertuple() to use tp_as_sequence->sq_item
Walter Dörwald <walter@livinglogic.de>
parents: 27790
diff changeset
2703 if (tuple->ob_type->tp_as_sequence &&
2042e2051d97 Change filtertuple() to use tp_as_sequence->sq_item
Walter Dörwald <walter@livinglogic.de>
parents: 27790
diff changeset
2704 tuple->ob_type->tp_as_sequence->sq_item) {
2042e2051d97 Change filtertuple() to use tp_as_sequence->sq_item
Walter Dörwald <walter@livinglogic.de>
parents: 27790
diff changeset
2705 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
30182
7bc772527e44 Fix a crash: when sq_item failed the code continued blindly and used the
Walter Dörwald <walter@livinglogic.de>
parents: 30151
diff changeset
2706 if (item == NULL)
7bc772527e44 Fix a crash: when sq_item failed the code continued blindly and used the
Walter Dörwald <walter@livinglogic.de>
parents: 30151
diff changeset
2707 goto Fail_1;
27795
2042e2051d97 Change filtertuple() to use tp_as_sequence->sq_item
Walter Dörwald <walter@livinglogic.de>
parents: 27790
diff changeset
2708 } else {
28740
d3297e298211 some more error-message enhancements
Alex Martelli <aleaxit@gmail.com>
parents: 28738
diff changeset
2709 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
1375
f3a325662d39 * listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents: 1369
diff changeset
2710 goto Fail_1;
27795
2042e2051d97 Change filtertuple() to use tp_as_sequence->sq_item
Walter Dörwald <walter@livinglogic.de>
parents: 27790
diff changeset
2711 }
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2712 if (func == Py_None) {
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2713 Py_INCREF(item);
1375
f3a325662d39 * listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents: 1369
diff changeset
2714 good = item;
f3a325662d39 * listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents: 1369
diff changeset
2715 }
f3a325662d39 * listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents: 1369
diff changeset
2716 else {
30683
3b59fa5d25b1 Simplify and speedup uses of Py_BuildValue():
Raymond Hettinger <python@rcn.com>
parents: 30430
diff changeset
2717 PyObject *arg = PyTuple_Pack(1, item);
30182
7bc772527e44 Fix a crash: when sq_item failed the code continued blindly and used the
Walter Dörwald <walter@livinglogic.de>
parents: 30151
diff changeset
2718 if (arg == NULL) {
7bc772527e44 Fix a crash: when sq_item failed the code continued blindly and used the
Walter Dörwald <walter@livinglogic.de>
parents: 30151
diff changeset
2719 Py_DECREF(item);
1375
f3a325662d39 * listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents: 1369
diff changeset
2720 goto Fail_1;
30182
7bc772527e44 Fix a crash: when sq_item failed the code continued blindly and used the
Walter Dörwald <walter@livinglogic.de>
parents: 30151
diff changeset
2721 }
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2722 good = PyEval_CallObject(func, arg);
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2723 Py_DECREF(arg);
30182
7bc772527e44 Fix a crash: when sq_item failed the code continued blindly and used the
Walter Dörwald <walter@livinglogic.de>
parents: 30151
diff changeset
2724 if (good == NULL) {
7bc772527e44 Fix a crash: when sq_item failed the code continued blindly and used the
Walter Dörwald <walter@livinglogic.de>
parents: 30151
diff changeset
2725 Py_DECREF(item);
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2726 goto Fail_1;
30182
7bc772527e44 Fix a crash: when sq_item failed the code continued blindly and used the
Walter Dörwald <walter@livinglogic.de>
parents: 30151
diff changeset
2727 }
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2728 }
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2729 ok = PyObject_IsTrue(good);
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2730 Py_DECREF(good);
1375
f3a325662d39 * listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents: 1369
diff changeset
2731 if (ok) {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2732 if (PyTuple_SetItem(result, j++, item) < 0)
1375
f3a325662d39 * listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents: 1369
diff changeset
2733 goto Fail_1;
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2734 }
30182
7bc772527e44 Fix a crash: when sq_item failed the code continued blindly and used the
Walter Dörwald <walter@livinglogic.de>
parents: 30151
diff changeset
2735 else
7bc772527e44 Fix a crash: when sq_item failed the code continued blindly and used the
Walter Dörwald <walter@livinglogic.de>
parents: 30151
diff changeset
2736 Py_DECREF(item);
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2737 }
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2738
17976
d579a5d8b3fe Cruft cleanup: Removed the unused last_is_sticky argument from the internal
Tim Peters <tim.peters@gmail.com>
parents: 17874
diff changeset
2739 if (_PyTuple_Resize(&result, j) < 0)
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2740 return NULL;
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2741
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2742 return result;
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2743
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2744 Fail_1:
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2745 Py_DECREF(result);
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2746 return NULL;
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2747 }
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2748
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2749
1393
7d6a2d950f13 * nismodule.c: database keys and values can contain null bytes. be more
Guido van Rossum <guido@python.org>
parents: 1387
diff changeset
2750 /* Helper for filter(): filter a string through a function */
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2751
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2752 static PyObject *
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13576
diff changeset
2753 filterstring(PyObject *func, PyObject *strobj)
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2754 {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2755 PyObject *result;
36501
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 36484
diff changeset
2756 Py_ssize_t i, j;
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47385
diff changeset
2757 Py_ssize_t len = PyString_Size(strobj);
36501
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 36484
diff changeset
2758 Py_ssize_t outlen = len;
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2759
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2760 if (func == Py_None) {
27786
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2761 /* If it's a real string we can return the original,
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2762 * as no character is ever false and __getitem__
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2763 * does return this character. If it's a subclass
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2764 * we must go through the __getitem__ loop */
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47385
diff changeset
2765 if (PyString_CheckExact(strobj)) {
27681
e5454fe1aafd Make sure filter() never returns tuple, str or unicode
Walter Dörwald <walter@livinglogic.de>
parents: 27675
diff changeset
2766 Py_INCREF(strobj);
27786
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2767 return strobj;
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2768 }
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2769 }
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47385
diff changeset
2770 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
1387
f992ac2a38d5 * rangeobject.{c,h}, bltinmodule.c: removed non-essential ops from range
Guido van Rossum <guido@python.org>
parents: 1380
diff changeset
2771 return NULL;
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2772
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2773 for (i = j = 0; i < len; ++i) {
27786
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2774 PyObject *item;
1375
f3a325662d39 * listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents: 1369
diff changeset
2775 int ok;
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2776
1375
f3a325662d39 * listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents: 1369
diff changeset
2777 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
f3a325662d39 * listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents: 1369
diff changeset
2778 if (item == NULL)
f3a325662d39 * listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents: 1369
diff changeset
2779 goto Fail_1;
27786
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2780 if (func==Py_None) {
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2781 ok = 1;
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2782 } else {
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2783 PyObject *arg, *good;
30683
3b59fa5d25b1 Simplify and speedup uses of Py_BuildValue():
Raymond Hettinger <python@rcn.com>
parents: 30430
diff changeset
2784 arg = PyTuple_Pack(1, item);
27786
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2785 if (arg == NULL) {
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2786 Py_DECREF(item);
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2787 goto Fail_1;
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2788 }
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2789 good = PyEval_CallObject(func, arg);
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2790 Py_DECREF(arg);
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2791 if (good == NULL) {
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2792 Py_DECREF(item);
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2793 goto Fail_1;
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2794 }
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2795 ok = PyObject_IsTrue(good);
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2796 Py_DECREF(good);
17337
96ea0eccdb31 SF patch #413552 - Premature decref on object
Tim Peters <tim.peters@gmail.com>
parents: 17125
diff changeset
2797 }
27674
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2798 if (ok) {
36521
30aef3ce2b26 Use Py_ssize_t to count the
Martin v. Löwis <martin@v.loewis.de>
parents: 36501
diff changeset
2799 Py_ssize_t reslen;
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47385
diff changeset
2800 if (!PyString_Check(item)) {
27674
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2801 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2802 " __getitem__ returned different type");
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2803 Py_DECREF(item);
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2804 goto Fail_1;
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2805 }
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47385
diff changeset
2806 reslen = PyString_GET_SIZE(item);
27674
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2807 if (reslen == 1) {
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47385
diff changeset
2808 PyString_AS_STRING(result)[j++] =
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47385
diff changeset
2809 PyString_AS_STRING(item)[0];
27674
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2810 } else {
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2811 /* do we need more space? */
47587
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2812 Py_ssize_t need = j;
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2813
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2814 /* calculate space requirements while checking for overflow */
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2815 if (need > PY_SSIZE_T_MAX - reslen) {
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2816 Py_DECREF(item);
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2817 goto Fail_1;
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2818 }
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2819
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2820 need += reslen;
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2821
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2822 if (need > PY_SSIZE_T_MAX - len) {
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2823 Py_DECREF(item);
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2824 goto Fail_1;
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2825 }
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2826
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2827 need += len;
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2828
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2829 if (need <= i) {
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2830 Py_DECREF(item);
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2831 goto Fail_1;
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2832 }
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2833
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2834 need = need - i - 1;
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2835
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2836 assert(need >= 0);
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2837 assert(outlen >= 0);
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2838
27674
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2839 if (need > outlen) {
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2840 /* overallocate, to avoid reallocations */
47587
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2841 if (outlen > PY_SSIZE_T_MAX / 2) {
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2842 Py_DECREF(item);
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2843 return NULL;
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2844 }
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2845
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2846 if (need<2*outlen) {
27674
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2847 need = 2*outlen;
47587
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2848 }
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47385
diff changeset
2849 if (_PyString_Resize(&result, need)) {
27674
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2850 Py_DECREF(item);
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2851 return NULL;
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2852 }
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2853 outlen = need;
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2854 }
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2855 memcpy(
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47385
diff changeset
2856 PyString_AS_STRING(result) + j,
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47385
diff changeset
2857 PyString_AS_STRING(item),
27674
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2858 reslen
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2859 );
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2860 j += reslen;
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2861 }
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2862 }
17337
96ea0eccdb31 SF patch #413552 - Premature decref on object
Tim Peters <tim.peters@gmail.com>
parents: 17125
diff changeset
2863 Py_DECREF(item);
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2864 }
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2865
27674
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2866 if (j < outlen)
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47385
diff changeset
2867 _PyString_Resize(&result, j);
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2868
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2869 return result;
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2870
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2871 Fail_1:
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5317
diff changeset
2872 Py_DECREF(result);
1369
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2873 return NULL;
89e1e5d9ccbf * compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents: 1360
diff changeset
2874 }
27385
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
2875
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
2876 #ifdef Py_USING_UNICODE
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
2877 /* Helper for filter(): filter a Unicode object through a function */
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
2878
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
2879 static PyObject *
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
2880 filterunicode(PyObject *func, PyObject *strobj)
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
2881 {
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
2882 PyObject *result;
36866
9eb24f92a784 Change int to Py_ssize_t in several places.
Martin v. Löwis <martin@v.loewis.de>
parents: 36712
diff changeset
2883 register Py_ssize_t i, j;
36521
30aef3ce2b26 Use Py_ssize_t to count the
Martin v. Löwis <martin@v.loewis.de>
parents: 36501
diff changeset
2884 Py_ssize_t len = PyUnicode_GetSize(strobj);
30aef3ce2b26 Use Py_ssize_t to count the
Martin v. Löwis <martin@v.loewis.de>
parents: 36501
diff changeset
2885 Py_ssize_t outlen = len;
27385
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
2886
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
2887 if (func == Py_None) {
27786
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2888 /* If it's a real string we can return the original,
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2889 * as no character is ever false and __getitem__
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2890 * does return this character. If it's a subclass
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2891 * we must go through the __getitem__ loop */
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2892 if (PyUnicode_CheckExact(strobj)) {
27681
e5454fe1aafd Make sure filter() never returns tuple, str or unicode
Walter Dörwald <walter@livinglogic.de>
parents: 27675
diff changeset
2893 Py_INCREF(strobj);
27786
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2894 return strobj;
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2895 }
27385
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
2896 }
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
2897 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
2898 return NULL;
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
2899
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
2900 for (i = j = 0; i < len; ++i) {
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
2901 PyObject *item, *arg, *good;
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
2902 int ok;
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
2903
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
2904 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
2905 if (item == NULL)
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
2906 goto Fail_1;
27786
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2907 if (func == Py_None) {
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2908 ok = 1;
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2909 } else {
30683
3b59fa5d25b1 Simplify and speedup uses of Py_BuildValue():
Raymond Hettinger <python@rcn.com>
parents: 30430
diff changeset
2910 arg = PyTuple_Pack(1, item);
27786
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2911 if (arg == NULL) {
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2912 Py_DECREF(item);
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2913 goto Fail_1;
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2914 }
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2915 good = PyEval_CallObject(func, arg);
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2916 Py_DECREF(arg);
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2917 if (good == NULL) {
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2918 Py_DECREF(item);
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2919 goto Fail_1;
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2920 }
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2921 ok = PyObject_IsTrue(good);
f34446fa216e Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents: 27782
diff changeset
2922 Py_DECREF(good);
27385
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
2923 }
27674
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2924 if (ok) {
36521
30aef3ce2b26 Use Py_ssize_t to count the
Martin v. Löwis <martin@v.loewis.de>
parents: 36501
diff changeset
2925 Py_ssize_t reslen;
27674
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2926 if (!PyUnicode_Check(item)) {
35500
8fa83a9ebc6e Whitespace normalization.
Georg Brandl <georg@python.org>
parents: 35364
diff changeset
2927 PyErr_SetString(PyExc_TypeError,
30429
c9cc35249322 Reflow long lines and reformat.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 30182
diff changeset
2928 "can't filter unicode to unicode:"
c9cc35249322 Reflow long lines and reformat.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 30182
diff changeset
2929 " __getitem__ returned different type");
27674
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2930 Py_DECREF(item);
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2931 goto Fail_1;
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2932 }
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2933 reslen = PyUnicode_GET_SIZE(item);
35500
8fa83a9ebc6e Whitespace normalization.
Georg Brandl <georg@python.org>
parents: 35364
diff changeset
2934 if (reslen == 1)
27674
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2935 PyUnicode_AS_UNICODE(result)[j++] =
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2936 PyUnicode_AS_UNICODE(item)[0];
30429
c9cc35249322 Reflow long lines and reformat.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 30182
diff changeset
2937 else {
27674
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2938 /* do we need more space? */
36521
30aef3ce2b26 Use Py_ssize_t to count the
Martin v. Löwis <martin@v.loewis.de>
parents: 36501
diff changeset
2939 Py_ssize_t need = j + reslen + len - i - 1;
47587
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2940
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2941 /* check that didnt overflow */
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2942 if ((j > PY_SSIZE_T_MAX - reslen) ||
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2943 ((j + reslen) > PY_SSIZE_T_MAX - len) ||
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2944 ((j + reslen + len) < i) ||
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2945 ((j + reslen + len - i) <= 0)) {
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2946 Py_DECREF(item);
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2947 return NULL;
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2948 }
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2949
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2950 assert(need >= 0);
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2951 assert(outlen >= 0);
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2952
27674
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2953 if (need > outlen) {
35500
8fa83a9ebc6e Whitespace normalization.
Georg Brandl <georg@python.org>
parents: 35364
diff changeset
2954 /* overallocate,
30429
c9cc35249322 Reflow long lines and reformat.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 30182
diff changeset
2955 to avoid reallocations */
47587
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2956 if (need < 2 * outlen) {
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2957 if (outlen > PY_SSIZE_T_MAX / 2) {
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2958 Py_DECREF(item);
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2959 return NULL;
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2960 } else {
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2961 need = 2 * outlen;
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2962 }
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2963 }
1c964ed35ef9 Merge in release25-maint r60793:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47527
diff changeset
2964
30430
a8f04cbf659c Correct check of PyUnicode_Resize() return value.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 30429
diff changeset
2965 if (PyUnicode_Resize(
a8f04cbf659c Correct check of PyUnicode_Resize() return value.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 30429
diff changeset
2966 &result, need) < 0) {
27674
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2967 Py_DECREF(item);
27675
8f8448fb58d6 PyUnicode_Resize() doesn't free its argument in case of a failure,
Walter Dörwald <walter@livinglogic.de>
parents: 27674
diff changeset
2968 goto Fail_1;
27674
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2969 }
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2970 outlen = need;
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2971 }
30429
c9cc35249322 Reflow long lines and reformat.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 30182
diff changeset
2972 memcpy(PyUnicode_AS_UNICODE(result) + j,
c9cc35249322 Reflow long lines and reformat.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 30182
diff changeset
2973 PyUnicode_AS_UNICODE(item),
c9cc35249322 Reflow long lines and reformat.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 30182
diff changeset
2974 reslen*sizeof(Py_UNICODE));
27674
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2975 j += reslen;
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2976 }
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2977 }
27385
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
2978 Py_DECREF(item);
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
2979 }
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
2980
27674
ce3faab06de7 filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents: 27652
diff changeset
2981 if (j < outlen)
27385
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
2982 PyUnicode_Resize(&result, j);
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
2983
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
2984 return result;
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
2985
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
2986 Fail_1:
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
2987 Py_DECREF(result);
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
2988 return NULL;
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
2989 }
91a573243d5d Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 27076
diff changeset
2990 #endif