Mercurial > cpython-lru_cache-weakref
annotate Python/bltinmodule.c @ 78912:5aa1bc2f00ad
Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
sporadic crashes in multi-thread programs when several long deallocator
chains ran concurrently and involved subclasses of built-in container
types.
Because of this change, a couple extension modules compiled for 3.2.4
(those which use the trashcan mechanism, despite it being undocumented)
will not be loadable by 3.2.3 and earlier. However, extension modules
compiled for 3.2.3 and earlier will be loadable by 3.2.4.
| author | Antoine Pitrou <solipsis@pitrou.net> |
|---|---|
| date | Thu, 06 Sep 2012 00:59:49 +0200 |
| parents | 0a3149b30f20 |
| children | 63a57de58ad9 75fe7f5fda9a |
| rev | line source |
|---|---|
| 86 | 1 /* Built-in functions */ |
| 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" |
|
46208
ea75b12fe8e7
Merged revisions 62004 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
45738
diff
changeset
|
4 #include "Python-ast.h" |
| 86 | 5 |
| 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" |
| 86 | 8 |
|
71850
381a6def7d5f
include header with PyAST_Validate
Benjamin Peterson <benjamin@python.org>
parents:
71795
diff
changeset
|
9 #include "asdl.h" |
|
381a6def7d5f
include header with PyAST_Validate
Benjamin Peterson <benjamin@python.org>
parents:
71795
diff
changeset
|
10 #include "ast.h" |
|
381a6def7d5f
include header with PyAST_Validate
Benjamin Peterson <benjamin@python.org>
parents:
71795
diff
changeset
|
11 |
|
5317
c72c7e1930b3
Keep gcc -Wall and Microsoft VC happy.
Guido van Rossum <guido@python.org>
parents:
5223
diff
changeset
|
12 #include <ctype.h> |
|
c72c7e1930b3
Keep gcc -Wall and Microsoft VC happy.
Guido van Rossum <guido@python.org>
parents:
5223
diff
changeset
|
13 |
|
61593
47b4da86b9b9
Issue #8610: Load file system codec at startup, and display a fatal error on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61466
diff
changeset
|
14 #ifdef HAVE_LANGINFO_H |
|
47b4da86b9b9
Issue #8610: Load file system codec at startup, and display a fatal error on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61466
diff
changeset
|
15 #include <langinfo.h> /* CODESET */ |
|
47b4da86b9b9
Issue #8610: Load file system codec at startup, and display a fatal error on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61466
diff
changeset
|
16 #endif |
|
47b4da86b9b9
Issue #8610: Load file system codec at startup, and display a fatal error on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61466
diff
changeset
|
17 |
|
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
|
18 /* 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
|
19 Can remain NULL for all platforms that don't have such a concept |
|
43569
19319e70fc3e
Patch #1272, by Christian Heimes and Alexandre Vassalotti.
Guido van Rossum <guido@python.org>
parents:
43487
diff
changeset
|
20 |
|
19319e70fc3e
Patch #1272, by Christian Heimes and Alexandre Vassalotti.
Guido van Rossum <guido@python.org>
parents:
43487
diff
changeset
|
21 Don't forget to modify PyUnicode_DecodeFSDefault() if you touch any of the |
|
19319e70fc3e
Patch #1272, by Christian Heimes and Alexandre Vassalotti.
Guido van Rossum <guido@python.org>
parents:
43487
diff
changeset
|
22 values for Py_FileSystemDefaultEncoding! |
|
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 */ |
|
71193
13e6d3cb2ecd
Issue #9642: Uniformize the tests on the availability of the mbcs codec
Victor Stinner <victor.stinner@haypocalc.com>
parents:
71191
diff
changeset
|
24 #ifdef HAVE_MBCS |
|
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
|
25 const char *Py_FileSystemDefaultEncoding = "mbcs"; |
|
49403
e822992cf6ce
Issue #3187: Add sys.setfilesystemencoding.
Martin v. Löwis <martin@v.loewis.de>
parents:
49261
diff
changeset
|
26 int Py_HasFileSystemDefaultEncoding = 1; |
|
27782
904f0e769820
My previous checkin caused compile() to no longer accept buffers, as noted
Just van Rossum <just@letterror.com>
parents:
27781
diff
changeset
|
27 #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
|
28 const char *Py_FileSystemDefaultEncoding = "utf-8"; |
|
49403
e822992cf6ce
Issue #3187: Add sys.setfilesystemencoding.
Martin v. Löwis <martin@v.loewis.de>
parents:
49261
diff
changeset
|
29 int Py_HasFileSystemDefaultEncoding = 1; |
|
71191
7ce685cda0ae
Issue #9642: Fix filesystem encoding initialization: use the ANSI code page on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69181
diff
changeset
|
30 #else |
|
61593
47b4da86b9b9
Issue #8610: Load file system codec at startup, and display a fatal error on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61466
diff
changeset
|
31 const char *Py_FileSystemDefaultEncoding = NULL; /* set by initfsencoding() */ |
|
47b4da86b9b9
Issue #8610: Load file system codec at startup, and display a fatal error on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61466
diff
changeset
|
32 int Py_HasFileSystemDefaultEncoding = 0; |
|
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
|
33 #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
|
34 |
|
72925
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72848
diff
changeset
|
35 _Py_IDENTIFIER(fileno); |
|
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72848
diff
changeset
|
36 _Py_IDENTIFIER(flush); |
|
72835
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72475
diff
changeset
|
37 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
38 static PyObject * |
|
41226
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
39 builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds) |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
40 { |
|
73061
c2a89b509be4
Issue 1294232: Fix errors in metaclass calculation affecting some cases of metaclass inheritance. Patch by Daniel Urban.
Nick Coghlan <ncoghlan@gmail.com>
parents:
69180
diff
changeset
|
41 PyObject *func, *name, *bases, *mkw, *meta, *winner, *prep, *ns, *cell; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
42 PyObject *cls = NULL; |
|
73167
09d0510e1c50
Remove unused variable.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
73061
diff
changeset
|
43 Py_ssize_t nargs; |
|
73061
c2a89b509be4
Issue 1294232: Fix errors in metaclass calculation affecting some cases of metaclass inheritance. Patch by Daniel Urban.
Nick Coghlan <ncoghlan@gmail.com>
parents:
69180
diff
changeset
|
44 int isclass; |
|
72925
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72848
diff
changeset
|
45 _Py_IDENTIFIER(__prepare__); |
|
41226
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
46 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
47 assert(args != NULL); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
48 if (!PyTuple_Check(args)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
49 PyErr_SetString(PyExc_TypeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
50 "__build_class__: args is not a tuple"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
51 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
52 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
53 nargs = PyTuple_GET_SIZE(args); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
54 if (nargs < 2) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
55 PyErr_SetString(PyExc_TypeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
56 "__build_class__: not enough arguments"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
57 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
58 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
59 func = PyTuple_GET_ITEM(args, 0); /* Better be callable */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
60 name = PyTuple_GET_ITEM(args, 1); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
61 if (!PyUnicode_Check(name)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
62 PyErr_SetString(PyExc_TypeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
63 "__build_class__: name is not a string"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
64 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
65 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
66 bases = PyTuple_GetSlice(args, 2, nargs); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
67 if (bases == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
68 return NULL; |
|
41226
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
69 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
70 if (kwds == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
71 meta = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
72 mkw = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
73 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
74 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
75 mkw = PyDict_Copy(kwds); /* Don't modify kwds passed in! */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
76 if (mkw == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
77 Py_DECREF(bases); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
78 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
79 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
80 meta = PyDict_GetItemString(mkw, "metaclass"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
81 if (meta != NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
82 Py_INCREF(meta); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
83 if (PyDict_DelItemString(mkw, "metaclass") < 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
84 Py_DECREF(meta); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
85 Py_DECREF(mkw); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
86 Py_DECREF(bases); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
87 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
88 } |
|
73061
c2a89b509be4
Issue 1294232: Fix errors in metaclass calculation affecting some cases of metaclass inheritance. Patch by Daniel Urban.
Nick Coghlan <ncoghlan@gmail.com>
parents:
69180
diff
changeset
|
89 /* metaclass is explicitly given, check if it's indeed a class */ |
|
c2a89b509be4
Issue 1294232: Fix errors in metaclass calculation affecting some cases of metaclass inheritance. Patch by Daniel Urban.
Nick Coghlan <ncoghlan@gmail.com>
parents:
69180
diff
changeset
|
90 isclass = PyType_Check(meta); |
|
41226
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
91 } |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
92 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
93 if (meta == NULL) { |
|
73061
c2a89b509be4
Issue 1294232: Fix errors in metaclass calculation affecting some cases of metaclass inheritance. Patch by Daniel Urban.
Nick Coghlan <ncoghlan@gmail.com>
parents:
69180
diff
changeset
|
94 /* if there are no bases, use type: */ |
|
c2a89b509be4
Issue 1294232: Fix errors in metaclass calculation affecting some cases of metaclass inheritance. Patch by Daniel Urban.
Nick Coghlan <ncoghlan@gmail.com>
parents:
69180
diff
changeset
|
95 if (PyTuple_GET_SIZE(bases) == 0) { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
96 meta = (PyObject *) (&PyType_Type); |
|
73061
c2a89b509be4
Issue 1294232: Fix errors in metaclass calculation affecting some cases of metaclass inheritance. Patch by Daniel Urban.
Nick Coghlan <ncoghlan@gmail.com>
parents:
69180
diff
changeset
|
97 } |
|
c2a89b509be4
Issue 1294232: Fix errors in metaclass calculation affecting some cases of metaclass inheritance. Patch by Daniel Urban.
Nick Coghlan <ncoghlan@gmail.com>
parents:
69180
diff
changeset
|
98 /* else get the type of the first base */ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
99 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
100 PyObject *base0 = PyTuple_GET_ITEM(bases, 0); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
101 meta = (PyObject *) (base0->ob_type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
102 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
103 Py_INCREF(meta); |
|
73061
c2a89b509be4
Issue 1294232: Fix errors in metaclass calculation affecting some cases of metaclass inheritance. Patch by Daniel Urban.
Nick Coghlan <ncoghlan@gmail.com>
parents:
69180
diff
changeset
|
104 isclass = 1; /* meta is really a class */ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
105 } |
| 73062 | 106 |
|
73061
c2a89b509be4
Issue 1294232: Fix errors in metaclass calculation affecting some cases of metaclass inheritance. Patch by Daniel Urban.
Nick Coghlan <ncoghlan@gmail.com>
parents:
69180
diff
changeset
|
107 if (isclass) { |
|
c2a89b509be4
Issue 1294232: Fix errors in metaclass calculation affecting some cases of metaclass inheritance. Patch by Daniel Urban.
Nick Coghlan <ncoghlan@gmail.com>
parents:
69180
diff
changeset
|
108 /* meta is really a class, so check for a more derived |
|
c2a89b509be4
Issue 1294232: Fix errors in metaclass calculation affecting some cases of metaclass inheritance. Patch by Daniel Urban.
Nick Coghlan <ncoghlan@gmail.com>
parents:
69180
diff
changeset
|
109 metaclass, or possible metaclass conflicts: */ |
|
c2a89b509be4
Issue 1294232: Fix errors in metaclass calculation affecting some cases of metaclass inheritance. Patch by Daniel Urban.
Nick Coghlan <ncoghlan@gmail.com>
parents:
69180
diff
changeset
|
110 winner = (PyObject *)_PyType_CalculateMetaclass((PyTypeObject *)meta, |
|
c2a89b509be4
Issue 1294232: Fix errors in metaclass calculation affecting some cases of metaclass inheritance. Patch by Daniel Urban.
Nick Coghlan <ncoghlan@gmail.com>
parents:
69180
diff
changeset
|
111 bases); |
|
c2a89b509be4
Issue 1294232: Fix errors in metaclass calculation affecting some cases of metaclass inheritance. Patch by Daniel Urban.
Nick Coghlan <ncoghlan@gmail.com>
parents:
69180
diff
changeset
|
112 if (winner == NULL) { |
|
c2a89b509be4
Issue 1294232: Fix errors in metaclass calculation affecting some cases of metaclass inheritance. Patch by Daniel Urban.
Nick Coghlan <ncoghlan@gmail.com>
parents:
69180
diff
changeset
|
113 Py_DECREF(meta); |
|
c2a89b509be4
Issue 1294232: Fix errors in metaclass calculation affecting some cases of metaclass inheritance. Patch by Daniel Urban.
Nick Coghlan <ncoghlan@gmail.com>
parents:
69180
diff
changeset
|
114 Py_XDECREF(mkw); |
|
c2a89b509be4
Issue 1294232: Fix errors in metaclass calculation affecting some cases of metaclass inheritance. Patch by Daniel Urban.
Nick Coghlan <ncoghlan@gmail.com>
parents:
69180
diff
changeset
|
115 Py_DECREF(bases); |
|
c2a89b509be4
Issue 1294232: Fix errors in metaclass calculation affecting some cases of metaclass inheritance. Patch by Daniel Urban.
Nick Coghlan <ncoghlan@gmail.com>
parents:
69180
diff
changeset
|
116 return NULL; |
|
c2a89b509be4
Issue 1294232: Fix errors in metaclass calculation affecting some cases of metaclass inheritance. Patch by Daniel Urban.
Nick Coghlan <ncoghlan@gmail.com>
parents:
69180
diff
changeset
|
117 } |
|
c2a89b509be4
Issue 1294232: Fix errors in metaclass calculation affecting some cases of metaclass inheritance. Patch by Daniel Urban.
Nick Coghlan <ncoghlan@gmail.com>
parents:
69180
diff
changeset
|
118 if (winner != meta) { |
|
c2a89b509be4
Issue 1294232: Fix errors in metaclass calculation affecting some cases of metaclass inheritance. Patch by Daniel Urban.
Nick Coghlan <ncoghlan@gmail.com>
parents:
69180
diff
changeset
|
119 Py_DECREF(meta); |
|
c2a89b509be4
Issue 1294232: Fix errors in metaclass calculation affecting some cases of metaclass inheritance. Patch by Daniel Urban.
Nick Coghlan <ncoghlan@gmail.com>
parents:
69180
diff
changeset
|
120 meta = winner; |
|
c2a89b509be4
Issue 1294232: Fix errors in metaclass calculation affecting some cases of metaclass inheritance. Patch by Daniel Urban.
Nick Coghlan <ncoghlan@gmail.com>
parents:
69180
diff
changeset
|
121 Py_INCREF(meta); |
|
c2a89b509be4
Issue 1294232: Fix errors in metaclass calculation affecting some cases of metaclass inheritance. Patch by Daniel Urban.
Nick Coghlan <ncoghlan@gmail.com>
parents:
69180
diff
changeset
|
122 } |
|
c2a89b509be4
Issue 1294232: Fix errors in metaclass calculation affecting some cases of metaclass inheritance. Patch by Daniel Urban.
Nick Coghlan <ncoghlan@gmail.com>
parents:
69180
diff
changeset
|
123 } |
|
c2a89b509be4
Issue 1294232: Fix errors in metaclass calculation affecting some cases of metaclass inheritance. Patch by Daniel Urban.
Nick Coghlan <ncoghlan@gmail.com>
parents:
69180
diff
changeset
|
124 /* else: meta is not a class, so we cannot do the metaclass |
|
c2a89b509be4
Issue 1294232: Fix errors in metaclass calculation affecting some cases of metaclass inheritance. Patch by Daniel Urban.
Nick Coghlan <ncoghlan@gmail.com>
parents:
69180
diff
changeset
|
125 calculation, so we will use the explicitly given object as it is */ |
|
72848
81380082d216
Use identifier API for PyObject_GetAttrString.
Martin v. Löwis <martin@v.loewis.de>
parents:
72835
diff
changeset
|
126 prep = _PyObject_GetAttrId(meta, &PyId___prepare__); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
127 if (prep == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
128 if (PyErr_ExceptionMatches(PyExc_AttributeError)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
129 PyErr_Clear(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
130 ns = PyDict_New(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
131 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
132 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
133 Py_DECREF(meta); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
134 Py_XDECREF(mkw); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
135 Py_DECREF(bases); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
136 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
137 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
138 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
139 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
140 PyObject *pargs = PyTuple_Pack(2, name, bases); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
141 if (pargs == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
142 Py_DECREF(prep); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
143 Py_DECREF(meta); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
144 Py_XDECREF(mkw); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
145 Py_DECREF(bases); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
146 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
147 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
148 ns = PyEval_CallObjectWithKeywords(prep, pargs, mkw); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
149 Py_DECREF(pargs); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
150 Py_DECREF(prep); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
151 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
152 if (ns == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
153 Py_DECREF(meta); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
154 Py_XDECREF(mkw); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
155 Py_DECREF(bases); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
156 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
157 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
158 cell = PyObject_CallFunctionObjArgs(func, ns, NULL); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
159 if (cell != NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
160 PyObject *margs; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
161 margs = PyTuple_Pack(3, name, bases, ns); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
162 if (margs != NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
163 cls = PyEval_CallObjectWithKeywords(meta, margs, mkw); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
164 Py_DECREF(margs); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
165 } |
|
77293
ba01cf9a8578
don't leak if the __class__ closure is set
Benjamin Peterson <benjamin@python.org>
parents:
74340
diff
changeset
|
166 if (cls != NULL && PyCell_Check(cell)) |
|
ba01cf9a8578
don't leak if the __class__ closure is set
Benjamin Peterson <benjamin@python.org>
parents:
74340
diff
changeset
|
167 PyCell_Set(cell, cls); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
168 Py_DECREF(cell); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
169 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
170 Py_DECREF(ns); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
171 Py_DECREF(meta); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
172 Py_XDECREF(mkw); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
173 Py_DECREF(bases); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
174 return cls; |
|
41226
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
175 } |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
176 |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
177 PyDoc_STRVAR(build_class_doc, |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
178 "__build_class__(func, name, *bases, metaclass=None, **kwds) -> class\n\ |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
179 \n\ |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
180 Internal helper function used by the class statement."); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
181 |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
182 static PyObject * |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
183 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
|
184 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
185 static char *kwlist[] = {"name", "globals", "locals", "fromlist", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
186 "level", 0}; |
|
68739
80f4bd647695
Issue #3080: Add PyImport_ImportModuleLevelObject() function
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68258
diff
changeset
|
187 PyObject *name, *globals = NULL, *locals = NULL, *fromlist = NULL; |
|
76303
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76091
diff
changeset
|
188 int 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
|
189 |
|
68739
80f4bd647695
Issue #3080: Add PyImport_ImportModuleLevelObject() function
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68258
diff
changeset
|
190 if (!PyArg_ParseTupleAndKeywords(args, kwds, "U|OOOi:__import__", |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
191 kwlist, &name, &globals, &locals, &fromlist, &level)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
192 return NULL; |
|
68739
80f4bd647695
Issue #3080: Add PyImport_ImportModuleLevelObject() function
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68258
diff
changeset
|
193 return PyImport_ImportModuleLevelObject(name, globals, locals, |
|
80f4bd647695
Issue #3080: Add PyImport_ImportModuleLevelObject() function
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68258
diff
changeset
|
194 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
|
195 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
196 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
197 PyDoc_STRVAR(import_doc, |
|
78456
4240282a9f4a
Issue #15471: Don't use mutable object as default values for the
Brett Cannon <brett@python.org>
parents:
78338
diff
changeset
|
198 "__import__(name, globals=None, locals=None, fromlist=(), level=0) -> module\n\ |
| 8561 | 199 \n\ |
|
64965
3d490c3a019e
Since __import__ is not designed for general use, have its docstring point
Brett Cannon <bcannon@gmail.com>
parents:
64622
diff
changeset
|
200 Import a module. Because this function is meant for use by the Python\n\ |
|
3d490c3a019e
Since __import__ is not designed for general use, have its docstring point
Brett Cannon <bcannon@gmail.com>
parents:
64622
diff
changeset
|
201 interpreter and not for general use it is better to use\n\ |
|
3d490c3a019e
Since __import__ is not designed for general use, have its docstring point
Brett Cannon <bcannon@gmail.com>
parents:
64622
diff
changeset
|
202 importlib.import_module() to programmatically import a module.\n\ |
|
3d490c3a019e
Since __import__ is not designed for general use, have its docstring point
Brett Cannon <bcannon@gmail.com>
parents:
64622
diff
changeset
|
203 \n\ |
|
3d490c3a019e
Since __import__ is not designed for general use, have its docstring point
Brett Cannon <bcannon@gmail.com>
parents:
64622
diff
changeset
|
204 The globals argument is only used to determine the context;\n\ |
|
3d490c3a019e
Since __import__ is not designed for general use, have its docstring point
Brett Cannon <bcannon@gmail.com>
parents:
64622
diff
changeset
|
205 they are not modified. The locals argument is unused. The fromlist\n\ |
| 8561 | 206 should be a list of names to emulate ``from name import ...'', or an\n\ |
| 207 empty list to emulate ``import name''.\n\ | |
| 208 When importing a module from a package, note that __import__('A.B', ...)\n\ | |
| 209 returns package A when fromlist is empty, but its submodule B when\n\ | |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
210 fromlist is not empty. Level is used to determine whether to perform \n\ |
|
78338
2a4ca86cc2b7
Issue #15508: Fix the docstring for __import__ to not mention negative
Brett Cannon <brett@python.org>
parents:
77627
diff
changeset
|
211 absolute or relative imports. 0 is absolute while a positive number\n\ |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
212 is the number of parent directories to search relative to the current module."); |
| 8561 | 213 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
214 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
215 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
|
216 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
|
217 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
218 return PyNumber_Absolute(v); |
| 86 | 219 } |
| 220 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
221 PyDoc_STRVAR(abs_doc, |
| 8561 | 222 "abs(number) -> number\n\ |
| 223 \n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
224 Return the absolute value of the argument."); |
| 8561 | 225 |
|
34736
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
226 static PyObject * |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
227 builtin_all(PyObject *self, PyObject *v) |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
228 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
229 PyObject *it, *item; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
230 PyObject *(*iternext)(PyObject *); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
231 int cmp; |
|
34736
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
232 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
233 it = PyObject_GetIter(v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
234 if (it == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
235 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
236 iternext = *Py_TYPE(it)->tp_iternext; |
|
34736
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
237 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
238 for (;;) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
239 item = iternext(it); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
240 if (item == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
241 break; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
242 cmp = PyObject_IsTrue(item); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
243 Py_DECREF(item); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
244 if (cmp < 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
245 Py_DECREF(it); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
246 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
247 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
248 if (cmp == 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
249 Py_DECREF(it); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
250 Py_RETURN_FALSE; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
251 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
252 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
253 Py_DECREF(it); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
254 if (PyErr_Occurred()) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
255 if (PyErr_ExceptionMatches(PyExc_StopIteration)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
256 PyErr_Clear(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
257 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
258 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
259 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
260 Py_RETURN_TRUE; |
|
34736
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
261 } |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
262 |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
263 PyDoc_STRVAR(all_doc, |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
264 "all(iterable) -> bool\n\ |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
265 \n\ |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
266 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
|
267 |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
268 static PyObject * |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
269 builtin_any(PyObject *self, PyObject *v) |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
270 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
271 PyObject *it, *item; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
272 PyObject *(*iternext)(PyObject *); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
273 int cmp; |
|
34736
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
274 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
275 it = PyObject_GetIter(v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
276 if (it == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
277 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
278 iternext = *Py_TYPE(it)->tp_iternext; |
|
34736
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
279 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
280 for (;;) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
281 item = iternext(it); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
282 if (item == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
283 break; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
284 cmp = PyObject_IsTrue(item); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
285 Py_DECREF(item); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
286 if (cmp < 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
287 Py_DECREF(it); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
288 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
289 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
290 if (cmp == 1) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
291 Py_DECREF(it); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
292 Py_RETURN_TRUE; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
293 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
294 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
295 Py_DECREF(it); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
296 if (PyErr_Occurred()) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
297 if (PyErr_ExceptionMatches(PyExc_StopIteration)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
298 PyErr_Clear(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
299 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
300 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
301 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
302 Py_RETURN_FALSE; |
|
34736
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
303 } |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
304 |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
305 PyDoc_STRVAR(any_doc, |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
306 "any(iterable) -> bool\n\ |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
307 \n\ |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
308 Return True if bool(x) is True for any x in the iterable."); |
| 8561 | 309 |
|
47611
da47e7e135ae
#2630: Implement PEP 3138.
Georg Brandl <georg@python.org>
parents:
47580
diff
changeset
|
310 static PyObject * |
|
da47e7e135ae
#2630: Implement PEP 3138.
Georg Brandl <georg@python.org>
parents:
47580
diff
changeset
|
311 builtin_ascii(PyObject *self, PyObject *v) |
|
da47e7e135ae
#2630: Implement PEP 3138.
Georg Brandl <georg@python.org>
parents:
47580
diff
changeset
|
312 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
313 return PyObject_ASCII(v); |
|
47611
da47e7e135ae
#2630: Implement PEP 3138.
Georg Brandl <georg@python.org>
parents:
47580
diff
changeset
|
314 } |
|
da47e7e135ae
#2630: Implement PEP 3138.
Georg Brandl <georg@python.org>
parents:
47580
diff
changeset
|
315 |
|
da47e7e135ae
#2630: Implement PEP 3138.
Georg Brandl <georg@python.org>
parents:
47580
diff
changeset
|
316 PyDoc_STRVAR(ascii_doc, |
|
da47e7e135ae
#2630: Implement PEP 3138.
Georg Brandl <georg@python.org>
parents:
47580
diff
changeset
|
317 "ascii(object) -> string\n\ |
|
da47e7e135ae
#2630: Implement PEP 3138.
Georg Brandl <georg@python.org>
parents:
47580
diff
changeset
|
318 \n\ |
|
da47e7e135ae
#2630: Implement PEP 3138.
Georg Brandl <georg@python.org>
parents:
47580
diff
changeset
|
319 As repr(), return a string containing a printable representation of an\n\ |
|
da47e7e135ae
#2630: Implement PEP 3138.
Georg Brandl <georg@python.org>
parents:
47580
diff
changeset
|
320 object, but escape the non-ASCII characters in the string returned by\n\ |
|
da47e7e135ae
#2630: Implement PEP 3138.
Georg Brandl <georg@python.org>
parents:
47580
diff
changeset
|
321 repr() using \\x, \\u or \\U escapes. This generates a string similar\n\ |
|
da47e7e135ae
#2630: Implement PEP 3138.
Georg Brandl <georg@python.org>
parents:
47580
diff
changeset
|
322 to that returned by repr() in Python 2."); |
|
da47e7e135ae
#2630: Implement PEP 3138.
Georg Brandl <georg@python.org>
parents:
47580
diff
changeset
|
323 |
| 8561 | 324 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
325 static PyObject * |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
42071
diff
changeset
|
326 builtin_bin(PyObject *self, PyObject *v) |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
42071
diff
changeset
|
327 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
328 return PyNumber_ToBase(v, 2); |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
42071
diff
changeset
|
329 } |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
42071
diff
changeset
|
330 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
42071
diff
changeset
|
331 PyDoc_STRVAR(bin_doc, |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
42071
diff
changeset
|
332 "bin(number) -> string\n\ |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
42071
diff
changeset
|
333 \n\ |
|
69180
d29277949ad6
Removed 'or long integer' from bin, oct, and hex docstrings.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
68257
diff
changeset
|
334 Return the binary representation of an integer."); |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
42071
diff
changeset
|
335 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
42071
diff
changeset
|
336 |
|
66521
1b77f2eb1606
Issue #10518: Bring back the callable() builtin.
Antoine Pitrou <solipsis@pitrou.net>
parents:
65494
diff
changeset
|
337 static PyObject * |
|
1b77f2eb1606
Issue #10518: Bring back the callable() builtin.
Antoine Pitrou <solipsis@pitrou.net>
parents:
65494
diff
changeset
|
338 builtin_callable(PyObject *self, PyObject *v) |
|
1b77f2eb1606
Issue #10518: Bring back the callable() builtin.
Antoine Pitrou <solipsis@pitrou.net>
parents:
65494
diff
changeset
|
339 { |
|
1b77f2eb1606
Issue #10518: Bring back the callable() builtin.
Antoine Pitrou <solipsis@pitrou.net>
parents:
65494
diff
changeset
|
340 return PyBool_FromLong((long)PyCallable_Check(v)); |
|
1b77f2eb1606
Issue #10518: Bring back the callable() builtin.
Antoine Pitrou <solipsis@pitrou.net>
parents:
65494
diff
changeset
|
341 } |
|
1b77f2eb1606
Issue #10518: Bring back the callable() builtin.
Antoine Pitrou <solipsis@pitrou.net>
parents:
65494
diff
changeset
|
342 |
|
1b77f2eb1606
Issue #10518: Bring back the callable() builtin.
Antoine Pitrou <solipsis@pitrou.net>
parents:
65494
diff
changeset
|
343 PyDoc_STRVAR(callable_doc, |
|
1b77f2eb1606
Issue #10518: Bring back the callable() builtin.
Antoine Pitrou <solipsis@pitrou.net>
parents:
65494
diff
changeset
|
344 "callable(object) -> bool\n\ |
|
1b77f2eb1606
Issue #10518: Bring back the callable() builtin.
Antoine Pitrou <solipsis@pitrou.net>
parents:
65494
diff
changeset
|
345 \n\ |
|
1b77f2eb1606
Issue #10518: Bring back the callable() builtin.
Antoine Pitrou <solipsis@pitrou.net>
parents:
65494
diff
changeset
|
346 Return whether the object is callable (i.e., some kind of function).\n\ |
|
1b77f2eb1606
Issue #10518: Bring back the callable() builtin.
Antoine Pitrou <solipsis@pitrou.net>
parents:
65494
diff
changeset
|
347 Note that classes are callable, as are instances of classes with a\n\ |
|
1b77f2eb1606
Issue #10518: Bring back the callable() builtin.
Antoine Pitrou <solipsis@pitrou.net>
parents:
65494
diff
changeset
|
348 __call__() method."); |
|
1b77f2eb1606
Issue #10518: Bring back the callable() builtin.
Antoine Pitrou <solipsis@pitrou.net>
parents:
65494
diff
changeset
|
349 |
|
1b77f2eb1606
Issue #10518: Bring back the callable() builtin.
Antoine Pitrou <solipsis@pitrou.net>
parents:
65494
diff
changeset
|
350 |
|
45734
e09bc1c5295b
Issue 2186 and 2187. Move filter from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45382
diff
changeset
|
351 typedef struct { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
352 PyObject_HEAD |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
353 PyObject *func; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
354 PyObject *it; |
|
45734
e09bc1c5295b
Issue 2186 and 2187. Move filter from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45382
diff
changeset
|
355 } filterobject; |
|
e09bc1c5295b
Issue 2186 and 2187. Move filter from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45382
diff
changeset
|
356 |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
42071
diff
changeset
|
357 static PyObject * |
|
45734
e09bc1c5295b
Issue 2186 and 2187. Move filter from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45382
diff
changeset
|
358 filter_new(PyTypeObject *type, PyObject *args, PyObject *kwds) |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
359 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
360 PyObject *func, *seq; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
361 PyObject *it; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
362 filterobject *lz; |
|
45734
e09bc1c5295b
Issue 2186 and 2187. Move filter from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45382
diff
changeset
|
363 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
364 if (type == &PyFilter_Type && !_PyArg_NoKeywords("filter()", kwds)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
365 return NULL; |
|
45734
e09bc1c5295b
Issue 2186 and 2187. Move filter from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45382
diff
changeset
|
366 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
367 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
368 return NULL; |
|
45734
e09bc1c5295b
Issue 2186 and 2187. Move filter from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45382
diff
changeset
|
369 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
370 /* Get iterator. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
371 it = PyObject_GetIter(seq); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
372 if (it == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
373 return NULL; |
|
45734
e09bc1c5295b
Issue 2186 and 2187. Move filter from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45382
diff
changeset
|
374 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
375 /* create filterobject structure */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
376 lz = (filterobject *)type->tp_alloc(type, 0); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
377 if (lz == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
378 Py_DECREF(it); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
379 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
380 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
381 Py_INCREF(func); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
382 lz->func = func; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
383 lz->it = it; |
|
45734
e09bc1c5295b
Issue 2186 and 2187. Move filter from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45382
diff
changeset
|
384 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
385 return (PyObject *)lz; |
|
45734
e09bc1c5295b
Issue 2186 and 2187. Move filter from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45382
diff
changeset
|
386 } |
|
e09bc1c5295b
Issue 2186 and 2187. Move filter from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45382
diff
changeset
|
387 |
|
e09bc1c5295b
Issue 2186 and 2187. Move filter from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45382
diff
changeset
|
388 static void |
|
e09bc1c5295b
Issue 2186 and 2187. Move filter from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45382
diff
changeset
|
389 filter_dealloc(filterobject *lz) |
|
e09bc1c5295b
Issue 2186 and 2187. Move filter from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45382
diff
changeset
|
390 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
391 PyObject_GC_UnTrack(lz); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
392 Py_XDECREF(lz->func); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
393 Py_XDECREF(lz->it); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
394 Py_TYPE(lz)->tp_free(lz); |
|
45734
e09bc1c5295b
Issue 2186 and 2187. Move filter from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45382
diff
changeset
|
395 } |
|
e09bc1c5295b
Issue 2186 and 2187. Move filter from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45382
diff
changeset
|
396 |
|
e09bc1c5295b
Issue 2186 and 2187. Move filter from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45382
diff
changeset
|
397 static int |
|
e09bc1c5295b
Issue 2186 and 2187. Move filter from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45382
diff
changeset
|
398 filter_traverse(filterobject *lz, visitproc visit, void *arg) |
|
e09bc1c5295b
Issue 2186 and 2187. Move filter from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45382
diff
changeset
|
399 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
400 Py_VISIT(lz->it); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
401 Py_VISIT(lz->func); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
402 return 0; |
|
45734
e09bc1c5295b
Issue 2186 and 2187. Move filter from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45382
diff
changeset
|
403 } |
|
e09bc1c5295b
Issue 2186 and 2187. Move filter from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45382
diff
changeset
|
404 |
|
e09bc1c5295b
Issue 2186 and 2187. Move filter from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45382
diff
changeset
|
405 static PyObject * |
|
e09bc1c5295b
Issue 2186 and 2187. Move filter from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45382
diff
changeset
|
406 filter_next(filterobject *lz) |
|
e09bc1c5295b
Issue 2186 and 2187. Move filter from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45382
diff
changeset
|
407 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
408 PyObject *item; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
409 PyObject *it = lz->it; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
410 long ok; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
411 PyObject *(*iternext)(PyObject *); |
|
45734
e09bc1c5295b
Issue 2186 and 2187. Move filter from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45382
diff
changeset
|
412 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
413 iternext = *Py_TYPE(it)->tp_iternext; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
414 for (;;) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
415 item = iternext(it); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
416 if (item == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
417 return NULL; |
|
45734
e09bc1c5295b
Issue 2186 and 2187. Move filter from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45382
diff
changeset
|
418 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
419 if (lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
420 ok = PyObject_IsTrue(item); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
421 } else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
422 PyObject *good; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
423 good = PyObject_CallFunctionObjArgs(lz->func, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
424 item, NULL); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
425 if (good == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
426 Py_DECREF(item); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
427 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
428 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
429 ok = PyObject_IsTrue(good); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
430 Py_DECREF(good); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
431 } |
|
78604
56dc7b09f390
Issue #15604: Update uses of PyObject_IsTrue() to check for and handle errors correctly.
Antoine Pitrou <solipsis@pitrou.net>
parents:
77293
diff
changeset
|
432 if (ok > 0) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
433 return item; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
434 Py_DECREF(item); |
|
78604
56dc7b09f390
Issue #15604: Update uses of PyObject_IsTrue() to check for and handle errors correctly.
Antoine Pitrou <solipsis@pitrou.net>
parents:
77293
diff
changeset
|
435 if (ok < 0) |
|
56dc7b09f390
Issue #15604: Update uses of PyObject_IsTrue() to check for and handle errors correctly.
Antoine Pitrou <solipsis@pitrou.net>
parents:
77293
diff
changeset
|
436 return NULL; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
437 } |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
438 } |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
439 |
|
76091
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
440 static PyObject * |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
441 filter_reduce(filterobject *lz) |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
442 { |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
443 return Py_BuildValue("O(OO)", Py_TYPE(lz), lz->func, lz->it); |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
444 } |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
445 |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
446 PyDoc_STRVAR(reduce_doc, "Return state information for pickling."); |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
447 |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
448 static PyMethodDef filter_methods[] = { |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
449 {"__reduce__", (PyCFunction)filter_reduce, METH_NOARGS, reduce_doc}, |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
450 {NULL, NULL} /* sentinel */ |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
451 }; |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
452 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
453 PyDoc_STRVAR(filter_doc, |
|
47097
b2403d470b69
Rename enumerate() kw argument name to "iterable" and fix "sequence"->"iterable" in some docstrings.
Georg Brandl <georg@python.org>
parents:
47080
diff
changeset
|
454 "filter(function or None, iterable) --> filter object\n\ |
|
42142
a53e48be6df9
Merged revisions 56125-56153 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
42084
diff
changeset
|
455 \n\ |
|
47097
b2403d470b69
Rename enumerate() kw argument name to "iterable" and fix "sequence"->"iterable" in some docstrings.
Georg Brandl <georg@python.org>
parents:
47080
diff
changeset
|
456 Return an iterator yielding those items of iterable for which function(item)\n\ |
|
45734
e09bc1c5295b
Issue 2186 and 2187. Move filter from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45382
diff
changeset
|
457 is true. If function is None, return the items that are true."); |
|
e09bc1c5295b
Issue 2186 and 2187. Move filter from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45382
diff
changeset
|
458 |
|
e09bc1c5295b
Issue 2186 and 2187. Move filter from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45382
diff
changeset
|
459 PyTypeObject PyFilter_Type = { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
460 PyVarObject_HEAD_INIT(&PyType_Type, 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
461 "filter", /* tp_name */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
462 sizeof(filterobject), /* tp_basicsize */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
463 0, /* tp_itemsize */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
464 /* methods */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
465 (destructor)filter_dealloc, /* tp_dealloc */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
466 0, /* tp_print */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
467 0, /* tp_getattr */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
468 0, /* tp_setattr */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
469 0, /* tp_reserved */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
470 0, /* tp_repr */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
471 0, /* tp_as_number */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
472 0, /* tp_as_sequence */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
473 0, /* tp_as_mapping */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
474 0, /* tp_hash */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
475 0, /* tp_call */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
476 0, /* tp_str */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
477 PyObject_GenericGetAttr, /* tp_getattro */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
478 0, /* tp_setattro */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
479 0, /* tp_as_buffer */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
480 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
481 Py_TPFLAGS_BASETYPE, /* tp_flags */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
482 filter_doc, /* tp_doc */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
483 (traverseproc)filter_traverse, /* tp_traverse */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
484 0, /* tp_clear */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
485 0, /* tp_richcompare */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
486 0, /* tp_weaklistoffset */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
487 PyObject_SelfIter, /* tp_iter */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
488 (iternextfunc)filter_next, /* tp_iternext */ |
|
76091
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
489 filter_methods, /* tp_methods */ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
490 0, /* tp_members */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
491 0, /* tp_getset */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
492 0, /* tp_base */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
493 0, /* tp_dict */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
494 0, /* tp_descr_get */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
495 0, /* tp_descr_set */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
496 0, /* tp_dictoffset */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
497 0, /* tp_init */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
498 PyType_GenericAlloc, /* tp_alloc */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
499 filter_new, /* tp_new */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
500 PyObject_GC_Del, /* tp_free */ |
|
45734
e09bc1c5295b
Issue 2186 and 2187. Move filter from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45382
diff
changeset
|
501 }; |
|
e09bc1c5295b
Issue 2186 and 2187. Move filter from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45382
diff
changeset
|
502 |
| 8561 | 503 |
|
42817
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42760
diff
changeset
|
504 static PyObject * |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42760
diff
changeset
|
505 builtin_format(PyObject *self, PyObject *args) |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42760
diff
changeset
|
506 { |
|
44273
eb2260dcb365
Fixed #1593 spacing of the builtin_format function is inconsistent. Thanks to Joseph for the fix
Christian Heimes <christian@cheimes.de>
parents:
44158
diff
changeset
|
507 PyObject *value; |
|
45382
7af955843929
Fixes for shared 2.6 code that implements PEP 3101, advanced string
Eric Smith <eric@trueblade.com>
parents:
45086
diff
changeset
|
508 PyObject *format_spec = NULL; |
|
42817
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42760
diff
changeset
|
509 |
|
45382
7af955843929
Fixes for shared 2.6 code that implements PEP 3101, advanced string
Eric Smith <eric@trueblade.com>
parents:
45086
diff
changeset
|
510 if (!PyArg_ParseTuple(args, "O|U:format", &value, &format_spec)) |
| 74259 | 511 return NULL; |
|
42817
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42760
diff
changeset
|
512 |
|
45382
7af955843929
Fixes for shared 2.6 code that implements PEP 3101, advanced string
Eric Smith <eric@trueblade.com>
parents:
45086
diff
changeset
|
513 return PyObject_Format(value, format_spec); |
|
42817
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42760
diff
changeset
|
514 } |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42760
diff
changeset
|
515 |
|
43110
cdb7b9f82cc4
Added test cases for string.Formatter subclassing.
Eric Smith <eric@trueblade.com>
parents:
42899
diff
changeset
|
516 PyDoc_STRVAR(format_doc, |
|
cdb7b9f82cc4
Added test cases for string.Formatter subclassing.
Eric Smith <eric@trueblade.com>
parents:
42899
diff
changeset
|
517 "format(value[, format_spec]) -> string\n\ |
|
cdb7b9f82cc4
Added test cases for string.Formatter subclassing.
Eric Smith <eric@trueblade.com>
parents:
42899
diff
changeset
|
518 \n\ |
|
cdb7b9f82cc4
Added test cases for string.Formatter subclassing.
Eric Smith <eric@trueblade.com>
parents:
42899
diff
changeset
|
519 Returns value.__format__(format_spec)\n\ |
|
cdb7b9f82cc4
Added test cases for string.Formatter subclassing.
Eric Smith <eric@trueblade.com>
parents:
42899
diff
changeset
|
520 format_spec defaults to \"\""); |
|
42817
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42760
diff
changeset
|
521 |
|
41609
92ead87bf984
Add 8-bit chr() back as chr8().
Guido van Rossum <guido@python.org>
parents:
41595
diff
changeset
|
522 static PyObject * |
|
41955
4c5fbe65b7de
Make the name of the C variables match the Python names
Walter Dörwald <walter@livinglogic.de>
parents:
41888
diff
changeset
|
523 builtin_chr(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
|
524 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
525 int x; |
|
11973
8bdc25d22925
Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
526 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
527 if (!PyArg_ParseTuple(args, "i:chr", &x)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
528 return NULL; |
|
18282
f38923ce3c6b
more unicode tweaks: make unichr(0xdddddddd) behave like u"\Udddddddd"
Fredrik Lundh <fredrik@pythonware.com>
parents:
18281
diff
changeset
|
529 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
530 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
|
531 } |
|
8bdc25d22925
Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
532 |
|
73686
59dcb6249034
Remove "#ifdef Py_UNICODE_WIDE": Python is now always wide
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73413
diff
changeset
|
533 PyDoc_STRVAR(chr_doc, |
|
41585
825d966338ea
Rename 'unicode' to 'str' in its tp_name field. Rename 'str' to 'str8'.
Guido van Rossum <guido@python.org>
parents:
41558
diff
changeset
|
534 "chr(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
|
535 \n\ |
|
73686
59dcb6249034
Remove "#ifdef Py_UNICODE_WIDE": Python is now always wide
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73413
diff
changeset
|
536 Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff."); |
|
11973
8bdc25d22925
Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
537 |
|
8bdc25d22925
Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
538 |
|
41595
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
539 static char * |
|
51956
8fe2988cf550
ignore the coding cookie in compile(), exec(), and eval() if the source is a string #4626
Benjamin Peterson <benjamin@python.org>
parents:
51270
diff
changeset
|
540 source_as_string(PyObject *cmd, char *funcname, char *what, PyCompilerFlags *cf) |
|
41595
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
541 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
542 char *str; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
543 Py_ssize_t size; |
|
41595
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
544 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
545 if (PyUnicode_Check(cmd)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
546 cf->cf_flags |= PyCF_IGNORE_COOKIE; |
| 72475 | 547 str = PyUnicode_AsUTF8AndSize(cmd, &size); |
| 548 if (str == NULL) | |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
549 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
550 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
551 else if (!PyObject_CheckReadBuffer(cmd)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
552 PyErr_Format(PyExc_TypeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
553 "%s() arg 1 must be a %s object", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
554 funcname, what); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
555 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
556 } |
| 72475 | 557 else if (PyObject_AsReadBuffer(cmd, (const void **)&str, &size) < 0) { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
558 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
559 } |
| 72475 | 560 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
561 if (strlen(str) != size) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
562 PyErr_SetString(PyExc_TypeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
563 "source code string cannot contain null bytes"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
564 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
565 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
566 return str; |
|
41595
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
567 } |
|
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
568 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
569 static PyObject * |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41501
diff
changeset
|
570 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
|
571 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
572 char *str; |
|
65536
42b84d3188d1
Recorded merge of revisions 85569-85570 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61467
diff
changeset
|
573 PyObject *filename_obj; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
574 char *filename; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
575 char *startstr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
576 int mode = -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
577 int dont_inherit = 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
578 int supplied_flags = 0; |
|
66685
713c6b6ca5ce
Add an "optimize" parameter to compile() to control the optimization level, and provide an interface to it in py_compile, compileall and PyZipFile.
Georg Brandl <georg@python.org>
parents:
66664
diff
changeset
|
579 int optimize = -1; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
580 int is_ast; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
581 PyCompilerFlags cf; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
582 PyObject *cmd; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
583 static char *kwlist[] = {"source", "filename", "mode", "flags", |
|
66685
713c6b6ca5ce
Add an "optimize" parameter to compile() to control the optimization level, and provide an interface to it in py_compile, compileall and PyZipFile.
Georg Brandl <georg@python.org>
parents:
66664
diff
changeset
|
584 "dont_inherit", "optimize", NULL}; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
585 int start[] = {Py_file_input, Py_eval_input, Py_single_input}; |
|
65536
42b84d3188d1
Recorded merge of revisions 85569-85570 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61467
diff
changeset
|
586 PyObject *result; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
587 |
|
66685
713c6b6ca5ce
Add an "optimize" parameter to compile() to control the optimization level, and provide an interface to it in py_compile, compileall and PyZipFile.
Georg Brandl <georg@python.org>
parents:
66664
diff
changeset
|
588 if (!PyArg_ParseTupleAndKeywords(args, kwds, "OO&s|iii:compile", kwlist, |
|
65536
42b84d3188d1
Recorded merge of revisions 85569-85570 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61467
diff
changeset
|
589 &cmd, |
|
42b84d3188d1
Recorded merge of revisions 85569-85570 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61467
diff
changeset
|
590 PyUnicode_FSConverter, &filename_obj, |
|
42b84d3188d1
Recorded merge of revisions 85569-85570 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61467
diff
changeset
|
591 &startstr, &supplied_flags, |
|
66685
713c6b6ca5ce
Add an "optimize" parameter to compile() to control the optimization level, and provide an interface to it in py_compile, compileall and PyZipFile.
Georg Brandl <georg@python.org>
parents:
66664
diff
changeset
|
592 &dont_inherit, &optimize)) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
593 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
|
594 |
|
65536
42b84d3188d1
Recorded merge of revisions 85569-85570 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61467
diff
changeset
|
595 filename = PyBytes_AS_STRING(filename_obj); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
596 cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8; |
|
27781
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
597 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
598 if (supplied_flags & |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
599 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
600 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
601 PyErr_SetString(PyExc_ValueError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
602 "compile(): unrecognised flags"); |
|
65536
42b84d3188d1
Recorded merge of revisions 85569-85570 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61467
diff
changeset
|
603 goto error; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
604 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
605 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */ |
|
19355
d5acff178ad5
A fiddled version of the rest of Michael Hudson's SF patch
Tim Peters <tim.peters@gmail.com>
parents:
19343
diff
changeset
|
606 |
|
66685
713c6b6ca5ce
Add an "optimize" parameter to compile() to control the optimization level, and provide an interface to it in py_compile, compileall and PyZipFile.
Georg Brandl <georg@python.org>
parents:
66664
diff
changeset
|
607 if (optimize < -1 || optimize > 2) { |
|
713c6b6ca5ce
Add an "optimize" parameter to compile() to control the optimization level, and provide an interface to it in py_compile, compileall and PyZipFile.
Georg Brandl <georg@python.org>
parents:
66664
diff
changeset
|
608 PyErr_SetString(PyExc_ValueError, |
|
713c6b6ca5ce
Add an "optimize" parameter to compile() to control the optimization level, and provide an interface to it in py_compile, compileall and PyZipFile.
Georg Brandl <georg@python.org>
parents:
66664
diff
changeset
|
609 "compile(): invalid optimize value"); |
|
713c6b6ca5ce
Add an "optimize" parameter to compile() to control the optimization level, and provide an interface to it in py_compile, compileall and PyZipFile.
Georg Brandl <georg@python.org>
parents:
66664
diff
changeset
|
610 goto error; |
|
713c6b6ca5ce
Add an "optimize" parameter to compile() to control the optimization level, and provide an interface to it in py_compile, compileall and PyZipFile.
Georg Brandl <georg@python.org>
parents:
66664
diff
changeset
|
611 } |
|
713c6b6ca5ce
Add an "optimize" parameter to compile() to control the optimization level, and provide an interface to it in py_compile, compileall and PyZipFile.
Georg Brandl <georg@python.org>
parents:
66664
diff
changeset
|
612 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
613 if (!dont_inherit) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
614 PyEval_MergeCompilerFlags(&cf); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
615 } |
|
46208
ea75b12fe8e7
Merged revisions 62004 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
45738
diff
changeset
|
616 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
617 if (strcmp(startstr, "exec") == 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
618 mode = 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
619 else if (strcmp(startstr, "eval") == 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
620 mode = 1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
621 else if (strcmp(startstr, "single") == 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
622 mode = 2; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
623 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
624 PyErr_SetString(PyExc_ValueError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
625 "compile() arg 3 must be 'exec', 'eval' or 'single'"); |
|
65536
42b84d3188d1
Recorded merge of revisions 85569-85570 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61467
diff
changeset
|
626 goto error; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
627 } |
|
46227
b2d93a960b98
Merged revisions 62039-62042 via svnmerge from
Neal Norwitz <nnorwitz@gmail.com>
parents:
46208
diff
changeset
|
628 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
629 is_ast = PyAST_Check(cmd); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
630 if (is_ast == -1) |
|
65536
42b84d3188d1
Recorded merge of revisions 85569-85570 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61467
diff
changeset
|
631 goto error; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
632 if (is_ast) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
633 if (supplied_flags & PyCF_ONLY_AST) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
634 Py_INCREF(cmd); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
635 result = cmd; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
636 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
637 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
638 PyArena *arena; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
639 mod_ty mod; |
|
46208
ea75b12fe8e7
Merged revisions 62004 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
45738
diff
changeset
|
640 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
641 arena = PyArena_New(); |
|
78674
d5ee1a06101f
Issue #15741: Fix potential NULL dereference. Found by Coverity.
Stefan Krah <skrah@bytereef.org>
parents:
78604
diff
changeset
|
642 if (arena == NULL) |
|
d5ee1a06101f
Issue #15741: Fix potential NULL dereference. Found by Coverity.
Stefan Krah <skrah@bytereef.org>
parents:
78604
diff
changeset
|
643 goto error; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
644 mod = PyAST_obj2mod(cmd, arena, mode); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
645 if (mod == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
646 PyArena_Free(arena); |
|
65536
42b84d3188d1
Recorded merge of revisions 85569-85570 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61467
diff
changeset
|
647 goto error; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
648 } |
|
71795
4090dfdf91a4
add a AST validator (closes #12575)
Benjamin Peterson <benjamin@python.org>
parents:
71620
diff
changeset
|
649 if (!PyAST_Validate(mod)) { |
|
4090dfdf91a4
add a AST validator (closes #12575)
Benjamin Peterson <benjamin@python.org>
parents:
71620
diff
changeset
|
650 PyArena_Free(arena); |
|
4090dfdf91a4
add a AST validator (closes #12575)
Benjamin Peterson <benjamin@python.org>
parents:
71620
diff
changeset
|
651 goto error; |
|
4090dfdf91a4
add a AST validator (closes #12575)
Benjamin Peterson <benjamin@python.org>
parents:
71620
diff
changeset
|
652 } |
|
66685
713c6b6ca5ce
Add an "optimize" parameter to compile() to control the optimization level, and provide an interface to it in py_compile, compileall and PyZipFile.
Georg Brandl <georg@python.org>
parents:
66664
diff
changeset
|
653 result = (PyObject*)PyAST_CompileEx(mod, filename, |
|
713c6b6ca5ce
Add an "optimize" parameter to compile() to control the optimization level, and provide an interface to it in py_compile, compileall and PyZipFile.
Georg Brandl <georg@python.org>
parents:
66664
diff
changeset
|
654 &cf, optimize, arena); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
655 PyArena_Free(arena); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
656 } |
|
65536
42b84d3188d1
Recorded merge of revisions 85569-85570 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61467
diff
changeset
|
657 goto finally; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
658 } |
|
46208
ea75b12fe8e7
Merged revisions 62004 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
45738
diff
changeset
|
659 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
660 str = source_as_string(cmd, "compile", "string, bytes, AST or code", &cf); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
661 if (str == NULL) |
|
65536
42b84d3188d1
Recorded merge of revisions 85569-85570 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61467
diff
changeset
|
662 goto error; |
|
42b84d3188d1
Recorded merge of revisions 85569-85570 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61467
diff
changeset
|
663 |
|
66685
713c6b6ca5ce
Add an "optimize" parameter to compile() to control the optimization level, and provide an interface to it in py_compile, compileall and PyZipFile.
Georg Brandl <georg@python.org>
parents:
66664
diff
changeset
|
664 result = Py_CompileStringExFlags(str, filename, start[mode], &cf, optimize); |
|
65536
42b84d3188d1
Recorded merge of revisions 85569-85570 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61467
diff
changeset
|
665 goto finally; |
|
46208
ea75b12fe8e7
Merged revisions 62004 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
45738
diff
changeset
|
666 |
|
65536
42b84d3188d1
Recorded merge of revisions 85569-85570 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61467
diff
changeset
|
667 error: |
|
42b84d3188d1
Recorded merge of revisions 85569-85570 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61467
diff
changeset
|
668 result = NULL; |
|
42b84d3188d1
Recorded merge of revisions 85569-85570 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61467
diff
changeset
|
669 finally: |
|
42b84d3188d1
Recorded merge of revisions 85569-85570 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61467
diff
changeset
|
670 Py_DECREF(filename_obj); |
|
42b84d3188d1
Recorded merge of revisions 85569-85570 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61467
diff
changeset
|
671 return result; |
|
1263
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
672 } |
|
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
673 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
674 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
|
675 "compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\ |
| 8561 | 676 \n\ |
| 677 Compile the source string (a Python module, statement or expression)\n\ | |
|
39782
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
678 into a code object that can be executed by exec() or eval().\n\ |
| 8561 | 679 The filename will be used for run-time error messages.\n\ |
| 680 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
|
681 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
|
682 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
|
683 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
|
684 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
|
685 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
|
686 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
|
687 in addition to any features explicitly specified."); |
| 8561 | 688 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
689 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
690 builtin_dir(PyObject *self, PyObject *args) |
| 86 | 691 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
692 PyObject *arg = NULL; |
|
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
|
693 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
694 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
695 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
696 return PyObject_Dir(arg); |
| 86 | 697 } |
| 698 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
699 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
|
700 "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
|
701 "\n" |
|
41107
cf452027073e
Patch #1591665: implement the __dir__() special function lookup in PyObject_Dir.
Georg Brandl <georg@python.org>
parents:
40933
diff
changeset
|
702 "If called without an argument, return the names in the current scope.\n" |
|
cf452027073e
Patch #1591665: implement the __dir__() special function lookup in PyObject_Dir.
Georg Brandl <georg@python.org>
parents:
40933
diff
changeset
|
703 "Else, return an alphabetized list of names comprising (some of) the attributes\n" |
|
cf452027073e
Patch #1591665: implement the __dir__() special function lookup in PyObject_Dir.
Georg Brandl <georg@python.org>
parents:
40933
diff
changeset
|
704 "of the given object, and of attributes reachable from it.\n" |
|
cf452027073e
Patch #1591665: implement the __dir__() special function lookup in PyObject_Dir.
Georg Brandl <georg@python.org>
parents:
40933
diff
changeset
|
705 "If the object supplies a method named __dir__, it will be used; otherwise\n" |
|
cf452027073e
Patch #1591665: implement the __dir__() special function lookup in PyObject_Dir.
Georg Brandl <georg@python.org>
parents:
40933
diff
changeset
|
706 "the default dir() logic is used and returns:\n" |
|
cf452027073e
Patch #1591665: implement the __dir__() special function lookup in PyObject_Dir.
Georg Brandl <georg@python.org>
parents:
40933
diff
changeset
|
707 " for a module object: the module's attributes.\n" |
|
cf452027073e
Patch #1591665: implement the __dir__() special function lookup in PyObject_Dir.
Georg Brandl <georg@python.org>
parents:
40933
diff
changeset
|
708 " for a class object: its attributes, and recursively the attributes\n" |
|
cf452027073e
Patch #1591665: implement the __dir__() special function lookup in PyObject_Dir.
Georg Brandl <georg@python.org>
parents:
40933
diff
changeset
|
709 " of its bases.\n" |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41501
diff
changeset
|
710 " for any other object: its attributes, its class's attributes, and\n" |
|
41107
cf452027073e
Patch #1591665: implement the __dir__() special function lookup in PyObject_Dir.
Georg Brandl <georg@python.org>
parents:
40933
diff
changeset
|
711 " recursively the attributes of its class's base classes."); |
| 8561 | 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_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
|
715 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
716 PyObject *v, *w; |
|
2087
65146b52f16b
* Python/bltinmodule.c: restructured coerce(), divmod(), pow() to
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
717 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
718 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
719 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
720 return PyNumber_Divmod(v, w); |
| 86 | 721 } |
| 722 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
723 PyDoc_STRVAR(divmod_doc, |
| 8561 | 724 "divmod(x, y) -> (div, mod)\n\ |
| 725 \n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
726 Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x."); |
| 8561 | 727 |
| 728 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
729 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
730 builtin_eval(PyObject *self, PyObject *args) |
| 86 | 731 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
732 PyObject *cmd, *result, *tmp = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
733 PyObject *globals = Py_None, *locals = Py_None; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
734 char *str; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
735 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
|
736 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
737 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
738 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
739 if (locals != Py_None && !PyMapping_Check(locals)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
740 PyErr_SetString(PyExc_TypeError, "locals must be a mapping"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
741 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
742 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
743 if (globals != Py_None && !PyDict_Check(globals)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
744 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ? |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
745 "globals must be a real dict; try eval(expr, {}, mapping)" |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
746 : "globals must be a dict"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
747 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
748 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
749 if (globals == Py_None) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
750 globals = PyEval_GetGlobals(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
751 if (locals == Py_None) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
752 locals = PyEval_GetLocals(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
753 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
754 else if (locals == Py_None) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
755 locals = globals; |
|
19357
be9b50704e4c
Fix for bug [#452230] future division isn't propagated.
Tim Peters <tim.peters@gmail.com>
parents:
19355
diff
changeset
|
756 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
757 if (globals == NULL || locals == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
758 PyErr_SetString(PyExc_TypeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
759 "eval must be given globals and locals " |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
760 "when called without a frame"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
761 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
762 } |
|
35567
fa0881fd49b7
bug [ 868706 ] Calling builtin function 'eval' from C causes seg fault.
Georg Brandl <georg@python.org>
parents:
35500
diff
changeset
|
763 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
764 if (PyDict_GetItemString(globals, "__builtins__") == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
765 if (PyDict_SetItemString(globals, "__builtins__", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
766 PyEval_GetBuiltins()) != 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
767 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
768 } |
|
19357
be9b50704e4c
Fix for bug [#452230] future division isn't propagated.
Tim Peters <tim.peters@gmail.com>
parents:
19355
diff
changeset
|
769 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
770 if (PyCode_Check(cmd)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
771 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
772 PyErr_SetString(PyExc_TypeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
773 "code object passed to eval() may not contain free variables"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
774 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
775 } |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
66556
diff
changeset
|
776 return PyEval_EvalCode(cmd, globals, locals); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
777 } |
|
19357
be9b50704e4c
Fix for bug [#452230] future division isn't propagated.
Tim Peters <tim.peters@gmail.com>
parents:
19355
diff
changeset
|
778 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
779 cf.cf_flags = PyCF_SOURCE_IS_UTF8; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
780 str = source_as_string(cmd, "eval", "string, bytes or code", &cf); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
781 if (str == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
782 return NULL; |
|
27781
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
783 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
784 while (*str == ' ' || *str == '\t') |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
785 str++; |
|
19357
be9b50704e4c
Fix for bug [#452230] future division isn't propagated.
Tim Peters <tim.peters@gmail.com>
parents:
19355
diff
changeset
|
786 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
787 (void)PyEval_MergeCompilerFlags(&cf); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
788 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
789 Py_XDECREF(tmp); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
790 return result; |
| 86 | 791 } |
| 792 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
793 PyDoc_STRVAR(eval_doc, |
| 8561 | 794 "eval(source[, globals[, locals]]) -> value\n\ |
| 795 \n\ | |
| 796 Evaluate the source in the context of globals and locals.\n\ | |
| 797 The source may be a string representing a Python expression\n\ | |
| 798 or a code object as returned by compile().\n\ | |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40411
diff
changeset
|
799 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
|
800 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
|
801 If only globals is given, locals defaults to it.\n"); |
| 8561 | 802 |
|
39782
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
803 static PyObject * |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
804 builtin_exec(PyObject *self, PyObject *args) |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
805 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
806 PyObject *v; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
807 PyObject *prog, *globals = Py_None, *locals = Py_None; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
808 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
809 if (!PyArg_UnpackTuple(args, "exec", 1, 3, &prog, &globals, &locals)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
810 return NULL; |
|
39782
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
811 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
812 if (globals == Py_None) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
813 globals = PyEval_GetGlobals(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
814 if (locals == Py_None) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
815 locals = PyEval_GetLocals(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
816 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
817 if (!globals || !locals) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
818 PyErr_SetString(PyExc_SystemError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
819 "globals and locals cannot be NULL"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
820 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
821 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
822 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
823 else if (locals == Py_None) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
824 locals = globals; |
|
48883
f27ccfdea834
#3706: fix error message for wrong exec() argument type. R=Guido.
Georg Brandl <georg@python.org>
parents:
48660
diff
changeset
|
825 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
826 if (!PyDict_Check(globals)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
827 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
828 globals->ob_type->tp_name); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
829 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
830 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
831 if (!PyMapping_Check(locals)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
832 PyErr_Format(PyExc_TypeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
833 "arg 3 must be a mapping or None, not %.100s", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
834 locals->ob_type->tp_name); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
835 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
836 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
837 if (PyDict_GetItemString(globals, "__builtins__") == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
838 if (PyDict_SetItemString(globals, "__builtins__", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
839 PyEval_GetBuiltins()) != 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
840 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
841 } |
|
39782
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
842 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
843 if (PyCode_Check(prog)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
844 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
845 PyErr_SetString(PyExc_TypeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
846 "code object passed to exec() may not " |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
847 "contain free variables"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
848 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
849 } |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
66556
diff
changeset
|
850 v = PyEval_EvalCode(prog, globals, locals); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
851 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
852 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
853 char *str; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
854 PyCompilerFlags cf; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
855 cf.cf_flags = PyCF_SOURCE_IS_UTF8; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
856 str = source_as_string(prog, "exec", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
857 "string, bytes or code", &cf); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
858 if (str == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
859 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
860 if (PyEval_MergeCompilerFlags(&cf)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
861 v = PyRun_StringFlags(str, Py_file_input, globals, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
862 locals, &cf); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
863 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
864 v = PyRun_String(str, Py_file_input, globals, locals); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
865 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
866 if (v == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
867 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
868 Py_DECREF(v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
869 Py_RETURN_NONE; |
|
39782
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
870 } |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
871 |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
872 PyDoc_STRVAR(exec_doc, |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
873 "exec(object[, globals[, locals]])\n\ |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
874 \n\ |
|
57794
ed4d5cd47ee9
Merged revisions 76902 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57677
diff
changeset
|
875 Read and execute code from an object, which can be a string or a code\n\ |
|
50586
1146b7b0d518
#4826 exec() doesn't take a file object anymore
Benjamin Peterson <benjamin@python.org>
parents:
50076
diff
changeset
|
876 object.\n\ |
|
39782
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
877 The globals and locals are dictionaries, defaulting to the current\n\ |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
878 globals and locals. If only globals is given, locals defaults to it."); |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
879 |
| 8561 | 880 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
881 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
882 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
|
883 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
884 PyObject *v, *result, *dflt = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
885 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
|
886 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
887 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
888 return NULL; |
|
42013
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
889 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
890 if (!PyUnicode_Check(name)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
891 PyErr_SetString(PyExc_TypeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
892 "getattr(): attribute name must be string"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
893 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
894 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
895 result = PyObject_GetAttr(v, name); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
896 if (result == NULL && dflt != NULL && |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
897 PyErr_ExceptionMatches(PyExc_AttributeError)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
898 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
899 PyErr_Clear(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
900 Py_INCREF(dflt); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
901 result = dflt; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
902 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
903 return result; |
|
1257
1cabc2b6c970
* Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents:
1252
diff
changeset
|
904 } |
|
1cabc2b6c970
* Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents:
1252
diff
changeset
|
905 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
906 PyDoc_STRVAR(getattr_doc, |
|
8581
221667f89064
Experimental feature: add default argument to getattr().
Guido van Rossum <guido@python.org>
parents:
8561
diff
changeset
|
907 "getattr(object, name[, default]) -> value\n\ |
| 8561 | 908 \n\ |
|
8581
221667f89064
Experimental feature: add default argument to getattr().
Guido van Rossum <guido@python.org>
parents:
8561
diff
changeset
|
909 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
|
910 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
|
911 exist; without it, an exception is raised in that case."); |
| 8561 | 912 |
| 913 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
914 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
|
915 builtin_globals(PyObject *self) |
|
2808
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
916 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
917 PyObject *d; |
|
2808
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
918 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
919 d = PyEval_GetGlobals(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
920 Py_XINCREF(d); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
921 return d; |
|
2808
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
922 } |
|
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
923 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
924 PyDoc_STRVAR(globals_doc, |
| 8561 | 925 "globals() -> dictionary\n\ |
| 926 \n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
927 Return the dictionary containing the current scope's global variables."); |
| 8561 | 928 |
| 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_hasattr(PyObject *self, PyObject *args) |
|
1257
1cabc2b6c970
* Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents:
1252
diff
changeset
|
932 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
933 PyObject *v; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
934 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
|
935 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
936 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
937 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
938 if (!PyUnicode_Check(name)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
939 PyErr_SetString(PyExc_TypeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
940 "hasattr(): attribute name must be string"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
941 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
942 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
943 v = PyObject_GetAttr(v, name); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
944 if (v == NULL) { |
|
64259
2de9d4457082
only catch AttributeError in hasattr() #9666
Benjamin Peterson <benjamin@python.org>
parents:
61718
diff
changeset
|
945 if (PyErr_ExceptionMatches(PyExc_AttributeError)) { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
946 PyErr_Clear(); |
|
64259
2de9d4457082
only catch AttributeError in hasattr() #9666
Benjamin Peterson <benjamin@python.org>
parents:
61718
diff
changeset
|
947 Py_RETURN_FALSE; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
948 } |
|
64259
2de9d4457082
only catch AttributeError in hasattr() #9666
Benjamin Peterson <benjamin@python.org>
parents:
61718
diff
changeset
|
949 return NULL; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
950 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
951 Py_DECREF(v); |
|
64259
2de9d4457082
only catch AttributeError in hasattr() #9666
Benjamin Peterson <benjamin@python.org>
parents:
61718
diff
changeset
|
952 Py_RETURN_TRUE; |
|
644
59f9325bb8ec
Added getattr and setattr built-in functions.
Guido van Rossum <guido@python.org>
parents:
606
diff
changeset
|
953 } |
|
59f9325bb8ec
Added getattr and setattr built-in functions.
Guido van Rossum <guido@python.org>
parents:
606
diff
changeset
|
954 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
955 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
|
956 "hasattr(object, name) -> bool\n\ |
| 8561 | 957 \n\ |
| 958 Return whether the object has an attribute with the given name.\n\ | |
|
64259
2de9d4457082
only catch AttributeError in hasattr() #9666
Benjamin Peterson <benjamin@python.org>
parents:
61718
diff
changeset
|
959 (This is done by calling getattr(object, name) and catching AttributeError.)"); |
| 8561 | 960 |
| 961 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
962 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
|
963 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
|
964 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
965 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
|
966 } |
|
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
967 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
968 PyDoc_STRVAR(id_doc, |
| 8561 | 969 "id(object) -> integer\n\ |
| 970 \n\ | |
| 971 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
|
972 simultaneously existing objects. (Hint: it's the object's memory address.)"); |
| 8561 | 973 |
| 974 | |
|
45735
7adaab64eb72
Issues 2186 and 2187. Move map() from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45734
diff
changeset
|
975 /* map object ************************************************************/ |
|
7adaab64eb72
Issues 2186 and 2187. Move map() from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45734
diff
changeset
|
976 |
|
7adaab64eb72
Issues 2186 and 2187. Move map() from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45734
diff
changeset
|
977 typedef struct { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
978 PyObject_HEAD |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
979 PyObject *iters; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
980 PyObject *func; |
|
45735
7adaab64eb72
Issues 2186 and 2187. Move map() from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45734
diff
changeset
|
981 } mapobject; |
|
7adaab64eb72
Issues 2186 and 2187. Move map() from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45734
diff
changeset
|
982 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
983 static PyObject * |
|
45735
7adaab64eb72
Issues 2186 and 2187. Move map() from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45734
diff
changeset
|
984 map_new(PyTypeObject *type, PyObject *args, PyObject *kwds) |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
985 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
986 PyObject *it, *iters, *func; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
987 mapobject *lz; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
988 Py_ssize_t numargs, i; |
|
45735
7adaab64eb72
Issues 2186 and 2187. Move map() from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45734
diff
changeset
|
989 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
990 if (type == &PyMap_Type && !_PyArg_NoKeywords("map()", kwds)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
991 return NULL; |
|
45735
7adaab64eb72
Issues 2186 and 2187. Move map() from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45734
diff
changeset
|
992 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
993 numargs = PyTuple_Size(args); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
994 if (numargs < 2) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
995 PyErr_SetString(PyExc_TypeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
996 "map() must have at least two arguments."); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
997 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
998 } |
|
45735
7adaab64eb72
Issues 2186 and 2187. Move map() from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45734
diff
changeset
|
999 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1000 iters = PyTuple_New(numargs-1); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1001 if (iters == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1002 return NULL; |
|
45735
7adaab64eb72
Issues 2186 and 2187. Move map() from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45734
diff
changeset
|
1003 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1004 for (i=1 ; i<numargs ; i++) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1005 /* Get iterator. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1006 it = PyObject_GetIter(PyTuple_GET_ITEM(args, i)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1007 if (it == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1008 Py_DECREF(iters); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1009 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1010 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1011 PyTuple_SET_ITEM(iters, i-1, it); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1012 } |
|
45735
7adaab64eb72
Issues 2186 and 2187. Move map() from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45734
diff
changeset
|
1013 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1014 /* create mapobject structure */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1015 lz = (mapobject *)type->tp_alloc(type, 0); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1016 if (lz == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1017 Py_DECREF(iters); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1018 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1019 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1020 lz->iters = iters; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1021 func = PyTuple_GET_ITEM(args, 0); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1022 Py_INCREF(func); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1023 lz->func = func; |
|
45735
7adaab64eb72
Issues 2186 and 2187. Move map() from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45734
diff
changeset
|
1024 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1025 return (PyObject *)lz; |
|
45735
7adaab64eb72
Issues 2186 and 2187. Move map() from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45734
diff
changeset
|
1026 } |
|
7adaab64eb72
Issues 2186 and 2187. Move map() from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45734
diff
changeset
|
1027 |
|
7adaab64eb72
Issues 2186 and 2187. Move map() from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45734
diff
changeset
|
1028 static void |
|
7adaab64eb72
Issues 2186 and 2187. Move map() from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45734
diff
changeset
|
1029 map_dealloc(mapobject *lz) |
|
7adaab64eb72
Issues 2186 and 2187. Move map() from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45734
diff
changeset
|
1030 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1031 PyObject_GC_UnTrack(lz); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1032 Py_XDECREF(lz->iters); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1033 Py_XDECREF(lz->func); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1034 Py_TYPE(lz)->tp_free(lz); |
|
45735
7adaab64eb72
Issues 2186 and 2187. Move map() from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45734
diff
changeset
|
1035 } |
|
7adaab64eb72
Issues 2186 and 2187. Move map() from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45734
diff
changeset
|
1036 |
|
7adaab64eb72
Issues 2186 and 2187. Move map() from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45734
diff
changeset
|
1037 static int |
|
7adaab64eb72
Issues 2186 and 2187. Move map() from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45734
diff
changeset
|
1038 map_traverse(mapobject *lz, visitproc visit, void *arg) |
|
7adaab64eb72
Issues 2186 and 2187. Move map() from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45734
diff
changeset
|
1039 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1040 Py_VISIT(lz->iters); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1041 Py_VISIT(lz->func); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1042 return 0; |
|
45735
7adaab64eb72
Issues 2186 and 2187. Move map() from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45734
diff
changeset
|
1043 } |
|
7adaab64eb72
Issues 2186 and 2187. Move map() from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45734
diff
changeset
|
1044 |
|
7adaab64eb72
Issues 2186 and 2187. Move map() from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45734
diff
changeset
|
1045 static PyObject * |
|
7adaab64eb72
Issues 2186 and 2187. Move map() from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45734
diff
changeset
|
1046 map_next(mapobject *lz) |
|
7adaab64eb72
Issues 2186 and 2187. Move map() from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45734
diff
changeset
|
1047 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1048 PyObject *val; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1049 PyObject *argtuple; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1050 PyObject *result; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1051 Py_ssize_t numargs, i; |
|
45735
7adaab64eb72
Issues 2186 and 2187. Move map() from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45734
diff
changeset
|
1052 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1053 numargs = PyTuple_Size(lz->iters); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1054 argtuple = PyTuple_New(numargs); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1055 if (argtuple == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1056 return NULL; |
|
45735
7adaab64eb72
Issues 2186 and 2187. Move map() from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45734
diff
changeset
|
1057 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1058 for (i=0 ; i<numargs ; i++) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1059 val = PyIter_Next(PyTuple_GET_ITEM(lz->iters, i)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1060 if (val == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1061 Py_DECREF(argtuple); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1062 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1063 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1064 PyTuple_SET_ITEM(argtuple, i, val); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1065 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1066 result = PyObject_Call(lz->func, argtuple, NULL); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1067 Py_DECREF(argtuple); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1068 return result; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1069 } |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1070 |
|
76091
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
1071 static PyObject * |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
1072 map_reduce(mapobject *lz) |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
1073 { |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
1074 Py_ssize_t numargs = PyTuple_GET_SIZE(lz->iters); |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
1075 PyObject *args = PyTuple_New(numargs+1); |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
1076 Py_ssize_t i; |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
1077 if (args == NULL) |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
1078 return NULL; |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
1079 Py_INCREF(lz->func); |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
1080 PyTuple_SET_ITEM(args, 0, lz->func); |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
1081 for (i = 0; i<numargs; i++){ |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
1082 PyObject *it = PyTuple_GET_ITEM(lz->iters, i); |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
1083 Py_INCREF(it); |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
1084 PyTuple_SET_ITEM(args, i+1, it); |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
1085 } |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
1086 |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
1087 return Py_BuildValue("ON", Py_TYPE(lz), args); |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
1088 } |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
1089 |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
1090 static PyMethodDef map_methods[] = { |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
1091 {"__reduce__", (PyCFunction)map_reduce, METH_NOARGS, reduce_doc}, |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
1092 {NULL, NULL} /* sentinel */ |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
1093 }; |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
1094 |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
1095 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1096 PyDoc_STRVAR(map_doc, |
|
45735
7adaab64eb72
Issues 2186 and 2187. Move map() from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45734
diff
changeset
|
1097 "map(func, *iterables) --> map object\n\ |
| 8561 | 1098 \n\ |
|
45735
7adaab64eb72
Issues 2186 and 2187. Move map() from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45734
diff
changeset
|
1099 Make an iterator that computes the function using arguments from\n\ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1100 each of the iterables. Stops when the shortest iterable is exhausted."); |
| 8561 | 1101 |
|
45735
7adaab64eb72
Issues 2186 and 2187. Move map() from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45734
diff
changeset
|
1102 PyTypeObject PyMap_Type = { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1103 PyVarObject_HEAD_INIT(&PyType_Type, 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1104 "map", /* tp_name */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1105 sizeof(mapobject), /* tp_basicsize */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1106 0, /* tp_itemsize */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1107 /* methods */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1108 (destructor)map_dealloc, /* tp_dealloc */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1109 0, /* tp_print */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1110 0, /* tp_getattr */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1111 0, /* tp_setattr */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1112 0, /* tp_reserved */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1113 0, /* tp_repr */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1114 0, /* tp_as_number */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1115 0, /* tp_as_sequence */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1116 0, /* tp_as_mapping */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1117 0, /* tp_hash */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1118 0, /* tp_call */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1119 0, /* tp_str */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1120 PyObject_GenericGetAttr, /* tp_getattro */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1121 0, /* tp_setattro */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1122 0, /* tp_as_buffer */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1123 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1124 Py_TPFLAGS_BASETYPE, /* tp_flags */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1125 map_doc, /* tp_doc */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1126 (traverseproc)map_traverse, /* tp_traverse */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1127 0, /* tp_clear */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1128 0, /* tp_richcompare */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1129 0, /* tp_weaklistoffset */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1130 PyObject_SelfIter, /* tp_iter */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1131 (iternextfunc)map_next, /* tp_iternext */ |
|
76091
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
1132 map_methods, /* tp_methods */ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1133 0, /* tp_members */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1134 0, /* tp_getset */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1135 0, /* tp_base */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1136 0, /* tp_dict */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1137 0, /* tp_descr_get */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1138 0, /* tp_descr_set */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1139 0, /* tp_dictoffset */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1140 0, /* tp_init */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1141 PyType_GenericAlloc, /* tp_alloc */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1142 map_new, /* tp_new */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1143 PyObject_GC_Del, /* tp_free */ |
|
45735
7adaab64eb72
Issues 2186 and 2187. Move map() from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
45734
diff
changeset
|
1144 }; |
| 8561 | 1145 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1146 static PyObject * |
|
41501
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1147 builtin_next(PyObject *self, PyObject *args) |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1148 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1149 PyObject *it, *res; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1150 PyObject *def = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1151 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1152 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1153 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1154 if (!PyIter_Check(it)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1155 PyErr_Format(PyExc_TypeError, |
|
73413
bbc929bc2224
quote the type name for improved readability
Philip Jenvey <pjenvey@underboss.org>
parents:
73393
diff
changeset
|
1156 "'%.200s' object is not an iterator", |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1157 it->ob_type->tp_name); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1158 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1159 } |
|
41501
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1160 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1161 res = (*it->ob_type->tp_iternext)(it); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1162 if (res != NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1163 return res; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1164 } else if (def != NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1165 if (PyErr_Occurred()) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1166 if(!PyErr_ExceptionMatches(PyExc_StopIteration)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1167 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1168 PyErr_Clear(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1169 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1170 Py_INCREF(def); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1171 return def; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1172 } else if (PyErr_Occurred()) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1173 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1174 } else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1175 PyErr_SetNone(PyExc_StopIteration); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1176 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1177 } |
|
41501
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1178 } |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1179 |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1180 PyDoc_STRVAR(next_doc, |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1181 "next(iterator[, default])\n\ |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1182 \n\ |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1183 Return the next item from the iterator. If default is given and the iterator\n\ |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1184 is exhausted, it is returned instead of raising StopIteration."); |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1185 |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1186 |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1187 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
1188 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
|
1189 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1190 PyObject *v; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1191 PyObject *name; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1192 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
|
1193 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1194 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1195 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1196 if (PyObject_SetAttr(v, name, value) != 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1197 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1198 Py_INCREF(Py_None); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1199 return Py_None; |
|
644
59f9325bb8ec
Added getattr and setattr built-in functions.
Guido van Rossum <guido@python.org>
parents:
606
diff
changeset
|
1200 } |
|
59f9325bb8ec
Added getattr and setattr built-in functions.
Guido van Rossum <guido@python.org>
parents:
606
diff
changeset
|
1201 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1202 PyDoc_STRVAR(setattr_doc, |
| 8561 | 1203 "setattr(object, name, value)\n\ |
| 1204 \n\ | |
| 1205 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
|
1206 ``x.y = v''."); |
| 8561 | 1207 |
| 1208 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1209 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
1210 builtin_delattr(PyObject *self, PyObject *args) |
| 1843 | 1211 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1212 PyObject *v; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1213 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
|
1214 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1215 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1216 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1217 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1218 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1219 Py_INCREF(Py_None); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1220 return Py_None; |
| 1843 | 1221 } |
| 1222 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1223 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
|
1224 "delattr(object, name)\n\ |
| 8561 | 1225 \n\ |
| 1226 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
|
1227 ``del x.y''."); |
| 8561 | 1228 |
| 1229 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1230 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
|
1231 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
|
1232 { |
|
65494
e8969fb822fc
make hashes always the size of pointers; introduce Py_hash_t #9778
Benjamin Peterson <benjamin@python.org>
parents:
65399
diff
changeset
|
1233 Py_hash_t x; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
1234 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1235 x = PyObject_Hash(v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1236 if (x == -1) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1237 return NULL; |
|
65494
e8969fb822fc
make hashes always the size of pointers; introduce Py_hash_t #9778
Benjamin Peterson <benjamin@python.org>
parents:
65399
diff
changeset
|
1238 return PyLong_FromSsize_t(x); |
|
1257
1cabc2b6c970
* Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents:
1252
diff
changeset
|
1239 } |
|
1cabc2b6c970
* Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents:
1252
diff
changeset
|
1240 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1241 PyDoc_STRVAR(hash_doc, |
| 8561 | 1242 "hash(object) -> integer\n\ |
| 1243 \n\ | |
| 1244 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
|
1245 the same hash value. The reverse is not necessarily true, but likely."); |
| 8561 | 1246 |
| 1247 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1248 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
|
1249 builtin_hex(PyObject *self, PyObject *v) |
|
404
9cd38d1ac391
Made dir() more robust.
Guido van Rossum <guido@python.org>
parents:
385
diff
changeset
|
1250 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1251 return PyNumber_ToBase(v, 16); |
|
404
9cd38d1ac391
Made dir() more robust.
Guido van Rossum <guido@python.org>
parents:
385
diff
changeset
|
1252 } |
|
9cd38d1ac391
Made dir() more robust.
Guido van Rossum <guido@python.org>
parents:
385
diff
changeset
|
1253 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1254 PyDoc_STRVAR(hex_doc, |
| 8561 | 1255 "hex(number) -> string\n\ |
| 1256 \n\ | |
|
69180
d29277949ad6
Removed 'or long integer' from bin, oct, and hex docstrings.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
68257
diff
changeset
|
1257 Return the hexadecimal representation of an integer."); |
| 8561 | 1258 |
| 1259 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1260 static PyObject * |
|
17597
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1261 builtin_iter(PyObject *self, PyObject *args) |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1262 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1263 PyObject *v, *w = NULL; |
|
17597
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1264 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1265 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1266 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1267 if (w == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1268 return PyObject_GetIter(v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1269 if (!PyCallable_Check(v)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1270 PyErr_SetString(PyExc_TypeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1271 "iter(v, w): v must be callable"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1272 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1273 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1274 return PyCallIter_New(v, w); |
|
17597
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1275 } |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1276 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1277 PyDoc_STRVAR(iter_doc, |
|
47097
b2403d470b69
Rename enumerate() kw argument name to "iterable" and fix "sequence"->"iterable" in some docstrings.
Georg Brandl <georg@python.org>
parents:
47080
diff
changeset
|
1278 "iter(iterable) -> iterator\n\ |
|
17597
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1279 iter(callable, sentinel) -> iterator\n\ |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1280 \n\ |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1281 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
|
1282 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
|
1283 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
|
1284 |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1285 |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1286 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
|
1287 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
|
1288 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1289 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
|
1290 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1291 res = PyObject_Size(v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1292 if (res < 0 && PyErr_Occurred()) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1293 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1294 return PyLong_FromSsize_t(res); |
| 86 | 1295 } |
| 1296 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1297 PyDoc_STRVAR(len_doc, |
| 8561 | 1298 "len(object) -> integer\n\ |
| 1299 \n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1300 Return the number of items of a sequence or mapping."); |
| 8561 | 1301 |
| 1302 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1303 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
|
1304 builtin_locals(PyObject *self) |
|
2808
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
1305 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1306 PyObject *d; |
|
2808
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
1307 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1308 d = PyEval_GetLocals(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1309 Py_XINCREF(d); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1310 return d; |
|
2808
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
1311 } |
|
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
1312 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1313 PyDoc_STRVAR(locals_doc, |
| 8561 | 1314 "locals() -> dictionary\n\ |
| 1315 \n\ | |
|
27076
753306f9b0a0
SF bug #655271: Slightly modify locals() doc
Raymond Hettinger <python@rcn.com>
parents:
26824
diff
changeset
|
1316 Update and return a dictionary containing the current scope's local variables."); |
| 8561 | 1317 |
| 1318 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1319 static PyObject * |
|
34085
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1320 min_max(PyObject *args, PyObject *kwds, int op) |
| 86 | 1321 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1322 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1323 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
|
1324 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1325 if (PyTuple_Size(args) > 1) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1326 v = args; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1327 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1328 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
|
1329 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1330 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1331 keyfunc = PyDict_GetItemString(kwds, "key"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1332 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1333 PyErr_Format(PyExc_TypeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1334 "%s() got an unexpected keyword argument", name); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1335 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1336 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1337 Py_INCREF(keyfunc); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1338 } |
|
34085
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1339 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1340 it = PyObject_GetIter(v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1341 if (it == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1342 Py_XDECREF(keyfunc); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1343 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1344 } |
|
17667
76ee8b62ee2a
Generalize max(seq) and min(seq) to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17654
diff
changeset
|
1345 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1346 maxitem = NULL; /* the result */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1347 maxval = NULL; /* the value associated with the result */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1348 while (( item = PyIter_Next(it) )) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1349 /* get the value from the key function */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1350 if (keyfunc != NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1351 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1352 if (val == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1353 goto Fail_it_item; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1354 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1355 /* no key function; the value is the item */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1356 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1357 val = item; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1358 Py_INCREF(val); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1359 } |
|
17667
76ee8b62ee2a
Generalize max(seq) and min(seq) to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17654
diff
changeset
|
1360 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1361 /* maximum value and item are unset; set them */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1362 if (maxval == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1363 maxitem = item; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1364 maxval = val; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1365 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1366 /* maximum value and item are set; update them as necessary */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1367 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1368 int cmp = PyObject_RichCompareBool(val, maxval, op); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1369 if (cmp < 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1370 goto Fail_it_item_and_val; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1371 else if (cmp > 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1372 Py_DECREF(maxval); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1373 Py_DECREF(maxitem); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1374 maxval = val; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1375 maxitem = item; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1376 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1377 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1378 Py_DECREF(item); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1379 Py_DECREF(val); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1380 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1381 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1382 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1383 if (PyErr_Occurred()) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1384 goto Fail_it; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1385 if (maxval == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1386 PyErr_Format(PyExc_ValueError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1387 "%s() arg is an empty sequence", name); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1388 assert(maxitem == NULL); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1389 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1390 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1391 Py_DECREF(maxval); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1392 Py_DECREF(it); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1393 Py_XDECREF(keyfunc); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1394 return maxitem; |
|
34085
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1395 |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1396 Fail_it_item_and_val: |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1397 Py_DECREF(val); |
|
34085
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1398 Fail_it_item: |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1399 Py_DECREF(item); |
|
34085
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1400 Fail_it: |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1401 Py_XDECREF(maxval); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1402 Py_XDECREF(maxitem); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1403 Py_DECREF(it); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1404 Py_XDECREF(keyfunc); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1405 return NULL; |
| 86 | 1406 } |
| 1407 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1408 static PyObject * |
|
34085
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1409 builtin_min(PyObject *self, PyObject *args, PyObject *kwds) |
| 86 | 1410 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1411 return min_max(args, kwds, Py_LT); |
| 86 | 1412 } |
| 1413 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1414 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
|
1415 "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
|
1416 min(a, b, c, ...[, key=func]) -> value\n\ |
| 8561 | 1417 \n\ |
|
34085
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1418 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
|
1419 With two or more arguments, return the smallest argument."); |
| 8561 | 1420 |
| 1421 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1422 static PyObject * |
|
34085
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1423 builtin_max(PyObject *self, PyObject *args, PyObject *kwds) |
| 86 | 1424 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1425 return min_max(args, kwds, Py_GT); |
| 86 | 1426 } |
| 1427 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1428 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
|
1429 "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
|
1430 max(a, b, c, ...[, key=func]) -> value\n\ |
| 8561 | 1431 \n\ |
|
34085
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1432 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
|
1433 With two or more arguments, return the largest argument."); |
| 8561 | 1434 |
| 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 * |
|
19301
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
1437 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
|
1438 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1439 return PyNumber_ToBase(v, 8); |
|
404
9cd38d1ac391
Made dir() more robust.
Guido van Rossum <guido@python.org>
parents:
385
diff
changeset
|
1440 } |
|
9cd38d1ac391
Made dir() more robust.
Guido van Rossum <guido@python.org>
parents:
385
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(oct_doc, |
| 8561 | 1443 "oct(number) -> string\n\ |
| 1444 \n\ | |
|
69180
d29277949ad6
Removed 'or long integer' from bin, oct, and hex docstrings.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
68257
diff
changeset
|
1445 Return the octal representation of an integer."); |
| 8561 | 1446 |
| 1447 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1448 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
|
1449 builtin_ord(PyObject *self, PyObject* obj) |
| 86 | 1450 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1451 long ord; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1452 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
|
1453 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1454 if (PyBytes_Check(obj)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1455 size = PyBytes_GET_SIZE(obj); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1456 if (size == 1) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1457 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1458 return PyLong_FromLong(ord); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1459 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1460 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1461 else if (PyUnicode_Check(obj)) { |
| 72475 | 1462 if (PyUnicode_READY(obj) == -1) |
| 1463 return NULL; | |
| 1464 size = PyUnicode_GET_LENGTH(obj); | |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1465 if (size == 1) { |
| 72475 | 1466 ord = (long)PyUnicode_READ_CHAR(obj, 0); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1467 return PyLong_FromLong(ord); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1468 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1469 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1470 else if (PyByteArray_Check(obj)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1471 /* XXX Hopefully this is temporary */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1472 size = PyByteArray_GET_SIZE(obj); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1473 if (size == 1) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1474 ord = (long)((unsigned char)*PyByteArray_AS_STRING(obj)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1475 return PyLong_FromLong(ord); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1476 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1477 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1478 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1479 PyErr_Format(PyExc_TypeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1480 "ord() expected string of length 1, but " \ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1481 "%.200s found", obj->ob_type->tp_name); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1482 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1483 } |
|
11973
8bdc25d22925
Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
1484 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1485 PyErr_Format(PyExc_TypeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1486 "ord() expected a character, " |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1487 "but string of length %zd found", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1488 size); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1489 return NULL; |
| 86 | 1490 } |
| 1491 | |
|
42291
3772103200ec
Three patches by Amaury Forgeot d'Arc; SF patch# 1754484.
Guido van Rossum <guido@python.org>
parents:
42283
diff
changeset
|
1492 PyDoc_VAR(ord_doc) = PyDoc_STR( |
| 8561 | 1493 "ord(c) -> integer\n\ |
| 1494 \n\ | |
|
42283
18e5ae91bd29
Make chr() and ord() return/accept surrogate pairs in narrow builds.
Guido van Rossum <guido@python.org>
parents:
42142
diff
changeset
|
1495 Return the integer ordinal of a one-character string." |
|
77627
837d51ba1aa2
Remove outdated statement
Antoine Pitrou <solipsis@pitrou.net>
parents:
77294
diff
changeset
|
1496 ); |
| 8561 | 1497 |
| 1498 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1499 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
1500 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
|
1501 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1502 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
|
1503 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1504 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1505 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1506 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
|
1507 } |
|
6693c5d87f3a
Added long() and support for longs in int() and float();
Guido van Rossum <guido@python.org>
parents:
182
diff
changeset
|
1508 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1509 PyDoc_STRVAR(pow_doc, |
| 8561 | 1510 "pow(x, y[, z]) -> number\n\ |
| 1511 \n\ | |
| 1512 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
|
1513 equivalent to (x**y) % z, but may be more efficient (e.g. for longs)."); |
| 8561 | 1514 |
| 1515 | |
|
28583
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1516 |
|
40410
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1517 static PyObject * |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1518 builtin_print(PyObject *self, PyObject *args, PyObject *kwds) |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1519 { |
|
74359
3120a988a1a3
Closes #13761: add a "flush" keyword argument to print().
Georg Brandl <georg@python.org>
parents:
74342
diff
changeset
|
1520 static char *kwlist[] = {"sep", "end", "file", "flush", 0}; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1521 static PyObject *dummy_args; |
|
74359
3120a988a1a3
Closes #13761: add a "flush" keyword argument to print().
Georg Brandl <georg@python.org>
parents:
74342
diff
changeset
|
1522 PyObject *sep = NULL, *end = NULL, *file = NULL, *flush = NULL; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1523 int i, err; |
|
40410
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1524 |
|
74340
068e5c4d4bae
fold into one if statement
Benjamin Peterson <benjamin@python.org>
parents:
74259
diff
changeset
|
1525 if (dummy_args == NULL && !(dummy_args = PyTuple_New(0))) |
|
74359
3120a988a1a3
Closes #13761: add a "flush" keyword argument to print().
Georg Brandl <georg@python.org>
parents:
74342
diff
changeset
|
1526 return NULL; |
|
3120a988a1a3
Closes #13761: add a "flush" keyword argument to print().
Georg Brandl <georg@python.org>
parents:
74342
diff
changeset
|
1527 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOOO:print", |
|
3120a988a1a3
Closes #13761: add a "flush" keyword argument to print().
Georg Brandl <georg@python.org>
parents:
74342
diff
changeset
|
1528 kwlist, &sep, &end, &file, &flush)) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1529 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1530 if (file == NULL || file == Py_None) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1531 file = PySys_GetObject("stdout"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1532 /* sys.stdout may be None when FILE* stdout isn't connected */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1533 if (file == Py_None) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1534 Py_RETURN_NONE; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1535 } |
|
40410
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1536 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59994
diff
changeset
|
1537 if (sep == Py_None) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59994
diff
changeset
|
1538 sep = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59994
diff
changeset
|
1539 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59994
diff
changeset
|
1540 else if (sep && !PyUnicode_Check(sep)) { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1541 PyErr_Format(PyExc_TypeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1542 "sep must be None or a string, not %.200s", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1543 sep->ob_type->tp_name); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1544 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1545 } |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59994
diff
changeset
|
1546 if (end == Py_None) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59994
diff
changeset
|
1547 end = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59994
diff
changeset
|
1548 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59994
diff
changeset
|
1549 else if (end && !PyUnicode_Check(end)) { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1550 PyErr_Format(PyExc_TypeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1551 "end must be None or a string, not %.200s", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1552 end->ob_type->tp_name); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1553 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1554 } |
|
40410
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1555 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1556 for (i = 0; i < PyTuple_Size(args); i++) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1557 if (i > 0) { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59994
diff
changeset
|
1558 if (sep == NULL) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1559 err = PyFile_WriteString(" ", file); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1560 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1561 err = PyFile_WriteObject(sep, file, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1562 Py_PRINT_RAW); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1563 if (err) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1564 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1565 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1566 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1567 Py_PRINT_RAW); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1568 if (err) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1569 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1570 } |
|
40410
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1571 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59994
diff
changeset
|
1572 if (end == NULL) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1573 err = PyFile_WriteString("\n", file); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1574 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1575 err = PyFile_WriteObject(end, file, Py_PRINT_RAW); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1576 if (err) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1577 return NULL; |
|
40410
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1578 |
|
74359
3120a988a1a3
Closes #13761: add a "flush" keyword argument to print().
Georg Brandl <georg@python.org>
parents:
74342
diff
changeset
|
1579 if (flush != NULL) { |
|
3120a988a1a3
Closes #13761: add a "flush" keyword argument to print().
Georg Brandl <georg@python.org>
parents:
74342
diff
changeset
|
1580 PyObject *tmp; |
|
3120a988a1a3
Closes #13761: add a "flush" keyword argument to print().
Georg Brandl <georg@python.org>
parents:
74342
diff
changeset
|
1581 int do_flush = PyObject_IsTrue(flush); |
|
3120a988a1a3
Closes #13761: add a "flush" keyword argument to print().
Georg Brandl <georg@python.org>
parents:
74342
diff
changeset
|
1582 if (do_flush == -1) |
|
3120a988a1a3
Closes #13761: add a "flush" keyword argument to print().
Georg Brandl <georg@python.org>
parents:
74342
diff
changeset
|
1583 return NULL; |
|
3120a988a1a3
Closes #13761: add a "flush" keyword argument to print().
Georg Brandl <georg@python.org>
parents:
74342
diff
changeset
|
1584 else if (do_flush) { |
|
3120a988a1a3
Closes #13761: add a "flush" keyword argument to print().
Georg Brandl <georg@python.org>
parents:
74342
diff
changeset
|
1585 tmp = PyObject_CallMethod(file, "flush", ""); |
|
3120a988a1a3
Closes #13761: add a "flush" keyword argument to print().
Georg Brandl <georg@python.org>
parents:
74342
diff
changeset
|
1586 if (tmp == NULL) |
|
3120a988a1a3
Closes #13761: add a "flush" keyword argument to print().
Georg Brandl <georg@python.org>
parents:
74342
diff
changeset
|
1587 return NULL; |
|
3120a988a1a3
Closes #13761: add a "flush" keyword argument to print().
Georg Brandl <georg@python.org>
parents:
74342
diff
changeset
|
1588 else |
|
3120a988a1a3
Closes #13761: add a "flush" keyword argument to print().
Georg Brandl <georg@python.org>
parents:
74342
diff
changeset
|
1589 Py_DECREF(tmp); |
|
3120a988a1a3
Closes #13761: add a "flush" keyword argument to print().
Georg Brandl <georg@python.org>
parents:
74342
diff
changeset
|
1590 } |
|
3120a988a1a3
Closes #13761: add a "flush" keyword argument to print().
Georg Brandl <georg@python.org>
parents:
74342
diff
changeset
|
1591 } |
|
3120a988a1a3
Closes #13761: add a "flush" keyword argument to print().
Georg Brandl <georg@python.org>
parents:
74342
diff
changeset
|
1592 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1593 Py_RETURN_NONE; |
|
40410
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1594 } |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1595 |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1596 PyDoc_STRVAR(print_doc, |
|
78488
e4877d59613d
Fix issue #15607: Update the print builtin function docstring with the new flush keyword.
Senthil Kumaran <senthil@uthcode.com>
parents:
78456
diff
changeset
|
1597 "print(value, ..., sep=' ', end='\\n', file=sys.stdout, flush=False)\n\ |
|
40410
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1598 \n\ |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1599 Prints the values to a stream, or to sys.stdout by default.\n\ |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1600 Optional keyword arguments:\n\ |
|
78488
e4877d59613d
Fix issue #15607: Update the print builtin function docstring with the new flush keyword.
Senthil Kumaran <senthil@uthcode.com>
parents:
78456
diff
changeset
|
1601 file: a file-like object (stream); defaults to the current sys.stdout.\n\ |
|
e4877d59613d
Fix issue #15607: Update the print builtin function docstring with the new flush keyword.
Senthil Kumaran <senthil@uthcode.com>
parents:
78456
diff
changeset
|
1602 sep: string inserted between values, default a space.\n\ |
|
e4877d59613d
Fix issue #15607: Update the print builtin function docstring with the new flush keyword.
Senthil Kumaran <senthil@uthcode.com>
parents:
78456
diff
changeset
|
1603 end: string appended after the last value, default a newline.\n\ |
|
e4877d59613d
Fix issue #15607: Update the print builtin function docstring with the new flush keyword.
Senthil Kumaran <senthil@uthcode.com>
parents:
78456
diff
changeset
|
1604 flush: whether to forcibly flush the stream."); |
|
40410
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1605 |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1606 |
|
40933
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1607 static PyObject * |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1608 builtin_input(PyObject *self, PyObject *args) |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1609 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1610 PyObject *promptarg = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1611 PyObject *fin = PySys_GetObject("stdin"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1612 PyObject *fout = PySys_GetObject("stdout"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1613 PyObject *ferr = PySys_GetObject("stderr"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1614 PyObject *tmp; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1615 long fd; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1616 int tty; |
|
40933
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1617 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1618 /* Parse arguments */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1619 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1620 return NULL; |
|
40933
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1621 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1622 /* Check that stdin/out/err are intact */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1623 if (fin == NULL || fin == Py_None) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1624 PyErr_SetString(PyExc_RuntimeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1625 "input(): lost sys.stdin"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1626 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1627 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1628 if (fout == NULL || fout == Py_None) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1629 PyErr_SetString(PyExc_RuntimeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1630 "input(): lost sys.stdout"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1631 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1632 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1633 if (ferr == NULL || ferr == Py_None) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1634 PyErr_SetString(PyExc_RuntimeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1635 "input(): lost sys.stderr"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1636 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1637 } |
|
41888
aa73206c9ce6
Make input9) behave properly with the new I/O library.
Guido van Rossum <guido@python.org>
parents:
41846
diff
changeset
|
1638 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1639 /* First of all, flush stderr */ |
|
72835
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72475
diff
changeset
|
1640 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, ""); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1641 if (tmp == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1642 PyErr_Clear(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1643 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1644 Py_DECREF(tmp); |
|
41888
aa73206c9ce6
Make input9) behave properly with the new I/O library.
Guido van Rossum <guido@python.org>
parents:
41846
diff
changeset
|
1645 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1646 /* We should only use (GNU) readline if Python's sys.stdin and |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1647 sys.stdout are the same as C's stdin and stdout, because we |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1648 need to pass it those. */ |
|
72835
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72475
diff
changeset
|
1649 tmp = _PyObject_CallMethodId(fin, &PyId_fileno, ""); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1650 if (tmp == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1651 PyErr_Clear(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1652 tty = 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1653 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1654 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1655 fd = PyLong_AsLong(tmp); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1656 Py_DECREF(tmp); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1657 if (fd < 0 && PyErr_Occurred()) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1658 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1659 tty = fd == fileno(stdin) && isatty(fd); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1660 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1661 if (tty) { |
|
72835
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72475
diff
changeset
|
1662 tmp = _PyObject_CallMethodId(fout, &PyId_fileno, ""); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1663 if (tmp == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1664 PyErr_Clear(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1665 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1666 fd = PyLong_AsLong(tmp); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1667 Py_DECREF(tmp); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1668 if (fd < 0 && PyErr_Occurred()) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1669 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1670 tty = fd == fileno(stdout) && isatty(fd); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1671 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1672 } |
|
41888
aa73206c9ce6
Make input9) behave properly with the new I/O library.
Guido van Rossum <guido@python.org>
parents:
41846
diff
changeset
|
1673 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1674 /* If we're interactive, use (GNU) readline */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1675 if (tty) { |
|
73392
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1676 PyObject *po = NULL; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1677 char *prompt; |
|
73392
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1678 char *s = NULL; |
|
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1679 PyObject *stdin_encoding = NULL, *stdin_errors = NULL; |
|
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1680 PyObject *stdout_encoding = NULL, *stdout_errors = NULL; |
|
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1681 char *stdin_encoding_str, *stdin_errors_str; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1682 PyObject *result; |
|
67996
32386fa67a12
Merged revisions 88530 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66685
diff
changeset
|
1683 size_t len; |
|
72925
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72848
diff
changeset
|
1684 _Py_IDENTIFIER(encoding); |
|
73393
992ba03d60a8
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
diff
changeset
|
1685 _Py_IDENTIFIER(errors); |
|
43216
a311ab2fc1a7
Decode input() with stdin.encoding. Fixes #1097.
Martin v. Löwis <martin@v.loewis.de>
parents:
43172
diff
changeset
|
1686 |
|
72848
81380082d216
Use identifier API for PyObject_GetAttrString.
Martin v. Löwis <martin@v.loewis.de>
parents:
72835
diff
changeset
|
1687 stdin_encoding = _PyObject_GetAttrId(fin, &PyId_encoding); |
|
73393
992ba03d60a8
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
diff
changeset
|
1688 stdin_errors = _PyObject_GetAttrId(fin, &PyId_errors); |
|
73392
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1689 if (!stdin_encoding || !stdin_errors) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1690 /* stdin is a text stream, so it must have an |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1691 encoding. */ |
|
73392
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1692 goto _readline_errors; |
|
61718
846866aa0eb6
Issue #6697: Fix a crash if sys.stdin or sys.stdout encoding contain a surrogate
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61593
diff
changeset
|
1693 stdin_encoding_str = _PyUnicode_AsString(stdin_encoding); |
|
73392
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1694 stdin_errors_str = _PyUnicode_AsString(stdin_errors); |
|
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1695 if (!stdin_encoding_str || !stdin_errors_str) |
|
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1696 goto _readline_errors; |
|
72835
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72475
diff
changeset
|
1697 tmp = _PyObject_CallMethodId(fout, &PyId_flush, ""); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1698 if (tmp == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1699 PyErr_Clear(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1700 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1701 Py_DECREF(tmp); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1702 if (promptarg != NULL) { |
|
73392
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1703 /* We have a prompt, encode it as stdout would */ |
|
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1704 char *stdout_encoding_str, *stdout_errors_str; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1705 PyObject *stringpo; |
|
72848
81380082d216
Use identifier API for PyObject_GetAttrString.
Martin v. Löwis <martin@v.loewis.de>
parents:
72835
diff
changeset
|
1706 stdout_encoding = _PyObject_GetAttrId(fout, &PyId_encoding); |
|
73393
992ba03d60a8
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
diff
changeset
|
1707 stdout_errors = _PyObject_GetAttrId(fout, &PyId_errors); |
|
73392
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1708 if (!stdout_encoding || !stdout_errors) |
|
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1709 goto _readline_errors; |
|
61718
846866aa0eb6
Issue #6697: Fix a crash if sys.stdin or sys.stdout encoding contain a surrogate
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61593
diff
changeset
|
1710 stdout_encoding_str = _PyUnicode_AsString(stdout_encoding); |
|
73392
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1711 stdout_errors_str = _PyUnicode_AsString(stdout_errors); |
|
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1712 if (!stdout_encoding_str || !stdout_errors_str) |
|
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1713 goto _readline_errors; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1714 stringpo = PyObject_Str(promptarg); |
|
73392
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1715 if (stringpo == NULL) |
|
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1716 goto _readline_errors; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1717 po = PyUnicode_AsEncodedString(stringpo, |
|
73392
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1718 stdout_encoding_str, stdout_errors_str); |
|
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1719 Py_CLEAR(stdout_encoding); |
|
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1720 Py_CLEAR(stdout_errors); |
|
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1721 Py_CLEAR(stringpo); |
|
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1722 if (po == NULL) |
|
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1723 goto _readline_errors; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1724 prompt = PyBytes_AsString(po); |
|
73392
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1725 if (prompt == NULL) |
|
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1726 goto _readline_errors; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1727 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1728 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1729 po = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1730 prompt = ""; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1731 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1732 s = PyOS_Readline(stdin, stdout, prompt); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1733 if (s == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1734 if (!PyErr_Occurred()) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1735 PyErr_SetNone(PyExc_KeyboardInterrupt); |
|
73392
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1736 goto _readline_errors; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1737 } |
|
67996
32386fa67a12
Merged revisions 88530 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66685
diff
changeset
|
1738 |
|
32386fa67a12
Merged revisions 88530 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66685
diff
changeset
|
1739 len = strlen(s); |
|
32386fa67a12
Merged revisions 88530 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66685
diff
changeset
|
1740 if (len == 0) { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1741 PyErr_SetNone(PyExc_EOFError); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1742 result = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1743 } |
|
67996
32386fa67a12
Merged revisions 88530 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66685
diff
changeset
|
1744 else { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1745 if (len > PY_SSIZE_T_MAX) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1746 PyErr_SetString(PyExc_OverflowError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1747 "input: input too long"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1748 result = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1749 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1750 else { |
|
67996
32386fa67a12
Merged revisions 88530 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66685
diff
changeset
|
1751 len--; /* strip trailing '\n' */ |
|
32386fa67a12
Merged revisions 88530 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66685
diff
changeset
|
1752 if (len != 0 && s[len-1] == '\r') |
|
32386fa67a12
Merged revisions 88530 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66685
diff
changeset
|
1753 len--; /* strip trailing '\r' */ |
|
73392
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1754 result = PyUnicode_Decode(s, len, stdin_encoding_str, |
|
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1755 stdin_errors_str); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1756 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1757 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1758 Py_DECREF(stdin_encoding); |
|
73392
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1759 Py_DECREF(stdin_errors); |
|
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1760 Py_XDECREF(po); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1761 PyMem_FREE(s); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1762 return result; |
|
73392
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1763 _readline_errors: |
|
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1764 Py_XDECREF(stdin_encoding); |
|
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1765 Py_XDECREF(stdout_encoding); |
|
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1766 Py_XDECREF(stdin_errors); |
|
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1767 Py_XDECREF(stdout_errors); |
|
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1768 Py_XDECREF(po); |
|
421c8e291221
Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
73167
diff
changeset
|
1769 return NULL; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1770 } |
|
41888
aa73206c9ce6
Make input9) behave properly with the new I/O library.
Guido van Rossum <guido@python.org>
parents:
41846
diff
changeset
|
1771 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1772 /* Fallback if we're not interactive */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1773 if (promptarg != NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1774 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1775 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1776 } |
|
72835
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72475
diff
changeset
|
1777 tmp = _PyObject_CallMethodId(fout, &PyId_flush, ""); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1778 if (tmp == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1779 PyErr_Clear(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1780 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1781 Py_DECREF(tmp); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1782 return PyFile_GetLine(fin, -1); |
|
40933
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1783 } |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1784 |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1785 PyDoc_STRVAR(input_doc, |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1786 "input([prompt]) -> string\n\ |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1787 \n\ |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1788 Read a string from standard input. The trailing newline is stripped.\n\ |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1789 If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\ |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1790 On Unix, GNU readline is used if enabled. The prompt string, if given,\n\ |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1791 is printed without a trailing newline before reading."); |
| 8561 | 1792 |
| 1793 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1794 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
|
1795 builtin_repr(PyObject *self, PyObject *v) |
|
1094
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1079
diff
changeset
|
1796 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1797 return PyObject_Repr(v); |
|
1094
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1079
diff
changeset
|
1798 } |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1079
diff
changeset
|
1799 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1800 PyDoc_STRVAR(repr_doc, |
| 8561 | 1801 "repr(object) -> string\n\ |
| 1802 \n\ | |
| 1803 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
|
1804 For most object types, eval(repr(object)) == object."); |
| 8561 | 1805 |
| 1806 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1807 static PyObject * |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
1808 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
|
1809 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1810 static PyObject *round_str = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1811 PyObject *ndigits = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1812 static char *kwlist[] = {"number", "ndigits", 0}; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1813 PyObject *number, *round; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
1814 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1815 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:round", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1816 kwlist, &number, &ndigits)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1817 return NULL; |
|
42718
7fe2848fd41d
Implement the round functionality for PEP 3141, and add tests for it.
Alex Martelli <aleaxit@gmail.com>
parents:
42713
diff
changeset
|
1818 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1819 if (Py_TYPE(number)->tp_dict == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1820 if (PyType_Ready(Py_TYPE(number)) < 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1821 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1822 } |
|
42760
e3e06b389406
Before calling _PyType_Lookup() the type needs to be initialized.
Guido van Rossum <guido@python.org>
parents:
42753
diff
changeset
|
1823 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1824 if (round_str == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1825 round_str = PyUnicode_InternFromString("__round__"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1826 if (round_str == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1827 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1828 } |
|
42753
077fe7860cc9
Finish the work on __round__ and __trunc__.
Guido van Rossum <guido@python.org>
parents:
42718
diff
changeset
|
1829 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1830 round = _PyType_Lookup(Py_TYPE(number), round_str); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1831 if (round == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1832 PyErr_Format(PyExc_TypeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1833 "type %.100s doesn't define __round__ method", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1834 Py_TYPE(number)->tp_name); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1835 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1836 } |
|
42718
7fe2848fd41d
Implement the round functionality for PEP 3141, and add tests for it.
Alex Martelli <aleaxit@gmail.com>
parents:
42713
diff
changeset
|
1837 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1838 if (ndigits == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1839 return PyObject_CallFunction(round, "O", number); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1840 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1841 return PyObject_CallFunction(round, "OO", number, ndigits); |
|
1215
9d6cf529bb71
bltinmodule.c: added round(x, [n]); coerce() of two class instances
Guido van Rossum <guido@python.org>
parents:
1096
diff
changeset
|
1842 } |
|
9d6cf529bb71
bltinmodule.c: added round(x, [n]); coerce() of two class instances
Guido van Rossum <guido@python.org>
parents:
1096
diff
changeset
|
1843 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1844 PyDoc_STRVAR(round_doc, |
|
51145
9742e8a4dca1
Issue #4707: round(x, n) now returns an integer when x is an integer.
Mark Dickinson <dickinsm@gmail.com>
parents:
50755
diff
changeset
|
1845 "round(number[, ndigits]) -> number\n\ |
| 8561 | 1846 \n\ |
| 1847 Round a number to a given precision in decimal digits (default 0 digits).\n\ | |
| 48432 | 1848 This returns an int when called with one argument, otherwise the\n\ |
|
48401
70a4ec412882
#3191: fix round() docs and docstring.
Georg Brandl <georg@python.org>
parents:
47611
diff
changeset
|
1849 same type as the number. ndigits may be negative."); |
|
42753
077fe7860cc9
Finish the work on __round__ and __trunc__.
Guido van Rossum <guido@python.org>
parents:
42718
diff
changeset
|
1850 |
| 8561 | 1851 |
|
31210
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1852 static PyObject * |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1853 builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds) |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1854 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1855 PyObject *newlist, *v, *seq, *keyfunc=NULL, *newargs; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1856 PyObject *callable; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1857 static char *kwlist[] = {"iterable", "key", "reverse", 0}; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1858 int reverse; |
|
72925
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72848
diff
changeset
|
1859 _Py_IDENTIFIER(sort); |
|
31210
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1860 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1861 /* args 1-3 should match listsort in Objects/listobject.c */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1862 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1863 kwlist, &seq, &keyfunc, &reverse)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1864 return NULL; |
|
31210
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1865 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1866 newlist = PySequence_List(seq); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1867 if (newlist == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1868 return NULL; |
|
31210
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1869 |
|
72848
81380082d216
Use identifier API for PyObject_GetAttrString.
Martin v. Löwis <martin@v.loewis.de>
parents:
72835
diff
changeset
|
1870 callable = _PyObject_GetAttrId(newlist, &PyId_sort); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1871 if (callable == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1872 Py_DECREF(newlist); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1873 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1874 } |
|
35500
8fa83a9ebc6e
Whitespace normalization.
Georg Brandl <georg@python.org>
parents:
35364
diff
changeset
|
1875 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1876 newargs = PyTuple_GetSlice(args, 1, 4); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1877 if (newargs == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1878 Py_DECREF(newlist); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1879 Py_DECREF(callable); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1880 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1881 } |
|
31210
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1882 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1883 v = PyObject_Call(callable, newargs, kwds); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1884 Py_DECREF(newargs); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1885 Py_DECREF(callable); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1886 if (v == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1887 Py_DECREF(newlist); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1888 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1889 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1890 Py_DECREF(v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1891 return newlist; |
|
31210
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1892 } |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1893 |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1894 PyDoc_STRVAR(sorted_doc, |
|
45061
b9ee31a26f38
Issue #1771: Remove cmp parameter from list.sort() and builtin.sorted().
Raymond Hettinger <python@rcn.com>
parents:
45029
diff
changeset
|
1895 "sorted(iterable, key=None, reverse=False) --> new sorted list"); |
| 8561 | 1896 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1897 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
1898 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
|
1899 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1900 PyObject *v = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1901 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
|
1902 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1903 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1904 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1905 if (v == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1906 d = PyEval_GetLocals(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1907 if (d == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1908 if (!PyErr_Occurred()) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1909 PyErr_SetString(PyExc_SystemError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1910 "vars(): no locals!?"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1911 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1912 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1913 Py_INCREF(d); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1914 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1915 else { |
|
72925
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72848
diff
changeset
|
1916 _Py_IDENTIFIER(__dict__); |
|
72848
81380082d216
Use identifier API for PyObject_GetAttrString.
Martin v. Löwis <martin@v.loewis.de>
parents:
72835
diff
changeset
|
1917 d = _PyObject_GetAttrId(v, &PyId___dict__); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1918 if (d == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1919 PyErr_SetString(PyExc_TypeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1920 "vars() argument must have __dict__ attribute"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1921 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1922 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1923 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1924 return d; |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1925 } |
|
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1926 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1927 PyDoc_STRVAR(vars_doc, |
| 8561 | 1928 "vars([object]) -> dictionary\n\ |
| 1929 \n\ | |
| 1930 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
|
1931 With an argument, equivalent to object.__dict__."); |
| 8561 | 1932 |
|
28717
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1933 static PyObject* |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1934 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
|
1935 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1936 PyObject *seq; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1937 PyObject *result = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1938 PyObject *temp, *item, *iter; |
|
28717
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1939 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1940 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1941 return NULL; |
|
28717
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1942 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1943 iter = PyObject_GetIter(seq); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1944 if (iter == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1945 return NULL; |
|
28717
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1946 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1947 if (result == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1948 result = PyLong_FromLong(0); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1949 if (result == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1950 Py_DECREF(iter); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1951 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1952 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1953 } else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1954 /* reject string values for 'start' parameter */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1955 if (PyUnicode_Check(result)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1956 PyErr_SetString(PyExc_TypeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1957 "sum() can't sum strings [use ''.join(seq) instead]"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1958 Py_DECREF(iter); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1959 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1960 } |
|
71610
7368d0e9b33e
bytes should be verboten in sum() (fixes #12654)
Benjamin Peterson <benjamin@python.org>
parents:
71193
diff
changeset
|
1961 if (PyBytes_Check(result)) { |
|
7368d0e9b33e
bytes should be verboten in sum() (fixes #12654)
Benjamin Peterson <benjamin@python.org>
parents:
71193
diff
changeset
|
1962 PyErr_SetString(PyExc_TypeError, |
|
7368d0e9b33e
bytes should be verboten in sum() (fixes #12654)
Benjamin Peterson <benjamin@python.org>
parents:
71193
diff
changeset
|
1963 "sum() can't sum bytes [use b''.join(seq) instead]"); |
| 71620 | 1964 Py_DECREF(iter); |
|
71610
7368d0e9b33e
bytes should be verboten in sum() (fixes #12654)
Benjamin Peterson <benjamin@python.org>
parents:
71193
diff
changeset
|
1965 return NULL; |
|
7368d0e9b33e
bytes should be verboten in sum() (fixes #12654)
Benjamin Peterson <benjamin@python.org>
parents:
71193
diff
changeset
|
1966 } |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1967 if (PyByteArray_Check(result)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1968 PyErr_SetString(PyExc_TypeError, |
|
71611
a6afd26caa8a
bytes -> bytearray
Benjamin Peterson <benjamin@python.org>
parents:
71610
diff
changeset
|
1969 "sum() can't sum bytearray [use b''.join(seq) instead]"); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1970 Py_DECREF(iter); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1971 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1972 } |
|
43577
ace45b361e87
Patch# 1258 by Christian Heimes: kill basestring.
Guido van Rossum <guido@python.org>
parents:
43569
diff
changeset
|
1973 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1974 Py_INCREF(result); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1975 } |
|
28717
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1976 |
|
43734
3e5edf19d5f0
Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
43577
diff
changeset
|
1977 #ifndef SLOW_SUM |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1978 /* Fast addition by keeping temporary sums in C instead of new Python objects. |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1979 Assumes all inputs are the same type. If the assumption fails, default |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1980 to the more general routine. |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1981 */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1982 if (PyLong_CheckExact(result)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1983 int overflow; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1984 long i_result = PyLong_AsLongAndOverflow(result, &overflow); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1985 /* If this already overflowed, don't even enter the loop. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1986 if (overflow == 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1987 Py_DECREF(result); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1988 result = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1989 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1990 while(result == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1991 item = PyIter_Next(iter); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1992 if (item == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1993 Py_DECREF(iter); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1994 if (PyErr_Occurred()) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1995 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1996 return PyLong_FromLong(i_result); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1997 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1998 if (PyLong_CheckExact(item)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
1999 long b = PyLong_AsLongAndOverflow(item, &overflow); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2000 long x = i_result + b; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2001 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2002 i_result = x; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2003 Py_DECREF(item); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2004 continue; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2005 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2006 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2007 /* Either overflowed or is not an int. Restore real objects and process normally */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2008 result = PyLong_FromLong(i_result); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2009 temp = PyNumber_Add(result, item); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2010 Py_DECREF(result); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2011 Py_DECREF(item); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2012 result = temp; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2013 if (result == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2014 Py_DECREF(iter); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2015 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2016 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2017 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2018 } |
|
43734
3e5edf19d5f0
Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
43577
diff
changeset
|
2019 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2020 if (PyFloat_CheckExact(result)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2021 double f_result = PyFloat_AS_DOUBLE(result); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2022 Py_DECREF(result); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2023 result = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2024 while(result == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2025 item = PyIter_Next(iter); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2026 if (item == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2027 Py_DECREF(iter); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2028 if (PyErr_Occurred()) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2029 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2030 return PyFloat_FromDouble(f_result); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2031 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2032 if (PyFloat_CheckExact(item)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2033 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2034 f_result += PyFloat_AS_DOUBLE(item); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2035 PyFPE_END_PROTECT(f_result) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2036 Py_DECREF(item); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2037 continue; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2038 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2039 if (PyLong_CheckExact(item)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2040 long value; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2041 int overflow; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2042 value = PyLong_AsLongAndOverflow(item, &overflow); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2043 if (!overflow) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2044 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2045 f_result += (double)value; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2046 PyFPE_END_PROTECT(f_result) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2047 Py_DECREF(item); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2048 continue; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2049 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2050 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2051 result = PyFloat_FromDouble(f_result); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2052 temp = PyNumber_Add(result, item); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2053 Py_DECREF(result); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2054 Py_DECREF(item); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2055 result = temp; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2056 if (result == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2057 Py_DECREF(iter); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2058 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2059 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2060 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2061 } |
|
43734
3e5edf19d5f0
Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
43577
diff
changeset
|
2062 #endif |
|
3e5edf19d5f0
Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
43577
diff
changeset
|
2063 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2064 for(;;) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2065 item = PyIter_Next(iter); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2066 if (item == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2067 /* error, or end-of-sequence */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2068 if (PyErr_Occurred()) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2069 Py_DECREF(result); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2070 result = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2071 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2072 break; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2073 } |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59994
diff
changeset
|
2074 /* It's tempting to use PyNumber_InPlaceAdd instead of |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59994
diff
changeset
|
2075 PyNumber_Add here, to avoid quadratic running time |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59994
diff
changeset
|
2076 when doing 'sum(list_of_lists, [])'. However, this |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59994
diff
changeset
|
2077 would produce a change in behaviour: a snippet like |
|
56751
7dc57b991d83
Merged revisions 75714 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
56594
diff
changeset
|
2078 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59994
diff
changeset
|
2079 empty = [] |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59994
diff
changeset
|
2080 sum([[x] for x in range(10)], empty) |
|
56751
7dc57b991d83
Merged revisions 75714 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
56594
diff
changeset
|
2081 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59994
diff
changeset
|
2082 would change the value of empty. */ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2083 temp = PyNumber_Add(result, item); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2084 Py_DECREF(result); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2085 Py_DECREF(item); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2086 result = temp; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2087 if (result == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2088 break; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2089 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2090 Py_DECREF(iter); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2091 return result; |
|
28717
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
2092 } |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
2093 |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
2094 PyDoc_STRVAR(sum_doc, |
|
47097
b2403d470b69
Rename enumerate() kw argument name to "iterable" and fix "sequence"->"iterable" in some docstrings.
Georg Brandl <georg@python.org>
parents:
47080
diff
changeset
|
2095 "sum(iterable[, start]) -> value\n\ |
|
28717
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
2096 \n\ |
|
47097
b2403d470b69
Rename enumerate() kw argument name to "iterable" and fix "sequence"->"iterable" in some docstrings.
Georg Brandl <georg@python.org>
parents:
47080
diff
changeset
|
2097 Returns the sum of an iterable of numbers (NOT strings) plus the value\n\ |
|
b2403d470b69
Rename enumerate() kw argument name to "iterable" and fix "sequence"->"iterable" in some docstrings.
Georg Brandl <georg@python.org>
parents:
47080
diff
changeset
|
2098 of parameter 'start' (which defaults to 0). When the iterable is\n\ |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40411
diff
changeset
|
2099 empty, returns start."); |
|
28717
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
2100 |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
2101 |
|
6145
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
2102 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
2103 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
|
2104 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2105 PyObject *inst; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2106 PyObject *cls; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2107 int retval; |
|
6145
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
2108 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2109 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2110 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
|
2111 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2112 retval = PyObject_IsInstance(inst, cls); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2113 if (retval < 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2114 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2115 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
|
2116 } |
|
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
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(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
|
2119 "isinstance(object, class-or-type-or-tuple) -> bool\n\ |
| 8561 | 2120 \n\ |
| 2121 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
|
2122 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
|
2123 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
|
2124 isinstance(x, A) or isinstance(x, B) or ... (etc.)."); |
| 8561 | 2125 |
|
6145
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
2126 |
|
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
2127 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
2128 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
|
2129 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2130 PyObject *derived; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2131 PyObject *cls; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2132 int retval; |
|
6145
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
2133 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2134 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2135 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
|
2136 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2137 retval = PyObject_IsSubclass(derived, cls); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2138 if (retval < 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2139 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2140 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
|
2141 } |
|
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
2142 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
2143 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
|
2144 "issubclass(C, B) -> bool\n\ |
| 8561 | 2145 \n\ |
|
26612
97f83542f8ee
Enhance issubclass() and PyObject_IsSubclass() so that a tuple is
Walter Dörwald <walter@livinglogic.de>
parents:
25924
diff
changeset
|
2146 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
|
2147 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
|
2148 is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.)."); |
| 8561 | 2149 |
|
6145
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
2150 |
|
45738
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
2151 typedef struct { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2152 PyObject_HEAD |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2153 Py_ssize_t tuplesize; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2154 PyObject *ittuple; /* tuple of iterators */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2155 PyObject *result; |
|
45738
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
2156 } zipobject; |
|
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
2157 |
|
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
2158 static PyObject * |
|
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
2159 zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds) |
|
13822
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
2160 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2161 zipobject *lz; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2162 Py_ssize_t i; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2163 PyObject *ittuple; /* tuple of iterators */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2164 PyObject *result; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2165 Py_ssize_t tuplesize = PySequence_Length(args); |
|
45738
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
2166 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2167 if (type == &PyZip_Type && !_PyArg_NoKeywords("zip()", kwds)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2168 return NULL; |
|
45738
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
2169 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2170 /* args must be a tuple */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2171 assert(PyTuple_Check(args)); |
|
13822
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
2172 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2173 /* obtain iterators */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2174 ittuple = PyTuple_New(tuplesize); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2175 if (ittuple == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2176 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2177 for (i=0; i < tuplesize; ++i) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2178 PyObject *item = PyTuple_GET_ITEM(args, i); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2179 PyObject *it = PyObject_GetIter(item); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2180 if (it == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2181 if (PyErr_ExceptionMatches(PyExc_TypeError)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2182 PyErr_Format(PyExc_TypeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2183 "zip argument #%zd must support iteration", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2184 i+1); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2185 Py_DECREF(ittuple); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2186 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2187 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2188 PyTuple_SET_ITEM(ittuple, i, it); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2189 } |
|
45738
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
2190 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2191 /* create a result holder */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2192 result = PyTuple_New(tuplesize); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2193 if (result == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2194 Py_DECREF(ittuple); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2195 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2196 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2197 for (i=0 ; i < tuplesize ; i++) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2198 Py_INCREF(Py_None); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2199 PyTuple_SET_ITEM(result, i, Py_None); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2200 } |
|
45738
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
2201 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2202 /* create zipobject structure */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2203 lz = (zipobject *)type->tp_alloc(type, 0); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2204 if (lz == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2205 Py_DECREF(ittuple); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2206 Py_DECREF(result); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2207 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2208 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2209 lz->ittuple = ittuple; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2210 lz->tuplesize = tuplesize; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2211 lz->result = result; |
|
45738
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
2212 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2213 return (PyObject *)lz; |
|
45738
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
2214 } |
|
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
2215 |
|
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
2216 static void |
|
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
2217 zip_dealloc(zipobject *lz) |
|
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
2218 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2219 PyObject_GC_UnTrack(lz); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2220 Py_XDECREF(lz->ittuple); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2221 Py_XDECREF(lz->result); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2222 Py_TYPE(lz)->tp_free(lz); |
|
13822
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
2223 } |
|
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
2224 |
|
45738
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
2225 static int |
|
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
2226 zip_traverse(zipobject *lz, visitproc visit, void *arg) |
|
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
2227 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2228 Py_VISIT(lz->ittuple); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2229 Py_VISIT(lz->result); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2230 return 0; |
|
45738
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
2231 } |
|
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
2232 |
|
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
2233 static PyObject * |
|
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
2234 zip_next(zipobject *lz) |
|
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
2235 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2236 Py_ssize_t i; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2237 Py_ssize_t tuplesize = lz->tuplesize; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2238 PyObject *result = lz->result; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2239 PyObject *it; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2240 PyObject *item; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2241 PyObject *olditem; |
|
45738
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
2242 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2243 if (tuplesize == 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2244 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2245 if (Py_REFCNT(result) == 1) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2246 Py_INCREF(result); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2247 for (i=0 ; i < tuplesize ; i++) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2248 it = PyTuple_GET_ITEM(lz->ittuple, i); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2249 item = (*Py_TYPE(it)->tp_iternext)(it); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2250 if (item == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2251 Py_DECREF(result); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2252 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2253 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2254 olditem = PyTuple_GET_ITEM(result, i); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2255 PyTuple_SET_ITEM(result, i, item); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2256 Py_DECREF(olditem); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2257 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2258 } else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2259 result = PyTuple_New(tuplesize); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2260 if (result == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2261 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2262 for (i=0 ; i < tuplesize ; i++) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2263 it = PyTuple_GET_ITEM(lz->ittuple, i); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2264 item = (*Py_TYPE(it)->tp_iternext)(it); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2265 if (item == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2266 Py_DECREF(result); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2267 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2268 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2269 PyTuple_SET_ITEM(result, i, item); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2270 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2271 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2272 return result; |
|
45738
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
2273 } |
|
13822
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
2274 |
|
76091
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
2275 static PyObject * |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
2276 zip_reduce(zipobject *lz) |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
2277 { |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
2278 /* Just recreate the zip with the internal iterator tuple */ |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
2279 return Py_BuildValue("OO", Py_TYPE(lz), lz->ittuple); |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
2280 } |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
2281 |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
2282 static PyMethodDef zip_methods[] = { |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
2283 {"__reduce__", (PyCFunction)zip_reduce, METH_NOARGS, reduce_doc}, |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
2284 {NULL, NULL} /* sentinel */ |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
2285 }; |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
2286 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
2287 PyDoc_STRVAR(zip_doc, |
|
45738
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
2288 "zip(iter1 [,iter2 [...]]) --> zip object\n\ |
|
13822
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
2289 \n\ |
|
45738
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
2290 Return a zip object whose .__next__() method returns a tuple where\n\ |
|
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
2291 the i-th element comes from the i-th iterable argument. The .__next__()\n\ |
|
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
2292 method continues until the shortest iterable in the argument sequence\n\ |
|
50076
c7abfab4dcdb
Merged revisions 67525-67527,67529,67548-67549,67551-67552,67555,67578,67586,67593-67594,67596,67605-67606,67609,67612,67616-67617,67632,67635,67638 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49613
diff
changeset
|
2293 is exhausted and then it raises StopIteration."); |
|
45738
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
2294 |
|
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
2295 PyTypeObject PyZip_Type = { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2296 PyVarObject_HEAD_INIT(&PyType_Type, 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2297 "zip", /* tp_name */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2298 sizeof(zipobject), /* tp_basicsize */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2299 0, /* tp_itemsize */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2300 /* methods */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2301 (destructor)zip_dealloc, /* tp_dealloc */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2302 0, /* tp_print */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2303 0, /* tp_getattr */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2304 0, /* tp_setattr */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2305 0, /* tp_reserved */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2306 0, /* tp_repr */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2307 0, /* tp_as_number */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2308 0, /* tp_as_sequence */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2309 0, /* tp_as_mapping */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2310 0, /* tp_hash */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2311 0, /* tp_call */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2312 0, /* tp_str */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2313 PyObject_GenericGetAttr, /* tp_getattro */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2314 0, /* tp_setattro */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2315 0, /* tp_as_buffer */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2316 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2317 Py_TPFLAGS_BASETYPE, /* tp_flags */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2318 zip_doc, /* tp_doc */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2319 (traverseproc)zip_traverse, /* tp_traverse */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2320 0, /* tp_clear */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2321 0, /* tp_richcompare */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2322 0, /* tp_weaklistoffset */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2323 PyObject_SelfIter, /* tp_iter */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2324 (iternextfunc)zip_next, /* tp_iternext */ |
|
76091
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
74359
diff
changeset
|
2325 zip_methods, /* tp_methods */ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2326 0, /* tp_members */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2327 0, /* tp_getset */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2328 0, /* tp_base */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2329 0, /* tp_dict */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2330 0, /* tp_descr_get */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2331 0, /* tp_descr_set */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2332 0, /* tp_dictoffset */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2333 0, /* tp_init */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2334 PyType_GenericAlloc, /* tp_alloc */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2335 zip_new, /* tp_new */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2336 PyObject_GC_Del, /* tp_free */ |
|
45738
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
2337 }; |
|
13822
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
2338 |
|
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
2339 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2340 static PyMethodDef builtin_methods[] = { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2341 {"__build_class__", (PyCFunction)builtin___build_class__, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2342 METH_VARARGS | METH_KEYWORDS, build_class_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2343 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2344 {"abs", builtin_abs, METH_O, abs_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2345 {"all", builtin_all, METH_O, all_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2346 {"any", builtin_any, METH_O, any_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2347 {"ascii", builtin_ascii, METH_O, ascii_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2348 {"bin", builtin_bin, METH_O, bin_doc}, |
|
66521
1b77f2eb1606
Issue #10518: Bring back the callable() builtin.
Antoine Pitrou <solipsis@pitrou.net>
parents:
65494
diff
changeset
|
2349 {"callable", builtin_callable, METH_O, callable_doc}, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2350 {"chr", builtin_chr, METH_VARARGS, chr_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2351 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2352 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2353 {"dir", builtin_dir, METH_VARARGS, dir_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2354 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2355 {"eval", builtin_eval, METH_VARARGS, eval_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2356 {"exec", builtin_exec, METH_VARARGS, exec_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2357 {"format", builtin_format, METH_VARARGS, format_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2358 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2359 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2360 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2361 {"hash", builtin_hash, METH_O, hash_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2362 {"hex", builtin_hex, METH_O, hex_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2363 {"id", builtin_id, METH_O, id_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2364 {"input", builtin_input, METH_VARARGS, input_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2365 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2366 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2367 {"iter", builtin_iter, METH_VARARGS, iter_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2368 {"len", builtin_len, METH_O, len_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2369 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2370 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2371 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2372 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2373 {"oct", builtin_oct, METH_O, oct_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2374 {"ord", builtin_ord, METH_O, ord_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2375 {"pow", builtin_pow, METH_VARARGS, pow_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2376 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2377 {"repr", builtin_repr, METH_O, repr_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2378 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2379 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2380 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2381 {"sum", builtin_sum, METH_VARARGS, sum_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2382 {"vars", builtin_vars, METH_VARARGS, vars_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2383 {NULL, NULL}, |
| 86 | 2384 }; |
| 2385 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
2386 PyDoc_STRVAR(builtin_doc, |
| 8561 | 2387 "Built-in functions, exceptions, and other objects.\n\ |
| 2388 \n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
2389 Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices."); |
| 8561 | 2390 |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47557
diff
changeset
|
2391 static struct PyModuleDef builtinsmodule = { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2392 PyModuleDef_HEAD_INIT, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2393 "builtins", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2394 builtin_doc, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2395 -1, /* multiple "initialization" just copies the module dict. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2396 builtin_methods, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2397 NULL, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2398 NULL, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2399 NULL, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2400 NULL |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47557
diff
changeset
|
2401 }; |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47557
diff
changeset
|
2402 |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47557
diff
changeset
|
2403 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5610
diff
changeset
|
2404 PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
2405 _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
|
2406 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2407 PyObject *mod, *dict, *debug; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2408 mod = PyModule_Create(&builtinsmodule); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2409 if (mod == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2410 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2411 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
|
2412 |
|
28396
d56282c28a1e
Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents:
28027
diff
changeset
|
2413 #ifdef Py_TRACE_REFS |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2414 /* "builtins" exposes a number of statically allocated objects |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2415 * that, before this code was added in 2.3, never showed up in |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2416 * the list of "all objects" maintained by Py_TRACE_REFS. As a |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2417 * result, programs leaking references to None and False (etc) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2418 * couldn't be diagnosed by examining sys.getobjects(0). |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2419 */ |
|
28396
d56282c28a1e
Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents:
28027
diff
changeset
|
2420 #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
|
2421 #else |
|
d56282c28a1e
Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents:
28027
diff
changeset
|
2422 #define ADD_TO_ALL(OBJECT) (void)0 |
|
d56282c28a1e
Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents:
28027
diff
changeset
|
2423 #endif |
|
d56282c28a1e
Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents:
28027
diff
changeset
|
2424 |
|
19902
de39956b5458
_PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents:
19894
diff
changeset
|
2425 #define SETBUILTIN(NAME, OBJECT) \ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2426 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2427 return NULL; \ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2428 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
|
2429 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2430 SETBUILTIN("None", Py_None); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2431 SETBUILTIN("Ellipsis", Py_Ellipsis); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2432 SETBUILTIN("NotImplemented", Py_NotImplemented); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2433 SETBUILTIN("False", Py_False); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2434 SETBUILTIN("True", Py_True); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2435 SETBUILTIN("bool", &PyBool_Type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2436 SETBUILTIN("memoryview", &PyMemoryView_Type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2437 SETBUILTIN("bytearray", &PyByteArray_Type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2438 SETBUILTIN("bytes", &PyBytes_Type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2439 SETBUILTIN("classmethod", &PyClassMethod_Type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2440 SETBUILTIN("complex", &PyComplex_Type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2441 SETBUILTIN("dict", &PyDict_Type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2442 SETBUILTIN("enumerate", &PyEnum_Type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2443 SETBUILTIN("filter", &PyFilter_Type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2444 SETBUILTIN("float", &PyFloat_Type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2445 SETBUILTIN("frozenset", &PyFrozenSet_Type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2446 SETBUILTIN("property", &PyProperty_Type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2447 SETBUILTIN("int", &PyLong_Type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2448 SETBUILTIN("list", &PyList_Type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2449 SETBUILTIN("map", &PyMap_Type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2450 SETBUILTIN("object", &PyBaseObject_Type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2451 SETBUILTIN("range", &PyRange_Type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2452 SETBUILTIN("reversed", &PyReversed_Type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2453 SETBUILTIN("set", &PySet_Type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2454 SETBUILTIN("slice", &PySlice_Type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2455 SETBUILTIN("staticmethod", &PyStaticMethod_Type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2456 SETBUILTIN("str", &PyUnicode_Type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2457 SETBUILTIN("super", &PySuper_Type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2458 SETBUILTIN("tuple", &PyTuple_Type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2459 SETBUILTIN("type", &PyType_Type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2460 SETBUILTIN("zip", &PyZip_Type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2461 debug = PyBool_FromLong(Py_OptimizeFlag == 0); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2462 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2463 Py_XDECREF(debug); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2464 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2465 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2466 Py_XDECREF(debug); |
|
6198
c43ca8dd0081
Removed obsolete exception PyExc_AccessError.
Barry Warsaw <barry@python.org>
parents:
6145
diff
changeset
|
2467 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59995
diff
changeset
|
2468 return mod; |
|
28396
d56282c28a1e
Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents:
28027
diff
changeset
|
2469 #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
|
2470 #undef SETBUILTIN |
| 86 | 2471 } |
