Mercurial > cpython-lru_cache-weakref
annotate Python/bltinmodule.c @ 33261:1cf7d7225a99 legacy-trunk
Patch #1015021: Stop claiming that coerce can return None.
Will backport to 2.3.
| author | Martin v. Löwis <martin@v.loewis.de> |
|---|---|
| date | Wed, 25 Aug 2004 10:42:41 +0000 |
| parents | ce016d0ec701 |
| children | 860e0fd2fee8 cc9ce6837ea9 |
| rev | line source |
|---|---|
|
15637
7fb7c51a2e61
Whoops! Two stray characters crept in to my last check-in
Andrew M. Kuchling <amk@amk.ca>
parents:
15635
diff
changeset
|
1 |
| 86 | 2 /* Built-in functions */ |
| 3 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
4 #include "Python.h" |
| 86 | 5 |
| 6 #include "node.h" | |
|
1263
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
7 #include "compile.h" |
|
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
8 #include "eval.h" |
| 86 | 9 |
|
5317
c72c7e1930b3
Keep gcc -Wall and Microsoft VC happy.
Guido van Rossum <guido@python.org>
parents:
5223
diff
changeset
|
10 #include <ctype.h> |
|
c72c7e1930b3
Keep gcc -Wall and Microsoft VC happy.
Guido van Rossum <guido@python.org>
parents:
5223
diff
changeset
|
11 |
|
20654
edd9d0b3c47e
SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents:
20471
diff
changeset
|
12 #ifdef RISCOS |
|
edd9d0b3c47e
SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents:
20471
diff
changeset
|
13 #include "unixstuff.h" |
|
edd9d0b3c47e
SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents:
20471
diff
changeset
|
14 #endif |
|
edd9d0b3c47e
SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents:
20471
diff
changeset
|
15 |
|
17822
50376d470648
Fix the Py_FileSystemDefaultEncoding checkin - declare the variable in a fileobject.h, and initialize it in bltinmodule.
Mark Hammond <mhammond@skippinet.com.au>
parents:
17817
diff
changeset
|
16 /* The default encoding used by the platform file system APIs |
|
50376d470648
Fix the Py_FileSystemDefaultEncoding checkin - declare the variable in a fileobject.h, and initialize it in bltinmodule.
Mark Hammond <mhammond@skippinet.com.au>
parents:
17817
diff
changeset
|
17 Can remain NULL for all platforms that don't have such a concept |
|
50376d470648
Fix the Py_FileSystemDefaultEncoding checkin - declare the variable in a fileobject.h, and initialize it in bltinmodule.
Mark Hammond <mhammond@skippinet.com.au>
parents:
17817
diff
changeset
|
18 */ |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
23868
diff
changeset
|
19 #if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T) |
|
17822
50376d470648
Fix the Py_FileSystemDefaultEncoding checkin - declare the variable in a fileobject.h, and initialize it in bltinmodule.
Mark Hammond <mhammond@skippinet.com.au>
parents:
17817
diff
changeset
|
20 const char *Py_FileSystemDefaultEncoding = "mbcs"; |
|
27782
904f0e769820
My previous checkin caused compile() to no longer accept buffers, as noted
Just van Rossum <just@letterror.com>
parents:
27781
diff
changeset
|
21 #elif defined(__APPLE__) |
|
904f0e769820
My previous checkin caused compile() to no longer accept buffers, as noted
Just van Rossum <just@letterror.com>
parents:
27781
diff
changeset
|
22 const char *Py_FileSystemDefaultEncoding = "utf-8"; |
|
17822
50376d470648
Fix the Py_FileSystemDefaultEncoding checkin - declare the variable in a fileobject.h, and initialize it in bltinmodule.
Mark Hammond <mhammond@skippinet.com.au>
parents:
17817
diff
changeset
|
23 #else |
|
50376d470648
Fix the Py_FileSystemDefaultEncoding checkin - declare the variable in a fileobject.h, and initialize it in bltinmodule.
Mark Hammond <mhammond@skippinet.com.au>
parents:
17817
diff
changeset
|
24 const char *Py_FileSystemDefaultEncoding = NULL; /* use default */ |
|
50376d470648
Fix the Py_FileSystemDefaultEncoding checkin - declare the variable in a fileobject.h, and initialize it in bltinmodule.
Mark Hammond <mhammond@skippinet.com.au>
parents:
17817
diff
changeset
|
25 #endif |
|
17817
f7c385226f65
Add support for Windows using "mbcs" as the default Unicode encoding when dealing with the file system. As discussed on python-dev and in patch 410465.
Mark Hammond <mhammond@skippinet.com.au>
parents:
17694
diff
changeset
|
26 |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
27 /* Forward */ |
|
13447
a89f7f268de4
Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents:
13446
diff
changeset
|
28 static PyObject *filterstring(PyObject *, PyObject *); |
|
27385
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
29 #ifdef Py_USING_UNICODE |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
30 static PyObject *filterunicode(PyObject *, PyObject *); |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
31 #endif |
|
13447
a89f7f268de4
Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents:
13446
diff
changeset
|
32 static PyObject *filtertuple (PyObject *, PyObject *); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
33 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
34 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
35 builtin___import__(PyObject *self, PyObject *args) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
36 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
37 char *name; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
38 PyObject *globals = NULL; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
39 PyObject *locals = NULL; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
40 PyObject *fromlist = NULL; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
41 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
42 if (!PyArg_ParseTuple(args, "s|OOO:__import__", |
|
2338
4c2f1452125d
call __import__() with 4 args instead of 1
Guido van Rossum <guido@python.org>
parents:
2306
diff
changeset
|
43 &name, &globals, &locals, &fromlist)) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
44 return NULL; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6198
diff
changeset
|
45 return PyImport_ImportModuleEx(name, globals, locals, fromlist); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
46 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
47 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
48 PyDoc_STRVAR(import_doc, |
| 8561 | 49 "__import__(name, globals, locals, fromlist) -> module\n\ |
| 50 \n\ | |
| 51 Import a module. The globals are only used to determine the context;\n\ | |
| 52 they are not modified. The locals are currently unused. The fromlist\n\ | |
| 53 should be a list of names to emulate ``from name import ...'', or an\n\ | |
| 54 empty list to emulate ``import name''.\n\ | |
| 55 When importing a module from a package, note that __import__('A.B', ...)\n\ | |
| 56 returns package A when fromlist is empty, but its submodule B when\n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
57 fromlist is not empty."); |
| 8561 | 58 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
59 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
60 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
|
61 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
|
62 { |
|
8402
0cb0394c2edc
A bunch of functions are now properly implemented in abstract.c, and
Guido van Rossum <guido@python.org>
parents:
8287
diff
changeset
|
63 return PyNumber_Absolute(v); |
| 86 | 64 } |
| 65 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
66 PyDoc_STRVAR(abs_doc, |
| 8561 | 67 "abs(number) -> number\n\ |
| 68 \n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
69 Return the absolute value of the argument."); |
| 8561 | 70 |
| 71 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
72 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
73 builtin_apply(PyObject *self, PyObject *args) |
|
480
c64c6702549d
Added "apply"; added "SyntaxError"; changed table lay-out.
Guido van Rossum <guido@python.org>
parents:
463
diff
changeset
|
74 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
75 PyObject *func, *alist = NULL, *kwdict = NULL; |
|
9188
a1672e775f33
builtin_apply(): Second argument type check is relaxed to allow any sequence.
Barry Warsaw <barry@python.org>
parents:
9112
diff
changeset
|
76 PyObject *t = NULL, *retval = NULL; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
77 |
|
26818
e094a03a80ff
SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents:
26612
diff
changeset
|
78 if (!PyArg_UnpackTuple(args, "apply", 1, 3, &func, &alist, &kwdict)) |
|
480
c64c6702549d
Added "apply"; added "SyntaxError"; changed table lay-out.
Guido van Rossum <guido@python.org>
parents:
463
diff
changeset
|
79 return NULL; |
|
9188
a1672e775f33
builtin_apply(): Second argument type check is relaxed to allow any sequence.
Barry Warsaw <barry@python.org>
parents:
9112
diff
changeset
|
80 if (alist != NULL) { |
|
a1672e775f33
builtin_apply(): Second argument type check is relaxed to allow any sequence.
Barry Warsaw <barry@python.org>
parents:
9112
diff
changeset
|
81 if (!PyTuple_Check(alist)) { |
|
a1672e775f33
builtin_apply(): Second argument type check is relaxed to allow any sequence.
Barry Warsaw <barry@python.org>
parents:
9112
diff
changeset
|
82 if (!PySequence_Check(alist)) { |
|
16017
7234d7c3c29f
clearer error messages for apply() and "no locals"
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16011
diff
changeset
|
83 PyErr_Format(PyExc_TypeError, |
|
28740
d3297e298211
some more error-message enhancements
Alex Martelli <aleaxit@gmail.com>
parents:
28738
diff
changeset
|
84 "apply() arg 2 expected sequence, found %s", |
|
16017
7234d7c3c29f
clearer error messages for apply() and "no locals"
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16011
diff
changeset
|
85 alist->ob_type->tp_name); |
|
9188
a1672e775f33
builtin_apply(): Second argument type check is relaxed to allow any sequence.
Barry Warsaw <barry@python.org>
parents:
9112
diff
changeset
|
86 return NULL; |
|
a1672e775f33
builtin_apply(): Second argument type check is relaxed to allow any sequence.
Barry Warsaw <barry@python.org>
parents:
9112
diff
changeset
|
87 } |
|
a1672e775f33
builtin_apply(): Second argument type check is relaxed to allow any sequence.
Barry Warsaw <barry@python.org>
parents:
9112
diff
changeset
|
88 t = PySequence_Tuple(alist); |
|
a1672e775f33
builtin_apply(): Second argument type check is relaxed to allow any sequence.
Barry Warsaw <barry@python.org>
parents:
9112
diff
changeset
|
89 if (t == NULL) |
|
a1672e775f33
builtin_apply(): Second argument type check is relaxed to allow any sequence.
Barry Warsaw <barry@python.org>
parents:
9112
diff
changeset
|
90 return NULL; |
|
a1672e775f33
builtin_apply(): Second argument type check is relaxed to allow any sequence.
Barry Warsaw <barry@python.org>
parents:
9112
diff
changeset
|
91 alist = t; |
|
a1672e775f33
builtin_apply(): Second argument type check is relaxed to allow any sequence.
Barry Warsaw <barry@python.org>
parents:
9112
diff
changeset
|
92 } |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
93 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
94 if (kwdict != NULL && !PyDict_Check(kwdict)) { |
|
16017
7234d7c3c29f
clearer error messages for apply() and "no locals"
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16011
diff
changeset
|
95 PyErr_Format(PyExc_TypeError, |
|
7234d7c3c29f
clearer error messages for apply() and "no locals"
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16011
diff
changeset
|
96 "apply() arg 3 expected dictionary, found %s", |
|
7234d7c3c29f
clearer error messages for apply() and "no locals"
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16011
diff
changeset
|
97 kwdict->ob_type->tp_name); |
|
9188
a1672e775f33
builtin_apply(): Second argument type check is relaxed to allow any sequence.
Barry Warsaw <barry@python.org>
parents:
9112
diff
changeset
|
98 goto finally; |
|
2844
0261bf5b3819
keyword arguments and faster calls
Guido van Rossum <guido@python.org>
parents:
2824
diff
changeset
|
99 } |
|
9188
a1672e775f33
builtin_apply(): Second argument type check is relaxed to allow any sequence.
Barry Warsaw <barry@python.org>
parents:
9112
diff
changeset
|
100 retval = PyEval_CallObjectWithKeywords(func, alist, kwdict); |
|
a1672e775f33
builtin_apply(): Second argument type check is relaxed to allow any sequence.
Barry Warsaw <barry@python.org>
parents:
9112
diff
changeset
|
101 finally: |
|
a1672e775f33
builtin_apply(): Second argument type check is relaxed to allow any sequence.
Barry Warsaw <barry@python.org>
parents:
9112
diff
changeset
|
102 Py_XDECREF(t); |
|
a1672e775f33
builtin_apply(): Second argument type check is relaxed to allow any sequence.
Barry Warsaw <barry@python.org>
parents:
9112
diff
changeset
|
103 return retval; |
|
480
c64c6702549d
Added "apply"; added "SyntaxError"; changed table lay-out.
Guido van Rossum <guido@python.org>
parents:
463
diff
changeset
|
104 } |
|
c64c6702549d
Added "apply"; added "SyntaxError"; changed table lay-out.
Guido van Rossum <guido@python.org>
parents:
463
diff
changeset
|
105 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
106 PyDoc_STRVAR(apply_doc, |
|
15832
0ae389e935fc
Update the docstring for apply() so that "args" is marked as optional
Fred Drake <fdrake@acm.org>
parents:
15829
diff
changeset
|
107 "apply(object[, args[, kwargs]]) -> value\n\ |
| 8561 | 108 \n\ |
|
11621
0ec803cbd872
Adjusted apply() docstring based on comments from Gerrit Holl
Fred Drake <fdrake@acm.org>
parents:
11383
diff
changeset
|
109 Call a callable object with positional arguments taken from the tuple args,\n\ |
|
0ec803cbd872
Adjusted apply() docstring based on comments from Gerrit Holl
Fred Drake <fdrake@acm.org>
parents:
11383
diff
changeset
|
110 and keyword arguments taken from the optional dictionary kwargs.\n\ |
|
28513
90c77b8af1a4
SF patch #701494: more apply removals
Raymond Hettinger <python@rcn.com>
parents:
28396
diff
changeset
|
111 Note that classes are callable, as are instances with a __call__() method.\n\ |
|
90c77b8af1a4
SF patch #701494: more apply removals
Raymond Hettinger <python@rcn.com>
parents:
28396
diff
changeset
|
112 \n\ |
|
90c77b8af1a4
SF patch #701494: more apply removals
Raymond Hettinger <python@rcn.com>
parents:
28396
diff
changeset
|
113 Deprecated since release 2.3. Instead, use the extended call syntax:\n\ |
|
90c77b8af1a4
SF patch #701494: more apply removals
Raymond Hettinger <python@rcn.com>
parents:
28396
diff
changeset
|
114 function(*args, **keywords)."); |
| 8561 | 115 |
| 116 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
117 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
|
118 builtin_callable(PyObject *self, PyObject *v) |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
119 { |
|
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
|
120 return PyBool_FromLong((long)PyCallable_Check(v)); |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
121 } |
|
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
122 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
123 PyDoc_STRVAR(callable_doc, |
|
22785
aa8d59823add
Add the 'bool' type and its values 'False' and 'True', as described in
Guido van Rossum <guido@python.org>
parents:
22205
diff
changeset
|
124 "callable(object) -> bool\n\ |
| 8561 | 125 \n\ |
| 126 Return whether the object is callable (i.e., some kind of function).\n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
127 Note that classes are callable, as are instances with a __call__() method."); |
| 8561 | 128 |
| 129 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
130 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
131 builtin_filter(PyObject *self, PyObject *args) |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
132 { |
|
24863
a3ebd1233c00
A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents:
24817
diff
changeset
|
133 PyObject *func, *seq, *result, *it, *arg; |
|
17654
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
134 int len; /* guess for result list size */ |
|
17683
e9a4e27e8d4e
Make PyIter_Next() a little smarter (wrt its knowledge of iterator
Tim Peters <tim.peters@gmail.com>
parents:
17677
diff
changeset
|
135 register int j; |
|
1375
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
136 |
|
26818
e094a03a80ff
SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents:
26612
diff
changeset
|
137 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq)) |
|
1375
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
138 return NULL; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
139 |
|
17654
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
140 /* Strings and tuples return a result of the same type. */ |
|
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
141 if (PyString_Check(seq)) |
|
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
142 return filterstring(func, seq); |
|
27385
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
143 #ifdef Py_USING_UNICODE |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
144 if (PyUnicode_Check(seq)) |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
145 return filterunicode(func, seq); |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
146 #endif |
|
17654
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
147 if (PyTuple_Check(seq)) |
|
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
148 return filtertuple(func, seq); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
149 |
|
17654
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
150 /* Get iterator. */ |
|
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
151 it = PyObject_GetIter(seq); |
|
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
152 if (it == NULL) |
|
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
153 return NULL; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
154 |
|
17654
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
155 /* Guess a result list size. */ |
|
31345
bb3c3c98cc1b
Apply pre-sizing optimization to a broader class of objects.
Raymond Hettinger <python@rcn.com>
parents:
31343
diff
changeset
|
156 len = PyObject_Size(seq); |
|
bb3c3c98cc1b
Apply pre-sizing optimization to a broader class of objects.
Raymond Hettinger <python@rcn.com>
parents:
31343
diff
changeset
|
157 if (len < 0) { |
|
bb3c3c98cc1b
Apply pre-sizing optimization to a broader class of objects.
Raymond Hettinger <python@rcn.com>
parents:
31343
diff
changeset
|
158 PyErr_Clear(); |
|
bb3c3c98cc1b
Apply pre-sizing optimization to a broader class of objects.
Raymond Hettinger <python@rcn.com>
parents:
31343
diff
changeset
|
159 len = 8; /* arbitrary */ |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
160 } |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
161 |
|
24863
a3ebd1233c00
A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents:
24817
diff
changeset
|
162 /* Pre-allocate argument list tuple. */ |
|
a3ebd1233c00
A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents:
24817
diff
changeset
|
163 arg = PyTuple_New(1); |
|
a3ebd1233c00
A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents:
24817
diff
changeset
|
164 if (arg == NULL) |
|
a3ebd1233c00
A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents:
24817
diff
changeset
|
165 goto Fail_arg; |
|
a3ebd1233c00
A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents:
24817
diff
changeset
|
166 |
|
17654
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
167 /* Get a result list. */ |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
168 if (PyList_Check(seq) && seq->ob_refcnt == 1) { |
|
17654
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
169 /* Eww - can modify the list in-place. */ |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
170 Py_INCREF(seq); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
171 result = seq; |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
172 } |
|
1375
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
173 else { |
|
17654
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
174 result = PyList_New(len); |
|
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
175 if (result == NULL) |
|
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
176 goto Fail_it; |
|
1375
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
177 } |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
178 |
|
17654
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
179 /* Build the result list. */ |
|
17683
e9a4e27e8d4e
Make PyIter_Next() a little smarter (wrt its knowledge of iterator
Tim Peters <tim.peters@gmail.com>
parents:
17677
diff
changeset
|
180 j = 0; |
|
e9a4e27e8d4e
Make PyIter_Next() a little smarter (wrt its knowledge of iterator
Tim Peters <tim.peters@gmail.com>
parents:
17677
diff
changeset
|
181 for (;;) { |
|
24863
a3ebd1233c00
A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents:
24817
diff
changeset
|
182 PyObject *item; |
|
1375
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
183 int ok; |
|
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
184 |
|
17654
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
185 item = PyIter_Next(it); |
|
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
186 if (item == NULL) { |
|
17683
e9a4e27e8d4e
Make PyIter_Next() a little smarter (wrt its knowledge of iterator
Tim Peters <tim.peters@gmail.com>
parents:
17677
diff
changeset
|
187 if (PyErr_Occurred()) |
|
e9a4e27e8d4e
Make PyIter_Next() a little smarter (wrt its knowledge of iterator
Tim Peters <tim.peters@gmail.com>
parents:
17677
diff
changeset
|
188 goto Fail_result_it; |
|
17654
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
189 break; |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
190 } |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
191 |
|
30151
9f53e53f3880
Make filter(bool, ...) as fast as filter(None, ...).
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
30037
diff
changeset
|
192 if (func == (PyObject *)&PyBool_Type || func == Py_None) { |
|
24863
a3ebd1233c00
A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents:
24817
diff
changeset
|
193 ok = PyObject_IsTrue(item); |
|
1375
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
194 } |
|
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
195 else { |
|
24863
a3ebd1233c00
A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents:
24817
diff
changeset
|
196 PyObject *good; |
|
a3ebd1233c00
A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents:
24817
diff
changeset
|
197 PyTuple_SET_ITEM(arg, 0, item); |
|
a3ebd1233c00
A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents:
24817
diff
changeset
|
198 good = PyObject_Call(func, arg, NULL); |
|
a3ebd1233c00
A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents:
24817
diff
changeset
|
199 PyTuple_SET_ITEM(arg, 0, NULL); |
|
2120
84b61fe44573
fix subtle refcount big in filter() -- Tim MacKenzie
Guido van Rossum <guido@python.org>
parents:
2113
diff
changeset
|
200 if (good == NULL) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
201 Py_DECREF(item); |
|
17654
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
202 goto Fail_result_it; |
|
2120
84b61fe44573
fix subtle refcount big in filter() -- Tim MacKenzie
Guido van Rossum <guido@python.org>
parents:
2113
diff
changeset
|
203 } |
|
24863
a3ebd1233c00
A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents:
24817
diff
changeset
|
204 ok = PyObject_IsTrue(good); |
|
a3ebd1233c00
A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents:
24817
diff
changeset
|
205 Py_DECREF(good); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
206 } |
|
1375
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
207 if (ok) { |
|
17654
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
208 if (j < len) |
|
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
209 PyList_SET_ITEM(result, j, item); |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
210 else { |
|
9991
ddbbed8cb830
builtin_map(): A better fix for the previous leak plug (remember
Barry Warsaw <barry@python.org>
parents:
9980
diff
changeset
|
211 int status = PyList_Append(result, item); |
|
ddbbed8cb830
builtin_map(): A better fix for the previous leak plug (remember
Barry Warsaw <barry@python.org>
parents:
9980
diff
changeset
|
212 Py_DECREF(item); |
|
ddbbed8cb830
builtin_map(): A better fix for the previous leak plug (remember
Barry Warsaw <barry@python.org>
parents:
9980
diff
changeset
|
213 if (status < 0) |
|
17654
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
214 goto Fail_result_it; |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
215 } |
|
17654
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
216 ++j; |
|
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
217 } |
|
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
218 else |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
219 Py_DECREF(item); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
220 } |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
221 |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
222 |
|
17654
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
223 /* Cut back result list if len is too big. */ |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
224 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0) |
|
17654
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
225 goto Fail_result_it; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
226 |
|
17874
eb03c6fc31e5
SF bug #425836: Reference leak in filter().
Tim Peters <tim.peters@gmail.com>
parents:
17822
diff
changeset
|
227 Py_DECREF(it); |
|
24863
a3ebd1233c00
A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents:
24817
diff
changeset
|
228 Py_DECREF(arg); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
229 return result; |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
230 |
|
17654
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
231 Fail_result_it: |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
232 Py_DECREF(result); |
|
17654
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
233 Fail_it: |
|
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
234 Py_DECREF(it); |
|
24863
a3ebd1233c00
A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents:
24817
diff
changeset
|
235 Fail_arg: |
|
a3ebd1233c00
A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents:
24817
diff
changeset
|
236 Py_DECREF(arg); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
237 return NULL; |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
238 } |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
239 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
240 PyDoc_STRVAR(filter_doc, |
|
22225
67a5e25dc88b
backport tim_one's checkin of
Michael W. Hudson <mwh@python.net>
parents:
21712
diff
changeset
|
241 "filter(function or None, sequence) -> list, tuple, or string\n" |
|
67a5e25dc88b
backport tim_one's checkin of
Michael W. Hudson <mwh@python.net>
parents:
21712
diff
changeset
|
242 "\n" |
|
67a5e25dc88b
backport tim_one's checkin of
Michael W. Hudson <mwh@python.net>
parents:
21712
diff
changeset
|
243 "Return those items of sequence for which function(item) is true. If\n" |
|
67a5e25dc88b
backport tim_one's checkin of
Michael W. Hudson <mwh@python.net>
parents:
21712
diff
changeset
|
244 "function is None, return the items that are true. If sequence is a tuple\n" |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
245 "or string, return the same type, else return a list."); |
| 8561 | 246 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
247 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
248 builtin_chr(PyObject *self, PyObject *args) |
| 86 | 249 { |
| 250 long x; | |
| 251 char s[1]; | |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
252 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
253 if (!PyArg_ParseTuple(args, "l:chr", &x)) |
| 86 | 254 return NULL; |
| 255 if (x < 0 || x >= 256) { | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
256 PyErr_SetString(PyExc_ValueError, |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
257 "chr() arg not in range(256)"); |
| 86 | 258 return NULL; |
| 259 } | |
|
5317
c72c7e1930b3
Keep gcc -Wall and Microsoft VC happy.
Guido van Rossum <guido@python.org>
parents:
5223
diff
changeset
|
260 s[0] = (char)x; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
261 return PyString_FromStringAndSize(s, 1); |
| 86 | 262 } |
| 263 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
264 PyDoc_STRVAR(chr_doc, |
| 8561 | 265 "chr(i) -> character\n\ |
| 266 \n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
267 Return a string of one character with ordinal i; 0 <= i < 256."); |
| 8561 | 268 |
| 269 | |
|
19343
7257e87e0720
Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents:
19301
diff
changeset
|
270 #ifdef Py_USING_UNICODE |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
271 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
272 builtin_unichr(PyObject *self, PyObject *args) |
|
11973
8bdc25d22925
Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
273 { |
|
8bdc25d22925
Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
274 long x; |
|
8bdc25d22925
Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
275 |
|
8bdc25d22925
Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
276 if (!PyArg_ParseTuple(args, "l:unichr", &x)) |
|
8bdc25d22925
Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
277 return NULL; |
|
18282
f38923ce3c6b
more unicode tweaks: make unichr(0xdddddddd) behave like u"\Udddddddd"
Fredrik Lundh <fredrik@pythonware.com>
parents:
18281
diff
changeset
|
278 |
|
24737
eaa87632b1e8
Add C API PyUnicode_FromOrdinal() which exposes unichr() at C level.
Marc-André Lemburg <mal@egenix.com>
parents:
24071
diff
changeset
|
279 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
|
280 } |
|
8bdc25d22925
Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
281 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
282 PyDoc_STRVAR(unichr_doc, |
|
12386
32e9d0e78935
When refering to Unicode characters in exception messages and
Fred Drake <fdrake@acm.org>
parents:
12384
diff
changeset
|
283 "unichr(i) -> Unicode character\n\ |
|
11973
8bdc25d22925
Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
284 \n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
285 Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff."); |
|
19343
7257e87e0720
Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents:
19301
diff
changeset
|
286 #endif |
|
11973
8bdc25d22925
Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
287 |
|
8bdc25d22925
Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
288 |
|
8bdc25d22925
Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
289 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
290 builtin_cmp(PyObject *self, PyObject *args) |
|
1079
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
291 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
292 PyObject *a, *b; |
|
8402
0cb0394c2edc
A bunch of functions are now properly implemented in abstract.c, and
Guido van Rossum <guido@python.org>
parents:
8287
diff
changeset
|
293 int c; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
294 |
|
26818
e094a03a80ff
SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents:
26612
diff
changeset
|
295 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b)) |
|
1079
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
296 return NULL; |
|
8402
0cb0394c2edc
A bunch of functions are now properly implemented in abstract.c, and
Guido van Rossum <guido@python.org>
parents:
8287
diff
changeset
|
297 if (PyObject_Cmp(a, b, &c) < 0) |
|
5610
10e9cfa010f0
PyObject_Compare can raise an exception now.
Guido van Rossum <guido@python.org>
parents:
5471
diff
changeset
|
298 return NULL; |
|
8402
0cb0394c2edc
A bunch of functions are now properly implemented in abstract.c, and
Guido van Rossum <guido@python.org>
parents:
8287
diff
changeset
|
299 return PyInt_FromLong((long)c); |
|
1079
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
300 } |
|
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
301 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
302 PyDoc_STRVAR(cmp_doc, |
| 8561 | 303 "cmp(x, y) -> integer\n\ |
| 304 \n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
305 Return negative if x<y, zero if x==y, positive if x>y."); |
| 8561 | 306 |
| 307 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
308 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
309 builtin_coerce(PyObject *self, PyObject *args) |
|
2113
76c860a18d82
move coerce() from bltinmodule.c to object.c and implement builtin_coerce() differently
Guido van Rossum <guido@python.org>
parents:
2106
diff
changeset
|
310 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
311 PyObject *v, *w; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
312 PyObject *res; |
|
2113
76c860a18d82
move coerce() from bltinmodule.c to object.c and implement builtin_coerce() differently
Guido van Rossum <guido@python.org>
parents:
2106
diff
changeset
|
313 |
|
26818
e094a03a80ff
SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents:
26612
diff
changeset
|
314 if (!PyArg_UnpackTuple(args, "coerce", 2, 2, &v, &w)) |
|
2113
76c860a18d82
move coerce() from bltinmodule.c to object.c and implement builtin_coerce() differently
Guido van Rossum <guido@python.org>
parents:
2106
diff
changeset
|
315 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
316 if (PyNumber_Coerce(&v, &w) < 0) |
|
944
222f04f55083
Changes so that user-defined classes can implement operations invoked
Guido van Rossum <guido@python.org>
parents:
926
diff
changeset
|
317 return NULL; |
|
30683
3b59fa5d25b1
Simplify and speedup uses of Py_BuildValue():
Raymond Hettinger <python@rcn.com>
parents:
30430
diff
changeset
|
318 res = PyTuple_Pack(2, v, w); |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
319 Py_DECREF(v); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
320 Py_DECREF(w); |
|
944
222f04f55083
Changes so that user-defined classes can implement operations invoked
Guido van Rossum <guido@python.org>
parents:
926
diff
changeset
|
321 return res; |
|
222f04f55083
Changes so that user-defined classes can implement operations invoked
Guido van Rossum <guido@python.org>
parents:
926
diff
changeset
|
322 } |
|
222f04f55083
Changes so that user-defined classes can implement operations invoked
Guido van Rossum <guido@python.org>
parents:
926
diff
changeset
|
323 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
324 PyDoc_STRVAR(coerce_doc, |
|
33261
1cf7d7225a99
Patch #1015021: Stop claiming that coerce can return None.
Martin v. Löwis <martin@v.loewis.de>
parents:
33099
diff
changeset
|
325 "coerce(x, y) -> (x1, y1)\n\ |
| 8561 | 326 \n\ |
|
33261
1cf7d7225a99
Patch #1015021: Stop claiming that coerce can return None.
Martin v. Löwis <martin@v.loewis.de>
parents:
33099
diff
changeset
|
327 Return a tuple consisting of the two numeric arguments converted to\n\ |
|
1cf7d7225a99
Patch #1015021: Stop claiming that coerce can return None.
Martin v. Löwis <martin@v.loewis.de>
parents:
33099
diff
changeset
|
328 a common type, using the same rules as used by arithmetic operations.\n\ |
|
1cf7d7225a99
Patch #1015021: Stop claiming that coerce can return None.
Martin v. Löwis <martin@v.loewis.de>
parents:
33099
diff
changeset
|
329 If coercion is not possible, raise TypeError."); |
| 8561 | 330 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
331 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
332 builtin_compile(PyObject *self, PyObject *args) |
|
1263
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
333 { |
|
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
334 char *str; |
|
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
335 char *filename; |
|
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
336 char *startstr; |
|
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
337 int start; |
|
19355
d5acff178ad5
A fiddled version of the rest of Michael Hudson's SF patch
Tim Peters <tim.peters@gmail.com>
parents:
19343
diff
changeset
|
338 int dont_inherit = 0; |
|
d5acff178ad5
A fiddled version of the rest of Michael Hudson's SF patch
Tim Peters <tim.peters@gmail.com>
parents:
19343
diff
changeset
|
339 int supplied_flags = 0; |
|
18611
fdb36a0c7e6e
Part way to allowing "from __future__ import generators" to communicate
Tim Peters <tim.peters@gmail.com>
parents:
18436
diff
changeset
|
340 PyCompilerFlags cf; |
|
27781
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
341 PyObject *result, *cmd, *tmp = NULL; |
|
27782
904f0e769820
My previous checkin caused compile() to no longer accept buffers, as noted
Just van Rossum <just@letterror.com>
parents:
27781
diff
changeset
|
342 int length; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
343 |
|
27781
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
344 if (!PyArg_ParseTuple(args, "Oss|ii:compile", &cmd, &filename, |
|
19355
d5acff178ad5
A fiddled version of the rest of Michael Hudson's SF patch
Tim Peters <tim.peters@gmail.com>
parents:
19343
diff
changeset
|
345 &startstr, &supplied_flags, &dont_inherit)) |
|
1263
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
346 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
|
347 |
|
27781
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
348 cf.cf_flags = supplied_flags; |
|
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
349 |
|
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
350 #ifdef Py_USING_UNICODE |
|
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
351 if (PyUnicode_Check(cmd)) { |
|
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
352 tmp = PyUnicode_AsUTF8String(cmd); |
|
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
353 if (tmp == NULL) |
|
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
354 return NULL; |
|
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
355 cmd = tmp; |
|
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
356 cf.cf_flags |= PyCF_SOURCE_IS_UTF8; |
|
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
357 } |
|
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
358 #endif |
|
27782
904f0e769820
My previous checkin caused compile() to no longer accept buffers, as noted
Just van Rossum <just@letterror.com>
parents:
27781
diff
changeset
|
359 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &length)) |
|
904f0e769820
My previous checkin caused compile() to no longer accept buffers, as noted
Just van Rossum <just@letterror.com>
parents:
27781
diff
changeset
|
360 return NULL; |
|
27790
b650a54a76fd
Squashed compiler wng about signed/unsigned clash in comparison.
Tim Peters <tim.peters@gmail.com>
parents:
27786
diff
changeset
|
361 if ((size_t)length != strlen(str)) { |
|
27781
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
362 PyErr_SetString(PyExc_TypeError, |
|
28740
d3297e298211
some more error-message enhancements
Alex Martelli <aleaxit@gmail.com>
parents:
28738
diff
changeset
|
363 "compile() expected string without null bytes"); |
|
27781
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
364 return NULL; |
|
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
365 } |
|
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
366 |
|
1263
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
367 if (strcmp(startstr, "exec") == 0) |
|
5438
e926c331ebbf
Instead of importing graminit.h whenever one of the three grammar 'root'
Guido van Rossum <guido@python.org>
parents:
5421
diff
changeset
|
368 start = Py_file_input; |
|
1263
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
369 else if (strcmp(startstr, "eval") == 0) |
|
5438
e926c331ebbf
Instead of importing graminit.h whenever one of the three grammar 'root'
Guido van Rossum <guido@python.org>
parents:
5421
diff
changeset
|
370 start = Py_eval_input; |
|
2808
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
371 else if (strcmp(startstr, "single") == 0) |
|
5438
e926c331ebbf
Instead of importing graminit.h whenever one of the three grammar 'root'
Guido van Rossum <guido@python.org>
parents:
5421
diff
changeset
|
372 start = Py_single_input; |
|
1263
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
373 else { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
374 PyErr_SetString(PyExc_ValueError, |
| 15318 | 375 "compile() arg 3 must be 'exec' or 'eval' or 'single'"); |
|
1263
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
376 return NULL; |
|
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
377 } |
|
19355
d5acff178ad5
A fiddled version of the rest of Michael Hudson's SF patch
Tim Peters <tim.peters@gmail.com>
parents:
19343
diff
changeset
|
378 |
|
27878
be7683a6f521
- Finally fixed the bug in compile() and exec where a string ending
Guido van Rossum <guido@python.org>
parents:
27795
diff
changeset
|
379 if (supplied_flags & |
|
be7683a6f521
- Finally fixed the bug in compile() and exec where a string ending
Guido van Rossum <guido@python.org>
parents:
27795
diff
changeset
|
380 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT)) |
|
be7683a6f521
- Finally fixed the bug in compile() and exec where a string ending
Guido van Rossum <guido@python.org>
parents:
27795
diff
changeset
|
381 { |
|
19355
d5acff178ad5
A fiddled version of the rest of Michael Hudson's SF patch
Tim Peters <tim.peters@gmail.com>
parents:
19343
diff
changeset
|
382 PyErr_SetString(PyExc_ValueError, |
|
d5acff178ad5
A fiddled version of the rest of Michael Hudson's SF patch
Tim Peters <tim.peters@gmail.com>
parents:
19343
diff
changeset
|
383 "compile(): unrecognised flags"); |
|
d5acff178ad5
A fiddled version of the rest of Michael Hudson's SF patch
Tim Peters <tim.peters@gmail.com>
parents:
19343
diff
changeset
|
384 return NULL; |
|
d5acff178ad5
A fiddled version of the rest of Michael Hudson's SF patch
Tim Peters <tim.peters@gmail.com>
parents:
19343
diff
changeset
|
385 } |
|
d5acff178ad5
A fiddled version of the rest of Michael Hudson's SF patch
Tim Peters <tim.peters@gmail.com>
parents:
19343
diff
changeset
|
386 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */ |
|
d5acff178ad5
A fiddled version of the rest of Michael Hudson's SF patch
Tim Peters <tim.peters@gmail.com>
parents:
19343
diff
changeset
|
387 |
|
d5acff178ad5
A fiddled version of the rest of Michael Hudson's SF patch
Tim Peters <tim.peters@gmail.com>
parents:
19343
diff
changeset
|
388 if (!dont_inherit) { |
|
d5acff178ad5
A fiddled version of the rest of Michael Hudson's SF patch
Tim Peters <tim.peters@gmail.com>
parents:
19343
diff
changeset
|
389 PyEval_MergeCompilerFlags(&cf); |
|
d5acff178ad5
A fiddled version of the rest of Michael Hudson's SF patch
Tim Peters <tim.peters@gmail.com>
parents:
19343
diff
changeset
|
390 } |
|
27781
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
391 result = Py_CompileStringFlags(str, filename, start, &cf); |
|
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
392 Py_XDECREF(tmp); |
|
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
393 return result; |
|
1263
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
394 } |
|
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
395 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
396 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
|
397 "compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\ |
| 8561 | 398 \n\ |
| 399 Compile the source string (a Python module, statement or expression)\n\ | |
| 400 into a code object that can be executed by the exec statement or eval().\n\ | |
| 401 The filename will be used for run-time error messages.\n\ | |
| 402 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
|
403 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
|
404 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
|
405 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
|
406 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
|
407 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
|
408 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
|
409 in addition to any features explicitly specified."); |
| 8561 | 410 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
411 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
412 builtin_dir(PyObject *self, PyObject *args) |
| 86 | 413 { |
|
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
|
414 PyObject *arg = NULL; |
|
08c3c9edd99b
Make dir() wordier (see the new docstring). The new behavior is a mixed
Tim Peters <tim.peters@gmail.com>
parents:
19471
diff
changeset
|
415 |
|
26818
e094a03a80ff
SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents:
26612
diff
changeset
|
416 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg)) |
|
19665
08c3c9edd99b
Make dir() wordier (see the new docstring). The new behavior is a mixed
Tim Peters <tim.peters@gmail.com>
parents:
19471
diff
changeset
|
417 return NULL; |
|
19705
b7f6fbc087a7
At Guido's suggestion, here's a new C API function, PyObject_Dir(), like
Tim Peters <tim.peters@gmail.com>
parents:
19670
diff
changeset
|
418 return PyObject_Dir(arg); |
| 86 | 419 } |
| 420 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
421 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
|
422 "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
|
423 "\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
|
424 "Return an alphabetized list of names comprising (some of) the attributes\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
|
425 "of the given object, and of attributes reachable from it:\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
|
426 "\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
|
427 "No argument: the names in the current scope.\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
|
428 "Module object: the module attributes.\n" |
|
19670
78cfb993f274
builtin_dir(): Treat classic classes like types. Use PyDict_Keys instead
Tim Peters <tim.peters@gmail.com>
parents:
19665
diff
changeset
|
429 "Type or class object: its attributes, and recursively the attributes of\n" |
|
78cfb993f274
builtin_dir(): Treat classic classes like types. Use PyDict_Keys instead
Tim Peters <tim.peters@gmail.com>
parents:
19665
diff
changeset
|
430 " its bases.\n" |
|
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
|
431 "Otherwise: its attributes, its class's attributes, and recursively the\n" |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
432 " attributes of its class's base classes."); |
| 8561 | 433 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
434 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
435 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
|
436 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
437 PyObject *v, *w; |
|
2087
65146b52f16b
* Python/bltinmodule.c: restructured coerce(), divmod(), pow() to
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
438 |
|
26818
e094a03a80ff
SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents:
26612
diff
changeset
|
439 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w)) |
|
2087
65146b52f16b
* Python/bltinmodule.c: restructured coerce(), divmod(), pow() to
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
440 return NULL; |
|
8402
0cb0394c2edc
A bunch of functions are now properly implemented in abstract.c, and
Guido van Rossum <guido@python.org>
parents:
8287
diff
changeset
|
441 return PyNumber_Divmod(v, w); |
| 86 | 442 } |
| 443 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
444 PyDoc_STRVAR(divmod_doc, |
| 8561 | 445 "divmod(x, y) -> (div, mod)\n\ |
| 446 \n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
447 Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x."); |
| 8561 | 448 |
| 449 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
450 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
451 builtin_eval(PyObject *self, PyObject *args) |
| 86 | 452 { |
|
27781
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
453 PyObject *cmd, *result, *tmp = NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
454 PyObject *globals = Py_None, *locals = Py_None; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
455 char *str; |
|
19357
be9b50704e4c
Fix for bug [#452230] future division isn't propagated.
Tim Peters <tim.peters@gmail.com>
parents:
19355
diff
changeset
|
456 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
|
457 |
|
32463
d4a59230e93a
SF Bug #215126: Over restricted type checking on eval() function
Raymond Hettinger <python@rcn.com>
parents:
31837
diff
changeset
|
458 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals)) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
459 return NULL; |
|
32463
d4a59230e93a
SF Bug #215126: Over restricted type checking on eval() function
Raymond Hettinger <python@rcn.com>
parents:
31837
diff
changeset
|
460 if (locals != Py_None && !PyMapping_Check(locals)) { |
|
d4a59230e93a
SF Bug #215126: Over restricted type checking on eval() function
Raymond Hettinger <python@rcn.com>
parents:
31837
diff
changeset
|
461 PyErr_SetString(PyExc_TypeError, "locals must be a mapping"); |
|
32507
682f74088602
* Fix missing return after error message is set.
Raymond Hettinger <python@rcn.com>
parents:
32463
diff
changeset
|
462 return NULL; |
|
32463
d4a59230e93a
SF Bug #215126: Over restricted type checking on eval() function
Raymond Hettinger <python@rcn.com>
parents:
31837
diff
changeset
|
463 } |
|
d4a59230e93a
SF Bug #215126: Over restricted type checking on eval() function
Raymond Hettinger <python@rcn.com>
parents:
31837
diff
changeset
|
464 if (globals != Py_None && !PyDict_Check(globals)) { |
|
d4a59230e93a
SF Bug #215126: Over restricted type checking on eval() function
Raymond Hettinger <python@rcn.com>
parents:
31837
diff
changeset
|
465 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ? |
|
d4a59230e93a
SF Bug #215126: Over restricted type checking on eval() function
Raymond Hettinger <python@rcn.com>
parents:
31837
diff
changeset
|
466 "globals must be a real dict; try eval(expr, {}, mapping)" |
|
d4a59230e93a
SF Bug #215126: Over restricted type checking on eval() function
Raymond Hettinger <python@rcn.com>
parents:
31837
diff
changeset
|
467 : "globals must be a dict"); |
|
32507
682f74088602
* Fix missing return after error message is set.
Raymond Hettinger <python@rcn.com>
parents:
32463
diff
changeset
|
468 return NULL; |
|
32463
d4a59230e93a
SF Bug #215126: Over restricted type checking on eval() function
Raymond Hettinger <python@rcn.com>
parents:
31837
diff
changeset
|
469 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
470 if (globals == Py_None) { |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
471 globals = PyEval_GetGlobals(); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
472 if (locals == Py_None) |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
473 locals = PyEval_GetLocals(); |
|
2098
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2087
diff
changeset
|
474 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
475 else if (locals == Py_None) |
|
2098
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2087
diff
changeset
|
476 locals = globals; |
|
19357
be9b50704e4c
Fix for bug [#452230] future division isn't propagated.
Tim Peters <tim.peters@gmail.com>
parents:
19355
diff
changeset
|
477 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
478 if (PyDict_GetItemString(globals, "__builtins__") == NULL) { |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
479 if (PyDict_SetItemString(globals, "__builtins__", |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
480 PyEval_GetBuiltins()) != 0) |
|
2098
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2087
diff
changeset
|
481 return NULL; |
|
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2087
diff
changeset
|
482 } |
|
19357
be9b50704e4c
Fix for bug [#452230] future division isn't propagated.
Tim Peters <tim.peters@gmail.com>
parents:
19355
diff
changeset
|
483 |
|
18885
22456d0ee737
Fix for SF bug [ #443866 ] Evaluating func_code causing core dump
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18836
diff
changeset
|
484 if (PyCode_Check(cmd)) { |
|
21398
de125792bfaa
Fix for SF bug [ #492403 ] exec() segfaults on closure's func_code
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
21077
diff
changeset
|
485 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) { |
|
18885
22456d0ee737
Fix for SF bug [ #443866 ] Evaluating func_code causing core dump
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18836
diff
changeset
|
486 PyErr_SetString(PyExc_TypeError, |
|
22456d0ee737
Fix for SF bug [ #443866 ] Evaluating func_code causing core dump
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18836
diff
changeset
|
487 "code object passed to eval() may not contain free variables"); |
|
22456d0ee737
Fix for SF bug [ #443866 ] Evaluating func_code causing core dump
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18836
diff
changeset
|
488 return NULL; |
|
22456d0ee737
Fix for SF bug [ #443866 ] Evaluating func_code causing core dump
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18836
diff
changeset
|
489 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
490 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals); |
|
18885
22456d0ee737
Fix for SF bug [ #443866 ] Evaluating func_code causing core dump
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18836
diff
changeset
|
491 } |
|
19357
be9b50704e4c
Fix for bug [#452230] future division isn't propagated.
Tim Peters <tim.peters@gmail.com>
parents:
19355
diff
changeset
|
492 |
|
14696
85038a024b19
This patch adds a new Python C API called PyString_AsStringAndSize()
Marc-André Lemburg <mal@egenix.com>
parents:
14662
diff
changeset
|
493 if (!PyString_Check(cmd) && |
|
85038a024b19
This patch adds a new Python C API called PyString_AsStringAndSize()
Marc-André Lemburg <mal@egenix.com>
parents:
14662
diff
changeset
|
494 !PyUnicode_Check(cmd)) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
495 PyErr_SetString(PyExc_TypeError, |
| 15318 | 496 "eval() arg 1 must be a string or code object"); |
| 86 | 497 return NULL; |
| 498 } | |
|
27781
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
499 cf.cf_flags = 0; |
|
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
500 |
|
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
501 #ifdef Py_USING_UNICODE |
|
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
502 if (PyUnicode_Check(cmd)) { |
|
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
503 tmp = PyUnicode_AsUTF8String(cmd); |
|
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
504 if (tmp == NULL) |
|
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
505 return NULL; |
|
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
506 cmd = tmp; |
|
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
507 cf.cf_flags |= PyCF_SOURCE_IS_UTF8; |
|
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
508 } |
|
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
509 #endif |
|
14696
85038a024b19
This patch adds a new Python C API called PyString_AsStringAndSize()
Marc-André Lemburg <mal@egenix.com>
parents:
14662
diff
changeset
|
510 if (PyString_AsStringAndSize(cmd, &str, NULL)) |
|
959
68b302ad84a1
use getargs() in more cases;
Guido van Rossum <guido@python.org>
parents:
955
diff
changeset
|
511 return NULL; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
512 while (*str == ' ' || *str == '\t') |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
513 str++; |
|
19357
be9b50704e4c
Fix for bug [#452230] future division isn't propagated.
Tim Peters <tim.peters@gmail.com>
parents:
19355
diff
changeset
|
514 |
|
be9b50704e4c
Fix for bug [#452230] future division isn't propagated.
Tim Peters <tim.peters@gmail.com>
parents:
19355
diff
changeset
|
515 (void)PyEval_MergeCompilerFlags(&cf); |
|
27781
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
516 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf); |
|
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
517 Py_XDECREF(tmp); |
|
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
518 return result; |
| 86 | 519 } |
| 520 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
521 PyDoc_STRVAR(eval_doc, |
| 8561 | 522 "eval(source[, globals[, locals]]) -> value\n\ |
| 523 \n\ | |
| 524 Evaluate the source in the context of globals and locals.\n\ | |
| 525 The source may be a string representing a Python expression\n\ | |
| 526 or a code object as returned by compile().\n\ | |
|
32463
d4a59230e93a
SF Bug #215126: Over restricted type checking on eval() function
Raymond Hettinger <python@rcn.com>
parents:
31837
diff
changeset
|
527 The globals must be a dictionary and locals can be any mappping,\n\ |
|
d4a59230e93a
SF Bug #215126: Over restricted type checking on eval() function
Raymond Hettinger <python@rcn.com>
parents:
31837
diff
changeset
|
528 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
|
529 If only globals is given, locals defaults to it.\n"); |
| 8561 | 530 |
| 531 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
532 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
533 builtin_execfile(PyObject *self, PyObject *args) |
| 673 | 534 { |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
535 char *filename; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
536 PyObject *globals = Py_None, *locals = Py_None; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
537 PyObject *res; |
|
19726
5487d9d53a0e
builtin_execfile(): initialize another local that the GCC on leroy
Guido van Rossum <guido@python.org>
parents:
19705
diff
changeset
|
538 FILE* fp = NULL; |
|
18611
fdb36a0c7e6e
Part way to allowing "from __future__ import generators" to communicate
Tim Peters <tim.peters@gmail.com>
parents:
18436
diff
changeset
|
539 PyCompilerFlags cf; |
|
19053
2bb242dc69d8
Patch #448227: Raise an exception when a directory is passed to execfile.
Martin v. Löwis <martin@v.loewis.de>
parents:
18933
diff
changeset
|
540 int exists; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
541 |
|
32890
b8c2aa2be19a
Completed the patch for Bug #215126.
Raymond Hettinger <python@rcn.com>
parents:
32759
diff
changeset
|
542 if (!PyArg_ParseTuple(args, "s|O!O:execfile", |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
543 &filename, |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
544 &PyDict_Type, &globals, |
|
32890
b8c2aa2be19a
Completed the patch for Bug #215126.
Raymond Hettinger <python@rcn.com>
parents:
32759
diff
changeset
|
545 &locals)) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
546 return NULL; |
|
32890
b8c2aa2be19a
Completed the patch for Bug #215126.
Raymond Hettinger <python@rcn.com>
parents:
32759
diff
changeset
|
547 if (locals != Py_None && !PyMapping_Check(locals)) { |
|
b8c2aa2be19a
Completed the patch for Bug #215126.
Raymond Hettinger <python@rcn.com>
parents:
32759
diff
changeset
|
548 PyErr_SetString(PyExc_TypeError, "locals must be a mapping"); |
|
b8c2aa2be19a
Completed the patch for Bug #215126.
Raymond Hettinger <python@rcn.com>
parents:
32759
diff
changeset
|
549 return NULL; |
|
b8c2aa2be19a
Completed the patch for Bug #215126.
Raymond Hettinger <python@rcn.com>
parents:
32759
diff
changeset
|
550 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
551 if (globals == Py_None) { |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
552 globals = PyEval_GetGlobals(); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
553 if (locals == Py_None) |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
554 locals = PyEval_GetLocals(); |
|
2098
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2087
diff
changeset
|
555 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
556 else if (locals == Py_None) |
|
2098
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2087
diff
changeset
|
557 locals = globals; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
558 if (PyDict_GetItemString(globals, "__builtins__") == NULL) { |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
559 if (PyDict_SetItemString(globals, "__builtins__", |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
560 PyEval_GetBuiltins()) != 0) |
|
2098
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2087
diff
changeset
|
561 return NULL; |
|
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2087
diff
changeset
|
562 } |
|
19053
2bb242dc69d8
Patch #448227: Raise an exception when a directory is passed to execfile.
Martin v. Löwis <martin@v.loewis.de>
parents:
18933
diff
changeset
|
563 |
|
2bb242dc69d8
Patch #448227: Raise an exception when a directory is passed to execfile.
Martin v. Löwis <martin@v.loewis.de>
parents:
18933
diff
changeset
|
564 exists = 0; |
|
2bb242dc69d8
Patch #448227: Raise an exception when a directory is passed to execfile.
Martin v. Löwis <martin@v.loewis.de>
parents:
18933
diff
changeset
|
565 /* Test for existence or directory. */ |
|
22205
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
566 #if defined(PLAN9) |
|
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
567 { |
|
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
568 Dir *d; |
|
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
569 |
|
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
570 if ((d = dirstat(filename))!=nil) { |
|
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
571 if(d->mode & DMDIR) |
|
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
572 werrstr("is a directory"); |
|
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
573 else |
|
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
574 exists = 1; |
|
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
575 free(d); |
|
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
576 } |
|
19053
2bb242dc69d8
Patch #448227: Raise an exception when a directory is passed to execfile.
Martin v. Löwis <martin@v.loewis.de>
parents:
18933
diff
changeset
|
577 } |
|
22205
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
578 #elif defined(RISCOS) |
|
20654
edd9d0b3c47e
SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents:
20471
diff
changeset
|
579 if (object_exists(filename)) { |
|
edd9d0b3c47e
SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents:
20471
diff
changeset
|
580 if (isdir(filename)) |
|
edd9d0b3c47e
SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents:
20471
diff
changeset
|
581 errno = EISDIR; |
|
edd9d0b3c47e
SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents:
20471
diff
changeset
|
582 else |
|
edd9d0b3c47e
SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents:
20471
diff
changeset
|
583 exists = 1; |
|
edd9d0b3c47e
SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents:
20471
diff
changeset
|
584 } |
|
22205
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
585 #else /* standard Posix */ |
|
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
586 { |
|
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
587 struct stat s; |
|
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
588 if (stat(filename, &s) == 0) { |
|
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
589 if (S_ISDIR(s.st_mode)) |
|
31837
81117923ae8f
OS/2 VACPP build updates/fixes
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
31445
diff
changeset
|
590 # if defined(PYOS_OS2) && defined(PYCC_VACPP) |
|
22205
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
591 errno = EOS2ERR; |
|
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
592 # else |
|
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
593 errno = EISDIR; |
|
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
594 # endif |
|
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
595 else |
|
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
596 exists = 1; |
|
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
597 } |
|
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
598 } |
|
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
599 #endif |
|
19053
2bb242dc69d8
Patch #448227: Raise an exception when a directory is passed to execfile.
Martin v. Löwis <martin@v.loewis.de>
parents:
18933
diff
changeset
|
600 |
|
2bb242dc69d8
Patch #448227: Raise an exception when a directory is passed to execfile.
Martin v. Löwis <martin@v.loewis.de>
parents:
18933
diff
changeset
|
601 if (exists) { |
|
2bb242dc69d8
Patch #448227: Raise an exception when a directory is passed to execfile.
Martin v. Löwis <martin@v.loewis.de>
parents:
18933
diff
changeset
|
602 Py_BEGIN_ALLOW_THREADS |
|
23029
8291473fde3e
Mass checkin of universal newline support.
Jack Jansen <jack.jansen@cwi.nl>
parents:
22785
diff
changeset
|
603 fp = fopen(filename, "r" PY_STDIOTEXTMODE); |
|
19053
2bb242dc69d8
Patch #448227: Raise an exception when a directory is passed to execfile.
Martin v. Löwis <martin@v.loewis.de>
parents:
18933
diff
changeset
|
604 Py_END_ALLOW_THREADS |
|
2bb242dc69d8
Patch #448227: Raise an exception when a directory is passed to execfile.
Martin v. Löwis <martin@v.loewis.de>
parents:
18933
diff
changeset
|
605 |
|
2bb242dc69d8
Patch #448227: Raise an exception when a directory is passed to execfile.
Martin v. Löwis <martin@v.loewis.de>
parents:
18933
diff
changeset
|
606 if (fp == NULL) { |
|
2bb242dc69d8
Patch #448227: Raise an exception when a directory is passed to execfile.
Martin v. Löwis <martin@v.loewis.de>
parents:
18933
diff
changeset
|
607 exists = 0; |
|
2bb242dc69d8
Patch #448227: Raise an exception when a directory is passed to execfile.
Martin v. Löwis <martin@v.loewis.de>
parents:
18933
diff
changeset
|
608 } |
|
2bb242dc69d8
Patch #448227: Raise an exception when a directory is passed to execfile.
Martin v. Löwis <martin@v.loewis.de>
parents:
18933
diff
changeset
|
609 } |
|
2bb242dc69d8
Patch #448227: Raise an exception when a directory is passed to execfile.
Martin v. Löwis <martin@v.loewis.de>
parents:
18933
diff
changeset
|
610 |
|
2bb242dc69d8
Patch #448227: Raise an exception when a directory is passed to execfile.
Martin v. Löwis <martin@v.loewis.de>
parents:
18933
diff
changeset
|
611 if (!exists) { |
|
25046
434bc1dea4f8
execfile should call PyErr_SetFromErrnoWithFilename instead of
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
24863
diff
changeset
|
612 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename); |
| 673 | 613 return NULL; |
| 614 } | |
|
18611
fdb36a0c7e6e
Part way to allowing "from __future__ import generators" to communicate
Tim Peters <tim.peters@gmail.com>
parents:
18436
diff
changeset
|
615 cf.cf_flags = 0; |
|
fdb36a0c7e6e
Part way to allowing "from __future__ import generators" to communicate
Tim Peters <tim.peters@gmail.com>
parents:
18436
diff
changeset
|
616 if (PyEval_MergeCompilerFlags(&cf)) |
|
17641
9be7758a8c94
Fix buglet reported on c.l.py: map(fnc, file.xreadlines()) blows up.
Tim Peters <tim.peters@gmail.com>
parents:
17597
diff
changeset
|
617 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals, |
|
17125
2054cea38754
Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
17111
diff
changeset
|
618 locals, 1, &cf); |
|
18611
fdb36a0c7e6e
Part way to allowing "from __future__ import generators" to communicate
Tim Peters <tim.peters@gmail.com>
parents:
18436
diff
changeset
|
619 else |
|
17641
9be7758a8c94
Fix buglet reported on c.l.py: map(fnc, file.xreadlines()) blows up.
Tim Peters <tim.peters@gmail.com>
parents:
17597
diff
changeset
|
620 res = PyRun_FileEx(fp, filename, Py_file_input, globals, |
|
17125
2054cea38754
Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
17111
diff
changeset
|
621 locals, 1); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
622 return res; |
| 673 | 623 } |
| 624 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
625 PyDoc_STRVAR(execfile_doc, |
| 8561 | 626 "execfile(filename[, globals[, locals]])\n\ |
| 627 \n\ | |
| 628 Read and execute a Python script from a file.\n\ | |
| 629 The globals and locals are dictionaries, defaulting to the current\n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
630 globals and locals. If only globals is given, locals defaults to it."); |
| 8561 | 631 |
| 632 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
633 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
634 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
|
635 { |
|
8581
221667f89064
Experimental feature: add default argument to getattr().
Guido van Rossum <guido@python.org>
parents:
8561
diff
changeset
|
636 PyObject *v, *result, *dflt = NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
637 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
|
638 |
|
26818
e094a03a80ff
SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents:
26612
diff
changeset
|
639 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt)) |
|
644
59f9325bb8ec
Added getattr and setattr built-in functions.
Guido van Rossum <guido@python.org>
parents:
606
diff
changeset
|
640 return NULL; |
|
19343
7257e87e0720
Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents:
19301
diff
changeset
|
641 #ifdef Py_USING_UNICODE |
|
18888
f12e1a766a14
Fix for SF byg [ #420304 ] getattr function w/ default
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18885
diff
changeset
|
642 if (PyUnicode_Check(name)) { |
|
f12e1a766a14
Fix for SF byg [ #420304 ] getattr function w/ default
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18885
diff
changeset
|
643 name = _PyUnicode_AsDefaultEncodedString(name, NULL); |
|
f12e1a766a14
Fix for SF byg [ #420304 ] getattr function w/ default
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18885
diff
changeset
|
644 if (name == NULL) |
|
f12e1a766a14
Fix for SF byg [ #420304 ] getattr function w/ default
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18885
diff
changeset
|
645 return NULL; |
|
f12e1a766a14
Fix for SF byg [ #420304 ] getattr function w/ default
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18885
diff
changeset
|
646 } |
|
19343
7257e87e0720
Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents:
19301
diff
changeset
|
647 #endif |
|
18888
f12e1a766a14
Fix for SF byg [ #420304 ] getattr function w/ default
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18885
diff
changeset
|
648 |
|
f12e1a766a14
Fix for SF byg [ #420304 ] getattr function w/ default
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18885
diff
changeset
|
649 if (!PyString_Check(name)) { |
|
f12e1a766a14
Fix for SF byg [ #420304 ] getattr function w/ default
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18885
diff
changeset
|
650 PyErr_SetString(PyExc_TypeError, |
|
28740
d3297e298211
some more error-message enhancements
Alex Martelli <aleaxit@gmail.com>
parents:
28738
diff
changeset
|
651 "getattr(): attribute name must be string"); |
|
18888
f12e1a766a14
Fix for SF byg [ #420304 ] getattr function w/ default
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18885
diff
changeset
|
652 return NULL; |
|
f12e1a766a14
Fix for SF byg [ #420304 ] getattr function w/ default
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18885
diff
changeset
|
653 } |
|
8581
221667f89064
Experimental feature: add default argument to getattr().
Guido van Rossum <guido@python.org>
parents:
8561
diff
changeset
|
654 result = PyObject_GetAttr(v, name); |
|
20471
bbdc0abfbb13
SF patch #471852 (anonymous) notes that getattr(obj, name, default)
Guido van Rossum <guido@python.org>
parents:
20307
diff
changeset
|
655 if (result == NULL && dflt != NULL && |
|
bbdc0abfbb13
SF patch #471852 (anonymous) notes that getattr(obj, name, default)
Guido van Rossum <guido@python.org>
parents:
20307
diff
changeset
|
656 PyErr_ExceptionMatches(PyExc_AttributeError)) |
|
bbdc0abfbb13
SF patch #471852 (anonymous) notes that getattr(obj, name, default)
Guido van Rossum <guido@python.org>
parents:
20307
diff
changeset
|
657 { |
|
8581
221667f89064
Experimental feature: add default argument to getattr().
Guido van Rossum <guido@python.org>
parents:
8561
diff
changeset
|
658 PyErr_Clear(); |
|
221667f89064
Experimental feature: add default argument to getattr().
Guido van Rossum <guido@python.org>
parents:
8561
diff
changeset
|
659 Py_INCREF(dflt); |
|
221667f89064
Experimental feature: add default argument to getattr().
Guido van Rossum <guido@python.org>
parents:
8561
diff
changeset
|
660 result = dflt; |
|
221667f89064
Experimental feature: add default argument to getattr().
Guido van Rossum <guido@python.org>
parents:
8561
diff
changeset
|
661 } |
|
221667f89064
Experimental feature: add default argument to getattr().
Guido van Rossum <guido@python.org>
parents:
8561
diff
changeset
|
662 return result; |
|
1257
1cabc2b6c970
* Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents:
1252
diff
changeset
|
663 } |
|
1cabc2b6c970
* Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents:
1252
diff
changeset
|
664 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
665 PyDoc_STRVAR(getattr_doc, |
|
8581
221667f89064
Experimental feature: add default argument to getattr().
Guido van Rossum <guido@python.org>
parents:
8561
diff
changeset
|
666 "getattr(object, name[, default]) -> value\n\ |
| 8561 | 667 \n\ |
|
8581
221667f89064
Experimental feature: add default argument to getattr().
Guido van Rossum <guido@python.org>
parents:
8561
diff
changeset
|
668 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
|
669 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
|
670 exist; without it, an exception is raised in that case."); |
| 8561 | 671 |
| 672 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
673 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
|
674 builtin_globals(PyObject *self) |
|
2808
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
675 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
676 PyObject *d; |
|
2808
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
677 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
678 d = PyEval_GetGlobals(); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
679 Py_INCREF(d); |
|
2808
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
680 return d; |
|
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
681 } |
|
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
682 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
683 PyDoc_STRVAR(globals_doc, |
| 8561 | 684 "globals() -> dictionary\n\ |
| 685 \n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
686 Return the dictionary containing the current scope's global variables."); |
| 8561 | 687 |
| 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_hasattr(PyObject *self, PyObject *args) |
|
1257
1cabc2b6c970
* Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents:
1252
diff
changeset
|
691 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
692 PyObject *v; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
693 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
|
694 |
|
26818
e094a03a80ff
SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents:
26612
diff
changeset
|
695 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name)) |
|
1257
1cabc2b6c970
* Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents:
1252
diff
changeset
|
696 return NULL; |
|
19343
7257e87e0720
Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents:
19301
diff
changeset
|
697 #ifdef Py_USING_UNICODE |
|
18890
fb837c5ae5d3
Do for hasattr() what was done for getattr()
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18888
diff
changeset
|
698 if (PyUnicode_Check(name)) { |
|
fb837c5ae5d3
Do for hasattr() what was done for getattr()
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18888
diff
changeset
|
699 name = _PyUnicode_AsDefaultEncodedString(name, NULL); |
|
fb837c5ae5d3
Do for hasattr() what was done for getattr()
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18888
diff
changeset
|
700 if (name == NULL) |
|
fb837c5ae5d3
Do for hasattr() what was done for getattr()
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18888
diff
changeset
|
701 return NULL; |
|
fb837c5ae5d3
Do for hasattr() what was done for getattr()
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18888
diff
changeset
|
702 } |
|
19343
7257e87e0720
Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents:
19301
diff
changeset
|
703 #endif |
|
18890
fb837c5ae5d3
Do for hasattr() what was done for getattr()
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18888
diff
changeset
|
704 |
|
fb837c5ae5d3
Do for hasattr() what was done for getattr()
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18888
diff
changeset
|
705 if (!PyString_Check(name)) { |
|
fb837c5ae5d3
Do for hasattr() what was done for getattr()
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18888
diff
changeset
|
706 PyErr_SetString(PyExc_TypeError, |
|
28740
d3297e298211
some more error-message enhancements
Alex Martelli <aleaxit@gmail.com>
parents:
28738
diff
changeset
|
707 "hasattr(): attribute name must be string"); |
|
18890
fb837c5ae5d3
Do for hasattr() what was done for getattr()
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18888
diff
changeset
|
708 return NULL; |
|
fb837c5ae5d3
Do for hasattr() what was done for getattr()
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18888
diff
changeset
|
709 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
710 v = PyObject_GetAttr(v, name); |
|
1257
1cabc2b6c970
* Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents:
1252
diff
changeset
|
711 if (v == NULL) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
712 PyErr_Clear(); |
|
8402
0cb0394c2edc
A bunch of functions are now properly implemented in abstract.c, and
Guido van Rossum <guido@python.org>
parents:
8287
diff
changeset
|
713 Py_INCREF(Py_False); |
|
0cb0394c2edc
A bunch of functions are now properly implemented in abstract.c, and
Guido van Rossum <guido@python.org>
parents:
8287
diff
changeset
|
714 return Py_False; |
|
1257
1cabc2b6c970
* Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents:
1252
diff
changeset
|
715 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
716 Py_DECREF(v); |
|
8402
0cb0394c2edc
A bunch of functions are now properly implemented in abstract.c, and
Guido van Rossum <guido@python.org>
parents:
8287
diff
changeset
|
717 Py_INCREF(Py_True); |
|
0cb0394c2edc
A bunch of functions are now properly implemented in abstract.c, and
Guido van Rossum <guido@python.org>
parents:
8287
diff
changeset
|
718 return Py_True; |
|
644
59f9325bb8ec
Added getattr and setattr built-in functions.
Guido van Rossum <guido@python.org>
parents:
606
diff
changeset
|
719 } |
|
59f9325bb8ec
Added getattr and setattr built-in functions.
Guido van Rossum <guido@python.org>
parents:
606
diff
changeset
|
720 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
721 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
|
722 "hasattr(object, name) -> bool\n\ |
| 8561 | 723 \n\ |
| 724 Return whether the object has an attribute with the given name.\n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
725 (This is done by calling getattr(object, name) and catching exceptions.)"); |
| 8561 | 726 |
| 727 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
728 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
|
729 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
|
730 { |
| 13078 | 731 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
|
732 } |
|
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
733 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
734 PyDoc_STRVAR(id_doc, |
| 8561 | 735 "id(object) -> integer\n\ |
| 736 \n\ | |
| 737 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
|
738 simultaneously existing objects. (Hint: it's the object's memory address.)"); |
| 8561 | 739 |
| 740 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
741 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
742 builtin_map(PyObject *self, PyObject *args) |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
743 { |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
744 typedef struct { |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
745 PyObject *it; /* the iterator object */ |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
746 int saw_StopIteration; /* bool: did the iterator end? */ |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
747 } sequence; |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
748 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
749 PyObject *func, *result; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
750 sequence *seqs = NULL, *sqp; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
751 int n, len; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
752 register int i, j; |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
753 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
754 n = PyTuple_Size(args); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
755 if (n < 2) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
756 PyErr_SetString(PyExc_TypeError, |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
757 "map() requires at least two args"); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
758 return NULL; |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
759 } |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
760 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
761 func = PyTuple_GetItem(args, 0); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
762 n--; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
763 |
|
8661
30fbf18af29e
Small changes to map() and filter():
Guido van Rossum <guido@python.org>
parents:
8589
diff
changeset
|
764 if (func == Py_None && n == 1) { |
|
30fbf18af29e
Small changes to map() and filter():
Guido van Rossum <guido@python.org>
parents:
8589
diff
changeset
|
765 /* map(None, S) is the same as list(S). */ |
|
30fbf18af29e
Small changes to map() and filter():
Guido van Rossum <guido@python.org>
parents:
8589
diff
changeset
|
766 return PySequence_List(PyTuple_GetItem(args, 1)); |
|
30fbf18af29e
Small changes to map() and filter():
Guido van Rossum <guido@python.org>
parents:
8589
diff
changeset
|
767 } |
|
30fbf18af29e
Small changes to map() and filter():
Guido van Rossum <guido@python.org>
parents:
8589
diff
changeset
|
768 |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
769 /* Get space for sequence descriptors. Must NULL out the iterator |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
770 * pointers so that jumping to Fail_2 later doesn't see trash. |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
771 */ |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
772 if ((seqs = PyMem_NEW(sequence, n)) == NULL) { |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
773 PyErr_NoMemory(); |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
774 return NULL; |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
775 } |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
776 for (i = 0; i < n; ++i) { |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
777 seqs[i].it = (PyObject*)NULL; |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
778 seqs[i].saw_StopIteration = 0; |
|
1375
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
779 } |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
780 |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
781 /* Do a first pass to obtain iterators for the arguments, and set len |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
782 * to the largest of their lengths. |
|
17641
9be7758a8c94
Fix buglet reported on c.l.py: map(fnc, file.xreadlines()) blows up.
Tim Peters <tim.peters@gmail.com>
parents:
17597
diff
changeset
|
783 */ |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
784 len = 0; |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
785 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) { |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
786 PyObject *curseq; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
787 int curlen; |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
788 |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
789 /* Get iterator. */ |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
790 curseq = PyTuple_GetItem(args, i+1); |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
791 sqp->it = PyObject_GetIter(curseq); |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
792 if (sqp->it == NULL) { |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
793 static char errmsg[] = |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
794 "argument %d to map() must support iteration"; |
|
5388
13a30cea8dbf
Avoid sprintf buffer overflow if more than 9999 arguments.
Guido van Rossum <guido@python.org>
parents:
5373
diff
changeset
|
795 char errbuf[sizeof(errmsg) + 25]; |
|
21077
379fc66f4c96
Use PyOS_snprintf instead of sprintf.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20871
diff
changeset
|
796 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2); |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
797 PyErr_SetString(PyExc_TypeError, errbuf); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
798 goto Fail_2; |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
799 } |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
800 |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
801 /* Update len. */ |
|
31343
0c1d2062dee3
Apply map/zip pre-sizing optimization to a broader class of objects.
Raymond Hettinger <python@rcn.com>
parents:
31210
diff
changeset
|
802 curlen = PyObject_Size(curseq); |
|
0c1d2062dee3
Apply map/zip pre-sizing optimization to a broader class of objects.
Raymond Hettinger <python@rcn.com>
parents:
31210
diff
changeset
|
803 if (curlen < 0) { |
|
0c1d2062dee3
Apply map/zip pre-sizing optimization to a broader class of objects.
Raymond Hettinger <python@rcn.com>
parents:
31210
diff
changeset
|
804 PyErr_Clear(); |
|
0c1d2062dee3
Apply map/zip pre-sizing optimization to a broader class of objects.
Raymond Hettinger <python@rcn.com>
parents:
31210
diff
changeset
|
805 curlen = 8; /* arbitrary */ |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
806 } |
|
31343
0c1d2062dee3
Apply map/zip pre-sizing optimization to a broader class of objects.
Raymond Hettinger <python@rcn.com>
parents:
31210
diff
changeset
|
807 if (curlen > len) |
|
0c1d2062dee3
Apply map/zip pre-sizing optimization to a broader class of objects.
Raymond Hettinger <python@rcn.com>
parents:
31210
diff
changeset
|
808 len = curlen; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
809 } |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
810 |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
811 /* Get space for the result list. */ |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
812 if ((result = (PyObject *) PyList_New(len)) == NULL) |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
813 goto Fail_2; |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
814 |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
815 /* Iterate over the sequences until all have stopped. */ |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
816 for (i = 0; ; ++i) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
817 PyObject *alist, *item=NULL, *value; |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
818 int numactive = 0; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
819 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
820 if (func == Py_None && n == 1) |
|
2824
65c7105868f8
rename arglist to alist (conflict with new grammar symbol)
Guido van Rossum <guido@python.org>
parents:
2808
diff
changeset
|
821 alist = NULL; |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
822 else if ((alist = PyTuple_New(n)) == NULL) |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
823 goto Fail_1; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
824 |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
825 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) { |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
826 if (sqp->saw_StopIteration) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
827 Py_INCREF(Py_None); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
828 item = Py_None; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
829 } |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
830 else { |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
831 item = PyIter_Next(sqp->it); |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
832 if (item) |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
833 ++numactive; |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
834 else { |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
835 if (PyErr_Occurred()) { |
|
17683
e9a4e27e8d4e
Make PyIter_Next() a little smarter (wrt its knowledge of iterator
Tim Peters <tim.peters@gmail.com>
parents:
17677
diff
changeset
|
836 Py_XDECREF(alist); |
|
e9a4e27e8d4e
Make PyIter_Next() a little smarter (wrt its knowledge of iterator
Tim Peters <tim.peters@gmail.com>
parents:
17677
diff
changeset
|
837 goto Fail_1; |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
838 } |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
839 Py_INCREF(Py_None); |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
840 item = Py_None; |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
841 sqp->saw_StopIteration = 1; |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
842 } |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
843 } |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
844 if (alist) |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
845 PyTuple_SET_ITEM(alist, j, item); |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
846 else |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
847 break; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
848 } |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
849 |
|
2824
65c7105868f8
rename arglist to alist (conflict with new grammar symbol)
Guido van Rossum <guido@python.org>
parents:
2808
diff
changeset
|
850 if (!alist) |
|
65c7105868f8
rename arglist to alist (conflict with new grammar symbol)
Guido van Rossum <guido@python.org>
parents:
2808
diff
changeset
|
851 alist = item; |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
852 |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
853 if (numactive == 0) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
854 Py_DECREF(alist); |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
855 break; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
856 } |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
857 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
858 if (func == Py_None) |
|
2824
65c7105868f8
rename arglist to alist (conflict with new grammar symbol)
Guido van Rossum <guido@python.org>
parents:
2808
diff
changeset
|
859 value = alist; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
860 else { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
861 value = PyEval_CallObject(func, alist); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
862 Py_DECREF(alist); |
|
1375
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
863 if (value == NULL) |
|
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
864 goto Fail_1; |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
865 } |
|
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
866 if (i >= len) { |
|
9991
ddbbed8cb830
builtin_map(): A better fix for the previous leak plug (remember
Barry Warsaw <barry@python.org>
parents:
9980
diff
changeset
|
867 int status = PyList_Append(result, value); |
|
ddbbed8cb830
builtin_map(): A better fix for the previous leak plug (remember
Barry Warsaw <barry@python.org>
parents:
9980
diff
changeset
|
868 Py_DECREF(value); |
|
ddbbed8cb830
builtin_map(): A better fix for the previous leak plug (remember
Barry Warsaw <barry@python.org>
parents:
9980
diff
changeset
|
869 if (status < 0) |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
870 goto Fail_1; |
|
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
871 } |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
872 else if (PyList_SetItem(result, i, value) < 0) |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
873 goto Fail_1; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
874 } |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
875 |
|
8661
30fbf18af29e
Small changes to map() and filter():
Guido van Rossum <guido@python.org>
parents:
8589
diff
changeset
|
876 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0) |
|
30fbf18af29e
Small changes to map() and filter():
Guido van Rossum <guido@python.org>
parents:
8589
diff
changeset
|
877 goto Fail_1; |
|
30fbf18af29e
Small changes to map() and filter():
Guido van Rossum <guido@python.org>
parents:
8589
diff
changeset
|
878 |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
879 goto Succeed; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
880 |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
881 Fail_1: |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
882 Py_DECREF(result); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
883 Fail_2: |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
884 result = NULL; |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
885 Succeed: |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
886 assert(seqs); |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
887 for (i = 0; i < n; ++i) |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
888 Py_XDECREF(seqs[i].it); |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
889 PyMem_DEL(seqs); |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
890 return result; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
891 } |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
892 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
893 PyDoc_STRVAR(map_doc, |
| 8561 | 894 "map(function, sequence[, sequence, ...]) -> list\n\ |
| 895 \n\ | |
| 896 Return a list of the results of applying the function to the items of\n\ | |
| 897 the argument sequence(s). If more than one sequence is given, the\n\ | |
| 898 function is called with an argument list consisting of the corresponding\n\ | |
| 899 item of each sequence, substituting None for missing values when not all\n\ | |
| 900 sequences have the same length. If the function is None, return a list of\n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
901 the items of the sequence (or a list of tuples if more than one sequence)."); |
| 8561 | 902 |
| 903 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
904 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
905 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
|
906 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
907 PyObject *v; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
908 PyObject *name; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
909 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
|
910 |
|
26818
e094a03a80ff
SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents:
26612
diff
changeset
|
911 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value)) |
|
644
59f9325bb8ec
Added getattr and setattr built-in functions.
Guido van Rossum <guido@python.org>
parents:
606
diff
changeset
|
912 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
913 if (PyObject_SetAttr(v, name, value) != 0) |
|
644
59f9325bb8ec
Added getattr and setattr built-in functions.
Guido van Rossum <guido@python.org>
parents:
606
diff
changeset
|
914 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
915 Py_INCREF(Py_None); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
916 return Py_None; |
|
644
59f9325bb8ec
Added getattr and setattr built-in functions.
Guido van Rossum <guido@python.org>
parents:
606
diff
changeset
|
917 } |
|
59f9325bb8ec
Added getattr and setattr built-in functions.
Guido van Rossum <guido@python.org>
parents:
606
diff
changeset
|
918 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
919 PyDoc_STRVAR(setattr_doc, |
| 8561 | 920 "setattr(object, name, value)\n\ |
| 921 \n\ | |
| 922 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
|
923 ``x.y = v''."); |
| 8561 | 924 |
| 925 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
926 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
927 builtin_delattr(PyObject *self, PyObject *args) |
| 1843 | 928 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
929 PyObject *v; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
930 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
|
931 |
|
26818
e094a03a80ff
SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents:
26612
diff
changeset
|
932 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name)) |
| 1843 | 933 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
934 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0) |
| 1843 | 935 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
936 Py_INCREF(Py_None); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
937 return Py_None; |
| 1843 | 938 } |
| 939 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
940 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
|
941 "delattr(object, name)\n\ |
| 8561 | 942 \n\ |
| 943 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
|
944 ``del x.y''."); |
| 8561 | 945 |
| 946 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
947 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
|
948 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
|
949 { |
|
1cabc2b6c970
* Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents:
1252
diff
changeset
|
950 long x; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
951 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
952 x = PyObject_Hash(v); |
|
1257
1cabc2b6c970
* Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents:
1252
diff
changeset
|
953 if (x == -1) |
|
1cabc2b6c970
* Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents:
1252
diff
changeset
|
954 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
955 return PyInt_FromLong(x); |
|
1257
1cabc2b6c970
* Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents:
1252
diff
changeset
|
956 } |
|
1cabc2b6c970
* Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents:
1252
diff
changeset
|
957 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
958 PyDoc_STRVAR(hash_doc, |
| 8561 | 959 "hash(object) -> integer\n\ |
| 960 \n\ | |
| 961 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
|
962 the same hash value. The reverse is not necessarily true, but likely."); |
| 8561 | 963 |
| 964 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
965 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
|
966 builtin_hex(PyObject *self, PyObject *v) |
|
404
9cd38d1ac391
Made dir() more robust.
Guido van Rossum <guido@python.org>
parents:
385
diff
changeset
|
967 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
968 PyNumberMethods *nb; |
|
32759
d1777f51923b
Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
32526
diff
changeset
|
969 PyObject *res; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
970 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
971 if ((nb = v->ob_type->tp_as_number) == NULL || |
|
1049
2ed511171809
Made builtins int(), long(), float(), oct() and hex() more generic.
Guido van Rossum <guido@python.org>
parents:
972
diff
changeset
|
972 nb->nb_hex == NULL) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
973 PyErr_SetString(PyExc_TypeError, |
|
1049
2ed511171809
Made builtins int(), long(), float(), oct() and hex() more generic.
Guido van Rossum <guido@python.org>
parents:
972
diff
changeset
|
974 "hex() argument can't be converted to hex"); |
|
2ed511171809
Made builtins int(), long(), float(), oct() and hex() more generic.
Guido van Rossum <guido@python.org>
parents:
972
diff
changeset
|
975 return NULL; |
|
404
9cd38d1ac391
Made dir() more robust.
Guido van Rossum <guido@python.org>
parents:
385
diff
changeset
|
976 } |
|
32759
d1777f51923b
Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
32526
diff
changeset
|
977 res = (*nb->nb_hex)(v); |
|
d1777f51923b
Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
32526
diff
changeset
|
978 if (res && !PyString_Check(res)) { |
|
d1777f51923b
Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
32526
diff
changeset
|
979 PyErr_Format(PyExc_TypeError, |
|
d1777f51923b
Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
32526
diff
changeset
|
980 "__hex__ returned non-string (type %.200s)", |
|
d1777f51923b
Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
32526
diff
changeset
|
981 res->ob_type->tp_name); |
|
d1777f51923b
Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
32526
diff
changeset
|
982 Py_DECREF(res); |
|
d1777f51923b
Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
32526
diff
changeset
|
983 return NULL; |
|
d1777f51923b
Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
32526
diff
changeset
|
984 } |
|
d1777f51923b
Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
32526
diff
changeset
|
985 return res; |
|
404
9cd38d1ac391
Made dir() more robust.
Guido van Rossum <guido@python.org>
parents:
385
diff
changeset
|
986 } |
|
9cd38d1ac391
Made dir() more robust.
Guido van Rossum <guido@python.org>
parents:
385
diff
changeset
|
987 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
988 PyDoc_STRVAR(hex_doc, |
| 8561 | 989 "hex(number) -> string\n\ |
| 990 \n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
991 Return the hexadecimal representation of an integer or long integer."); |
| 8561 | 992 |
| 993 | |
|
13447
a89f7f268de4
Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents:
13446
diff
changeset
|
994 static PyObject *builtin_raw_input(PyObject *, PyObject *); |
|
1073
2c0432fcc270
Modified most (but not yet all) I/O to always go through sys.stdout or
Guido van Rossum <guido@python.org>
parents:
1049
diff
changeset
|
995 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
996 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
997 builtin_input(PyObject *self, PyObject *args) |
| 86 | 998 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
999 PyObject *line; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
1000 char *str; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1001 PyObject *res; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1002 PyObject *globals, *locals; |
|
31445
1219f1162d1d
Fix input() builtin function to respect compiler flags.
Hye-Shik Chang <hyeshik@gmail.com>
parents:
31345
diff
changeset
|
1003 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
|
1004 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
1005 line = builtin_raw_input(self, args); |
|
1073
2c0432fcc270
Modified most (but not yet all) I/O to always go through sys.stdout or
Guido van Rossum <guido@python.org>
parents:
1049
diff
changeset
|
1006 if (line == NULL) |
|
2c0432fcc270
Modified most (but not yet all) I/O to always go through sys.stdout or
Guido van Rossum <guido@python.org>
parents:
1049
diff
changeset
|
1007 return line; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1008 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str)) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
1009 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
1010 while (*str == ' ' || *str == '\t') |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
1011 str++; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1012 globals = PyEval_GetGlobals(); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1013 locals = PyEval_GetLocals(); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1014 if (PyDict_GetItemString(globals, "__builtins__") == NULL) { |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1015 if (PyDict_SetItemString(globals, "__builtins__", |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1016 PyEval_GetBuiltins()) != 0) |
|
2098
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2087
diff
changeset
|
1017 return NULL; |
|
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2087
diff
changeset
|
1018 } |
|
31445
1219f1162d1d
Fix input() builtin function to respect compiler flags.
Hye-Shik Chang <hyeshik@gmail.com>
parents:
31345
diff
changeset
|
1019 cf.cf_flags = 0; |
|
1219f1162d1d
Fix input() builtin function to respect compiler flags.
Hye-Shik Chang <hyeshik@gmail.com>
parents:
31345
diff
changeset
|
1020 PyEval_MergeCompilerFlags(&cf); |
|
1219f1162d1d
Fix input() builtin function to respect compiler flags.
Hye-Shik Chang <hyeshik@gmail.com>
parents:
31345
diff
changeset
|
1021 res = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf); |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1022 Py_DECREF(line); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
1023 return res; |
| 86 | 1024 } |
| 1025 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1026 PyDoc_STRVAR(input_doc, |
| 8561 | 1027 "input([prompt]) -> value\n\ |
| 1028 \n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1029 Equivalent to eval(raw_input(prompt))."); |
| 8561 | 1030 |
| 1031 | |
|
5092
cb7aadd9d9f2
Added intern() function.
Guido van Rossum <guido@python.org>
parents:
5010
diff
changeset
|
1032 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
1033 builtin_intern(PyObject *self, PyObject *args) |
|
5092
cb7aadd9d9f2
Added intern() function.
Guido van Rossum <guido@python.org>
parents:
5010
diff
changeset
|
1034 { |
|
cb7aadd9d9f2
Added intern() function.
Guido van Rossum <guido@python.org>
parents:
5010
diff
changeset
|
1035 PyObject *s; |
|
11882
dc65c5f6ad7c
Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents:
11800
diff
changeset
|
1036 if (!PyArg_ParseTuple(args, "S:intern", &s)) |
|
5092
cb7aadd9d9f2
Added intern() function.
Guido van Rossum <guido@python.org>
parents:
5010
diff
changeset
|
1037 return NULL; |
|
33019
5218bff56449
Subclasses of string can no longer be interned. The semantics of
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
32896
diff
changeset
|
1038 if (!PyString_CheckExact(s)) { |
|
5218bff56449
Subclasses of string can no longer be interned. The semantics of
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
32896
diff
changeset
|
1039 PyErr_SetString(PyExc_TypeError, |
|
5218bff56449
Subclasses of string can no longer be interned. The semantics of
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
32896
diff
changeset
|
1040 "can't intern subclass of string"); |
|
5218bff56449
Subclasses of string can no longer be interned. The semantics of
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
32896
diff
changeset
|
1041 return NULL; |
|
5218bff56449
Subclasses of string can no longer be interned. The semantics of
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
32896
diff
changeset
|
1042 } |
|
5092
cb7aadd9d9f2
Added intern() function.
Guido van Rossum <guido@python.org>
parents:
5010
diff
changeset
|
1043 Py_INCREF(s); |
|
cb7aadd9d9f2
Added intern() function.
Guido van Rossum <guido@python.org>
parents:
5010
diff
changeset
|
1044 PyString_InternInPlace(&s); |
|
cb7aadd9d9f2
Added intern() function.
Guido van Rossum <guido@python.org>
parents:
5010
diff
changeset
|
1045 return s; |
|
cb7aadd9d9f2
Added intern() function.
Guido van Rossum <guido@python.org>
parents:
5010
diff
changeset
|
1046 } |
|
cb7aadd9d9f2
Added intern() function.
Guido van Rossum <guido@python.org>
parents:
5010
diff
changeset
|
1047 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1048 PyDoc_STRVAR(intern_doc, |
| 8561 | 1049 "intern(string) -> string\n\ |
| 1050 \n\ | |
| 1051 ``Intern'' the given string. This enters the string in the (global)\n\ | |
| 1052 table of interned strings whose purpose is to speed up dictionary lookups.\n\ | |
| 1053 Return the string itself or the previously interned string object with the\n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1054 same value."); |
| 8561 | 1055 |
| 1056 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1057 static PyObject * |
|
17597
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1058 builtin_iter(PyObject *self, PyObject *args) |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1059 { |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1060 PyObject *v, *w = NULL; |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1061 |
|
26818
e094a03a80ff
SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents:
26612
diff
changeset
|
1062 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w)) |
|
17597
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1063 return NULL; |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1064 if (w == NULL) |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1065 return PyObject_GetIter(v); |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1066 if (!PyCallable_Check(v)) { |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1067 PyErr_SetString(PyExc_TypeError, |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1068 "iter(v, w): v must be callable"); |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1069 return NULL; |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1070 } |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1071 return PyCallIter_New(v, w); |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1072 } |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1073 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1074 PyDoc_STRVAR(iter_doc, |
|
17597
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1075 "iter(collection) -> iterator\n\ |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1076 iter(callable, sentinel) -> iterator\n\ |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1077 \n\ |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1078 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
|
1079 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
|
1080 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
|
1081 |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1082 |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1083 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
|
1084 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
|
1085 { |
|
8589
97dc6aa532e7
Fix a stupid little bug: len() of an unsized returns -1 and leaves an
Guido van Rossum <guido@python.org>
parents:
8581
diff
changeset
|
1086 long res; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
1087 |
|
13576
61e4c29d53d8
replace PyXXX_Length calls with PyXXX_Size calls
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
13447
diff
changeset
|
1088 res = PyObject_Size(v); |
|
8589
97dc6aa532e7
Fix a stupid little bug: len() of an unsized returns -1 and leaves an
Guido van Rossum <guido@python.org>
parents:
8581
diff
changeset
|
1089 if (res < 0 && PyErr_Occurred()) |
|
97dc6aa532e7
Fix a stupid little bug: len() of an unsized returns -1 and leaves an
Guido van Rossum <guido@python.org>
parents:
8581
diff
changeset
|
1090 return NULL; |
|
97dc6aa532e7
Fix a stupid little bug: len() of an unsized returns -1 and leaves an
Guido van Rossum <guido@python.org>
parents:
8581
diff
changeset
|
1091 return PyInt_FromLong(res); |
| 86 | 1092 } |
| 1093 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1094 PyDoc_STRVAR(len_doc, |
| 8561 | 1095 "len(object) -> integer\n\ |
| 1096 \n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1097 Return the number of items of a sequence or mapping."); |
| 8561 | 1098 |
| 1099 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1100 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
|
1101 builtin_locals(PyObject *self) |
|
2808
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
1102 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1103 PyObject *d; |
|
2808
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
1104 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1105 d = PyEval_GetLocals(); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1106 Py_INCREF(d); |
|
2808
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
1107 return d; |
|
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
1108 } |
|
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
1109 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1110 PyDoc_STRVAR(locals_doc, |
| 8561 | 1111 "locals() -> dictionary\n\ |
| 1112 \n\ | |
|
27076
753306f9b0a0
SF bug #655271: Slightly modify locals() doc
Raymond Hettinger <python@rcn.com>
parents:
26824
diff
changeset
|
1113 Update and return a dictionary containing the current scope's local variables."); |
| 8561 | 1114 |
| 1115 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1116 static PyObject * |
|
15949
76ad2a9a3e53
Use rich comparisons in min and max.
Guido van Rossum <guido@python.org>
parents:
15832
diff
changeset
|
1117 min_max(PyObject *args, int op) |
| 86 | 1118 { |
|
33099
ce016d0ec701
Patch #1005468: Disambiguate "min() or max()" exception string.
Martin v. Löwis <martin@v.loewis.de>
parents:
33019
diff
changeset
|
1119 const char *name = op == Py_LT ? "min" : "max"; |
|
17667
76ee8b62ee2a
Generalize max(seq) and min(seq) to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17654
diff
changeset
|
1120 PyObject *v, *w, *x, *it; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
1121 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1122 if (PyTuple_Size(args) > 1) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
1123 v = args; |
|
33099
ce016d0ec701
Patch #1005468: Disambiguate "min() or max()" exception string.
Martin v. Löwis <martin@v.loewis.de>
parents:
33019
diff
changeset
|
1124 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v)) |
| 86 | 1125 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
|
1126 |
|
17667
76ee8b62ee2a
Generalize max(seq) and min(seq) to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17654
diff
changeset
|
1127 it = PyObject_GetIter(v); |
|
76ee8b62ee2a
Generalize max(seq) and min(seq) to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17654
diff
changeset
|
1128 if (it == NULL) |
| 86 | 1129 return NULL; |
|
17667
76ee8b62ee2a
Generalize max(seq) and min(seq) to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17654
diff
changeset
|
1130 |
|
76ee8b62ee2a
Generalize max(seq) and min(seq) to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17654
diff
changeset
|
1131 w = NULL; /* the result */ |
|
17683
e9a4e27e8d4e
Make PyIter_Next() a little smarter (wrt its knowledge of iterator
Tim Peters <tim.peters@gmail.com>
parents:
17677
diff
changeset
|
1132 for (;;) { |
|
17667
76ee8b62ee2a
Generalize max(seq) and min(seq) to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17654
diff
changeset
|
1133 x = PyIter_Next(it); |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1134 if (x == NULL) { |
|
17667
76ee8b62ee2a
Generalize max(seq) and min(seq) to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17654
diff
changeset
|
1135 if (PyErr_Occurred()) { |
|
17683
e9a4e27e8d4e
Make PyIter_Next() a little smarter (wrt its knowledge of iterator
Tim Peters <tim.peters@gmail.com>
parents:
17677
diff
changeset
|
1136 Py_XDECREF(w); |
|
e9a4e27e8d4e
Make PyIter_Next() a little smarter (wrt its knowledge of iterator
Tim Peters <tim.peters@gmail.com>
parents:
17677
diff
changeset
|
1137 Py_DECREF(it); |
|
e9a4e27e8d4e
Make PyIter_Next() a little smarter (wrt its knowledge of iterator
Tim Peters <tim.peters@gmail.com>
parents:
17677
diff
changeset
|
1138 return NULL; |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1139 } |
|
17667
76ee8b62ee2a
Generalize max(seq) and min(seq) to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17654
diff
changeset
|
1140 break; |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1141 } |
|
17667
76ee8b62ee2a
Generalize max(seq) and min(seq) to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17654
diff
changeset
|
1142 |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1143 if (w == NULL) |
|
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1144 w = x; |
|
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1145 else { |
|
15949
76ad2a9a3e53
Use rich comparisons in min and max.
Guido van Rossum <guido@python.org>
parents:
15832
diff
changeset
|
1146 int cmp = PyObject_RichCompareBool(x, w, op); |
|
76ad2a9a3e53
Use rich comparisons in min and max.
Guido van Rossum <guido@python.org>
parents:
15832
diff
changeset
|
1147 if (cmp > 0) { |
|
76ad2a9a3e53
Use rich comparisons in min and max.
Guido van Rossum <guido@python.org>
parents:
15832
diff
changeset
|
1148 Py_DECREF(w); |
|
76ad2a9a3e53
Use rich comparisons in min and max.
Guido van Rossum <guido@python.org>
parents:
15832
diff
changeset
|
1149 w = x; |
|
76ad2a9a3e53
Use rich comparisons in min and max.
Guido van Rossum <guido@python.org>
parents:
15832
diff
changeset
|
1150 } |
|
76ad2a9a3e53
Use rich comparisons in min and max.
Guido van Rossum <guido@python.org>
parents:
15832
diff
changeset
|
1151 else if (cmp < 0) { |
|
5610
10e9cfa010f0
PyObject_Compare can raise an exception now.
Guido van Rossum <guido@python.org>
parents:
5471
diff
changeset
|
1152 Py_DECREF(x); |
|
17667
76ee8b62ee2a
Generalize max(seq) and min(seq) to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17654
diff
changeset
|
1153 Py_DECREF(w); |
|
76ee8b62ee2a
Generalize max(seq) and min(seq) to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17654
diff
changeset
|
1154 Py_DECREF(it); |
|
5610
10e9cfa010f0
PyObject_Compare can raise an exception now.
Guido van Rossum <guido@python.org>
parents:
5471
diff
changeset
|
1155 return NULL; |
|
10e9cfa010f0
PyObject_Compare can raise an exception now.
Guido van Rossum <guido@python.org>
parents:
5471
diff
changeset
|
1156 } |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1157 else |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1158 Py_DECREF(x); |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1159 } |
| 86 | 1160 } |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1161 if (w == NULL) |
|
33099
ce016d0ec701
Patch #1005468: Disambiguate "min() or max()" exception string.
Martin v. Löwis <martin@v.loewis.de>
parents:
33019
diff
changeset
|
1162 PyErr_Format(PyExc_ValueError, |
|
ce016d0ec701
Patch #1005468: Disambiguate "min() or max()" exception string.
Martin v. Löwis <martin@v.loewis.de>
parents:
33019
diff
changeset
|
1163 "%s() arg is an empty sequence", name); |
|
17667
76ee8b62ee2a
Generalize max(seq) and min(seq) to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17654
diff
changeset
|
1164 Py_DECREF(it); |
| 86 | 1165 return w; |
| 1166 } | |
| 1167 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1168 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
1169 builtin_min(PyObject *self, PyObject *v) |
| 86 | 1170 { |
|
15949
76ad2a9a3e53
Use rich comparisons in min and max.
Guido van Rossum <guido@python.org>
parents:
15832
diff
changeset
|
1171 return min_max(v, Py_LT); |
| 86 | 1172 } |
| 1173 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1174 PyDoc_STRVAR(min_doc, |
| 8561 | 1175 "min(sequence) -> value\n\ |
| 1176 min(a, b, c, ...) -> value\n\ | |
| 1177 \n\ | |
| 1178 With a single sequence 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
|
1179 With two or more arguments, return the smallest argument."); |
| 8561 | 1180 |
| 1181 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1182 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
1183 builtin_max(PyObject *self, PyObject *v) |
| 86 | 1184 { |
|
15949
76ad2a9a3e53
Use rich comparisons in min and max.
Guido van Rossum <guido@python.org>
parents:
15832
diff
changeset
|
1185 return min_max(v, Py_GT); |
| 86 | 1186 } |
| 1187 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1188 PyDoc_STRVAR(max_doc, |
| 8561 | 1189 "max(sequence) -> value\n\ |
| 1190 max(a, b, c, ...) -> value\n\ | |
| 1191 \n\ | |
| 1192 With a single sequence 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
|
1193 With two or more arguments, return the largest argument."); |
| 8561 | 1194 |
| 1195 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1196 static PyObject * |
|
19301
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
1197 builtin_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
|
1198 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1199 PyNumberMethods *nb; |
|
32759
d1777f51923b
Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
32526
diff
changeset
|
1200 PyObject *res; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
1201 |
|
1049
2ed511171809
Made builtins int(), long(), float(), oct() and hex() more generic.
Guido van Rossum <guido@python.org>
parents:
972
diff
changeset
|
1202 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL || |
|
2ed511171809
Made builtins int(), long(), float(), oct() and hex() more generic.
Guido van Rossum <guido@python.org>
parents:
972
diff
changeset
|
1203 nb->nb_oct == NULL) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1204 PyErr_SetString(PyExc_TypeError, |
|
1049
2ed511171809
Made builtins int(), long(), float(), oct() and hex() more generic.
Guido van Rossum <guido@python.org>
parents:
972
diff
changeset
|
1205 "oct() argument can't be converted to oct"); |
|
2ed511171809
Made builtins int(), long(), float(), oct() and hex() more generic.
Guido van Rossum <guido@python.org>
parents:
972
diff
changeset
|
1206 return NULL; |
|
404
9cd38d1ac391
Made dir() more robust.
Guido van Rossum <guido@python.org>
parents:
385
diff
changeset
|
1207 } |
|
32759
d1777f51923b
Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
32526
diff
changeset
|
1208 res = (*nb->nb_oct)(v); |
|
d1777f51923b
Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
32526
diff
changeset
|
1209 if (res && !PyString_Check(res)) { |
|
d1777f51923b
Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
32526
diff
changeset
|
1210 PyErr_Format(PyExc_TypeError, |
|
d1777f51923b
Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
32526
diff
changeset
|
1211 "__oct__ returned non-string (type %.200s)", |
|
d1777f51923b
Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
32526
diff
changeset
|
1212 res->ob_type->tp_name); |
|
d1777f51923b
Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
32526
diff
changeset
|
1213 Py_DECREF(res); |
|
d1777f51923b
Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
32526
diff
changeset
|
1214 return NULL; |
|
d1777f51923b
Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
32526
diff
changeset
|
1215 } |
|
d1777f51923b
Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
32526
diff
changeset
|
1216 return res; |
|
404
9cd38d1ac391
Made dir() more robust.
Guido van Rossum <guido@python.org>
parents:
385
diff
changeset
|
1217 } |
|
9cd38d1ac391
Made dir() more robust.
Guido van Rossum <guido@python.org>
parents:
385
diff
changeset
|
1218 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1219 PyDoc_STRVAR(oct_doc, |
| 8561 | 1220 "oct(number) -> string\n\ |
| 1221 \n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1222 Return the octal representation of an integer or long integer."); |
| 8561 | 1223 |
| 1224 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1225 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
|
1226 builtin_ord(PyObject *self, PyObject* obj) |
| 86 | 1227 { |
|
11973
8bdc25d22925
Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
1228 long ord; |
|
12384
aa013f2cf80b
ord: provide better error messages
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12368
diff
changeset
|
1229 int size; |
|
11973
8bdc25d22925
Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
1230 |
|
12384
aa013f2cf80b
ord: provide better error messages
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12368
diff
changeset
|
1231 if (PyString_Check(obj)) { |
|
aa013f2cf80b
ord: provide better error messages
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12368
diff
changeset
|
1232 size = PyString_GET_SIZE(obj); |
|
15635
838551869790
Patch #102955, fixing one of the warnings in bug #121479:
Andrew M. Kuchling <amk@amk.ca>
parents:
15478
diff
changeset
|
1233 if (size == 1) { |
|
12384
aa013f2cf80b
ord: provide better error messages
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12368
diff
changeset
|
1234 ord = (long)((unsigned char)*PyString_AS_STRING(obj)); |
|
15635
838551869790
Patch #102955, fixing one of the warnings in bug #121479:
Andrew M. Kuchling <amk@amk.ca>
parents:
15478
diff
changeset
|
1235 return PyInt_FromLong(ord); |
|
838551869790
Patch #102955, fixing one of the warnings in bug #121479:
Andrew M. Kuchling <amk@amk.ca>
parents:
15478
diff
changeset
|
1236 } |
|
19343
7257e87e0720
Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents:
19301
diff
changeset
|
1237 #ifdef Py_USING_UNICODE |
|
12384
aa013f2cf80b
ord: provide better error messages
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12368
diff
changeset
|
1238 } else if (PyUnicode_Check(obj)) { |
|
aa013f2cf80b
ord: provide better error messages
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12368
diff
changeset
|
1239 size = PyUnicode_GET_SIZE(obj); |
|
15635
838551869790
Patch #102955, fixing one of the warnings in bug #121479:
Andrew M. Kuchling <amk@amk.ca>
parents:
15478
diff
changeset
|
1240 if (size == 1) { |
|
12384
aa013f2cf80b
ord: provide better error messages
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12368
diff
changeset
|
1241 ord = (long)*PyUnicode_AS_UNICODE(obj); |
|
15635
838551869790
Patch #102955, fixing one of the warnings in bug #121479:
Andrew M. Kuchling <amk@amk.ca>
parents:
15478
diff
changeset
|
1242 return PyInt_FromLong(ord); |
|
838551869790
Patch #102955, fixing one of the warnings in bug #121479:
Andrew M. Kuchling <amk@amk.ca>
parents:
15478
diff
changeset
|
1243 } |
|
19343
7257e87e0720
Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents:
19301
diff
changeset
|
1244 #endif |
|
12384
aa013f2cf80b
ord: provide better error messages
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12368
diff
changeset
|
1245 } else { |
|
aa013f2cf80b
ord: provide better error messages
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12368
diff
changeset
|
1246 PyErr_Format(PyExc_TypeError, |
|
15654
6405f30aa08c
CHange error messages for ord(), using "string" instead of "string or Unicode"
Andrew M. Kuchling <amk@amk.ca>
parents:
15637
diff
changeset
|
1247 "ord() expected string of length 1, but " \ |
|
12384
aa013f2cf80b
ord: provide better error messages
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12368
diff
changeset
|
1248 "%.200s found", obj->ob_type->tp_name); |
| 86 | 1249 return NULL; |
|
11973
8bdc25d22925
Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
1250 } |
|
8bdc25d22925
Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
1251 |
|
15829
9308dc8c85e0
(Modified) patch by Ping - SF Patch #102681.
Guido van Rossum <guido@python.org>
parents:
15727
diff
changeset
|
1252 PyErr_Format(PyExc_TypeError, |
|
15654
6405f30aa08c
CHange error messages for ord(), using "string" instead of "string or Unicode"
Andrew M. Kuchling <amk@amk.ca>
parents:
15637
diff
changeset
|
1253 "ord() expected a character, " |
|
6405f30aa08c
CHange error messages for ord(), using "string" instead of "string or Unicode"
Andrew M. Kuchling <amk@amk.ca>
parents:
15637
diff
changeset
|
1254 "but string of length %d found", |
|
12384
aa013f2cf80b
ord: provide better error messages
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12368
diff
changeset
|
1255 size); |
|
aa013f2cf80b
ord: provide better error messages
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12368
diff
changeset
|
1256 return NULL; |
| 86 | 1257 } |
| 1258 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1259 PyDoc_STRVAR(ord_doc, |
| 8561 | 1260 "ord(c) -> integer\n\ |
| 1261 \n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1262 Return the integer ordinal of a one-character string."); |
| 8561 | 1263 |
| 1264 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1265 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
1266 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
|
1267 { |
|
8402
0cb0394c2edc
A bunch of functions are now properly implemented in abstract.c, and
Guido van Rossum <guido@python.org>
parents:
8287
diff
changeset
|
1268 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
|
1269 |
|
26818
e094a03a80ff
SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents:
26612
diff
changeset
|
1270 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z)) |
|
2087
65146b52f16b
* Python/bltinmodule.c: restructured coerce(), divmod(), pow() to
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
1271 return NULL; |
|
8402
0cb0394c2edc
A bunch of functions are now properly implemented in abstract.c, and
Guido van Rossum <guido@python.org>
parents:
8287
diff
changeset
|
1272 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
|
1273 } |
|
6693c5d87f3a
Added long() and support for longs in int() and float();
Guido van Rossum <guido@python.org>
parents:
182
diff
changeset
|
1274 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1275 PyDoc_STRVAR(pow_doc, |
| 8561 | 1276 "pow(x, y[, z]) -> number\n\ |
| 1277 \n\ | |
| 1278 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
|
1279 equivalent to (x**y) % z, but may be more efficient (e.g. for longs)."); |
| 8561 | 1280 |
| 1281 | |
|
28583
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1282 |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1283 /* Return number of items in range (lo, hi, step), when arguments are |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1284 * PyInt or PyLong objects. step > 0 required. Return a value < 0 if |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1285 * & only if the true value is too large to fit in a signed long. |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1286 * Arguments MUST return 1 with either PyInt_Check() or |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1287 * PyLong_Check(). Return -1 when there is an error. |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1288 */ |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1289 static long |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1290 get_len_of_range_longs(PyObject *lo, PyObject *hi, PyObject *step) |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1291 { |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1292 /* ------------------------------------------------------------- |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1293 Algorithm is equal to that of get_len_of_range(), but it operates |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1294 on PyObjects (which are assumed to be PyLong or PyInt objects). |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1295 ---------------------------------------------------------------*/ |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1296 long n; |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1297 PyObject *diff = NULL; |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1298 PyObject *one = NULL; |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1299 PyObject *tmp1 = NULL, *tmp2 = NULL, *tmp3 = NULL; |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1300 /* holds sub-expression evaluations */ |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1301 |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1302 /* if (lo >= hi), return length of 0. */ |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1303 if (PyObject_Compare(lo, hi) >= 0) |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1304 return 0; |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1305 |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1306 if ((one = PyLong_FromLong(1L)) == NULL) |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1307 goto Fail; |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1308 |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1309 if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL) |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1310 goto Fail; |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1311 |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1312 if ((diff = PyNumber_Subtract(tmp1, one)) == NULL) |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1313 goto Fail; |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1314 |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1315 if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL) |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1316 goto Fail; |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1317 |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1318 if ((tmp3 = PyNumber_Add(tmp2, one)) == NULL) |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1319 goto Fail; |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1320 |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1321 n = PyLong_AsLong(tmp3); |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1322 if (PyErr_Occurred()) { /* Check for Overflow */ |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1323 PyErr_Clear(); |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1324 goto Fail; |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1325 } |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1326 |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1327 Py_DECREF(tmp3); |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1328 Py_DECREF(tmp2); |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1329 Py_DECREF(diff); |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1330 Py_DECREF(tmp1); |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1331 Py_DECREF(one); |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1332 return n; |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1333 |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1334 Fail: |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1335 Py_XDECREF(tmp3); |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1336 Py_XDECREF(tmp2); |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1337 Py_XDECREF(diff); |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1338 Py_XDECREF(tmp1); |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1339 Py_XDECREF(one); |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1340 return -1; |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1341 } |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1342 |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1343 /* An extension of builtin_range() that handles the case when PyLong |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1344 * arguments are given. */ |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1345 static PyObject * |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1346 handle_range_longs(PyObject *self, PyObject *args) |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1347 { |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1348 PyObject *ilow; |
|
28597
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1349 PyObject *ihigh = NULL; |
|
28583
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1350 PyObject *istep = NULL; |
|
28597
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1351 |
|
28583
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1352 PyObject *curnum = NULL; |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1353 PyObject *v = NULL; |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1354 long bign; |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1355 int i, n; |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1356 int cmp_result; |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1357 |
|
28597
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1358 PyObject *zero = PyLong_FromLong(0); |
|
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1359 |
|
28583
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1360 if (zero == NULL) |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1361 return NULL; |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1362 |
|
28597
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1363 if (!PyArg_UnpackTuple(args, "range", 1, 3, &ilow, &ihigh, &istep)) { |
|
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1364 Py_DECREF(zero); |
|
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1365 return NULL; |
|
28583
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1366 } |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1367 |
|
28597
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1368 /* Figure out which way we were called, supply defaults, and be |
|
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1369 * sure to incref everything so that the decrefs at the end |
|
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1370 * are correct. |
|
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1371 */ |
|
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1372 assert(ilow != NULL); |
|
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1373 if (ihigh == NULL) { |
|
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1374 /* only 1 arg -- it's the upper limit */ |
|
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1375 ihigh = ilow; |
|
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1376 ilow = NULL; |
|
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1377 } |
|
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1378 assert(ihigh != NULL); |
|
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1379 Py_INCREF(ihigh); |
|
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1380 |
|
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1381 /* ihigh correct now; do ilow */ |
|
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1382 if (ilow == NULL) |
|
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1383 ilow = zero; |
|
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1384 Py_INCREF(ilow); |
|
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1385 |
|
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1386 /* ilow and ihigh correct now; do istep */ |
|
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1387 if (istep == NULL) { |
|
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1388 istep = PyLong_FromLong(1L); |
|
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1389 if (istep == NULL) |
|
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1390 goto Fail; |
|
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1391 } |
|
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1392 else { |
|
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1393 Py_INCREF(istep); |
|
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1394 } |
|
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1395 |
|
28583
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1396 if (!PyInt_Check(ilow) && !PyLong_Check(ilow)) { |
|
28612
0792caa6371c
Some errors from range() should be TypeError, not ValueError.
Guido van Rossum <guido@python.org>
parents:
28604
diff
changeset
|
1397 PyErr_Format(PyExc_TypeError, |
|
28738
52f3d90c17e8
complete and clarify some error messages for range()
Alex Martelli <aleaxit@gmail.com>
parents:
28718
diff
changeset
|
1398 "range() integer start argument expected, got %s.", |
|
28604
eee4969adbae
Prompted by Tim's comment, when handle_range_longs() sees an
Guido van Rossum <guido@python.org>
parents:
28597
diff
changeset
|
1399 ilow->ob_type->tp_name); |
|
28583
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1400 goto Fail; |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1401 } |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1402 |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1403 if (!PyInt_Check(ihigh) && !PyLong_Check(ihigh)) { |
|
28612
0792caa6371c
Some errors from range() should be TypeError, not ValueError.
Guido van Rossum <guido@python.org>
parents:
28604
diff
changeset
|
1404 PyErr_Format(PyExc_TypeError, |
|
28738
52f3d90c17e8
complete and clarify some error messages for range()
Alex Martelli <aleaxit@gmail.com>
parents:
28718
diff
changeset
|
1405 "range() integer end argument expected, got %s.", |
|
28604
eee4969adbae
Prompted by Tim's comment, when handle_range_longs() sees an
Guido van Rossum <guido@python.org>
parents:
28597
diff
changeset
|
1406 ihigh->ob_type->tp_name); |
|
28583
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1407 goto Fail; |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1408 } |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1409 |
|
28597
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1410 if (!PyInt_Check(istep) && !PyLong_Check(istep)) { |
|
28612
0792caa6371c
Some errors from range() should be TypeError, not ValueError.
Guido van Rossum <guido@python.org>
parents:
28604
diff
changeset
|
1411 PyErr_Format(PyExc_TypeError, |
|
28738
52f3d90c17e8
complete and clarify some error messages for range()
Alex Martelli <aleaxit@gmail.com>
parents:
28718
diff
changeset
|
1412 "range() integer step argument expected, got %s.", |
|
28604
eee4969adbae
Prompted by Tim's comment, when handle_range_longs() sees an
Guido van Rossum <guido@python.org>
parents:
28597
diff
changeset
|
1413 istep->ob_type->tp_name); |
|
28583
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1414 goto Fail; |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1415 } |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1416 |
|
28597
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1417 if (PyObject_Cmp(istep, zero, &cmp_result) == -1) |
|
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1418 goto Fail; |
|
28583
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1419 if (cmp_result == 0) { |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1420 PyErr_SetString(PyExc_ValueError, |
|
28738
52f3d90c17e8
complete and clarify some error messages for range()
Alex Martelli <aleaxit@gmail.com>
parents:
28718
diff
changeset
|
1421 "range() step argument must not be zero"); |
|
28583
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1422 goto Fail; |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1423 } |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1424 |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1425 if (cmp_result > 0) |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1426 bign = get_len_of_range_longs(ilow, ihigh, istep); |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1427 else { |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1428 PyObject *neg_istep = PyNumber_Negative(istep); |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1429 if (neg_istep == NULL) |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1430 goto Fail; |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1431 bign = get_len_of_range_longs(ihigh, ilow, neg_istep); |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1432 Py_DECREF(neg_istep); |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1433 } |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1434 |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1435 n = (int)bign; |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1436 if (bign < 0 || (long)n != bign) { |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1437 PyErr_SetString(PyExc_OverflowError, |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1438 "range() result has too many items"); |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1439 goto Fail; |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1440 } |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1441 |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1442 v = PyList_New(n); |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1443 if (v == NULL) |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1444 goto Fail; |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1445 |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1446 curnum = ilow; |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1447 Py_INCREF(curnum); |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1448 |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1449 for (i = 0; i < n; i++) { |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1450 PyObject *w = PyNumber_Long(curnum); |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1451 PyObject *tmp_num; |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1452 if (w == NULL) |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1453 goto Fail; |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1454 |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1455 PyList_SET_ITEM(v, i, w); |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1456 |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1457 tmp_num = PyNumber_Add(curnum, istep); |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1458 if (tmp_num == NULL) |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1459 goto Fail; |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1460 |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1461 Py_DECREF(curnum); |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1462 curnum = tmp_num; |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1463 } |
|
28597
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1464 Py_DECREF(ilow); |
|
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1465 Py_DECREF(ihigh); |
|
28583
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1466 Py_DECREF(istep); |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1467 Py_DECREF(zero); |
|
28597
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1468 Py_DECREF(curnum); |
|
28583
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1469 return v; |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1470 |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1471 Fail: |
|
28597
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1472 Py_DECREF(ilow); |
|
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1473 Py_DECREF(ihigh); |
|
28583
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1474 Py_XDECREF(istep); |
|
28597
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1475 Py_DECREF(zero); |
|
d2d232e2427b
handle_range_longs(): refcount handling is very delicate here, and
Tim Peters <tim.peters@gmail.com>
parents:
28583
diff
changeset
|
1476 Py_XDECREF(curnum); |
|
28583
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1477 Py_XDECREF(v); |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1478 return NULL; |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1479 } |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1480 |
|
10279
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1481 /* Return number of items in range/xrange (lo, hi, step). step > 0 |
|
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1482 * required. Return a value < 0 if & only if the true value is too |
|
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1483 * large to fit in a signed long. |
|
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1484 */ |
|
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1485 static long |
|
13679
61f65de19e1e
Another missed ansification.
Thomas Wouters <thomas@python.org>
parents:
13658
diff
changeset
|
1486 get_len_of_range(long lo, long hi, long step) |
|
10279
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1487 { |
|
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1488 /* ------------------------------------------------------------- |
|
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1489 If lo >= hi, the range is empty. |
|
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1490 Else if n values are in the range, the last one is |
|
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1491 lo + (n-1)*step, which must be <= hi-1. Rearranging, |
|
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1492 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives |
|
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1493 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so |
|
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1494 the RHS is non-negative and so truncation is the same as the |
|
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1495 floor. Letting M be the largest positive long, the worst case |
|
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1496 for the RHS numerator is hi=M, lo=-M-1, and then |
|
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1497 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough |
|
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1498 precision to compute the RHS exactly. |
|
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1499 ---------------------------------------------------------------*/ |
|
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1500 long n = 0; |
|
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1501 if (lo < hi) { |
|
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1502 unsigned long uhi = (unsigned long)hi; |
|
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1503 unsigned long ulo = (unsigned long)lo; |
|
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1504 unsigned long diff = uhi - ulo - 1; |
|
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1505 n = (long)(diff / (unsigned long)step + 1); |
|
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1506 } |
|
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1507 return n; |
|
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1508 } |
|
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1509 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1510 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
1511 builtin_range(PyObject *self, PyObject *args) |
| 86 | 1512 { |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
1513 long ilow = 0, ihigh = 0, istep = 1; |
|
10279
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1514 long bign; |
| 86 | 1515 int i, n; |
|
10279
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1516 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1517 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
|
1518 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1519 if (PyTuple_Size(args) <= 1) { |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1520 if (!PyArg_ParseTuple(args, |
|
2153
e54b8654f938
fix Alpha bug in (x)range; different __builtins__ initialization
Guido van Rossum <guido@python.org>
parents:
2120
diff
changeset
|
1521 "l;range() requires 1-3 int arguments", |
|
28583
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1522 &ihigh)) { |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1523 PyErr_Clear(); |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1524 return handle_range_longs(self, args); |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1525 } |
| 86 | 1526 } |
| 1527 else { | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1528 if (!PyArg_ParseTuple(args, |
|
2153
e54b8654f938
fix Alpha bug in (x)range; different __builtins__ initialization
Guido van Rossum <guido@python.org>
parents:
2120
diff
changeset
|
1529 "ll|l;range() requires 1-3 int arguments", |
|
28583
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1530 &ilow, &ihigh, &istep)) { |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1531 PyErr_Clear(); |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1532 return handle_range_longs(self, args); |
|
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1533 } |
| 86 | 1534 } |
| 1535 if (istep == 0) { | |
|
28583
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1536 PyErr_SetString(PyExc_ValueError, |
|
28738
52f3d90c17e8
complete and clarify some error messages for range()
Alex Martelli <aleaxit@gmail.com>
parents:
28718
diff
changeset
|
1537 "range() step argument must not be zero"); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1538 return NULL; |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1539 } |
|
10279
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1540 if (istep > 0) |
|
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1541 bign = get_len_of_range(ilow, ihigh, istep); |
|
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1542 else |
|
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1543 bign = get_len_of_range(ihigh, ilow, -istep); |
|
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1544 n = (int)bign; |
|
886ea255f381
Patch by Tim Peters to improve the range checks for range() and
Guido van Rossum <guido@python.org>
parents:
10020
diff
changeset
|
1545 if (bign < 0 || (long)n != bign) { |
|
9849
5e9ef9d8575b
Avoid overflow if possible in calculations for range(); report
Guido van Rossum <guido@python.org>
parents:
9567
diff
changeset
|
1546 PyErr_SetString(PyExc_OverflowError, |
| 15318 | 1547 "range() result has too many items"); |
|
9849
5e9ef9d8575b
Avoid overflow if possible in calculations for range(); report
Guido van Rossum <guido@python.org>
parents:
9567
diff
changeset
|
1548 return NULL; |
|
5e9ef9d8575b
Avoid overflow if possible in calculations for range(); report
Guido van Rossum <guido@python.org>
parents:
9567
diff
changeset
|
1549 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1550 v = PyList_New(n); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1551 if (v == NULL) |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1552 return NULL; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1553 for (i = 0; i < n; i++) { |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1554 PyObject *w = PyInt_FromLong(ilow); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1555 if (w == NULL) { |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1556 Py_DECREF(v); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1557 return NULL; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1558 } |
|
8138
9d0310143600
Fred's right -- we need PyList_SET_ITEM().
Guido van Rossum <guido@python.org>
parents:
8132
diff
changeset
|
1559 PyList_SET_ITEM(v, i, w); |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1560 ilow += istep; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1561 } |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1562 return v; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1563 } |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1564 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1565 PyDoc_STRVAR(range_doc, |
| 8561 | 1566 "range([start,] stop[, step]) -> list of integers\n\ |
| 1567 \n\ | |
| 1568 Return a list containing an arithmetic progression of integers.\n\ | |
| 1569 range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\ | |
| 1570 When step is given, it specifies the increment (or decrement).\n\ | |
| 1571 For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1572 These are exactly the valid indices for a list of 4 elements."); |
| 8561 | 1573 |
| 1574 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1575 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
1576 builtin_raw_input(PyObject *self, PyObject *args) |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1577 { |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1578 PyObject *v = NULL; |
|
24817
3ae8e3ff7e3f
Patch #550192: Set softspace to 0 in raw_input().
Martin v. Löwis <martin@v.loewis.de>
parents:
24737
diff
changeset
|
1579 PyObject *fin = PySys_GetObject("stdin"); |
|
3ae8e3ff7e3f
Patch #550192: Set softspace to 0 in raw_input().
Martin v. Löwis <martin@v.loewis.de>
parents:
24737
diff
changeset
|
1580 PyObject *fout = PySys_GetObject("stdout"); |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1581 |
|
26818
e094a03a80ff
SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents:
26612
diff
changeset
|
1582 if (!PyArg_UnpackTuple(args, "[raw_]input", 0, 1, &v)) |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1583 return NULL; |
|
24817
3ae8e3ff7e3f
Patch #550192: Set softspace to 0 in raw_input().
Martin v. Löwis <martin@v.loewis.de>
parents:
24737
diff
changeset
|
1584 |
|
3ae8e3ff7e3f
Patch #550192: Set softspace to 0 in raw_input().
Martin v. Löwis <martin@v.loewis.de>
parents:
24737
diff
changeset
|
1585 if (fin == NULL) { |
|
28740
d3297e298211
some more error-message enhancements
Alex Martelli <aleaxit@gmail.com>
parents:
28738
diff
changeset
|
1586 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdin"); |
|
24817
3ae8e3ff7e3f
Patch #550192: Set softspace to 0 in raw_input().
Martin v. Löwis <martin@v.loewis.de>
parents:
24737
diff
changeset
|
1587 return NULL; |
|
3ae8e3ff7e3f
Patch #550192: Set softspace to 0 in raw_input().
Martin v. Löwis <martin@v.loewis.de>
parents:
24737
diff
changeset
|
1588 } |
|
3ae8e3ff7e3f
Patch #550192: Set softspace to 0 in raw_input().
Martin v. Löwis <martin@v.loewis.de>
parents:
24737
diff
changeset
|
1589 if (fout == NULL) { |
|
28740
d3297e298211
some more error-message enhancements
Alex Martelli <aleaxit@gmail.com>
parents:
28738
diff
changeset
|
1590 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdout"); |
|
24817
3ae8e3ff7e3f
Patch #550192: Set softspace to 0 in raw_input().
Martin v. Löwis <martin@v.loewis.de>
parents:
24737
diff
changeset
|
1591 return NULL; |
|
3ae8e3ff7e3f
Patch #550192: Set softspace to 0 in raw_input().
Martin v. Löwis <martin@v.loewis.de>
parents:
24737
diff
changeset
|
1592 } |
|
3ae8e3ff7e3f
Patch #550192: Set softspace to 0 in raw_input().
Martin v. Löwis <martin@v.loewis.de>
parents:
24737
diff
changeset
|
1593 if (PyFile_SoftSpace(fout, 0)) { |
|
3ae8e3ff7e3f
Patch #550192: Set softspace to 0 in raw_input().
Martin v. Löwis <martin@v.loewis.de>
parents:
24737
diff
changeset
|
1594 if (PyFile_WriteString(" ", fout) != 0) |
|
3ae8e3ff7e3f
Patch #550192: Set softspace to 0 in raw_input().
Martin v. Löwis <martin@v.loewis.de>
parents:
24737
diff
changeset
|
1595 return NULL; |
|
3ae8e3ff7e3f
Patch #550192: Set softspace to 0 in raw_input().
Martin v. Löwis <martin@v.loewis.de>
parents:
24737
diff
changeset
|
1596 } |
|
32896
a75815e31545
for some reason, the lack of adherence to Python's C whitespace rules
Michael W. Hudson <mwh@python.net>
parents:
32890
diff
changeset
|
1597 if (PyFile_Check(fin) && PyFile_Check(fout) |
|
25924
dc4a0336a2a3
Patch #512981: Update readline input stream on sys.stdin/out change.
Martin v. Löwis <martin@v.loewis.de>
parents:
25046
diff
changeset
|
1598 && isatty(fileno(PyFile_AsFile(fin))) |
|
dc4a0336a2a3
Patch #512981: Update readline input stream on sys.stdin/out change.
Martin v. Löwis <martin@v.loewis.de>
parents:
25046
diff
changeset
|
1599 && isatty(fileno(PyFile_AsFile(fout)))) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1600 PyObject *po; |
|
2808
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
1601 char *prompt; |
|
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
1602 char *s; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1603 PyObject *result; |
|
2808
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
1604 if (v != NULL) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1605 po = PyObject_Str(v); |
|
2808
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
1606 if (po == NULL) |
|
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
1607 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1608 prompt = PyString_AsString(po); |
|
8560
46fd630dce63
In raw_input(prompt), make sure that str(prompt) really a string
Guido van Rossum <guido@python.org>
parents:
8451
diff
changeset
|
1609 if (prompt == NULL) |
|
46fd630dce63
In raw_input(prompt), make sure that str(prompt) really a string
Guido van Rossum <guido@python.org>
parents:
8451
diff
changeset
|
1610 return NULL; |
|
2808
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
1611 } |
|
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
1612 else { |
|
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
1613 po = NULL; |
|
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
1614 prompt = ""; |
|
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
1615 } |
|
32896
a75815e31545
for some reason, the lack of adherence to Python's C whitespace rules
Michael W. Hudson <mwh@python.net>
parents:
32890
diff
changeset
|
1616 s = PyOS_Readline(PyFile_AsFile(fin), PyFile_AsFile(fout), |
|
25924
dc4a0336a2a3
Patch #512981: Update readline input stream on sys.stdin/out change.
Martin v. Löwis <martin@v.loewis.de>
parents:
25046
diff
changeset
|
1617 prompt); |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1618 Py_XDECREF(po); |
|
2808
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
1619 if (s == NULL) { |
| 32526 | 1620 if (!PyErr_Occurred()) |
| 1621 PyErr_SetNone(PyExc_KeyboardInterrupt); | |
|
2808
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
1622 return NULL; |
|
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
1623 } |
|
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
1624 if (*s == '\0') { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1625 PyErr_SetNone(PyExc_EOFError); |
|
2808
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
1626 result = NULL; |
|
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
1627 } |
|
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
1628 else { /* strip trailing '\n' */ |
| 13078 | 1629 size_t len = strlen(s); |
| 1630 if (len > INT_MAX) { | |
|
24817
3ae8e3ff7e3f
Patch #550192: Set softspace to 0 in raw_input().
Martin v. Löwis <martin@v.loewis.de>
parents:
24737
diff
changeset
|
1631 PyErr_SetString(PyExc_OverflowError, |
|
28740
d3297e298211
some more error-message enhancements
Alex Martelli <aleaxit@gmail.com>
parents:
28738
diff
changeset
|
1632 "[raw_]input: input too long"); |
| 13078 | 1633 result = NULL; |
| 1634 } | |
| 1635 else { | |
|
24817
3ae8e3ff7e3f
Patch #550192: Set softspace to 0 in raw_input().
Martin v. Löwis <martin@v.loewis.de>
parents:
24737
diff
changeset
|
1636 result = PyString_FromStringAndSize(s, |
|
3ae8e3ff7e3f
Patch #550192: Set softspace to 0 in raw_input().
Martin v. Löwis <martin@v.loewis.de>
parents:
24737
diff
changeset
|
1637 (int)(len-1)); |
| 13078 | 1638 } |
|
2808
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
1639 } |
|
12576
1c7c2dd1beb1
Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents:
12572
diff
changeset
|
1640 PyMem_FREE(s); |
|
2808
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
1641 return result; |
|
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
1642 } |
|
284
6ac402023cac
printobject now returns an error code
Guido van Rossum <guido@python.org>
parents:
253
diff
changeset
|
1643 if (v != NULL) { |
|
24817
3ae8e3ff7e3f
Patch #550192: Set softspace to 0 in raw_input().
Martin v. Löwis <martin@v.loewis.de>
parents:
24737
diff
changeset
|
1644 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0) |
|
284
6ac402023cac
printobject now returns an error code
Guido van Rossum <guido@python.org>
parents:
253
diff
changeset
|
1645 return NULL; |
|
6ac402023cac
printobject now returns an error code
Guido van Rossum <guido@python.org>
parents:
253
diff
changeset
|
1646 } |
|
24817
3ae8e3ff7e3f
Patch #550192: Set softspace to 0 in raw_input().
Martin v. Löwis <martin@v.loewis.de>
parents:
24737
diff
changeset
|
1647 return PyFile_GetLine(fin, -1); |
| 86 | 1648 } |
| 1649 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1650 PyDoc_STRVAR(raw_input_doc, |
| 8561 | 1651 "raw_input([prompt]) -> string\n\ |
| 1652 \n\ | |
| 1653 Read a string from standard input. The trailing newline is stripped.\n\ | |
| 1654 If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\ | |
| 1655 On Unix, GNU readline is used if enabled. The prompt string, if given,\n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1656 is printed without a trailing newline before reading."); |
| 8561 | 1657 |
| 1658 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1659 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
1660 builtin_reduce(PyObject *self, PyObject *args) |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1661 { |
|
17677
bf7f166d3c97
Generalize reduce() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17675
diff
changeset
|
1662 PyObject *seq, *func, *result = NULL, *it; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1663 |
|
26818
e094a03a80ff
SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents:
26612
diff
changeset
|
1664 if (!PyArg_UnpackTuple(args, "reduce", 2, 3, &func, &seq, &result)) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
1665 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
1666 if (result != NULL) |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1667 Py_INCREF(result); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1668 |
|
17677
bf7f166d3c97
Generalize reduce() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17675
diff
changeset
|
1669 it = PyObject_GetIter(seq); |
|
bf7f166d3c97
Generalize reduce() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17675
diff
changeset
|
1670 if (it == NULL) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1671 PyErr_SetString(PyExc_TypeError, |
|
17677
bf7f166d3c97
Generalize reduce() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17675
diff
changeset
|
1672 "reduce() arg 2 must support iteration"); |
|
bf7f166d3c97
Generalize reduce() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17675
diff
changeset
|
1673 Py_XDECREF(result); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1674 return NULL; |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1675 } |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1676 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1677 if ((args = PyTuple_New(2)) == NULL) |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1678 goto Fail; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1679 |
|
17677
bf7f166d3c97
Generalize reduce() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17675
diff
changeset
|
1680 for (;;) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1681 PyObject *op2; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1682 |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1683 if (args->ob_refcnt > 1) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1684 Py_DECREF(args); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1685 if ((args = PyTuple_New(2)) == NULL) |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1686 goto Fail; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1687 } |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1688 |
|
17677
bf7f166d3c97
Generalize reduce() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17675
diff
changeset
|
1689 op2 = PyIter_Next(it); |
|
bf7f166d3c97
Generalize reduce() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17675
diff
changeset
|
1690 if (op2 == NULL) { |
|
17683
e9a4e27e8d4e
Make PyIter_Next() a little smarter (wrt its knowledge of iterator
Tim Peters <tim.peters@gmail.com>
parents:
17677
diff
changeset
|
1691 if (PyErr_Occurred()) |
|
e9a4e27e8d4e
Make PyIter_Next() a little smarter (wrt its knowledge of iterator
Tim Peters <tim.peters@gmail.com>
parents:
17677
diff
changeset
|
1692 goto Fail; |
|
e9a4e27e8d4e
Make PyIter_Next() a little smarter (wrt its knowledge of iterator
Tim Peters <tim.peters@gmail.com>
parents:
17677
diff
changeset
|
1693 break; |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1694 } |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1695 |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1696 if (result == NULL) |
|
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1697 result = op2; |
|
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1698 else { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1699 PyTuple_SetItem(args, 0, result); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1700 PyTuple_SetItem(args, 1, op2); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1701 if ((result = PyEval_CallObject(func, args)) == NULL) |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1702 goto Fail; |
|
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1703 } |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1704 } |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1705 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1706 Py_DECREF(args); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1707 |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1708 if (result == NULL) |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1709 PyErr_SetString(PyExc_TypeError, |
| 15318 | 1710 "reduce() of empty sequence with no initial value"); |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1711 |
|
17677
bf7f166d3c97
Generalize reduce() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17675
diff
changeset
|
1712 Py_DECREF(it); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1713 return result; |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1714 |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1715 Fail: |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1716 Py_XDECREF(args); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1717 Py_XDECREF(result); |
|
17677
bf7f166d3c97
Generalize reduce() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17675
diff
changeset
|
1718 Py_DECREF(it); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1719 return NULL; |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1720 } |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1721 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1722 PyDoc_STRVAR(reduce_doc, |
| 8561 | 1723 "reduce(function, sequence[, initial]) -> value\n\ |
| 1724 \n\ | |
| 1725 Apply a function of two arguments cumulatively to the items of a sequence,\n\ | |
| 1726 from left to right, so as to reduce the sequence to a single value.\n\ | |
| 1727 For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\ | |
| 1728 ((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\ | |
| 1729 of the sequence in the calculation, and serves as a default when the\n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1730 sequence is empty."); |
| 8561 | 1731 |
| 1732 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1733 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
|
1734 builtin_reload(PyObject *self, PyObject *v) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
1735 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1736 return PyImport_ReloadModule(v); |
| 86 | 1737 } |
| 1738 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1739 PyDoc_STRVAR(reload_doc, |
| 8561 | 1740 "reload(module) -> module\n\ |
| 1741 \n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1742 Reload the module. The module must have been successfully imported before."); |
| 8561 | 1743 |
| 1744 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1745 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
|
1746 builtin_repr(PyObject *self, PyObject *v) |
|
1094
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1079
diff
changeset
|
1747 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1748 return PyObject_Repr(v); |
|
1094
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1079
diff
changeset
|
1749 } |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1079
diff
changeset
|
1750 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1751 PyDoc_STRVAR(repr_doc, |
| 8561 | 1752 "repr(object) -> string\n\ |
| 1753 \n\ | |
| 1754 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
|
1755 For most object types, eval(repr(object)) == object."); |
| 8561 | 1756 |
| 1757 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1758 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
1759 builtin_round(PyObject *self, PyObject *args) |
|
1215
9d6cf529bb71
bltinmodule.c: added round(x, [n]); coerce() of two class instances
Guido van Rossum <guido@python.org>
parents:
1096
diff
changeset
|
1760 { |
|
9d6cf529bb71
bltinmodule.c: added round(x, [n]); coerce() of two class instances
Guido van Rossum <guido@python.org>
parents:
1096
diff
changeset
|
1761 double x; |
|
9d6cf529bb71
bltinmodule.c: added round(x, [n]); coerce() of two class instances
Guido van Rossum <guido@python.org>
parents:
1096
diff
changeset
|
1762 double f; |
|
9d6cf529bb71
bltinmodule.c: added round(x, [n]); coerce() of two class instances
Guido van Rossum <guido@python.org>
parents:
1096
diff
changeset
|
1763 int ndigits = 0; |
|
9d6cf529bb71
bltinmodule.c: added round(x, [n]); coerce() of two class instances
Guido van Rossum <guido@python.org>
parents:
1096
diff
changeset
|
1764 int i; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
1765 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1766 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits)) |
|
1215
9d6cf529bb71
bltinmodule.c: added round(x, [n]); coerce() of two class instances
Guido van Rossum <guido@python.org>
parents:
1096
diff
changeset
|
1767 return NULL; |
|
9d6cf529bb71
bltinmodule.c: added round(x, [n]); coerce() of two class instances
Guido van Rossum <guido@python.org>
parents:
1096
diff
changeset
|
1768 f = 1.0; |
|
8287
d3bf3c2ad75a
Implement round() slightly different, so that for negative ndigits no
Guido van Rossum <guido@python.org>
parents:
8138
diff
changeset
|
1769 i = abs(ndigits); |
|
d3bf3c2ad75a
Implement round() slightly different, so that for negative ndigits no
Guido van Rossum <guido@python.org>
parents:
8138
diff
changeset
|
1770 while (--i >= 0) |
|
1215
9d6cf529bb71
bltinmodule.c: added round(x, [n]); coerce() of two class instances
Guido van Rossum <guido@python.org>
parents:
1096
diff
changeset
|
1771 f = f*10.0; |
|
8287
d3bf3c2ad75a
Implement round() slightly different, so that for negative ndigits no
Guido van Rossum <guido@python.org>
parents:
8138
diff
changeset
|
1772 if (ndigits < 0) |
|
d3bf3c2ad75a
Implement round() slightly different, so that for negative ndigits no
Guido van Rossum <guido@python.org>
parents:
8138
diff
changeset
|
1773 x /= f; |
|
d3bf3c2ad75a
Implement round() slightly different, so that for negative ndigits no
Guido van Rossum <guido@python.org>
parents:
8138
diff
changeset
|
1774 else |
|
d3bf3c2ad75a
Implement round() slightly different, so that for negative ndigits no
Guido van Rossum <guido@python.org>
parents:
8138
diff
changeset
|
1775 x *= f; |
|
1215
9d6cf529bb71
bltinmodule.c: added round(x, [n]); coerce() of two class instances
Guido van Rossum <guido@python.org>
parents:
1096
diff
changeset
|
1776 if (x >= 0.0) |
|
8287
d3bf3c2ad75a
Implement round() slightly different, so that for negative ndigits no
Guido van Rossum <guido@python.org>
parents:
8138
diff
changeset
|
1777 x = floor(x + 0.5); |
|
1215
9d6cf529bb71
bltinmodule.c: added round(x, [n]); coerce() of two class instances
Guido van Rossum <guido@python.org>
parents:
1096
diff
changeset
|
1778 else |
|
8287
d3bf3c2ad75a
Implement round() slightly different, so that for negative ndigits no
Guido van Rossum <guido@python.org>
parents:
8138
diff
changeset
|
1779 x = ceil(x - 0.5); |
|
d3bf3c2ad75a
Implement round() slightly different, so that for negative ndigits no
Guido van Rossum <guido@python.org>
parents:
8138
diff
changeset
|
1780 if (ndigits < 0) |
|
d3bf3c2ad75a
Implement round() slightly different, so that for negative ndigits no
Guido van Rossum <guido@python.org>
parents:
8138
diff
changeset
|
1781 x *= f; |
|
d3bf3c2ad75a
Implement round() slightly different, so that for negative ndigits no
Guido van Rossum <guido@python.org>
parents:
8138
diff
changeset
|
1782 else |
|
d3bf3c2ad75a
Implement round() slightly different, so that for negative ndigits no
Guido van Rossum <guido@python.org>
parents:
8138
diff
changeset
|
1783 x /= f; |
|
d3bf3c2ad75a
Implement round() slightly different, so that for negative ndigits no
Guido van Rossum <guido@python.org>
parents:
8138
diff
changeset
|
1784 return PyFloat_FromDouble(x); |
|
1215
9d6cf529bb71
bltinmodule.c: added round(x, [n]); coerce() of two class instances
Guido van Rossum <guido@python.org>
parents:
1096
diff
changeset
|
1785 } |
|
9d6cf529bb71
bltinmodule.c: added round(x, [n]); coerce() of two class instances
Guido van Rossum <guido@python.org>
parents:
1096
diff
changeset
|
1786 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1787 PyDoc_STRVAR(round_doc, |
| 8561 | 1788 "round(number[, ndigits]) -> floating point number\n\ |
| 1789 \n\ | |
| 1790 Round a number to a given precision in decimal digits (default 0 digits).\n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1791 This always returns a floating point number. Precision may be negative."); |
| 8561 | 1792 |
|
31210
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1793 static PyObject * |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1794 builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds) |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1795 { |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1796 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs; |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1797 PyObject *callable; |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1798 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0}; |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1799 long reverse; |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1800 |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1801 if (args != NULL) { |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1802 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted", |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1803 kwlist, &seq, &compare, &keyfunc, &reverse)) |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1804 return NULL; |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1805 } |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1806 |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1807 newlist = PySequence_List(seq); |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1808 if (newlist == NULL) |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1809 return NULL; |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1810 |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1811 callable = PyObject_GetAttrString(newlist, "sort"); |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1812 if (callable == NULL) { |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1813 Py_DECREF(newlist); |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1814 return NULL; |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1815 } |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1816 |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1817 newargs = PyTuple_GetSlice(args, 1, 4); |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1818 if (newargs == NULL) { |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1819 Py_DECREF(newlist); |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1820 Py_DECREF(callable); |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1821 return NULL; |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1822 } |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1823 |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1824 v = PyObject_Call(callable, newargs, kwds); |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1825 Py_DECREF(newargs); |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1826 Py_DECREF(callable); |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1827 if (v == NULL) { |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1828 Py_DECREF(newlist); |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1829 return NULL; |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1830 } |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1831 Py_DECREF(v); |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1832 return newlist; |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1833 } |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1834 |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1835 PyDoc_STRVAR(sorted_doc, |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1836 "sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list"); |
| 8561 | 1837 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1838 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
1839 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
|
1840 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1841 PyObject *v = NULL; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1842 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
|
1843 |
|
26818
e094a03a80ff
SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents:
26612
diff
changeset
|
1844 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v)) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
1845 return NULL; |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1846 if (v == NULL) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1847 d = PyEval_GetLocals(); |
|
2857
eebbdbee54f9
be more suspicious of getlocals()
Guido van Rossum <guido@python.org>
parents:
2844
diff
changeset
|
1848 if (d == NULL) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1849 if (!PyErr_Occurred()) |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1850 PyErr_SetString(PyExc_SystemError, |
|
28740
d3297e298211
some more error-message enhancements
Alex Martelli <aleaxit@gmail.com>
parents:
28738
diff
changeset
|
1851 "vars(): no locals!?"); |
|
2857
eebbdbee54f9
be more suspicious of getlocals()
Guido van Rossum <guido@python.org>
parents:
2844
diff
changeset
|
1852 } |
|
eebbdbee54f9
be more suspicious of getlocals()
Guido van Rossum <guido@python.org>
parents:
2844
diff
changeset
|
1853 else |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1854 Py_INCREF(d); |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1855 } |
|
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1856 else { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1857 d = PyObject_GetAttrString(v, "__dict__"); |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1858 if (d == NULL) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1859 PyErr_SetString(PyExc_TypeError, |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1860 "vars() argument must have __dict__ attribute"); |
|
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1861 return NULL; |
|
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1862 } |
|
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1863 } |
|
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1864 return d; |
|
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1865 } |
|
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1866 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1867 PyDoc_STRVAR(vars_doc, |
| 8561 | 1868 "vars([object]) -> dictionary\n\ |
| 1869 \n\ | |
| 1870 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
|
1871 With an argument, equivalent to object.__dict__."); |
| 8561 | 1872 |
|
28717
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1873 |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1874 static PyObject* |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1875 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
|
1876 { |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1877 PyObject *seq; |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1878 PyObject *result = NULL; |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1879 PyObject *temp, *item, *iter; |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1880 |
|
30774
2d98710f272e
Use PyArg_UnpackTuple() where possible.
Raymond Hettinger <python@rcn.com>
parents:
30683
diff
changeset
|
1881 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result)) |
|
28717
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1882 return NULL; |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1883 |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1884 iter = PyObject_GetIter(seq); |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1885 if (iter == NULL) |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1886 return NULL; |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1887 |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1888 if (result == NULL) { |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1889 result = PyInt_FromLong(0); |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1890 if (result == NULL) { |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1891 Py_DECREF(iter); |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1892 return NULL; |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1893 } |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1894 } else { |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1895 /* reject string values for 'start' parameter */ |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1896 if (PyObject_TypeCheck(result, &PyBaseString_Type)) { |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1897 PyErr_SetString(PyExc_TypeError, |
|
28740
d3297e298211
some more error-message enhancements
Alex Martelli <aleaxit@gmail.com>
parents:
28738
diff
changeset
|
1898 "sum() can't sum strings [use ''.join(seq) instead]"); |
|
28717
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1899 Py_DECREF(iter); |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1900 return NULL; |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1901 } |
|
28718
16ef5b9bc789
fixed a potential refcount bug (thanks Raymond!).
Alex Martelli <aleaxit@gmail.com>
parents:
28717
diff
changeset
|
1902 Py_INCREF(result); |
|
28717
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1903 } |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1904 |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1905 for(;;) { |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1906 item = PyIter_Next(iter); |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1907 if (item == NULL) { |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1908 /* error, or end-of-sequence */ |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1909 if (PyErr_Occurred()) { |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1910 Py_DECREF(result); |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1911 result = NULL; |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1912 } |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1913 break; |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1914 } |
|
30784
37285a0346c1
regressing the performance bugfix -- Guido wants the performance bug left
Alex Martelli <aleaxit@gmail.com>
parents:
30776
diff
changeset
|
1915 temp = PyNumber_Add(result, item); |
|
28717
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1916 Py_DECREF(result); |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1917 Py_DECREF(item); |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1918 result = temp; |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1919 if (result == NULL) |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1920 break; |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1921 } |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1922 Py_DECREF(iter); |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1923 return result; |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1924 } |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1925 |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1926 PyDoc_STRVAR(sum_doc, |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1927 "sum(sequence, start=0) -> value\n\ |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1928 \n\ |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1929 Returns the sum of a sequence of numbers (NOT strings) plus the value\n\ |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1930 of parameter 'start'. When the sequence is empty, returns start."); |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1931 |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1932 |
|
6145
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
1933 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
1934 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
|
1935 { |
|
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
1936 PyObject *inst; |
|
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
1937 PyObject *cls; |
|
17111
bf678a11c21a
Move the code implementing isinstance() and issubclass() to new C
Guido van Rossum <guido@python.org>
parents:
16048
diff
changeset
|
1938 int retval; |
|
6145
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
1939 |
|
26818
e094a03a80ff
SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents:
26612
diff
changeset
|
1940 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls)) |
|
6145
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
1941 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
|
1942 |
|
17111
bf678a11c21a
Move the code implementing isinstance() and issubclass() to new C
Guido van Rossum <guido@python.org>
parents:
16048
diff
changeset
|
1943 retval = PyObject_IsInstance(inst, cls); |
|
bf678a11c21a
Move the code implementing isinstance() and issubclass() to new C
Guido van Rossum <guido@python.org>
parents:
16048
diff
changeset
|
1944 if (retval < 0) |
|
15829
9308dc8c85e0
(Modified) patch by Ping - SF Patch #102681.
Guido van Rossum <guido@python.org>
parents:
15727
diff
changeset
|
1945 return NULL; |
|
22785
aa8d59823add
Add the 'bool' type and its values 'False' and 'True', as described in
Guido van Rossum <guido@python.org>
parents:
22205
diff
changeset
|
1946 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
|
1947 } |
|
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
1948 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1949 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
|
1950 "isinstance(object, class-or-type-or-tuple) -> bool\n\ |
| 8561 | 1951 \n\ |
| 1952 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
|
1953 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
|
1954 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
|
1955 isinstance(x, A) or isinstance(x, B) or ... (etc.)."); |
| 8561 | 1956 |
|
6145
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
1957 |
|
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
1958 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
1959 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
|
1960 { |
|
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
1961 PyObject *derived; |
|
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
1962 PyObject *cls; |
|
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
1963 int retval; |
|
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
1964 |
|
26818
e094a03a80ff
SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents:
26612
diff
changeset
|
1965 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls)) |
|
6145
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
1966 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
|
1967 |
|
17111
bf678a11c21a
Move the code implementing isinstance() and issubclass() to new C
Guido van Rossum <guido@python.org>
parents:
16048
diff
changeset
|
1968 retval = PyObject_IsSubclass(derived, cls); |
|
bf678a11c21a
Move the code implementing isinstance() and issubclass() to new C
Guido van Rossum <guido@python.org>
parents:
16048
diff
changeset
|
1969 if (retval < 0) |
|
bf678a11c21a
Move the code implementing isinstance() and issubclass() to new C
Guido van Rossum <guido@python.org>
parents:
16048
diff
changeset
|
1970 return NULL; |
|
22785
aa8d59823add
Add the 'bool' type and its values 'False' and 'True', as described in
Guido van Rossum <guido@python.org>
parents:
22205
diff
changeset
|
1971 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
|
1972 } |
|
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
1973 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1974 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
|
1975 "issubclass(C, B) -> bool\n\ |
| 8561 | 1976 \n\ |
|
26612
97f83542f8ee
Enhance issubclass() and PyObject_IsSubclass() so that a tuple is
Walter Dörwald <walter@livinglogic.de>
parents:
25924
diff
changeset
|
1977 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
|
1978 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
|
1979 is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.)."); |
| 8561 | 1980 |
|
6145
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
1981 |
|
13822
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
1982 static PyObject* |
|
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
1983 builtin_zip(PyObject *self, PyObject *args) |
|
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
1984 { |
|
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
1985 PyObject *ret; |
|
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
|
1986 const int itemsize = PySequence_Length(args); |
|
17694
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
1987 int i; |
|
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
1988 PyObject *itlist; /* tuple of iterators */ |
|
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
|
1989 int len; /* guess at result length */ |
|
13822
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
1990 |
|
30037
0504ba8efbb6
As discussed on python-dev, changed builtin.zip() to handle zero arguments
Raymond Hettinger <python@rcn.com>
parents:
28740
diff
changeset
|
1991 if (itemsize == 0) |
|
0504ba8efbb6
As discussed on python-dev, changed builtin.zip() to handle zero arguments
Raymond Hettinger <python@rcn.com>
parents:
28740
diff
changeset
|
1992 return PyList_New(0); |
|
0504ba8efbb6
As discussed on python-dev, changed builtin.zip() to handle zero arguments
Raymond Hettinger <python@rcn.com>
parents:
28740
diff
changeset
|
1993 |
|
13822
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
1994 /* args must be a tuple */ |
|
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
1995 assert(PyTuple_Check(args)); |
|
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
1996 |
|
23421
642a453e7a2e
SF bug 555042: zip() may trigger MemoryError.
Tim Peters <tim.peters@gmail.com>
parents:
23305
diff
changeset
|
1997 /* Guess at result length: the shortest of the input lengths. |
|
642a453e7a2e
SF bug 555042: zip() may trigger MemoryError.
Tim Peters <tim.peters@gmail.com>
parents:
23305
diff
changeset
|
1998 If some argument refuses to say, we refuse to guess too, lest |
|
642a453e7a2e
SF bug 555042: zip() may trigger MemoryError.
Tim Peters <tim.peters@gmail.com>
parents:
23305
diff
changeset
|
1999 an argument like xrange(sys.maxint) lead us astray.*/ |
|
23305
ef6e31f0cee1
builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents:
23295
diff
changeset
|
2000 len = -1; /* unknown */ |
|
ef6e31f0cee1
builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents:
23295
diff
changeset
|
2001 for (i = 0; i < itemsize; ++i) { |
|
ef6e31f0cee1
builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents:
23295
diff
changeset
|
2002 PyObject *item = PyTuple_GET_ITEM(args, i); |
|
31343
0c1d2062dee3
Apply map/zip pre-sizing optimization to a broader class of objects.
Raymond Hettinger <python@rcn.com>
parents:
31210
diff
changeset
|
2003 int thislen = PyObject_Size(item); |
|
23421
642a453e7a2e
SF bug 555042: zip() may trigger MemoryError.
Tim Peters <tim.peters@gmail.com>
parents:
23305
diff
changeset
|
2004 if (thislen < 0) { |
|
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
|
2005 PyErr_Clear(); |
|
23421
642a453e7a2e
SF bug 555042: zip() may trigger MemoryError.
Tim Peters <tim.peters@gmail.com>
parents:
23305
diff
changeset
|
2006 len = -1; |
|
642a453e7a2e
SF bug 555042: zip() may trigger MemoryError.
Tim Peters <tim.peters@gmail.com>
parents:
23305
diff
changeset
|
2007 break; |
|
642a453e7a2e
SF bug 555042: zip() may trigger MemoryError.
Tim Peters <tim.peters@gmail.com>
parents:
23305
diff
changeset
|
2008 } |
|
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
|
2009 else if (len < 0 || thislen < len) |
|
ef6e31f0cee1
builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents:
23295
diff
changeset
|
2010 len = thislen; |
|
ef6e31f0cee1
builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents:
23295
diff
changeset
|
2011 } |
|
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
|
2012 |
|
17694
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
2013 /* allocate result list */ |
|
23305
ef6e31f0cee1
builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents:
23295
diff
changeset
|
2014 if (len < 0) |
|
ef6e31f0cee1
builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents:
23295
diff
changeset
|
2015 len = 10; /* arbitrary */ |
|
ef6e31f0cee1
builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents:
23295
diff
changeset
|
2016 if ((ret = PyList_New(len)) == NULL) |
|
13822
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
2017 return NULL; |
|
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
2018 |
|
17694
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
2019 /* obtain iterators */ |
|
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
2020 itlist = PyTuple_New(itemsize); |
|
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
2021 if (itlist == NULL) |
|
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
2022 goto Fail_ret; |
|
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
2023 for (i = 0; i < itemsize; ++i) { |
|
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
2024 PyObject *item = PyTuple_GET_ITEM(args, i); |
|
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
2025 PyObject *it = PyObject_GetIter(item); |
|
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
2026 if (it == NULL) { |
|
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
2027 if (PyErr_ExceptionMatches(PyExc_TypeError)) |
|
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
2028 PyErr_Format(PyExc_TypeError, |
|
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
2029 "zip argument #%d must support iteration", |
|
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
2030 i+1); |
|
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
2031 goto Fail_ret_itlist; |
|
13822
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
2032 } |
|
17694
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
2033 PyTuple_SET_ITEM(itlist, i, it); |
|
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
2034 } |
|
13822
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
2035 |
|
17694
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
2036 /* build result into ret list */ |
|
23305
ef6e31f0cee1
builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents:
23295
diff
changeset
|
2037 for (i = 0; ; ++i) { |
|
ef6e31f0cee1
builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents:
23295
diff
changeset
|
2038 int j; |
|
17694
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
2039 PyObject *next = PyTuple_New(itemsize); |
|
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
2040 if (!next) |
|
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
2041 goto Fail_ret_itlist; |
|
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
2042 |
|
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
|
2043 for (j = 0; j < itemsize; j++) { |
|
ef6e31f0cee1
builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents:
23295
diff
changeset
|
2044 PyObject *it = PyTuple_GET_ITEM(itlist, j); |
|
17694
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
2045 PyObject *item = PyIter_Next(it); |
|
13822
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
2046 if (!item) { |
|
17694
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
2047 if (PyErr_Occurred()) { |
|
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
2048 Py_DECREF(ret); |
|
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
2049 ret = NULL; |
|
13822
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
2050 } |
|
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
2051 Py_DECREF(next); |
|
17694
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
2052 Py_DECREF(itlist); |
|
23305
ef6e31f0cee1
builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents:
23295
diff
changeset
|
2053 goto Done; |
|
13822
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
2054 } |
|
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
|
2055 PyTuple_SET_ITEM(next, j, item); |
|
13822
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
2056 } |
|
17694
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
2057 |
|
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
|
2058 if (i < len) |
|
ef6e31f0cee1
builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents:
23295
diff
changeset
|
2059 PyList_SET_ITEM(ret, i, next); |
|
ef6e31f0cee1
builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents:
23295
diff
changeset
|
2060 else { |
|
ef6e31f0cee1
builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents:
23295
diff
changeset
|
2061 int status = PyList_Append(ret, next); |
|
ef6e31f0cee1
builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents:
23295
diff
changeset
|
2062 Py_DECREF(next); |
|
ef6e31f0cee1
builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents:
23295
diff
changeset
|
2063 ++len; |
|
ef6e31f0cee1
builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents:
23295
diff
changeset
|
2064 if (status < 0) |
|
ef6e31f0cee1
builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents:
23295
diff
changeset
|
2065 goto Fail_ret_itlist; |
|
ef6e31f0cee1
builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents:
23295
diff
changeset
|
2066 } |
|
13822
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
2067 } |
|
17694
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
2068 |
|
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
|
2069 Done: |
|
ef6e31f0cee1
builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents:
23295
diff
changeset
|
2070 if (ret != NULL && i < len) { |
|
ef6e31f0cee1
builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents:
23295
diff
changeset
|
2071 /* The list is too big. */ |
|
ef6e31f0cee1
builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents:
23295
diff
changeset
|
2072 if (PyList_SetSlice(ret, i, len, NULL) < 0) |
|
ef6e31f0cee1
builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents:
23295
diff
changeset
|
2073 return NULL; |
|
ef6e31f0cee1
builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents:
23295
diff
changeset
|
2074 } |
|
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
|
2075 return ret; |
|
ef6e31f0cee1
builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents:
23295
diff
changeset
|
2076 |
|
17694
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
2077 Fail_ret_itlist: |
|
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
2078 Py_DECREF(itlist); |
|
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
2079 Fail_ret: |
|
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
2080 Py_DECREF(ret); |
|
aab6c1f19289
Generalize zip() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17683
diff
changeset
|
2081 return NULL; |
|
13822
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
2082 } |
|
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
2083 |
|
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
2084 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
2085 PyDoc_STRVAR(zip_doc, |
|
13822
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
2086 "zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\ |
|
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
2087 \n\ |
|
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
2088 Return a list of tuples, where each tuple contains the i-th element\n\ |
|
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
2089 from each of the argument sequences. The returned list is truncated\n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
2090 in length to the length of the shortest argument sequence."); |
|
13822
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
2091 |
|
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
2092 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2093 static PyMethodDef builtin_methods[] = { |
|
19301
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2094 {"__import__", builtin___import__, METH_VARARGS, import_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2095 {"abs", builtin_abs, METH_O, abs_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2096 {"apply", builtin_apply, METH_VARARGS, apply_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2097 {"callable", builtin_callable, METH_O, callable_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2098 {"chr", builtin_chr, METH_VARARGS, chr_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2099 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2100 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2101 {"compile", builtin_compile, METH_VARARGS, compile_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2102 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2103 {"dir", builtin_dir, METH_VARARGS, dir_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2104 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2105 {"eval", builtin_eval, METH_VARARGS, eval_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2106 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2107 {"filter", builtin_filter, METH_VARARGS, filter_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2108 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2109 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2110 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2111 {"hash", builtin_hash, METH_O, hash_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2112 {"hex", builtin_hex, METH_O, hex_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2113 {"id", builtin_id, METH_O, id_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2114 {"input", builtin_input, METH_VARARGS, input_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2115 {"intern", builtin_intern, METH_VARARGS, intern_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2116 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2117 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2118 {"iter", builtin_iter, METH_VARARGS, iter_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2119 {"len", builtin_len, METH_O, len_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2120 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2121 {"map", builtin_map, METH_VARARGS, map_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2122 {"max", builtin_max, METH_VARARGS, max_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2123 {"min", builtin_min, METH_VARARGS, min_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2124 {"oct", builtin_oct, METH_O, oct_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2125 {"ord", builtin_ord, METH_O, ord_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2126 {"pow", builtin_pow, METH_VARARGS, pow_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2127 {"range", builtin_range, METH_VARARGS, range_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2128 {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2129 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2130 {"reload", builtin_reload, METH_O, reload_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2131 {"repr", builtin_repr, METH_O, repr_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2132 {"round", builtin_round, METH_VARARGS, round_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2133 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc}, |
|
31210
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
2134 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc}, |
|
28717
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
2135 {"sum", builtin_sum, METH_VARARGS, sum_doc}, |
|
19343
7257e87e0720
Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents:
19301
diff
changeset
|
2136 #ifdef Py_USING_UNICODE |
|
19301
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2137 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc}, |
|
19343
7257e87e0720
Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents:
19301
diff
changeset
|
2138 #endif |
|
19301
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2139 {"vars", builtin_vars, METH_VARARGS, vars_doc}, |
|
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
2140 {"zip", builtin_zip, METH_VARARGS, zip_doc}, |
|
480
c64c6702549d
Added "apply"; added "SyntaxError"; changed table lay-out.
Guido van Rossum <guido@python.org>
parents:
463
diff
changeset
|
2141 {NULL, NULL}, |
| 86 | 2142 }; |
| 2143 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
2144 PyDoc_STRVAR(builtin_doc, |
| 8561 | 2145 "Built-in functions, exceptions, and other objects.\n\ |
| 2146 \n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
2147 Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices."); |
| 8561 | 2148 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5610
diff
changeset
|
2149 PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
2150 _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
|
2151 { |
|
12961
eb911eca9ee9
Christopher Fandrich <cfandrich@8cs.com>:
Fred Drake <fdrake@acm.org>
parents:
12756
diff
changeset
|
2152 PyObject *mod, *dict, *debug; |
| 8561 | 2153 mod = Py_InitModule4("__builtin__", builtin_methods, |
| 2154 builtin_doc, (PyObject *)NULL, | |
| 2155 PYTHON_API_VERSION); | |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5610
diff
changeset
|
2156 if (mod == NULL) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5610
diff
changeset
|
2157 return NULL; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5610
diff
changeset
|
2158 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
|
2159 |
|
28396
d56282c28a1e
Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents:
28027
diff
changeset
|
2160 #ifdef Py_TRACE_REFS |
|
d56282c28a1e
Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents:
28027
diff
changeset
|
2161 /* __builtin__ exposes a number of statically allocated objects |
|
d56282c28a1e
Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents:
28027
diff
changeset
|
2162 * that, before this code was added in 2.3, never showed up in |
|
d56282c28a1e
Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents:
28027
diff
changeset
|
2163 * the list of "all objects" maintained by Py_TRACE_REFS. As a |
|
d56282c28a1e
Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents:
28027
diff
changeset
|
2164 * result, programs leaking references to None and False (etc) |
|
d56282c28a1e
Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents:
28027
diff
changeset
|
2165 * couldn't be diagnosed by examining sys.getobjects(0). |
|
d56282c28a1e
Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents:
28027
diff
changeset
|
2166 */ |
|
d56282c28a1e
Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents:
28027
diff
changeset
|
2167 #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
|
2168 #else |
|
d56282c28a1e
Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents:
28027
diff
changeset
|
2169 #define ADD_TO_ALL(OBJECT) (void)0 |
|
d56282c28a1e
Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents:
28027
diff
changeset
|
2170 #endif |
|
d56282c28a1e
Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents:
28027
diff
changeset
|
2171 |
|
19902
de39956b5458
_PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents:
19894
diff
changeset
|
2172 #define SETBUILTIN(NAME, OBJECT) \ |
|
28396
d56282c28a1e
Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents:
28027
diff
changeset
|
2173 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \ |
|
d56282c28a1e
Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents:
28027
diff
changeset
|
2174 return NULL; \ |
|
d56282c28a1e
Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents:
28027
diff
changeset
|
2175 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
|
2176 |
|
de39956b5458
_PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents:
19894
diff
changeset
|
2177 SETBUILTIN("None", Py_None); |
|
de39956b5458
_PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents:
19894
diff
changeset
|
2178 SETBUILTIN("Ellipsis", Py_Ellipsis); |
|
de39956b5458
_PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents:
19894
diff
changeset
|
2179 SETBUILTIN("NotImplemented", Py_NotImplemented); |
|
22785
aa8d59823add
Add the 'bool' type and its values 'False' and 'True', as described in
Guido van Rossum <guido@python.org>
parents:
22205
diff
changeset
|
2180 SETBUILTIN("False", Py_False); |
|
aa8d59823add
Add the 'bool' type and its values 'False' and 'True', as described in
Guido van Rossum <guido@python.org>
parents:
22205
diff
changeset
|
2181 SETBUILTIN("True", Py_True); |
|
23597
ed007e47b3a1
Change name from string to basestring
Neal Norwitz <nnorwitz@gmail.com>
parents:
23542
diff
changeset
|
2182 SETBUILTIN("basestring", &PyBaseString_Type); |
|
22785
aa8d59823add
Add the 'bool' type and its values 'False' and 'True', as described in
Guido van Rossum <guido@python.org>
parents:
22205
diff
changeset
|
2183 SETBUILTIN("bool", &PyBool_Type); |
|
23868
8e6760bf1884
SF patch 568629 by Oren Tirosh: types made callable.
Guido van Rossum <guido@python.org>
parents:
23832
diff
changeset
|
2184 SETBUILTIN("buffer", &PyBuffer_Type); |
|
19902
de39956b5458
_PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents:
19894
diff
changeset
|
2185 SETBUILTIN("classmethod", &PyClassMethod_Type); |
|
18933
09df3254b49d
Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents:
18890
diff
changeset
|
2186 #ifndef WITHOUT_COMPLEX |
|
19902
de39956b5458
_PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents:
19894
diff
changeset
|
2187 SETBUILTIN("complex", &PyComplex_Type); |
|
18933
09df3254b49d
Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents:
18890
diff
changeset
|
2188 #endif |
|
20754
272336648d1f
Rename "dictionary" (type and constructor) to "dict".
Tim Peters <tim.peters@gmail.com>
parents:
20654
diff
changeset
|
2189 SETBUILTIN("dict", &PyDict_Type); |
|
23305
ef6e31f0cee1
builtin_zip(): Take a good guess at how big the result list will be,
Tim Peters <tim.peters@gmail.com>
parents:
23295
diff
changeset
|
2190 SETBUILTIN("enumerate", &PyEnum_Type); |
|
19902
de39956b5458
_PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents:
19894
diff
changeset
|
2191 SETBUILTIN("float", &PyFloat_Type); |
|
30929
54ff68e973ee
* Migrate set() and frozenset() from the sandbox.
Raymond Hettinger <python@rcn.com>
parents:
30865
diff
changeset
|
2192 SETBUILTIN("frozenset", &PyFrozenSet_Type); |
|
19902
de39956b5458
_PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents:
19894
diff
changeset
|
2193 SETBUILTIN("property", &PyProperty_Type); |
|
de39956b5458
_PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents:
19894
diff
changeset
|
2194 SETBUILTIN("int", &PyInt_Type); |
|
de39956b5458
_PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents:
19894
diff
changeset
|
2195 SETBUILTIN("list", &PyList_Type); |
|
de39956b5458
_PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents:
19894
diff
changeset
|
2196 SETBUILTIN("long", &PyLong_Type); |
|
de39956b5458
_PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents:
19894
diff
changeset
|
2197 SETBUILTIN("object", &PyBaseObject_Type); |
|
30865
41c4e143e6e6
Implement and apply PEP 322, reverse iteration
Raymond Hettinger <python@rcn.com>
parents:
30784
diff
changeset
|
2198 SETBUILTIN("reversed", &PyReversed_Type); |
|
30929
54ff68e973ee
* Migrate set() and frozenset() from the sandbox.
Raymond Hettinger <python@rcn.com>
parents:
30865
diff
changeset
|
2199 SETBUILTIN("set", &PySet_Type); |
|
23868
8e6760bf1884
SF patch 568629 by Oren Tirosh: types made callable.
Guido van Rossum <guido@python.org>
parents:
23832
diff
changeset
|
2200 SETBUILTIN("slice", &PySlice_Type); |
|
19902
de39956b5458
_PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents:
19894
diff
changeset
|
2201 SETBUILTIN("staticmethod", &PyStaticMethod_Type); |
|
de39956b5458
_PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents:
19894
diff
changeset
|
2202 SETBUILTIN("str", &PyString_Type); |
|
de39956b5458
_PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents:
19894
diff
changeset
|
2203 SETBUILTIN("super", &PySuper_Type); |
|
de39956b5458
_PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents:
19894
diff
changeset
|
2204 SETBUILTIN("tuple", &PyTuple_Type); |
|
de39956b5458
_PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents:
19894
diff
changeset
|
2205 SETBUILTIN("type", &PyType_Type); |
|
23695
6266f1bd1ab9
Skip Montanaro's patch, SF 559833, exposing xrange type in builtins.
Raymond Hettinger <python@rcn.com>
parents:
23597
diff
changeset
|
2206 SETBUILTIN("xrange", &PyRange_Type); |
|
19903
c082971823ce
Get rid of builtin_open() entirely (the C code and docstring, not the
Tim Peters <tim.peters@gmail.com>
parents:
19902
diff
changeset
|
2207 |
|
c082971823ce
Get rid of builtin_open() entirely (the C code and docstring, not the
Tim Peters <tim.peters@gmail.com>
parents:
19902
diff
changeset
|
2208 /* Note that open() is just an alias of file(). */ |
|
c082971823ce
Get rid of builtin_open() entirely (the C code and docstring, not the
Tim Peters <tim.peters@gmail.com>
parents:
19902
diff
changeset
|
2209 SETBUILTIN("open", &PyFile_Type); |
|
19902
de39956b5458
_PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents:
19894
diff
changeset
|
2210 SETBUILTIN("file", &PyFile_Type); |
|
19343
7257e87e0720
Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents:
19301
diff
changeset
|
2211 #ifdef Py_USING_UNICODE |
|
19902
de39956b5458
_PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents:
19894
diff
changeset
|
2212 SETBUILTIN("unicode", &PyUnicode_Type); |
|
19343
7257e87e0720
Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents:
19301
diff
changeset
|
2213 #endif |
|
22785
aa8d59823add
Add the 'bool' type and its values 'False' and 'True', as described in
Guido van Rossum <guido@python.org>
parents:
22205
diff
changeset
|
2214 debug = PyBool_FromLong(Py_OptimizeFlag == 0); |
|
12961
eb911eca9ee9
Christopher Fandrich <cfandrich@8cs.com>:
Fred Drake <fdrake@acm.org>
parents:
12756
diff
changeset
|
2215 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) { |
|
eb911eca9ee9
Christopher Fandrich <cfandrich@8cs.com>:
Fred Drake <fdrake@acm.org>
parents:
12756
diff
changeset
|
2216 Py_XDECREF(debug); |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5610
diff
changeset
|
2217 return NULL; |
|
12961
eb911eca9ee9
Christopher Fandrich <cfandrich@8cs.com>:
Fred Drake <fdrake@acm.org>
parents:
12756
diff
changeset
|
2218 } |
|
eb911eca9ee9
Christopher Fandrich <cfandrich@8cs.com>:
Fred Drake <fdrake@acm.org>
parents:
12756
diff
changeset
|
2219 Py_XDECREF(debug); |
|
6198
c43ca8dd0081
Removed obsolete exception PyExc_AccessError.
Barry Warsaw <barry@python.org>
parents:
6145
diff
changeset
|
2220 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5610
diff
changeset
|
2221 return mod; |
|
28396
d56282c28a1e
Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents:
28027
diff
changeset
|
2222 #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
|
2223 #undef SETBUILTIN |
| 86 | 2224 } |
| 2225 | |
|
1393
7d6a2d950f13
* nismodule.c: database keys and values can contain null bytes. be more
Guido van Rossum <guido@python.org>
parents:
1387
diff
changeset
|
2226 /* Helper for filter(): filter a tuple through a function */ |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2227 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2228 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
2229 filtertuple(PyObject *func, PyObject *tuple) |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2230 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2231 PyObject *result; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2232 register int i, j; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2233 int len = PyTuple_Size(tuple); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2234 |
|
2890
04e1690fb4d1
avoid resize of 0-length tuple
Guido van Rossum <guido@python.org>
parents:
2857
diff
changeset
|
2235 if (len == 0) { |
|
27681
e5454fe1aafd
Make sure filter() never returns tuple, str or unicode
Walter Dörwald <walter@livinglogic.de>
parents:
27675
diff
changeset
|
2236 if (PyTuple_CheckExact(tuple)) |
|
e5454fe1aafd
Make sure filter() never returns tuple, str or unicode
Walter Dörwald <walter@livinglogic.de>
parents:
27675
diff
changeset
|
2237 Py_INCREF(tuple); |
|
e5454fe1aafd
Make sure filter() never returns tuple, str or unicode
Walter Dörwald <walter@livinglogic.de>
parents:
27675
diff
changeset
|
2238 else |
|
e5454fe1aafd
Make sure filter() never returns tuple, str or unicode
Walter Dörwald <walter@livinglogic.de>
parents:
27675
diff
changeset
|
2239 tuple = PyTuple_New(0); |
|
2890
04e1690fb4d1
avoid resize of 0-length tuple
Guido van Rossum <guido@python.org>
parents:
2857
diff
changeset
|
2240 return tuple; |
|
04e1690fb4d1
avoid resize of 0-length tuple
Guido van Rossum <guido@python.org>
parents:
2857
diff
changeset
|
2241 } |
|
04e1690fb4d1
avoid resize of 0-length tuple
Guido van Rossum <guido@python.org>
parents:
2857
diff
changeset
|
2242 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2243 if ((result = PyTuple_New(len)) == NULL) |
|
1387
f992ac2a38d5
* rangeobject.{c,h}, bltinmodule.c: removed non-essential ops from range
Guido van Rossum <guido@python.org>
parents:
1380
diff
changeset
|
2244 return NULL; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2245 |
|
1375
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
2246 for (i = j = 0; i < len; ++i) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2247 PyObject *item, *good; |
|
1375
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
2248 int ok; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2249 |
|
27795
2042e2051d97
Change filtertuple() to use tp_as_sequence->sq_item
Walter Dörwald <walter@livinglogic.de>
parents:
27790
diff
changeset
|
2250 if (tuple->ob_type->tp_as_sequence && |
|
2042e2051d97
Change filtertuple() to use tp_as_sequence->sq_item
Walter Dörwald <walter@livinglogic.de>
parents:
27790
diff
changeset
|
2251 tuple->ob_type->tp_as_sequence->sq_item) { |
|
2042e2051d97
Change filtertuple() to use tp_as_sequence->sq_item
Walter Dörwald <walter@livinglogic.de>
parents:
27790
diff
changeset
|
2252 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i); |
|
30182
7bc772527e44
Fix a crash: when sq_item failed the code continued blindly and used the
Walter Dörwald <walter@livinglogic.de>
parents:
30151
diff
changeset
|
2253 if (item == NULL) |
|
7bc772527e44
Fix a crash: when sq_item failed the code continued blindly and used the
Walter Dörwald <walter@livinglogic.de>
parents:
30151
diff
changeset
|
2254 goto Fail_1; |
|
27795
2042e2051d97
Change filtertuple() to use tp_as_sequence->sq_item
Walter Dörwald <walter@livinglogic.de>
parents:
27790
diff
changeset
|
2255 } else { |
|
28740
d3297e298211
some more error-message enhancements
Alex Martelli <aleaxit@gmail.com>
parents:
28738
diff
changeset
|
2256 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple"); |
|
1375
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
2257 goto Fail_1; |
|
27795
2042e2051d97
Change filtertuple() to use tp_as_sequence->sq_item
Walter Dörwald <walter@livinglogic.de>
parents:
27790
diff
changeset
|
2258 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2259 if (func == Py_None) { |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2260 Py_INCREF(item); |
|
1375
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
2261 good = item; |
|
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
2262 } |
|
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
2263 else { |
|
30683
3b59fa5d25b1
Simplify and speedup uses of Py_BuildValue():
Raymond Hettinger <python@rcn.com>
parents:
30430
diff
changeset
|
2264 PyObject *arg = PyTuple_Pack(1, item); |
|
30182
7bc772527e44
Fix a crash: when sq_item failed the code continued blindly and used the
Walter Dörwald <walter@livinglogic.de>
parents:
30151
diff
changeset
|
2265 if (arg == NULL) { |
|
7bc772527e44
Fix a crash: when sq_item failed the code continued blindly and used the
Walter Dörwald <walter@livinglogic.de>
parents:
30151
diff
changeset
|
2266 Py_DECREF(item); |
|
1375
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
2267 goto Fail_1; |
|
30182
7bc772527e44
Fix a crash: when sq_item failed the code continued blindly and used the
Walter Dörwald <walter@livinglogic.de>
parents:
30151
diff
changeset
|
2268 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2269 good = PyEval_CallObject(func, arg); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2270 Py_DECREF(arg); |
|
30182
7bc772527e44
Fix a crash: when sq_item failed the code continued blindly and used the
Walter Dörwald <walter@livinglogic.de>
parents:
30151
diff
changeset
|
2271 if (good == NULL) { |
|
7bc772527e44
Fix a crash: when sq_item failed the code continued blindly and used the
Walter Dörwald <walter@livinglogic.de>
parents:
30151
diff
changeset
|
2272 Py_DECREF(item); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2273 goto Fail_1; |
|
30182
7bc772527e44
Fix a crash: when sq_item failed the code continued blindly and used the
Walter Dörwald <walter@livinglogic.de>
parents:
30151
diff
changeset
|
2274 } |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2275 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2276 ok = PyObject_IsTrue(good); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2277 Py_DECREF(good); |
|
1375
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
2278 if (ok) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2279 if (PyTuple_SetItem(result, j++, item) < 0) |
|
1375
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
2280 goto Fail_1; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2281 } |
|
30182
7bc772527e44
Fix a crash: when sq_item failed the code continued blindly and used the
Walter Dörwald <walter@livinglogic.de>
parents:
30151
diff
changeset
|
2282 else |
|
7bc772527e44
Fix a crash: when sq_item failed the code continued blindly and used the
Walter Dörwald <walter@livinglogic.de>
parents:
30151
diff
changeset
|
2283 Py_DECREF(item); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2284 } |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2285 |
|
17976
d579a5d8b3fe
Cruft cleanup: Removed the unused last_is_sticky argument from the internal
Tim Peters <tim.peters@gmail.com>
parents:
17874
diff
changeset
|
2286 if (_PyTuple_Resize(&result, j) < 0) |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2287 return NULL; |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2288 |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2289 return result; |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2290 |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2291 Fail_1: |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2292 Py_DECREF(result); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2293 return NULL; |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2294 } |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2295 |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2296 |
|
1393
7d6a2d950f13
* nismodule.c: database keys and values can contain null bytes. be more
Guido van Rossum <guido@python.org>
parents:
1387
diff
changeset
|
2297 /* Helper for filter(): filter a string through a function */ |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2298 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2299 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
2300 filterstring(PyObject *func, PyObject *strobj) |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2301 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2302 PyObject *result; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2303 register int i, j; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2304 int len = PyString_Size(strobj); |
|
27674
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2305 int outlen = len; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2306 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2307 if (func == Py_None) { |
|
27786
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2308 /* If it's a real string we can return the original, |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2309 * as no character is ever false and __getitem__ |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2310 * does return this character. If it's a subclass |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2311 * we must go through the __getitem__ loop */ |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2312 if (PyString_CheckExact(strobj)) { |
|
27681
e5454fe1aafd
Make sure filter() never returns tuple, str or unicode
Walter Dörwald <walter@livinglogic.de>
parents:
27675
diff
changeset
|
2313 Py_INCREF(strobj); |
|
27786
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2314 return strobj; |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2315 } |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2316 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2317 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL) |
|
1387
f992ac2a38d5
* rangeobject.{c,h}, bltinmodule.c: removed non-essential ops from range
Guido van Rossum <guido@python.org>
parents:
1380
diff
changeset
|
2318 return NULL; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2319 |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2320 for (i = j = 0; i < len; ++i) { |
|
27786
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2321 PyObject *item; |
|
1375
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
2322 int ok; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2323 |
|
1375
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
2324 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i); |
|
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
2325 if (item == NULL) |
|
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
2326 goto Fail_1; |
|
27786
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2327 if (func==Py_None) { |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2328 ok = 1; |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2329 } else { |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2330 PyObject *arg, *good; |
|
30683
3b59fa5d25b1
Simplify and speedup uses of Py_BuildValue():
Raymond Hettinger <python@rcn.com>
parents:
30430
diff
changeset
|
2331 arg = PyTuple_Pack(1, item); |
|
27786
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2332 if (arg == NULL) { |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2333 Py_DECREF(item); |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2334 goto Fail_1; |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2335 } |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2336 good = PyEval_CallObject(func, arg); |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2337 Py_DECREF(arg); |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2338 if (good == NULL) { |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2339 Py_DECREF(item); |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2340 goto Fail_1; |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2341 } |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2342 ok = PyObject_IsTrue(good); |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2343 Py_DECREF(good); |
|
17337
96ea0eccdb31
SF patch #413552 - Premature decref on object
Tim Peters <tim.peters@gmail.com>
parents:
17125
diff
changeset
|
2344 } |
|
27674
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2345 if (ok) { |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2346 int reslen; |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2347 if (!PyString_Check(item)) { |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2348 PyErr_SetString(PyExc_TypeError, "can't filter str to str:" |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2349 " __getitem__ returned different type"); |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2350 Py_DECREF(item); |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2351 goto Fail_1; |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2352 } |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2353 reslen = PyString_GET_SIZE(item); |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2354 if (reslen == 1) { |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2355 PyString_AS_STRING(result)[j++] = |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2356 PyString_AS_STRING(item)[0]; |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2357 } else { |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2358 /* do we need more space? */ |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2359 int need = j + reslen + len-i-1; |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2360 if (need > outlen) { |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2361 /* overallocate, to avoid reallocations */ |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2362 if (need<2*outlen) |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2363 need = 2*outlen; |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2364 if (_PyString_Resize(&result, need)) { |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2365 Py_DECREF(item); |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2366 return NULL; |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2367 } |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2368 outlen = need; |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2369 } |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2370 memcpy( |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2371 PyString_AS_STRING(result) + j, |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2372 PyString_AS_STRING(item), |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2373 reslen |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2374 ); |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2375 j += reslen; |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2376 } |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2377 } |
|
17337
96ea0eccdb31
SF patch #413552 - Premature decref on object
Tim Peters <tim.peters@gmail.com>
parents:
17125
diff
changeset
|
2378 Py_DECREF(item); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2379 } |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2380 |
|
27674
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2381 if (j < outlen) |
|
23295
6fa76b4e59fe
Repair widespread misuse of _PyString_Resize. Since it's clear people
Tim Peters <tim.peters@gmail.com>
parents:
23285
diff
changeset
|
2382 _PyString_Resize(&result, j); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2383 |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2384 return result; |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2385 |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2386 Fail_1: |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2387 Py_DECREF(result); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2388 return NULL; |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2389 } |
|
27385
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2390 |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2391 #ifdef Py_USING_UNICODE |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2392 /* Helper for filter(): filter a Unicode object through a function */ |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2393 |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2394 static PyObject * |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2395 filterunicode(PyObject *func, PyObject *strobj) |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2396 { |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2397 PyObject *result; |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2398 register int i, j; |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2399 int len = PyUnicode_GetSize(strobj); |
|
27674
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2400 int outlen = len; |
|
27385
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2401 |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2402 if (func == Py_None) { |
|
27786
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2403 /* If it's a real string we can return the original, |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2404 * as no character is ever false and __getitem__ |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2405 * does return this character. If it's a subclass |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2406 * we must go through the __getitem__ loop */ |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2407 if (PyUnicode_CheckExact(strobj)) { |
|
27681
e5454fe1aafd
Make sure filter() never returns tuple, str or unicode
Walter Dörwald <walter@livinglogic.de>
parents:
27675
diff
changeset
|
2408 Py_INCREF(strobj); |
|
27786
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2409 return strobj; |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2410 } |
|
27385
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2411 } |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2412 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL) |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2413 return NULL; |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2414 |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2415 for (i = j = 0; i < len; ++i) { |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2416 PyObject *item, *arg, *good; |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2417 int ok; |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2418 |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2419 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i); |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2420 if (item == NULL) |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2421 goto Fail_1; |
|
27786
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2422 if (func == Py_None) { |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2423 ok = 1; |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2424 } else { |
|
30683
3b59fa5d25b1
Simplify and speedup uses of Py_BuildValue():
Raymond Hettinger <python@rcn.com>
parents:
30430
diff
changeset
|
2425 arg = PyTuple_Pack(1, item); |
|
27786
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2426 if (arg == NULL) { |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2427 Py_DECREF(item); |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2428 goto Fail_1; |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2429 } |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2430 good = PyEval_CallObject(func, arg); |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2431 Py_DECREF(arg); |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2432 if (good == NULL) { |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2433 Py_DECREF(item); |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2434 goto Fail_1; |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2435 } |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2436 ok = PyObject_IsTrue(good); |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2437 Py_DECREF(good); |
|
27385
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2438 } |
|
27674
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2439 if (ok) { |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2440 int reslen; |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2441 if (!PyUnicode_Check(item)) { |
|
30429
c9cc35249322
Reflow long lines and reformat.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
30182
diff
changeset
|
2442 PyErr_SetString(PyExc_TypeError, |
|
c9cc35249322
Reflow long lines and reformat.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
30182
diff
changeset
|
2443 "can't filter unicode to unicode:" |
|
c9cc35249322
Reflow long lines and reformat.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
30182
diff
changeset
|
2444 " __getitem__ returned different type"); |
|
27674
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2445 Py_DECREF(item); |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2446 goto Fail_1; |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2447 } |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2448 reslen = PyUnicode_GET_SIZE(item); |
|
30429
c9cc35249322
Reflow long lines and reformat.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
30182
diff
changeset
|
2449 if (reslen == 1) |
|
27674
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2450 PyUnicode_AS_UNICODE(result)[j++] = |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2451 PyUnicode_AS_UNICODE(item)[0]; |
|
30429
c9cc35249322
Reflow long lines and reformat.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
30182
diff
changeset
|
2452 else { |
|
27674
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2453 /* do we need more space? */ |
|
30429
c9cc35249322
Reflow long lines and reformat.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
30182
diff
changeset
|
2454 int need = j + reslen + len - i - 1; |
|
27674
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2455 if (need > outlen) { |
|
30429
c9cc35249322
Reflow long lines and reformat.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
30182
diff
changeset
|
2456 /* overallocate, |
|
c9cc35249322
Reflow long lines and reformat.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
30182
diff
changeset
|
2457 to avoid reallocations */ |
|
c9cc35249322
Reflow long lines and reformat.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
30182
diff
changeset
|
2458 if (need < 2 * outlen) |
|
c9cc35249322
Reflow long lines and reformat.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
30182
diff
changeset
|
2459 need = 2 * outlen; |
|
30430
a8f04cbf659c
Correct check of PyUnicode_Resize() return value.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
30429
diff
changeset
|
2460 if (PyUnicode_Resize( |
|
a8f04cbf659c
Correct check of PyUnicode_Resize() return value.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
30429
diff
changeset
|
2461 &result, need) < 0) { |
|
27674
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2462 Py_DECREF(item); |
|
27675
8f8448fb58d6
PyUnicode_Resize() doesn't free its argument in case of a failure,
Walter Dörwald <walter@livinglogic.de>
parents:
27674
diff
changeset
|
2463 goto Fail_1; |
|
27674
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2464 } |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2465 outlen = need; |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2466 } |
|
30429
c9cc35249322
Reflow long lines and reformat.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
30182
diff
changeset
|
2467 memcpy(PyUnicode_AS_UNICODE(result) + j, |
|
c9cc35249322
Reflow long lines and reformat.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
30182
diff
changeset
|
2468 PyUnicode_AS_UNICODE(item), |
|
c9cc35249322
Reflow long lines and reformat.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
30182
diff
changeset
|
2469 reslen*sizeof(Py_UNICODE)); |
|
27674
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2470 j += reslen; |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2471 } |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2472 } |
|
27385
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2473 Py_DECREF(item); |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2474 } |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2475 |
|
27674
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2476 if (j < outlen) |
|
27385
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2477 PyUnicode_Resize(&result, j); |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2478 |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2479 return result; |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2480 |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2481 Fail_1: |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2482 Py_DECREF(result); |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2483 return NULL; |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2484 } |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2485 #endif |
