Mercurial > cpython-lru_cache-weakref
annotate Python/bltinmodule.c @ 41824:24b60622b944
Merged revisions 55407-55513 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/p3yk
................
r55413 | fred.drake | 2007-05-17 12:30:10 -0700 (Thu, 17 May 2007) | 1 line
fix argument name in documentation; match the implementation
................
r55430 | jack.diederich | 2007-05-18 06:39:59 -0700 (Fri, 18 May 2007) | 1 line
Implements class decorators, PEP 3129.
................
r55432 | guido.van.rossum | 2007-05-18 08:09:41 -0700 (Fri, 18 May 2007) | 2 lines
obsubmit.
................
r55434 | guido.van.rossum | 2007-05-18 09:39:10 -0700 (Fri, 18 May 2007) | 3 lines
Fix bug in test_inspect. (I presume this is how it should be fixed;
Jack Diedrich, please verify.)
................
r55460 | brett.cannon | 2007-05-20 00:31:57 -0700 (Sun, 20 May 2007) | 4 lines
Remove the imageop module. With imgfile already removed in Python 3.0 and
rgbimg gone in Python 2.6 the unit tests themselves were made worthless. Plus
third-party libraries perform the same function much better.
................
r55469 | neal.norwitz | 2007-05-20 11:28:20 -0700 (Sun, 20 May 2007) | 118 lines
Merged revisions 55324-55467 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r55348 | georg.brandl | 2007-05-15 13:19:34 -0700 (Tue, 15 May 2007) | 4 lines
HTML-escape the plain traceback in cgitb's HTML output, to prevent
the traceback inadvertently or maliciously closing the comment and
injecting HTML into the error page.
........
r55372 | neal.norwitz | 2007-05-15 21:33:50 -0700 (Tue, 15 May 2007) | 6 lines
Port rev 55353 from Guido:
Add what looks like a necessary call to PyErr_NoMemory() when PyMem_MALLOC()
fails.
Will backport.
........
r55377 | neal.norwitz | 2007-05-15 22:06:33 -0700 (Tue, 15 May 2007) | 1 line
Mention removal of some directories for obsolete platforms
........
r55380 | brett.cannon | 2007-05-15 22:50:03 -0700 (Tue, 15 May 2007) | 2 lines
Change the maintainer of the BeOS port.
........
r55383 | georg.brandl | 2007-05-16 06:44:18 -0700 (Wed, 16 May 2007) | 2 lines
Bug #1719995: don't use deprecated method in sets example.
........
r55386 | neal.norwitz | 2007-05-16 13:05:11 -0700 (Wed, 16 May 2007) | 5 lines
Fix bug in marshal where bad data would cause a segfault due to
lack of an infinite recursion check.
Contributed by Damien Miller at Google.
........
r55389 | brett.cannon | 2007-05-16 15:42:29 -0700 (Wed, 16 May 2007) | 6 lines
Remove the gopherlib module. It has been raising a DeprecationWarning since
Python 2.5.
Also remove gopher support from urllib/urllib2. As both imported gopherlib the
usage of the support would have raised a DeprecationWarning.
........
r55394 | raymond.hettinger | 2007-05-16 18:08:04 -0700 (Wed, 16 May 2007) | 1 line
calendar.py gets no benefit from xrange() instead of range()
........
r55395 | brett.cannon | 2007-05-16 19:02:56 -0700 (Wed, 16 May 2007) | 3 lines
Complete deprecation of BaseException.message. Some subclasses were directly
accessing the message attribute instead of using the descriptor.
........
r55396 | neal.norwitz | 2007-05-16 23:11:36 -0700 (Wed, 16 May 2007) | 4 lines
Reduce the max stack depth to see if this fixes the segfaults on
Windows and some other boxes. If this is successful, this rev should
be backported. I'm not sure how close to the limit we should push this.
........
r55397 | neal.norwitz | 2007-05-16 23:23:50 -0700 (Wed, 16 May 2007) | 4 lines
Set the depth to something very small to try to determine if the
crashes on Windows are really due to the stack size or possibly
some other problem.
........
r55398 | neal.norwitz | 2007-05-17 00:04:46 -0700 (Thu, 17 May 2007) | 4 lines
Last try for tweaking the max stack depth. 5000 was the original value,
4000 didn't work either. 1000 does work on Windows. If 2000 works,
that will hopefully be a reasonable balance.
........
r55412 | fred.drake | 2007-05-17 12:29:58 -0700 (Thu, 17 May 2007) | 1 line
fix argument name in documentation; match the implementation
........
r55427 | neal.norwitz | 2007-05-17 22:47:16 -0700 (Thu, 17 May 2007) | 1 line
Verify neither dumps or loads overflow the stack and segfault.
........
r55446 | collin.winter | 2007-05-18 16:11:24 -0700 (Fri, 18 May 2007) | 1 line
Backport PEP 3110's new 'except' syntax to 2.6.
........
r55448 | raymond.hettinger | 2007-05-18 18:11:16 -0700 (Fri, 18 May 2007) | 1 line
Improvements to NamedTuple's implementation, tests, and documentation
........
r55449 | raymond.hettinger | 2007-05-18 18:50:11 -0700 (Fri, 18 May 2007) | 1 line
Fix beginner mistake -- don't mix spaces and tabs.
........
r55450 | neal.norwitz | 2007-05-18 20:48:47 -0700 (Fri, 18 May 2007) | 1 line
Clear data so random memory does not get freed. Will backport.
........
r55452 | neal.norwitz | 2007-05-18 21:34:55 -0700 (Fri, 18 May 2007) | 3 lines
Whoops, need to pay attention to those test failures.
Move the clear to *before* the first use, not after.
........
r55453 | neal.norwitz | 2007-05-18 21:35:52 -0700 (Fri, 18 May 2007) | 1 line
Give some clue as to what happened if the test fails.
........
r55455 | georg.brandl | 2007-05-19 11:09:26 -0700 (Sat, 19 May 2007) | 2 lines
Fix docstring for add_package in site.py.
........
r55458 | brett.cannon | 2007-05-20 00:09:50 -0700 (Sun, 20 May 2007) | 2 lines
Remove the rgbimg module. It has been deprecated since Python 2.5.
........
r55465 | nick.coghlan | 2007-05-20 04:12:49 -0700 (Sun, 20 May 2007) | 1 line
Fix typo in example (should be backported, but my maintenance branch is woefully out of date)
........
................
r55472 | brett.cannon | 2007-05-20 12:06:18 -0700 (Sun, 20 May 2007) | 2 lines
Remove imageop from the Windows build process.
................
r55486 | neal.norwitz | 2007-05-20 23:59:52 -0700 (Sun, 20 May 2007) | 1 line
Remove callable() builtin
................
r55506 | neal.norwitz | 2007-05-22 00:43:29 -0700 (Tue, 22 May 2007) | 78 lines
Merged revisions 55468-55505 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r55468 | neal.norwitz | 2007-05-20 11:06:27 -0700 (Sun, 20 May 2007) | 1 line
rotor is long gone.
........
r55470 | neal.norwitz | 2007-05-20 11:43:00 -0700 (Sun, 20 May 2007) | 1 line
Update directories/files at the top-level.
........
r55471 | brett.cannon | 2007-05-20 12:05:06 -0700 (Sun, 20 May 2007) | 2 lines
Try to remove rgbimg from Windows builds.
........
r55474 | brett.cannon | 2007-05-20 16:17:38 -0700 (Sun, 20 May 2007) | 4 lines
Remove the macfs module. This led to the deprecation of macostools.touched();
it completely relied on macfs and is a no-op on OS X according to code
comments.
........
r55476 | brett.cannon | 2007-05-20 16:56:18 -0700 (Sun, 20 May 2007) | 3 lines
Move imgfile import to the global namespace to trigger an import error ASAP to
prevent creation of a test file.
........
r55477 | brett.cannon | 2007-05-20 16:57:38 -0700 (Sun, 20 May 2007) | 3 lines
Cause posixfile to raise a DeprecationWarning. Documented as deprecated since
Ptyhon 1.5.
........
r55479 | andrew.kuchling | 2007-05-20 17:03:15 -0700 (Sun, 20 May 2007) | 1 line
Note removed modules
........
r55481 | martin.v.loewis | 2007-05-20 21:35:47 -0700 (Sun, 20 May 2007) | 2 lines
Add Alexandre Vassalotti.
........
r55482 | george.yoshida | 2007-05-20 21:41:21 -0700 (Sun, 20 May 2007) | 4 lines
fix against r55474 [Remove the macfs module]
Remove "libmacfs.tex" from Makefile.deps and mac/mac.tex.
........
r55487 | raymond.hettinger | 2007-05-21 01:13:35 -0700 (Mon, 21 May 2007) | 1 line
Replace assertion with straight error-checking.
........
r55489 | raymond.hettinger | 2007-05-21 09:40:10 -0700 (Mon, 21 May 2007) | 1 line
Allow all alphanumeric and underscores in type and field names.
........
r55490 | facundo.batista | 2007-05-21 10:32:32 -0700 (Mon, 21 May 2007) | 5 lines
Added timeout support to HTTPSConnection, through the
socket.create_connection function. Also added a small
test for this, and updated NEWS file.
........
r55495 | georg.brandl | 2007-05-21 13:34:16 -0700 (Mon, 21 May 2007) | 2 lines
Patch #1686487: you can now pass any mapping after '**' in function calls.
........
r55502 | neal.norwitz | 2007-05-21 23:03:36 -0700 (Mon, 21 May 2007) | 1 line
Document new params to HTTPSConnection
........
r55504 | neal.norwitz | 2007-05-22 00:16:10 -0700 (Tue, 22 May 2007) | 1 line
Stop using METH_OLDARGS
........
r55505 | neal.norwitz | 2007-05-22 00:16:44 -0700 (Tue, 22 May 2007) | 1 line
Stop using METH_OLDARGS implicitly
........
................
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Tue, 22 May 2007 18:11:13 +0000 |
| parents | f9949b63eab3 |
| children | 308e632702bf |
| rev | line source |
|---|---|
| 86 | 1 /* Built-in functions */ |
| 2 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
3 #include "Python.h" |
| 86 | 4 |
| 5 #include "node.h" | |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35636
diff
changeset
|
6 #include "code.h" |
|
1263
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
7 #include "eval.h" |
| 86 | 8 |
|
5317
c72c7e1930b3
Keep gcc -Wall and Microsoft VC happy.
Guido van Rossum <guido@python.org>
parents:
5223
diff
changeset
|
9 #include <ctype.h> |
|
c72c7e1930b3
Keep gcc -Wall and Microsoft VC happy.
Guido van Rossum <guido@python.org>
parents:
5223
diff
changeset
|
10 |
|
20654
edd9d0b3c47e
SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents:
20471
diff
changeset
|
11 #ifdef RISCOS |
|
edd9d0b3c47e
SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents:
20471
diff
changeset
|
12 #include "unixstuff.h" |
|
edd9d0b3c47e
SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents:
20471
diff
changeset
|
13 #endif |
|
edd9d0b3c47e
SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents:
20471
diff
changeset
|
14 |
|
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
|
15 /* 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
|
16 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
|
17 */ |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
23868
diff
changeset
|
18 #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
|
19 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
|
20 #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
|
21 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
|
22 #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
|
23 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
|
24 #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
|
25 |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
26 /* Forward */ |
|
13447
a89f7f268de4
Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents:
13446
diff
changeset
|
27 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
|
28 static PyObject *filterunicode(PyObject *, PyObject *); |
|
13447
a89f7f268de4
Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents:
13446
diff
changeset
|
29 static PyObject *filtertuple (PyObject *, PyObject *); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
30 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
31 static PyObject * |
|
41226
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
32 builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds) |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
33 { |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
34 PyObject *func, *name, *bases, *mkw, *meta, *prep, *ns, *res; |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
35 Py_ssize_t nargs, nbases; |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
36 |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
37 assert(args != NULL); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
38 if (!PyTuple_Check(args)) { |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
39 PyErr_SetString(PyExc_TypeError, |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
40 "__build_class__: args is not a tuple"); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
41 return NULL; |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
42 } |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
43 nargs = PyTuple_GET_SIZE(args); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
44 if (nargs < 2) { |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
45 PyErr_SetString(PyExc_TypeError, |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
46 "__build_class__: not enough arguments"); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
47 return NULL; |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
48 } |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
49 func = PyTuple_GET_ITEM(args, 0); /* Better be callable */ |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
50 name = PyTuple_GET_ITEM(args, 1); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
51 if (!PyString_Check(name)) { |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
52 PyErr_SetString(PyExc_TypeError, |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
53 "__build_class__: name is not a string"); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
54 return NULL; |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
55 } |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
56 bases = PyTuple_GetSlice(args, 2, nargs); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
57 if (bases == NULL) |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
58 return NULL; |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
59 nbases = nargs - 2; |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
60 |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
61 if (kwds == NULL) { |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
62 meta = NULL; |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
63 mkw = NULL; |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
64 } |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
65 else { |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
66 mkw = PyDict_Copy(kwds); /* Don't modify kwds passed in! */ |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
67 if (mkw == NULL) { |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
68 Py_DECREF(bases); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
69 return NULL; |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
70 } |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
71 meta = PyDict_GetItemString(mkw, "metaclass"); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
72 if (meta != NULL) { |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
73 Py_INCREF(meta); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
74 if (PyDict_DelItemString(mkw, "metaclass") < 0) { |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
75 Py_DECREF(meta); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
76 Py_DECREF(mkw); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
77 Py_DECREF(bases); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
78 return NULL; |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
79 } |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
80 } |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
81 } |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
82 if (meta == NULL) { |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
83 if (PyTuple_GET_SIZE(bases) == 0) |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
84 meta = (PyObject *) (&PyType_Type); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
85 else { |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
86 PyObject *base0 = PyTuple_GET_ITEM(bases, 0); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
87 meta = (PyObject *) (base0->ob_type); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
88 } |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
89 Py_INCREF(meta); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
90 } |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
91 prep = PyObject_GetAttrString(meta, "__prepare__"); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
92 if (prep == NULL) { |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
93 PyErr_Clear(); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
94 ns = PyDict_New(); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
95 } |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
96 else { |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
97 PyObject *pargs = Py_BuildValue("OO", name, bases); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
98 if (pargs == NULL) { |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
99 Py_DECREF(prep); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
100 Py_DECREF(meta); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
101 Py_XDECREF(mkw); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
102 Py_DECREF(bases); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
103 return NULL; |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
104 } |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
105 ns = PyEval_CallObjectWithKeywords(prep, pargs, mkw); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
106 Py_DECREF(pargs); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
107 Py_DECREF(prep); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
108 if (ns == NULL) { |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
109 Py_DECREF(meta); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
110 Py_XDECREF(mkw); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
111 Py_DECREF(bases); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
112 return NULL; |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
113 } |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
114 } |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
115 res = PyObject_CallFunctionObjArgs(func, ns, NULL); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
116 if (res != NULL) { |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
117 PyObject *margs; |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
118 Py_DECREF(res); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
119 res = NULL; |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
120 margs = Py_BuildValue("OOO", name, bases, ns); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
121 if (margs != NULL) { |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
122 res = PyEval_CallObjectWithKeywords(meta, margs, mkw); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
123 Py_DECREF(margs); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
124 } |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
125 } |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
126 Py_DECREF(ns); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
127 Py_DECREF(meta); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
128 Py_XDECREF(mkw); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
129 Py_DECREF(bases); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
130 return res; |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
131 } |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
132 |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
133 PyDoc_STRVAR(build_class_doc, |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
134 "__build_class__(func, name, *bases, metaclass=None, **kwds) -> class\n\ |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
135 \n\ |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
136 Internal helper function used by the class statement."); |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
137 |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
138 static PyObject * |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
139 builtin___import__(PyObject *self, PyObject *args, PyObject *kwds) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
140 { |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
141 static char *kwlist[] = {"name", "globals", "locals", "fromlist", |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
142 "level", 0}; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
143 char *name; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
144 PyObject *globals = NULL; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
145 PyObject *locals = NULL; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
146 PyObject *fromlist = NULL; |
|
36712
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36675
diff
changeset
|
147 int level = -1; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
148 |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
149 if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|OOOi:__import__", |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
150 kwlist, &name, &globals, &locals, &fromlist, &level)) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
151 return NULL; |
|
36712
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36675
diff
changeset
|
152 return PyImport_ImportModuleLevel(name, globals, locals, |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36675
diff
changeset
|
153 fromlist, level); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
154 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
155 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
156 PyDoc_STRVAR(import_doc, |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
157 "__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module\n\ |
| 8561 | 158 \n\ |
| 159 Import a module. The globals are only used to determine the context;\n\ | |
| 160 they are not modified. The locals are currently unused. The fromlist\n\ | |
| 161 should be a list of names to emulate ``from name import ...'', or an\n\ | |
| 162 empty list to emulate ``import name''.\n\ | |
| 163 When importing a module from a package, note that __import__('A.B', ...)\n\ | |
| 164 returns package A when fromlist is empty, but its submodule B when\n\ | |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
165 fromlist is not empty. Level is used to determine whether to perform \n\ |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
166 absolute or relative imports. -1 is the original strategy of attempting\n\ |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
167 both absolute and relative imports, 0 is absolute, a positive number\n\ |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
168 is the number of parent directories to search relative to the current module."); |
| 8561 | 169 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
170 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
171 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
|
172 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
|
173 { |
|
8402
0cb0394c2edc
A bunch of functions are now properly implemented in abstract.c, and
Guido van Rossum <guido@python.org>
parents:
8287
diff
changeset
|
174 return PyNumber_Absolute(v); |
| 86 | 175 } |
| 176 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
177 PyDoc_STRVAR(abs_doc, |
| 8561 | 178 "abs(number) -> number\n\ |
| 179 \n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
180 Return the absolute value of the argument."); |
| 8561 | 181 |
|
34736
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
182 static PyObject * |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
183 builtin_all(PyObject *self, PyObject *v) |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
184 { |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
185 PyObject *it, *item; |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
186 |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
187 it = PyObject_GetIter(v); |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
188 if (it == NULL) |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
189 return NULL; |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
190 |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
191 while ((item = PyIter_Next(it)) != NULL) { |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
192 int cmp = PyObject_IsTrue(item); |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
193 Py_DECREF(item); |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
194 if (cmp < 0) { |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
195 Py_DECREF(it); |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
196 return NULL; |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
197 } |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
198 if (cmp == 0) { |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
199 Py_DECREF(it); |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
200 Py_RETURN_FALSE; |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
201 } |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
202 } |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
203 Py_DECREF(it); |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
204 if (PyErr_Occurred()) |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
205 return NULL; |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
206 Py_RETURN_TRUE; |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
207 } |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
208 |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
209 PyDoc_STRVAR(all_doc, |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
210 "all(iterable) -> bool\n\ |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
211 \n\ |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
212 Return True if bool(x) is True for all values x in the iterable."); |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
213 |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
214 static PyObject * |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
215 builtin_any(PyObject *self, PyObject *v) |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
216 { |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
217 PyObject *it, *item; |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
218 |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
219 it = PyObject_GetIter(v); |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
220 if (it == NULL) |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
221 return NULL; |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
222 |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
223 while ((item = PyIter_Next(it)) != NULL) { |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
224 int cmp = PyObject_IsTrue(item); |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
225 Py_DECREF(item); |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
226 if (cmp < 0) { |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
227 Py_DECREF(it); |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
228 return NULL; |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
229 } |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
230 if (cmp == 1) { |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
231 Py_DECREF(it); |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
232 Py_RETURN_TRUE; |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
233 } |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
234 } |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
235 Py_DECREF(it); |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
236 if (PyErr_Occurred()) |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
237 return NULL; |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
238 Py_RETURN_FALSE; |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
239 } |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
240 |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
241 PyDoc_STRVAR(any_doc, |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
242 "any(iterable) -> bool\n\ |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
243 \n\ |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
244 Return True if bool(x) is True for any x in the iterable."); |
| 8561 | 245 |
| 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_filter(PyObject *self, PyObject *args) |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
249 { |
|
24863
a3ebd1233c00
A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents:
24817
diff
changeset
|
250 PyObject *func, *seq, *result, *it, *arg; |
|
36521
30aef3ce2b26
Use Py_ssize_t to count the
Martin v. Löwis <martin@v.loewis.de>
parents:
36501
diff
changeset
|
251 Py_ssize_t len; /* guess for result list size */ |
|
30aef3ce2b26
Use Py_ssize_t to count the
Martin v. Löwis <martin@v.loewis.de>
parents:
36501
diff
changeset
|
252 register Py_ssize_t j; |
|
1375
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
253 |
|
26818
e094a03a80ff
SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents:
26612
diff
changeset
|
254 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
|
255 return NULL; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
256 |
|
17654
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
257 /* 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
|
258 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
|
259 return filterstring(func, seq); |
|
27385
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
260 if (PyUnicode_Check(seq)) |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
261 return filterunicode(func, seq); |
|
17654
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
262 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
|
263 return filtertuple(func, seq); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
264 |
|
35264
b431ed7bcdc2
Fix cleanup DECREF logic in builtin_filter function.
Georg Brandl <georg@python.org>
parents:
34736
diff
changeset
|
265 /* Pre-allocate argument list tuple. */ |
|
b431ed7bcdc2
Fix cleanup DECREF logic in builtin_filter function.
Georg Brandl <georg@python.org>
parents:
34736
diff
changeset
|
266 arg = PyTuple_New(1); |
|
b431ed7bcdc2
Fix cleanup DECREF logic in builtin_filter function.
Georg Brandl <georg@python.org>
parents:
34736
diff
changeset
|
267 if (arg == NULL) |
|
b431ed7bcdc2
Fix cleanup DECREF logic in builtin_filter function.
Georg Brandl <georg@python.org>
parents:
34736
diff
changeset
|
268 return NULL; |
|
b431ed7bcdc2
Fix cleanup DECREF logic in builtin_filter function.
Georg Brandl <georg@python.org>
parents:
34736
diff
changeset
|
269 |
|
17654
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
270 /* Get iterator. */ |
|
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
271 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
|
272 if (it == NULL) |
|
35264
b431ed7bcdc2
Fix cleanup DECREF logic in builtin_filter function.
Georg Brandl <georg@python.org>
parents:
34736
diff
changeset
|
273 goto Fail_arg; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
274 |
|
17654
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
275 /* Guess a result list size. */ |
|
36484
20f75d5e79e9
Renamed _length_cue() to __length_hint__(). See:
Armin Rigo <arigo@tunes.org>
parents:
36034
diff
changeset
|
276 len = _PyObject_LengthHint(seq); |
|
31345
bb3c3c98cc1b
Apply pre-sizing optimization to a broader class of objects.
Raymond Hettinger <python@rcn.com>
parents:
31343
diff
changeset
|
277 if (len < 0) { |
|
35364
aeb8580a1af7
SF bug #1242657: list(obj) can swallow KeyboardInterrupt
Raymond Hettinger <python@rcn.com>
parents:
35264
diff
changeset
|
278 if (!PyErr_ExceptionMatches(PyExc_TypeError) && |
|
aeb8580a1af7
SF bug #1242657: list(obj) can swallow KeyboardInterrupt
Raymond Hettinger <python@rcn.com>
parents:
35264
diff
changeset
|
279 !PyErr_ExceptionMatches(PyExc_AttributeError)) { |
|
aeb8580a1af7
SF bug #1242657: list(obj) can swallow KeyboardInterrupt
Raymond Hettinger <python@rcn.com>
parents:
35264
diff
changeset
|
280 goto Fail_it; |
|
aeb8580a1af7
SF bug #1242657: list(obj) can swallow KeyboardInterrupt
Raymond Hettinger <python@rcn.com>
parents:
35264
diff
changeset
|
281 } |
|
31345
bb3c3c98cc1b
Apply pre-sizing optimization to a broader class of objects.
Raymond Hettinger <python@rcn.com>
parents:
31343
diff
changeset
|
282 PyErr_Clear(); |
|
bb3c3c98cc1b
Apply pre-sizing optimization to a broader class of objects.
Raymond Hettinger <python@rcn.com>
parents:
31343
diff
changeset
|
283 len = 8; /* arbitrary */ |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
284 } |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
285 |
|
17654
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
286 /* 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
|
287 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
|
288 /* 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
|
289 Py_INCREF(seq); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
290 result = seq; |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
291 } |
|
1375
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
292 else { |
|
17654
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
293 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
|
294 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
|
295 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
|
296 } |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
297 |
|
17654
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
298 /* 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
|
299 j = 0; |
|
e9a4e27e8d4e
Make PyIter_Next() a little smarter (wrt its knowledge of iterator
Tim Peters <tim.peters@gmail.com>
parents:
17677
diff
changeset
|
300 for (;;) { |
|
24863
a3ebd1233c00
A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents:
24817
diff
changeset
|
301 PyObject *item; |
|
1375
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
302 int ok; |
|
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
303 |
|
17654
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
304 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
|
305 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
|
306 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
|
307 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
|
308 break; |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
309 } |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
310 |
|
30151
9f53e53f3880
Make filter(bool, ...) as fast as filter(None, ...).
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
30037
diff
changeset
|
311 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
|
312 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
|
313 } |
|
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
314 else { |
|
24863
a3ebd1233c00
A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents:
24817
diff
changeset
|
315 PyObject *good; |
|
a3ebd1233c00
A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents:
24817
diff
changeset
|
316 PyTuple_SET_ITEM(arg, 0, item); |
|
a3ebd1233c00
A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents:
24817
diff
changeset
|
317 good = PyObject_Call(func, arg, NULL); |
|
a3ebd1233c00
A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents:
24817
diff
changeset
|
318 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
|
319 if (good == NULL) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
320 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
|
321 goto Fail_result_it; |
|
2120
84b61fe44573
fix subtle refcount big in filter() -- Tim MacKenzie
Guido van Rossum <guido@python.org>
parents:
2113
diff
changeset
|
322 } |
|
24863
a3ebd1233c00
A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents:
24817
diff
changeset
|
323 ok = PyObject_IsTrue(good); |
|
a3ebd1233c00
A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents:
24817
diff
changeset
|
324 Py_DECREF(good); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
325 } |
|
1375
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
326 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
|
327 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
|
328 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
|
329 else { |
|
9991
ddbbed8cb830
builtin_map(): A better fix for the previous leak plug (remember
Barry Warsaw <barry@python.org>
parents:
9980
diff
changeset
|
330 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
|
331 Py_DECREF(item); |
|
ddbbed8cb830
builtin_map(): A better fix for the previous leak plug (remember
Barry Warsaw <barry@python.org>
parents:
9980
diff
changeset
|
332 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
|
333 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
|
334 } |
|
17654
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
335 ++j; |
|
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
336 } |
|
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
337 else |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
338 Py_DECREF(item); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
339 } |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
340 |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
341 |
|
17654
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
342 /* 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
|
343 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
|
344 goto Fail_result_it; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
345 |
|
17874
eb03c6fc31e5
SF bug #425836: Reference leak in filter().
Tim Peters <tim.peters@gmail.com>
parents:
17822
diff
changeset
|
346 Py_DECREF(it); |
|
24863
a3ebd1233c00
A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents:
24817
diff
changeset
|
347 Py_DECREF(arg); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
348 return result; |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
349 |
|
17654
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
350 Fail_result_it: |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
351 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
|
352 Fail_it: |
|
a97e18e499a9
Generalize filter(f, seq) to work with iterators. This also generalizes
Tim Peters <tim.peters@gmail.com>
parents:
17641
diff
changeset
|
353 Py_DECREF(it); |
|
24863
a3ebd1233c00
A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents:
24817
diff
changeset
|
354 Fail_arg: |
|
a3ebd1233c00
A nice little speed-up for filter():
Guido van Rossum <guido@python.org>
parents:
24817
diff
changeset
|
355 Py_DECREF(arg); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
356 return NULL; |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
357 } |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
358 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
359 PyDoc_STRVAR(filter_doc, |
|
22225
67a5e25dc88b
backport tim_one's checkin of
Michael W. Hudson <mwh@python.net>
parents:
21712
diff
changeset
|
360 "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
|
361 "\n" |
|
67a5e25dc88b
backport tim_one's checkin of
Michael W. Hudson <mwh@python.net>
parents:
21712
diff
changeset
|
362 "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
|
363 "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
|
364 "or string, return the same type, else return a list."); |
| 8561 | 365 |
| 366 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
367 static PyObject * |
|
41609
92ead87bf984
Add 8-bit chr() back as chr8().
Guido van Rossum <guido@python.org>
parents:
41595
diff
changeset
|
368 builtin_chr(PyObject *self, PyObject *args) |
|
92ead87bf984
Add 8-bit chr() back as chr8().
Guido van Rossum <guido@python.org>
parents:
41595
diff
changeset
|
369 { |
|
92ead87bf984
Add 8-bit chr() back as chr8().
Guido van Rossum <guido@python.org>
parents:
41595
diff
changeset
|
370 long x; |
|
92ead87bf984
Add 8-bit chr() back as chr8().
Guido van Rossum <guido@python.org>
parents:
41595
diff
changeset
|
371 char s[1]; |
|
92ead87bf984
Add 8-bit chr() back as chr8().
Guido van Rossum <guido@python.org>
parents:
41595
diff
changeset
|
372 |
|
92ead87bf984
Add 8-bit chr() back as chr8().
Guido van Rossum <guido@python.org>
parents:
41595
diff
changeset
|
373 if (!PyArg_ParseTuple(args, "l:chr8", &x)) |
|
92ead87bf984
Add 8-bit chr() back as chr8().
Guido van Rossum <guido@python.org>
parents:
41595
diff
changeset
|
374 return NULL; |
|
92ead87bf984
Add 8-bit chr() back as chr8().
Guido van Rossum <guido@python.org>
parents:
41595
diff
changeset
|
375 if (x < 0 || x >= 256) { |
|
92ead87bf984
Add 8-bit chr() back as chr8().
Guido van Rossum <guido@python.org>
parents:
41595
diff
changeset
|
376 PyErr_SetString(PyExc_ValueError, |
|
92ead87bf984
Add 8-bit chr() back as chr8().
Guido van Rossum <guido@python.org>
parents:
41595
diff
changeset
|
377 "chr8() arg not in range(256)"); |
|
92ead87bf984
Add 8-bit chr() back as chr8().
Guido van Rossum <guido@python.org>
parents:
41595
diff
changeset
|
378 return NULL; |
|
92ead87bf984
Add 8-bit chr() back as chr8().
Guido van Rossum <guido@python.org>
parents:
41595
diff
changeset
|
379 } |
|
92ead87bf984
Add 8-bit chr() back as chr8().
Guido van Rossum <guido@python.org>
parents:
41595
diff
changeset
|
380 s[0] = (char)x; |
|
92ead87bf984
Add 8-bit chr() back as chr8().
Guido van Rossum <guido@python.org>
parents:
41595
diff
changeset
|
381 return PyString_FromStringAndSize(s, 1); |
|
92ead87bf984
Add 8-bit chr() back as chr8().
Guido van Rossum <guido@python.org>
parents:
41595
diff
changeset
|
382 } |
|
92ead87bf984
Add 8-bit chr() back as chr8().
Guido van Rossum <guido@python.org>
parents:
41595
diff
changeset
|
383 |
|
92ead87bf984
Add 8-bit chr() back as chr8().
Guido van Rossum <guido@python.org>
parents:
41595
diff
changeset
|
384 PyDoc_STRVAR(chr_doc, |
|
92ead87bf984
Add 8-bit chr() back as chr8().
Guido van Rossum <guido@python.org>
parents:
41595
diff
changeset
|
385 "chr8(i) -> 8-bit character\n\ |
|
92ead87bf984
Add 8-bit chr() back as chr8().
Guido van Rossum <guido@python.org>
parents:
41595
diff
changeset
|
386 \n\ |
|
92ead87bf984
Add 8-bit chr() back as chr8().
Guido van Rossum <guido@python.org>
parents:
41595
diff
changeset
|
387 Return a string of one character with ordinal i; 0 <= i < 256."); |
|
92ead87bf984
Add 8-bit chr() back as chr8().
Guido van Rossum <guido@python.org>
parents:
41595
diff
changeset
|
388 |
|
92ead87bf984
Add 8-bit chr() back as chr8().
Guido van Rossum <guido@python.org>
parents:
41595
diff
changeset
|
389 |
|
92ead87bf984
Add 8-bit chr() back as chr8().
Guido van Rossum <guido@python.org>
parents:
41595
diff
changeset
|
390 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
391 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
|
392 { |
|
8bdc25d22925
Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
393 long x; |
|
8bdc25d22925
Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
394 |
|
8bdc25d22925
Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
395 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
|
396 return NULL; |
|
18282
f38923ce3c6b
more unicode tweaks: make unichr(0xdddddddd) behave like u"\Udddddddd"
Fredrik Lundh <fredrik@pythonware.com>
parents:
18281
diff
changeset
|
397 |
|
24737
eaa87632b1e8
Add C API PyUnicode_FromOrdinal() which exposes unichr() at C level.
Marc-André Lemburg <mal@egenix.com>
parents:
24071
diff
changeset
|
398 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
|
399 } |
|
8bdc25d22925
Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
400 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
401 PyDoc_STRVAR(unichr_doc, |
|
41585
825d966338ea
Rename 'unicode' to 'str' in its tp_name field. Rename 'str' to 'str8'.
Guido van Rossum <guido@python.org>
parents:
41558
diff
changeset
|
402 "chr(i) -> Unicode character\n\ |
|
11973
8bdc25d22925
Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
403 \n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
404 Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff."); |
|
11973
8bdc25d22925
Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
405 |
|
8bdc25d22925
Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
406 |
|
8bdc25d22925
Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
407 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
408 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
|
409 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
410 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
|
411 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
|
412 |
|
26818
e094a03a80ff
SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents:
26612
diff
changeset
|
413 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
|
414 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
|
415 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
|
416 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
|
417 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
|
418 } |
|
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
419 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
420 PyDoc_STRVAR(cmp_doc, |
| 8561 | 421 "cmp(x, y) -> integer\n\ |
| 422 \n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
423 Return negative if x<y, zero if x==y, positive if x>y."); |
| 8561 | 424 |
|
41595
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
425 |
|
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
426 static char * |
|
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
427 source_as_string(PyObject *cmd) |
|
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
428 { |
|
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
429 char *str; |
|
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
430 Py_ssize_t size; |
|
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
431 |
|
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
432 if (!PyObject_CheckReadBuffer(cmd) && |
|
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
433 !PyUnicode_Check(cmd)) { |
|
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
434 PyErr_SetString(PyExc_TypeError, |
|
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
435 "eval()/exec() arg 1 must be a string, bytes or code object"); |
|
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
436 return NULL; |
|
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
437 } |
|
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
438 |
|
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
439 if (PyUnicode_Check(cmd)) { |
|
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
440 cmd = _PyUnicode_AsDefaultEncodedString(cmd, NULL); |
|
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
441 if (cmd == NULL) |
|
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
442 return NULL; |
|
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
443 } |
|
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
444 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &size) < 0) { |
|
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
445 return NULL; |
|
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
446 } |
|
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
447 if (strlen(str) != size) { |
|
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
448 PyErr_SetString(PyExc_TypeError, |
|
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
449 "source code string cannot contain null bytes"); |
|
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
450 return NULL; |
|
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
451 } |
|
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
452 return str; |
|
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
453 } |
|
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
454 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
455 static PyObject * |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41501
diff
changeset
|
456 builtin_compile(PyObject *self, PyObject *args, PyObject *kwds) |
|
1263
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
457 { |
|
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
458 char *str; |
|
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
459 char *filename; |
|
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
460 char *startstr; |
|
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
461 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
|
462 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
|
463 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
|
464 PyCompilerFlags cf; |
|
41595
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
465 PyObject *cmd; |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41501
diff
changeset
|
466 static char *kwlist[] = {"source", "filename", "mode", "flags", |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41501
diff
changeset
|
467 "dont_inherit", NULL}; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
468 |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41501
diff
changeset
|
469 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile", |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41501
diff
changeset
|
470 kwlist, &cmd, &filename, &startstr, |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41501
diff
changeset
|
471 &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
|
472 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
|
473 |
|
41595
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
474 cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8; |
|
27781
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
475 |
|
41595
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
476 str = source_as_string(cmd); |
|
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
477 if (str == 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
|
478 return NULL; |
|
27781
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
479 |
|
1263
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
480 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
|
481 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
|
482 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
|
483 start = Py_eval_input; |
|
2808
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
484 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
|
485 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
|
486 else { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
487 PyErr_SetString(PyExc_ValueError, |
| 15318 | 488 "compile() arg 3 must be 'exec' or 'eval' or 'single'"); |
|
41595
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
489 return NULL; |
|
1263
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
490 } |
|
19355
d5acff178ad5
A fiddled version of the rest of Michael Hudson's SF patch
Tim Peters <tim.peters@gmail.com>
parents:
19343
diff
changeset
|
491 |
|
27878
be7683a6f521
- Finally fixed the bug in compile() and exec where a string ending
Guido van Rossum <guido@python.org>
parents:
27795
diff
changeset
|
492 if (supplied_flags & |
|
36660
3c0b26113df6
Generate code to recursively copy an AST into
Martin v. Löwis <martin@v.loewis.de>
parents:
36604
diff
changeset
|
493 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST)) |
|
27878
be7683a6f521
- Finally fixed the bug in compile() and exec where a string ending
Guido van Rossum <guido@python.org>
parents:
27795
diff
changeset
|
494 { |
|
19355
d5acff178ad5
A fiddled version of the rest of Michael Hudson's SF patch
Tim Peters <tim.peters@gmail.com>
parents:
19343
diff
changeset
|
495 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
|
496 "compile(): unrecognised flags"); |
|
41595
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
497 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
|
498 } |
|
d5acff178ad5
A fiddled version of the rest of Michael Hudson's SF patch
Tim Peters <tim.peters@gmail.com>
parents:
19343
diff
changeset
|
499 /* 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
|
500 |
|
d5acff178ad5
A fiddled version of the rest of Michael Hudson's SF patch
Tim Peters <tim.peters@gmail.com>
parents:
19343
diff
changeset
|
501 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
|
502 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
|
503 } |
|
41595
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
504 return Py_CompileStringFlags(str, filename, start, &cf); |
|
1263
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
505 } |
|
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
506 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
507 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
|
508 "compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\ |
| 8561 | 509 \n\ |
| 510 Compile the source string (a Python module, statement or expression)\n\ | |
|
39782
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
511 into a code object that can be executed by exec() or eval().\n\ |
| 8561 | 512 The filename will be used for run-time error messages.\n\ |
| 513 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
|
514 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
|
515 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
|
516 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
|
517 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
|
518 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
|
519 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
|
520 in addition to any features explicitly specified."); |
| 8561 | 521 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
522 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
523 builtin_dir(PyObject *self, PyObject *args) |
| 86 | 524 { |
|
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
|
525 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
|
526 |
|
26818
e094a03a80ff
SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents:
26612
diff
changeset
|
527 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
|
528 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
|
529 return PyObject_Dir(arg); |
| 86 | 530 } |
| 531 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
532 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
|
533 "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
|
534 "\n" |
|
41107
cf452027073e
Patch #1591665: implement the __dir__() special function lookup in PyObject_Dir.
Georg Brandl <georg@python.org>
parents:
40933
diff
changeset
|
535 "If called without an argument, return the names in the current scope.\n" |
|
cf452027073e
Patch #1591665: implement the __dir__() special function lookup in PyObject_Dir.
Georg Brandl <georg@python.org>
parents:
40933
diff
changeset
|
536 "Else, return an alphabetized list of names comprising (some of) the attributes\n" |
|
cf452027073e
Patch #1591665: implement the __dir__() special function lookup in PyObject_Dir.
Georg Brandl <georg@python.org>
parents:
40933
diff
changeset
|
537 "of the given object, and of attributes reachable from it.\n" |
|
cf452027073e
Patch #1591665: implement the __dir__() special function lookup in PyObject_Dir.
Georg Brandl <georg@python.org>
parents:
40933
diff
changeset
|
538 "If the object supplies a method named __dir__, it will be used; otherwise\n" |
|
cf452027073e
Patch #1591665: implement the __dir__() special function lookup in PyObject_Dir.
Georg Brandl <georg@python.org>
parents:
40933
diff
changeset
|
539 "the default dir() logic is used and returns:\n" |
|
cf452027073e
Patch #1591665: implement the __dir__() special function lookup in PyObject_Dir.
Georg Brandl <georg@python.org>
parents:
40933
diff
changeset
|
540 " for a module object: the module's attributes.\n" |
|
cf452027073e
Patch #1591665: implement the __dir__() special function lookup in PyObject_Dir.
Georg Brandl <georg@python.org>
parents:
40933
diff
changeset
|
541 " for a class object: its attributes, and recursively the attributes\n" |
|
cf452027073e
Patch #1591665: implement the __dir__() special function lookup in PyObject_Dir.
Georg Brandl <georg@python.org>
parents:
40933
diff
changeset
|
542 " of its bases.\n" |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41501
diff
changeset
|
543 " for any other object: its attributes, its class's attributes, and\n" |
|
41107
cf452027073e
Patch #1591665: implement the __dir__() special function lookup in PyObject_Dir.
Georg Brandl <georg@python.org>
parents:
40933
diff
changeset
|
544 " recursively the attributes of its class's base classes."); |
| 8561 | 545 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
546 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
547 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
|
548 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
549 PyObject *v, *w; |
|
2087
65146b52f16b
* Python/bltinmodule.c: restructured coerce(), divmod(), pow() to
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
550 |
|
26818
e094a03a80ff
SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents:
26612
diff
changeset
|
551 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
|
552 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
|
553 return PyNumber_Divmod(v, w); |
| 86 | 554 } |
| 555 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
556 PyDoc_STRVAR(divmod_doc, |
| 8561 | 557 "divmod(x, y) -> (div, mod)\n\ |
| 558 \n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
559 Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x."); |
| 8561 | 560 |
| 561 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
562 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
563 builtin_eval(PyObject *self, PyObject *args) |
| 86 | 564 { |
|
27781
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
565 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
|
566 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
|
567 char *str; |
|
19357
be9b50704e4c
Fix for bug [#452230] future division isn't propagated.
Tim Peters <tim.peters@gmail.com>
parents:
19355
diff
changeset
|
568 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
|
569 |
|
32463
d4a59230e93a
SF Bug #215126: Over restricted type checking on eval() function
Raymond Hettinger <python@rcn.com>
parents:
31837
diff
changeset
|
570 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
|
571 return NULL; |
|
32463
d4a59230e93a
SF Bug #215126: Over restricted type checking on eval() function
Raymond Hettinger <python@rcn.com>
parents:
31837
diff
changeset
|
572 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
|
573 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
|
574 return NULL; |
|
32463
d4a59230e93a
SF Bug #215126: Over restricted type checking on eval() function
Raymond Hettinger <python@rcn.com>
parents:
31837
diff
changeset
|
575 } |
|
d4a59230e93a
SF Bug #215126: Over restricted type checking on eval() function
Raymond Hettinger <python@rcn.com>
parents:
31837
diff
changeset
|
576 if (globals != Py_None && !PyDict_Check(globals)) { |
|
35500
8fa83a9ebc6e
Whitespace normalization.
Georg Brandl <georg@python.org>
parents:
35364
diff
changeset
|
577 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ? |
|
32463
d4a59230e93a
SF Bug #215126: Over restricted type checking on eval() function
Raymond Hettinger <python@rcn.com>
parents:
31837
diff
changeset
|
578 "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
|
579 : "globals must be a dict"); |
|
32507
682f74088602
* Fix missing return after error message is set.
Raymond Hettinger <python@rcn.com>
parents:
32463
diff
changeset
|
580 return NULL; |
|
32463
d4a59230e93a
SF Bug #215126: Over restricted type checking on eval() function
Raymond Hettinger <python@rcn.com>
parents:
31837
diff
changeset
|
581 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
582 if (globals == Py_None) { |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
583 globals = PyEval_GetGlobals(); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
584 if (locals == Py_None) |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
585 locals = PyEval_GetLocals(); |
|
2098
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2087
diff
changeset
|
586 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
587 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
|
588 locals = globals; |
|
19357
be9b50704e4c
Fix for bug [#452230] future division isn't propagated.
Tim Peters <tim.peters@gmail.com>
parents:
19355
diff
changeset
|
589 |
|
35567
fa0881fd49b7
bug [ 868706 ] Calling builtin function 'eval' from C causes seg fault.
Georg Brandl <georg@python.org>
parents:
35500
diff
changeset
|
590 if (globals == NULL || locals == NULL) { |
|
fa0881fd49b7
bug [ 868706 ] Calling builtin function 'eval' from C causes seg fault.
Georg Brandl <georg@python.org>
parents:
35500
diff
changeset
|
591 PyErr_SetString(PyExc_TypeError, |
|
fa0881fd49b7
bug [ 868706 ] Calling builtin function 'eval' from C causes seg fault.
Georg Brandl <georg@python.org>
parents:
35500
diff
changeset
|
592 "eval must be given globals and locals " |
|
fa0881fd49b7
bug [ 868706 ] Calling builtin function 'eval' from C causes seg fault.
Georg Brandl <georg@python.org>
parents:
35500
diff
changeset
|
593 "when called without a frame"); |
|
fa0881fd49b7
bug [ 868706 ] Calling builtin function 'eval' from C causes seg fault.
Georg Brandl <georg@python.org>
parents:
35500
diff
changeset
|
594 return NULL; |
|
fa0881fd49b7
bug [ 868706 ] Calling builtin function 'eval' from C causes seg fault.
Georg Brandl <georg@python.org>
parents:
35500
diff
changeset
|
595 } |
|
fa0881fd49b7
bug [ 868706 ] Calling builtin function 'eval' from C causes seg fault.
Georg Brandl <georg@python.org>
parents:
35500
diff
changeset
|
596 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
597 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
|
598 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
|
599 PyEval_GetBuiltins()) != 0) |
|
2098
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2087
diff
changeset
|
600 return NULL; |
|
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2087
diff
changeset
|
601 } |
|
19357
be9b50704e4c
Fix for bug [#452230] future division isn't propagated.
Tim Peters <tim.peters@gmail.com>
parents:
19355
diff
changeset
|
602 |
|
18885
22456d0ee737
Fix for SF bug [ #443866 ] Evaluating func_code causing core dump
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18836
diff
changeset
|
603 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
|
604 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
|
605 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
|
606 "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
|
607 return NULL; |
|
22456d0ee737
Fix for SF bug [ #443866 ] Evaluating func_code causing core dump
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18836
diff
changeset
|
608 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
609 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
|
610 } |
|
19357
be9b50704e4c
Fix for bug [#452230] future division isn't propagated.
Tim Peters <tim.peters@gmail.com>
parents:
19355
diff
changeset
|
611 |
|
41595
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
612 str = source_as_string(cmd); |
|
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
613 if (str == NULL) |
| 86 | 614 return NULL; |
|
27781
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
615 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
616 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
|
617 str++; |
|
19357
be9b50704e4c
Fix for bug [#452230] future division isn't propagated.
Tim Peters <tim.peters@gmail.com>
parents:
19355
diff
changeset
|
618 |
|
41595
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
619 cf.cf_flags = PyCF_SOURCE_IS_UTF8; |
|
19357
be9b50704e4c
Fix for bug [#452230] future division isn't propagated.
Tim Peters <tim.peters@gmail.com>
parents:
19355
diff
changeset
|
620 (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
|
621 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
|
622 Py_XDECREF(tmp); |
|
cc01fb654ce3
patch #683515: "Add unicode support to compile(), eval() and exec"
Just van Rossum <just@letterror.com>
parents:
27681
diff
changeset
|
623 return result; |
| 86 | 624 } |
| 625 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
626 PyDoc_STRVAR(eval_doc, |
| 8561 | 627 "eval(source[, globals[, locals]]) -> value\n\ |
| 628 \n\ | |
| 629 Evaluate the source in the context of globals and locals.\n\ | |
| 630 The source may be a string representing a Python expression\n\ | |
| 631 or a code object as returned by compile().\n\ | |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40411
diff
changeset
|
632 The globals must be a dictionary and locals can be any mapping,\n\ |
|
32463
d4a59230e93a
SF Bug #215126: Over restricted type checking on eval() function
Raymond Hettinger <python@rcn.com>
parents:
31837
diff
changeset
|
633 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
|
634 If only globals is given, locals defaults to it.\n"); |
| 8561 | 635 |
|
39782
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
636 static PyObject * |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
637 builtin_exec(PyObject *self, PyObject *args) |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
638 { |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
639 PyObject *v; |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
640 PyObject *prog, *globals = Py_None, *locals = Py_None; |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
641 int plain = 0; |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
642 |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
643 if (!PyArg_ParseTuple(args, "O|OO:exec", &prog, &globals, &locals)) |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
644 return NULL; |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
645 |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
646 if (globals == Py_None) { |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
647 globals = PyEval_GetGlobals(); |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
648 if (locals == Py_None) { |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
649 locals = PyEval_GetLocals(); |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
650 plain = 1; |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
651 } |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
652 if (!globals || !locals) { |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
653 PyErr_SetString(PyExc_SystemError, |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
654 "globals and locals cannot be NULL"); |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
655 return NULL; |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
656 } |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
657 } |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
658 else if (locals == Py_None) |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
659 locals = globals; |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
660 if (!PyString_Check(prog) && |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
661 !PyUnicode_Check(prog) && |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
662 !PyCode_Check(prog) && |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
663 !PyFile_Check(prog)) { |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
664 PyErr_Format(PyExc_TypeError, |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
665 "exec() arg 1 must be a string, file, or code " |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
666 "object, not %.100s", prog->ob_type->tp_name); |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
667 return NULL; |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
668 } |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
669 if (!PyDict_Check(globals)) { |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
670 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s", |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
671 globals->ob_type->tp_name); |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
672 return NULL; |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
673 } |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
674 if (!PyMapping_Check(locals)) { |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
675 PyErr_Format(PyExc_TypeError, |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
676 "arg 3 must be a mapping or None, not %.100s", |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
677 locals->ob_type->tp_name); |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
678 return NULL; |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
679 } |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
680 if (PyDict_GetItemString(globals, "__builtins__") == NULL) { |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
681 if (PyDict_SetItemString(globals, "__builtins__", |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
682 PyEval_GetBuiltins()) != 0) |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
683 return NULL; |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
684 } |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
685 |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
686 if (PyCode_Check(prog)) { |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
687 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) { |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
688 PyErr_SetString(PyExc_TypeError, |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
689 "code object passed to exec() may not " |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
690 "contain free variables"); |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
691 return NULL; |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
692 } |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
693 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals); |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
694 } |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
695 else if (PyFile_Check(prog)) { |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
696 FILE *fp = PyFile_AsFile(prog); |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
697 char *name = PyString_AsString(PyFile_Name(prog)); |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
698 PyCompilerFlags cf; |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
699 cf.cf_flags = 0; |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
700 if (PyEval_MergeCompilerFlags(&cf)) |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
701 v = PyRun_FileFlags(fp, name, Py_file_input, globals, |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
702 locals, &cf); |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
703 else |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
704 v = PyRun_File(fp, name, Py_file_input, globals, |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
705 locals); |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
706 } |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
707 else { |
|
41595
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
708 char *str = source_as_string(prog); |
|
39782
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
709 PyCompilerFlags cf; |
|
41595
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
710 if (str == NULL) |
|
39782
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
711 return NULL; |
|
41595
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
712 cf.cf_flags = PyCF_SOURCE_IS_UTF8; |
|
39782
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
713 if (PyEval_MergeCompilerFlags(&cf)) |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
714 v = PyRun_StringFlags(str, Py_file_input, globals, |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
715 locals, &cf); |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
716 else |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
717 v = PyRun_String(str, Py_file_input, globals, locals); |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
718 } |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
719 if (v == NULL) |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
720 return NULL; |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
721 Py_DECREF(v); |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
722 Py_RETURN_NONE; |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
723 } |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
724 |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
725 PyDoc_STRVAR(exec_doc, |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
726 "exec(object[, globals[, locals]])\n\ |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
727 \n\ |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
728 Read and execute code from a object, which can be a string, a code\n\ |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
729 object or a file object.\n\ |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
730 The globals and locals are dictionaries, defaulting to the current\n\ |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
731 globals and locals. If only globals is given, locals defaults to it."); |
|
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
732 |
| 8561 | 733 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
734 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
735 builtin_execfile(PyObject *self, PyObject *args) |
| 673 | 736 { |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
737 char *filename; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
738 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
|
739 PyObject *res; |
|
19726
5487d9d53a0e
builtin_execfile(): initialize another local that the GCC on leroy
Guido van Rossum <guido@python.org>
parents:
19705
diff
changeset
|
740 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
|
741 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
|
742 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
|
743 |
|
32890
b8c2aa2be19a
Completed the patch for Bug #215126.
Raymond Hettinger <python@rcn.com>
parents:
32759
diff
changeset
|
744 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
|
745 &filename, |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
746 &PyDict_Type, &globals, |
|
32890
b8c2aa2be19a
Completed the patch for Bug #215126.
Raymond Hettinger <python@rcn.com>
parents:
32759
diff
changeset
|
747 &locals)) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
748 return NULL; |
|
32890
b8c2aa2be19a
Completed the patch for Bug #215126.
Raymond Hettinger <python@rcn.com>
parents:
32759
diff
changeset
|
749 if (locals != Py_None && !PyMapping_Check(locals)) { |
|
b8c2aa2be19a
Completed the patch for Bug #215126.
Raymond Hettinger <python@rcn.com>
parents:
32759
diff
changeset
|
750 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
|
751 return NULL; |
|
b8c2aa2be19a
Completed the patch for Bug #215126.
Raymond Hettinger <python@rcn.com>
parents:
32759
diff
changeset
|
752 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
753 if (globals == Py_None) { |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
754 globals = PyEval_GetGlobals(); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
755 if (locals == Py_None) |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
756 locals = PyEval_GetLocals(); |
|
2098
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2087
diff
changeset
|
757 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
758 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
|
759 locals = globals; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
760 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
|
761 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
|
762 PyEval_GetBuiltins()) != 0) |
|
2098
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2087
diff
changeset
|
763 return NULL; |
|
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2087
diff
changeset
|
764 } |
|
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
|
765 |
|
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
|
766 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
|
767 /* 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
|
768 #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
|
769 { |
|
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
770 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
|
771 |
|
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
772 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
|
773 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
|
774 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
|
775 else |
|
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
776 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
|
777 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
|
778 } |
|
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
|
779 } |
|
22205
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
780 #elif defined(RISCOS) |
|
20654
edd9d0b3c47e
SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents:
20471
diff
changeset
|
781 if (object_exists(filename)) { |
|
edd9d0b3c47e
SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents:
20471
diff
changeset
|
782 if (isdir(filename)) |
|
edd9d0b3c47e
SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents:
20471
diff
changeset
|
783 errno = EISDIR; |
|
edd9d0b3c47e
SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents:
20471
diff
changeset
|
784 else |
|
edd9d0b3c47e
SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents:
20471
diff
changeset
|
785 exists = 1; |
|
edd9d0b3c47e
SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents:
20471
diff
changeset
|
786 } |
|
22205
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
787 #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
|
788 { |
|
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
789 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
|
790 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
|
791 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
|
792 # 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
|
793 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
|
794 # else |
|
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
795 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
|
796 # endif |
|
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
797 else |
|
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
798 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
|
799 } |
|
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
800 } |
|
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22225
diff
changeset
|
801 #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
|
802 |
|
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
|
803 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
|
804 Py_BEGIN_ALLOW_THREADS |
|
23029
8291473fde3e
Mass checkin of universal newline support.
Jack Jansen <jack.jansen@cwi.nl>
parents:
22785
diff
changeset
|
805 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
|
806 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
|
807 |
|
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
|
808 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
|
809 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
|
810 } |
|
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
|
811 } |
|
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
|
812 |
|
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
|
813 if (!exists) { |
|
25046
434bc1dea4f8
execfile should call PyErr_SetFromErrnoWithFilename instead of
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
24863
diff
changeset
|
814 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename); |
| 673 | 815 return NULL; |
| 816 } | |
|
18611
fdb36a0c7e6e
Part way to allowing "from __future__ import generators" to communicate
Tim Peters <tim.peters@gmail.com>
parents:
18436
diff
changeset
|
817 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
|
818 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
|
819 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
|
820 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
|
821 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
|
822 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
|
823 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
|
824 return res; |
| 673 | 825 } |
| 826 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
827 PyDoc_STRVAR(execfile_doc, |
| 8561 | 828 "execfile(filename[, globals[, locals]])\n\ |
| 829 \n\ | |
| 830 Read and execute a Python script from a file.\n\ | |
| 831 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
|
832 globals and locals. If only globals is given, locals defaults to it."); |
| 8561 | 833 |
| 834 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
835 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
836 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
|
837 { |
|
8581
221667f89064
Experimental feature: add default argument to getattr().
Guido van Rossum <guido@python.org>
parents:
8561
diff
changeset
|
838 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
|
839 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
|
840 |
|
26818
e094a03a80ff
SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents:
26612
diff
changeset
|
841 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
|
842 return NULL; |
|
18888
f12e1a766a14
Fix for SF byg [ #420304 ] getattr function w/ default
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18885
diff
changeset
|
843 if (PyUnicode_Check(name)) { |
|
f12e1a766a14
Fix for SF byg [ #420304 ] getattr function w/ default
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18885
diff
changeset
|
844 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
|
845 if (name == NULL) |
|
f12e1a766a14
Fix for SF byg [ #420304 ] getattr function w/ default
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18885
diff
changeset
|
846 return NULL; |
|
f12e1a766a14
Fix for SF byg [ #420304 ] getattr function w/ default
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18885
diff
changeset
|
847 } |
|
f12e1a766a14
Fix for SF byg [ #420304 ] getattr function w/ default
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18885
diff
changeset
|
848 |
|
f12e1a766a14
Fix for SF byg [ #420304 ] getattr function w/ default
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18885
diff
changeset
|
849 if (!PyString_Check(name)) { |
|
f12e1a766a14
Fix for SF byg [ #420304 ] getattr function w/ default
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18885
diff
changeset
|
850 PyErr_SetString(PyExc_TypeError, |
|
28740
d3297e298211
some more error-message enhancements
Alex Martelli <aleaxit@gmail.com>
parents:
28738
diff
changeset
|
851 "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
|
852 return NULL; |
|
f12e1a766a14
Fix for SF byg [ #420304 ] getattr function w/ default
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18885
diff
changeset
|
853 } |
|
8581
221667f89064
Experimental feature: add default argument to getattr().
Guido van Rossum <guido@python.org>
parents:
8561
diff
changeset
|
854 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
|
855 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
|
856 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
|
857 { |
|
8581
221667f89064
Experimental feature: add default argument to getattr().
Guido van Rossum <guido@python.org>
parents:
8561
diff
changeset
|
858 PyErr_Clear(); |
|
221667f89064
Experimental feature: add default argument to getattr().
Guido van Rossum <guido@python.org>
parents:
8561
diff
changeset
|
859 Py_INCREF(dflt); |
|
221667f89064
Experimental feature: add default argument to getattr().
Guido van Rossum <guido@python.org>
parents:
8561
diff
changeset
|
860 result = dflt; |
|
221667f89064
Experimental feature: add default argument to getattr().
Guido van Rossum <guido@python.org>
parents:
8561
diff
changeset
|
861 } |
|
221667f89064
Experimental feature: add default argument to getattr().
Guido van Rossum <guido@python.org>
parents:
8561
diff
changeset
|
862 return result; |
|
1257
1cabc2b6c970
* Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents:
1252
diff
changeset
|
863 } |
|
1cabc2b6c970
* Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents:
1252
diff
changeset
|
864 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
865 PyDoc_STRVAR(getattr_doc, |
|
8581
221667f89064
Experimental feature: add default argument to getattr().
Guido van Rossum <guido@python.org>
parents:
8561
diff
changeset
|
866 "getattr(object, name[, default]) -> value\n\ |
| 8561 | 867 \n\ |
|
8581
221667f89064
Experimental feature: add default argument to getattr().
Guido van Rossum <guido@python.org>
parents:
8561
diff
changeset
|
868 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
|
869 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
|
870 exist; without it, an exception is raised in that case."); |
| 8561 | 871 |
| 872 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
873 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
|
874 builtin_globals(PyObject *self) |
|
2808
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
875 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
876 PyObject *d; |
|
2808
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
877 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
878 d = PyEval_GetGlobals(); |
|
39610
3674f20ac781
Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents:
39603
diff
changeset
|
879 Py_XINCREF(d); |
|
2808
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
880 return d; |
|
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
881 } |
|
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
882 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
883 PyDoc_STRVAR(globals_doc, |
| 8561 | 884 "globals() -> dictionary\n\ |
| 885 \n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
886 Return the dictionary containing the current scope's global variables."); |
| 8561 | 887 |
| 888 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
889 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
890 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
|
891 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
892 PyObject *v; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
893 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
|
894 |
|
26818
e094a03a80ff
SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents:
26612
diff
changeset
|
895 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
|
896 return NULL; |
|
18890
fb837c5ae5d3
Do for hasattr() what was done for getattr()
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18888
diff
changeset
|
897 if (PyUnicode_Check(name)) { |
|
fb837c5ae5d3
Do for hasattr() what was done for getattr()
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18888
diff
changeset
|
898 name = _PyUnicode_AsDefaultEncodedString(name, NULL); |
|
fb837c5ae5d3
Do for hasattr() what was done for getattr()
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18888
diff
changeset
|
899 if (name == NULL) |
|
fb837c5ae5d3
Do for hasattr() what was done for getattr()
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18888
diff
changeset
|
900 return NULL; |
|
fb837c5ae5d3
Do for hasattr() what was done for getattr()
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18888
diff
changeset
|
901 } |
|
fb837c5ae5d3
Do for hasattr() what was done for getattr()
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18888
diff
changeset
|
902 |
|
fb837c5ae5d3
Do for hasattr() what was done for getattr()
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18888
diff
changeset
|
903 if (!PyString_Check(name)) { |
|
fb837c5ae5d3
Do for hasattr() what was done for getattr()
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18888
diff
changeset
|
904 PyErr_SetString(PyExc_TypeError, |
|
28740
d3297e298211
some more error-message enhancements
Alex Martelli <aleaxit@gmail.com>
parents:
28738
diff
changeset
|
905 "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
|
906 return NULL; |
|
fb837c5ae5d3
Do for hasattr() what was done for getattr()
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
18888
diff
changeset
|
907 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
908 v = PyObject_GetAttr(v, name); |
|
1257
1cabc2b6c970
* Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents:
1252
diff
changeset
|
909 if (v == NULL) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
910 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
|
911 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
|
912 return Py_False; |
|
1257
1cabc2b6c970
* Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents:
1252
diff
changeset
|
913 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
914 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
|
915 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
|
916 return Py_True; |
|
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(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
|
920 "hasattr(object, name) -> bool\n\ |
| 8561 | 921 \n\ |
| 922 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
|
923 (This is done by calling getattr(object, name) and catching exceptions.)"); |
| 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 * |
|
19301
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
927 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
|
928 { |
| 13078 | 929 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
|
930 } |
|
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
931 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
932 PyDoc_STRVAR(id_doc, |
| 8561 | 933 "id(object) -> integer\n\ |
| 934 \n\ | |
| 935 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
|
936 simultaneously existing objects. (Hint: it's the object's memory address.)"); |
| 8561 | 937 |
| 938 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
939 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
940 builtin_map(PyObject *self, PyObject *args) |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
941 { |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
942 typedef struct { |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
943 PyObject *it; /* the iterator object */ |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
944 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
|
945 } sequence; |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
946 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
947 PyObject *func, *result; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
948 sequence *seqs = NULL, *sqp; |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36484
diff
changeset
|
949 Py_ssize_t n, len; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
950 register int i, j; |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
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 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
|
953 if (n < 2) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
954 PyErr_SetString(PyExc_TypeError, |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
955 "map() requires at least two args"); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
956 return NULL; |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
957 } |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
958 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
959 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
|
960 n--; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
961 |
|
8661
30fbf18af29e
Small changes to map() and filter():
Guido van Rossum <guido@python.org>
parents:
8589
diff
changeset
|
962 if (func == Py_None && n == 1) { |
|
30fbf18af29e
Small changes to map() and filter():
Guido van Rossum <guido@python.org>
parents:
8589
diff
changeset
|
963 /* 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
|
964 return PySequence_List(PyTuple_GetItem(args, 1)); |
|
30fbf18af29e
Small changes to map() and filter():
Guido van Rossum <guido@python.org>
parents:
8589
diff
changeset
|
965 } |
|
30fbf18af29e
Small changes to map() and filter():
Guido van Rossum <guido@python.org>
parents:
8589
diff
changeset
|
966 |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
967 /* 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
|
968 * 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
|
969 */ |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
970 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
|
971 PyErr_NoMemory(); |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
972 return NULL; |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
973 } |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
974 for (i = 0; i < n; ++i) { |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
975 seqs[i].it = (PyObject*)NULL; |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
976 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
|
977 } |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
978 |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
979 /* 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
|
980 * 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
|
981 */ |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
982 len = 0; |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
983 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
|
984 PyObject *curseq; |
|
36521
30aef3ce2b26
Use Py_ssize_t to count the
Martin v. Löwis <martin@v.loewis.de>
parents:
36501
diff
changeset
|
985 Py_ssize_t curlen; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
986 |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
987 /* Get iterator. */ |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
988 curseq = PyTuple_GetItem(args, i+1); |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
989 sqp->it = PyObject_GetIter(curseq); |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
990 if (sqp->it == NULL) { |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
991 static char errmsg[] = |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
992 "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
|
993 char errbuf[sizeof(errmsg) + 25]; |
|
21077
379fc66f4c96
Use PyOS_snprintf instead of sprintf.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20871
diff
changeset
|
994 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
|
995 PyErr_SetString(PyExc_TypeError, errbuf); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
996 goto Fail_2; |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
997 } |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
998 |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
999 /* Update len. */ |
|
36484
20f75d5e79e9
Renamed _length_cue() to __length_hint__(). See:
Armin Rigo <arigo@tunes.org>
parents:
36034
diff
changeset
|
1000 curlen = _PyObject_LengthHint(curseq); |
|
31343
0c1d2062dee3
Apply map/zip pre-sizing optimization to a broader class of objects.
Raymond Hettinger <python@rcn.com>
parents:
31210
diff
changeset
|
1001 if (curlen < 0) { |
|
35364
aeb8580a1af7
SF bug #1242657: list(obj) can swallow KeyboardInterrupt
Raymond Hettinger <python@rcn.com>
parents:
35264
diff
changeset
|
1002 if (!PyErr_ExceptionMatches(PyExc_TypeError) && |
|
aeb8580a1af7
SF bug #1242657: list(obj) can swallow KeyboardInterrupt
Raymond Hettinger <python@rcn.com>
parents:
35264
diff
changeset
|
1003 !PyErr_ExceptionMatches(PyExc_AttributeError)) { |
|
aeb8580a1af7
SF bug #1242657: list(obj) can swallow KeyboardInterrupt
Raymond Hettinger <python@rcn.com>
parents:
35264
diff
changeset
|
1004 goto Fail_2; |
|
aeb8580a1af7
SF bug #1242657: list(obj) can swallow KeyboardInterrupt
Raymond Hettinger <python@rcn.com>
parents:
35264
diff
changeset
|
1005 } |
|
31343
0c1d2062dee3
Apply map/zip pre-sizing optimization to a broader class of objects.
Raymond Hettinger <python@rcn.com>
parents:
31210
diff
changeset
|
1006 PyErr_Clear(); |
|
0c1d2062dee3
Apply map/zip pre-sizing optimization to a broader class of objects.
Raymond Hettinger <python@rcn.com>
parents:
31210
diff
changeset
|
1007 curlen = 8; /* arbitrary */ |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
1008 } |
|
31343
0c1d2062dee3
Apply map/zip pre-sizing optimization to a broader class of objects.
Raymond Hettinger <python@rcn.com>
parents:
31210
diff
changeset
|
1009 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
|
1010 len = curlen; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1011 } |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1012 |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
1013 /* 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
|
1014 if ((result = (PyObject *) PyList_New(len)) == NULL) |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1015 goto Fail_2; |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1016 |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
1017 /* 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
|
1018 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
|
1019 PyObject *alist, *item=NULL, *value; |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
1020 int numactive = 0; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1021 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1022 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
|
1023 alist = NULL; |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
1024 else if ((alist = PyTuple_New(n)) == NULL) |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
1025 goto Fail_1; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1026 |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1027 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
|
1028 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
|
1029 Py_INCREF(Py_None); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1030 item = Py_None; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1031 } |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1032 else { |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
1033 item = PyIter_Next(sqp->it); |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
1034 if (item) |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
1035 ++numactive; |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
1036 else { |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
1037 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
|
1038 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
|
1039 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
|
1040 } |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
1041 Py_INCREF(Py_None); |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
1042 item = Py_None; |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
1043 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
|
1044 } |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1045 } |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
1046 if (alist) |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
1047 PyTuple_SET_ITEM(alist, j, item); |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
1048 else |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1049 break; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1050 } |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1051 |
|
2824
65c7105868f8
rename arglist to alist (conflict with new grammar symbol)
Guido van Rossum <guido@python.org>
parents:
2808
diff
changeset
|
1052 if (!alist) |
|
65c7105868f8
rename arglist to alist (conflict with new grammar symbol)
Guido van Rossum <guido@python.org>
parents:
2808
diff
changeset
|
1053 alist = item; |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1054 |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
1055 if (numactive == 0) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1056 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
|
1057 break; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1058 } |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1059 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1060 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
|
1061 value = alist; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1062 else { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1063 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
|
1064 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
|
1065 if (value == NULL) |
|
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
1066 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
|
1067 } |
|
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1068 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
|
1069 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
|
1070 Py_DECREF(value); |
|
ddbbed8cb830
builtin_map(): A better fix for the previous leak plug (remember
Barry Warsaw <barry@python.org>
parents:
9980
diff
changeset
|
1071 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
|
1072 goto Fail_1; |
|
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1073 } |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
1074 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
|
1075 goto Fail_1; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1076 } |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1077 |
|
8661
30fbf18af29e
Small changes to map() and filter():
Guido van Rossum <guido@python.org>
parents:
8589
diff
changeset
|
1078 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
|
1079 goto Fail_1; |
|
30fbf18af29e
Small changes to map() and filter():
Guido van Rossum <guido@python.org>
parents:
8589
diff
changeset
|
1080 |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
1081 goto Succeed; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1082 |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1083 Fail_1: |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1084 Py_DECREF(result); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1085 Fail_2: |
|
17675
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
1086 result = NULL; |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
1087 Succeed: |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
1088 assert(seqs); |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
1089 for (i = 0; i < n; ++i) |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
1090 Py_XDECREF(seqs[i].it); |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
1091 PyMem_DEL(seqs); |
|
0be277039d93
Generalize map() to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17667
diff
changeset
|
1092 return result; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1093 } |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
1094 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1095 PyDoc_STRVAR(map_doc, |
| 8561 | 1096 "map(function, sequence[, sequence, ...]) -> list\n\ |
| 1097 \n\ | |
| 1098 Return a list of the results of applying the function to the items of\n\ | |
| 1099 the argument sequence(s). If more than one sequence is given, the\n\ | |
| 1100 function is called with an argument list consisting of the corresponding\n\ | |
| 1101 item of each sequence, substituting None for missing values when not all\n\ | |
| 1102 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
|
1103 the items of the sequence (or a list of tuples if more than one sequence)."); |
| 8561 | 1104 |
| 1105 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1106 static PyObject * |
|
41501
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1107 builtin_next(PyObject *self, PyObject *args) |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1108 { |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1109 PyObject *it, *res; |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1110 PyObject *def = NULL; |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1111 |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1112 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def)) |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1113 return NULL; |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1114 if (!PyIter_Check(it)) { |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1115 PyErr_Format(PyExc_TypeError, |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1116 "%.200s object is not an iterator", it->ob_type->tp_name); |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1117 return NULL; |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1118 } |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1119 |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1120 res = (*it->ob_type->tp_iternext)(it); |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1121 if (res == NULL) { |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1122 if (def) { |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1123 if (PyErr_Occurred() && |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1124 !PyErr_ExceptionMatches(PyExc_StopIteration)) |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1125 return NULL; |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1126 PyErr_Clear(); |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1127 Py_INCREF(def); |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1128 return def; |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1129 } else if (PyErr_Occurred()) { |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1130 return NULL; |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1131 } else { |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1132 PyErr_SetNone(PyExc_StopIteration); |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1133 return NULL; |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1134 } |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1135 } |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1136 return res; |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1137 } |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1138 |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1139 PyDoc_STRVAR(next_doc, |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1140 "next(iterator[, default])\n\ |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1141 \n\ |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1142 Return the next item from the iterator. If default is given and the iterator\n\ |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1143 is exhausted, it is returned instead of raising StopIteration."); |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1144 |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1145 |
|
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1146 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
1147 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
|
1148 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1149 PyObject *v; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1150 PyObject *name; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1151 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
|
1152 |
|
26818
e094a03a80ff
SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents:
26612
diff
changeset
|
1153 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
|
1154 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1155 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
|
1156 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1157 Py_INCREF(Py_None); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1158 return Py_None; |
|
644
59f9325bb8ec
Added getattr and setattr built-in functions.
Guido van Rossum <guido@python.org>
parents:
606
diff
changeset
|
1159 } |
|
59f9325bb8ec
Added getattr and setattr built-in functions.
Guido van Rossum <guido@python.org>
parents:
606
diff
changeset
|
1160 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1161 PyDoc_STRVAR(setattr_doc, |
| 8561 | 1162 "setattr(object, name, value)\n\ |
| 1163 \n\ | |
| 1164 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
|
1165 ``x.y = v''."); |
| 8561 | 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_delattr(PyObject *self, PyObject *args) |
| 1843 | 1170 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1171 PyObject *v; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1172 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
|
1173 |
|
26818
e094a03a80ff
SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents:
26612
diff
changeset
|
1174 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name)) |
| 1843 | 1175 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1176 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0) |
| 1843 | 1177 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1178 Py_INCREF(Py_None); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1179 return Py_None; |
| 1843 | 1180 } |
| 1181 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1182 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
|
1183 "delattr(object, name)\n\ |
| 8561 | 1184 \n\ |
| 1185 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
|
1186 ``del x.y''."); |
| 8561 | 1187 |
| 1188 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1189 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
|
1190 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
|
1191 { |
|
1cabc2b6c970
* Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents:
1252
diff
changeset
|
1192 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
|
1193 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1194 x = PyObject_Hash(v); |
|
1257
1cabc2b6c970
* Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents:
1252
diff
changeset
|
1195 if (x == -1) |
|
1cabc2b6c970
* Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents:
1252
diff
changeset
|
1196 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1197 return PyInt_FromLong(x); |
|
1257
1cabc2b6c970
* Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents:
1252
diff
changeset
|
1198 } |
|
1cabc2b6c970
* Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents:
1252
diff
changeset
|
1199 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1200 PyDoc_STRVAR(hash_doc, |
| 8561 | 1201 "hash(object) -> integer\n\ |
| 1202 \n\ | |
| 1203 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
|
1204 the same hash value. The reverse is not necessarily true, but likely."); |
| 8561 | 1205 |
| 1206 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1207 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
|
1208 builtin_hex(PyObject *self, PyObject *v) |
|
404
9cd38d1ac391
Made dir() more robust.
Guido van Rossum <guido@python.org>
parents:
385
diff
changeset
|
1209 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1210 PyNumberMethods *nb; |
|
32759
d1777f51923b
Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
32526
diff
changeset
|
1211 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
|
1212 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
1213 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
|
1214 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
|
1215 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
|
1216 "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
|
1217 return NULL; |
|
404
9cd38d1ac391
Made dir() more robust.
Guido van Rossum <guido@python.org>
parents:
385
diff
changeset
|
1218 } |
|
32759
d1777f51923b
Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
32526
diff
changeset
|
1219 res = (*nb->nb_hex)(v); |
|
41728
6ea93700d779
It's ok for __hex__ or __oct__ to return unicode.
Guido van Rossum <guido@python.org>
parents:
41650
diff
changeset
|
1220 if (res && !PyString_Check(res) && !PyUnicode_Check(res)) { |
|
32759
d1777f51923b
Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
32526
diff
changeset
|
1221 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
|
1222 "__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
|
1223 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
|
1224 Py_DECREF(res); |
|
d1777f51923b
Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
32526
diff
changeset
|
1225 return NULL; |
|
d1777f51923b
Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
32526
diff
changeset
|
1226 } |
|
d1777f51923b
Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
32526
diff
changeset
|
1227 return res; |
|
404
9cd38d1ac391
Made dir() more robust.
Guido van Rossum <guido@python.org>
parents:
385
diff
changeset
|
1228 } |
|
9cd38d1ac391
Made dir() more robust.
Guido van Rossum <guido@python.org>
parents:
385
diff
changeset
|
1229 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1230 PyDoc_STRVAR(hex_doc, |
| 8561 | 1231 "hex(number) -> string\n\ |
| 1232 \n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1233 Return the hexadecimal representation of an integer or long integer."); |
| 8561 | 1234 |
| 1235 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1236 static PyObject * |
|
17597
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1237 builtin_iter(PyObject *self, PyObject *args) |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1238 { |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1239 PyObject *v, *w = NULL; |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1240 |
|
26818
e094a03a80ff
SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents:
26612
diff
changeset
|
1241 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
|
1242 return NULL; |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1243 if (w == NULL) |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1244 return PyObject_GetIter(v); |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1245 if (!PyCallable_Check(v)) { |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1246 PyErr_SetString(PyExc_TypeError, |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1247 "iter(v, w): v must be callable"); |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1248 return NULL; |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1249 } |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1250 return PyCallIter_New(v, w); |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1251 } |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1252 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1253 PyDoc_STRVAR(iter_doc, |
|
17597
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1254 "iter(collection) -> iterator\n\ |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1255 iter(callable, sentinel) -> iterator\n\ |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1256 \n\ |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1257 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
|
1258 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
|
1259 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
|
1260 |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1261 |
|
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
17337
diff
changeset
|
1262 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
|
1263 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
|
1264 { |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36484
diff
changeset
|
1265 Py_ssize_t res; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
1266 |
|
13576
61e4c29d53d8
replace PyXXX_Length calls with PyXXX_Size calls
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
13447
diff
changeset
|
1267 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
|
1268 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
|
1269 return NULL; |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36484
diff
changeset
|
1270 return PyInt_FromSsize_t(res); |
| 86 | 1271 } |
| 1272 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1273 PyDoc_STRVAR(len_doc, |
| 8561 | 1274 "len(object) -> integer\n\ |
| 1275 \n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1276 Return the number of items of a sequence or mapping."); |
| 8561 | 1277 |
| 1278 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1279 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
|
1280 builtin_locals(PyObject *self) |
|
2808
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
1281 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1282 PyObject *d; |
|
2808
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
1283 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1284 d = PyEval_GetLocals(); |
|
39610
3674f20ac781
Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents:
39603
diff
changeset
|
1285 Py_XINCREF(d); |
|
2808
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
1286 return d; |
|
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
1287 } |
|
9318ac51691e
added locals() and globals(); [raw_]input() uses readline()
Guido van Rossum <guido@python.org>
parents:
2375
diff
changeset
|
1288 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1289 PyDoc_STRVAR(locals_doc, |
| 8561 | 1290 "locals() -> dictionary\n\ |
| 1291 \n\ | |
|
27076
753306f9b0a0
SF bug #655271: Slightly modify locals() doc
Raymond Hettinger <python@rcn.com>
parents:
26824
diff
changeset
|
1292 Update and return a dictionary containing the current scope's local variables."); |
| 8561 | 1293 |
| 1294 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1295 static PyObject * |
|
34085
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1296 min_max(PyObject *args, PyObject *kwds, int op) |
| 86 | 1297 { |
|
34085
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1298 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL; |
|
33099
ce016d0ec701
Patch #1005468: Disambiguate "min() or max()" exception string.
Martin v. Löwis <martin@v.loewis.de>
parents:
33019
diff
changeset
|
1299 const char *name = op == Py_LT ? "min" : "max"; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
1300 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1301 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
|
1302 v = args; |
|
33099
ce016d0ec701
Patch #1005468: Disambiguate "min() or max()" exception string.
Martin v. Löwis <martin@v.loewis.de>
parents:
33019
diff
changeset
|
1303 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v)) |
| 86 | 1304 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
|
1305 |
|
34085
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1306 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) { |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1307 keyfunc = PyDict_GetItemString(kwds, "key"); |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1308 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) { |
|
35500
8fa83a9ebc6e
Whitespace normalization.
Georg Brandl <georg@python.org>
parents:
35364
diff
changeset
|
1309 PyErr_Format(PyExc_TypeError, |
|
34085
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1310 "%s() got an unexpected keyword argument", name); |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1311 return NULL; |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1312 } |
|
35500
8fa83a9ebc6e
Whitespace normalization.
Georg Brandl <georg@python.org>
parents:
35364
diff
changeset
|
1313 } |
|
34085
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1314 |
|
17667
76ee8b62ee2a
Generalize max(seq) and min(seq) to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17654
diff
changeset
|
1315 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
|
1316 if (it == NULL) |
| 86 | 1317 return NULL; |
|
17667
76ee8b62ee2a
Generalize max(seq) and min(seq) to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17654
diff
changeset
|
1318 |
|
34085
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1319 maxitem = NULL; /* the result */ |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1320 maxval = NULL; /* the value associated with the result */ |
|
34123
4e8fb12f8378
Put parentheses around the assignment in the 'while' loop conditional
Brett Cannon <bcannon@gmail.com>
parents:
34085
diff
changeset
|
1321 while (( item = PyIter_Next(it) )) { |
|
34085
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1322 /* get the value from the key function */ |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1323 if (keyfunc != NULL) { |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1324 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL); |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1325 if (val == NULL) |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1326 goto Fail_it_item; |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1327 } |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1328 /* no key function; the value is the item */ |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1329 else { |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1330 val = item; |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1331 Py_INCREF(val); |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1332 } |
|
17667
76ee8b62ee2a
Generalize max(seq) and min(seq) to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17654
diff
changeset
|
1333 |
|
34085
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1334 /* maximum value and item are unset; set them */ |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1335 if (maxval == NULL) { |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1336 maxitem = item; |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1337 maxval = val; |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1338 } |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1339 /* maximum value and item are set; update them as necessary */ |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1340 else { |
|
34085
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1341 int cmp = PyObject_RichCompareBool(val, maxval, op); |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1342 if (cmp < 0) |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1343 goto Fail_it_item_and_val; |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1344 else if (cmp > 0) { |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1345 Py_DECREF(maxval); |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1346 Py_DECREF(maxitem); |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1347 maxval = val; |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1348 maxitem = item; |
|
15949
76ad2a9a3e53
Use rich comparisons in min and max.
Guido van Rossum <guido@python.org>
parents:
15832
diff
changeset
|
1349 } |
|
34085
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1350 else { |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1351 Py_DECREF(item); |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1352 Py_DECREF(val); |
|
5610
10e9cfa010f0
PyObject_Compare can raise an exception now.
Guido van Rossum <guido@python.org>
parents:
5471
diff
changeset
|
1353 } |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1354 } |
| 86 | 1355 } |
|
34085
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1356 if (PyErr_Occurred()) |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1357 goto Fail_it; |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1358 if (maxval == NULL) { |
|
33099
ce016d0ec701
Patch #1005468: Disambiguate "min() or max()" exception string.
Martin v. Löwis <martin@v.loewis.de>
parents:
33019
diff
changeset
|
1359 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
|
1360 "%s() arg is an empty sequence", name); |
|
34085
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1361 assert(maxitem == NULL); |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1362 } |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1363 else |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1364 Py_DECREF(maxval); |
|
17667
76ee8b62ee2a
Generalize max(seq) and min(seq) to work with iterators.
Tim Peters <tim.peters@gmail.com>
parents:
17654
diff
changeset
|
1365 Py_DECREF(it); |
|
34085
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1366 return maxitem; |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1367 |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1368 Fail_it_item_and_val: |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1369 Py_DECREF(val); |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1370 Fail_it_item: |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1371 Py_DECREF(item); |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1372 Fail_it: |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1373 Py_XDECREF(maxval); |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1374 Py_XDECREF(maxitem); |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1375 Py_DECREF(it); |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1376 return NULL; |
| 86 | 1377 } |
| 1378 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1379 static PyObject * |
|
34085
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1380 builtin_min(PyObject *self, PyObject *args, PyObject *kwds) |
| 86 | 1381 { |
|
34085
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1382 return min_max(args, kwds, Py_LT); |
| 86 | 1383 } |
| 1384 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1385 PyDoc_STRVAR(min_doc, |
|
34085
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1386 "min(iterable[, key=func]) -> value\n\ |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1387 min(a, b, c, ...[, key=func]) -> value\n\ |
| 8561 | 1388 \n\ |
|
34085
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1389 With a single iterable argument, return its smallest item.\n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1390 With two or more arguments, return the smallest argument."); |
| 8561 | 1391 |
| 1392 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1393 static PyObject * |
|
34085
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1394 builtin_max(PyObject *self, PyObject *args, PyObject *kwds) |
| 86 | 1395 { |
|
34085
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1396 return min_max(args, kwds, Py_GT); |
| 86 | 1397 } |
| 1398 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1399 PyDoc_STRVAR(max_doc, |
|
34085
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1400 "max(iterable[, key=func]) -> value\n\ |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1401 max(a, b, c, ...[, key=func]) -> value\n\ |
| 8561 | 1402 \n\ |
|
34085
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1403 With a single iterable argument, return its largest item.\n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1404 With two or more arguments, return the largest argument."); |
| 8561 | 1405 |
| 1406 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1407 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
|
1408 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
|
1409 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1410 PyNumberMethods *nb; |
|
32759
d1777f51923b
Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
32526
diff
changeset
|
1411 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
|
1412 |
|
1049
2ed511171809
Made builtins int(), long(), float(), oct() and hex() more generic.
Guido van Rossum <guido@python.org>
parents:
972
diff
changeset
|
1413 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
|
1414 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
|
1415 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
|
1416 "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
|
1417 return NULL; |
|
404
9cd38d1ac391
Made dir() more robust.
Guido van Rossum <guido@python.org>
parents:
385
diff
changeset
|
1418 } |
|
32759
d1777f51923b
Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
32526
diff
changeset
|
1419 res = (*nb->nb_oct)(v); |
|
41728
6ea93700d779
It's ok for __hex__ or __oct__ to return unicode.
Guido van Rossum <guido@python.org>
parents:
41650
diff
changeset
|
1420 if (res && !PyString_Check(res) && !PyUnicode_Check(res)) { |
|
32759
d1777f51923b
Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
32526
diff
changeset
|
1421 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
|
1422 "__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
|
1423 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
|
1424 Py_DECREF(res); |
|
d1777f51923b
Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
32526
diff
changeset
|
1425 return NULL; |
|
d1777f51923b
Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
32526
diff
changeset
|
1426 } |
|
d1777f51923b
Check the type of values returned by __int__, __float__, __long__,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
32526
diff
changeset
|
1427 return res; |
|
404
9cd38d1ac391
Made dir() more robust.
Guido van Rossum <guido@python.org>
parents:
385
diff
changeset
|
1428 } |
|
9cd38d1ac391
Made dir() more robust.
Guido van Rossum <guido@python.org>
parents:
385
diff
changeset
|
1429 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1430 PyDoc_STRVAR(oct_doc, |
| 8561 | 1431 "oct(number) -> string\n\ |
| 1432 \n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1433 Return the octal representation of an integer or long integer."); |
| 8561 | 1434 |
| 1435 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1436 static PyObject * |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37927
diff
changeset
|
1437 builtin_open(PyObject *self, PyObject *args, PyObject *kwds) |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37927
diff
changeset
|
1438 { |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37927
diff
changeset
|
1439 return PyObject_Call((PyObject*)&PyFile_Type, args, kwds); |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37927
diff
changeset
|
1440 } |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37927
diff
changeset
|
1441 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37927
diff
changeset
|
1442 PyDoc_STRVAR(open_doc, |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37927
diff
changeset
|
1443 "open(name[, mode[, buffering]]) -> file object\n\ |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37927
diff
changeset
|
1444 \n\ |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37927
diff
changeset
|
1445 Open a file using the file() type, returns a file object."); |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37927
diff
changeset
|
1446 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37927
diff
changeset
|
1447 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37927
diff
changeset
|
1448 static PyObject * |
|
19301
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
1449 builtin_ord(PyObject *self, PyObject* obj) |
| 86 | 1450 { |
|
11973
8bdc25d22925
Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
1451 long ord; |
|
36521
30aef3ce2b26
Use Py_ssize_t to count the
Martin v. Löwis <martin@v.loewis.de>
parents:
36501
diff
changeset
|
1452 Py_ssize_t size; |
|
11973
8bdc25d22925
Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
1453 |
|
12384
aa013f2cf80b
ord: provide better error messages
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12368
diff
changeset
|
1454 if (PyString_Check(obj)) { |
|
aa013f2cf80b
ord: provide better error messages
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12368
diff
changeset
|
1455 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
|
1456 if (size == 1) { |
|
12384
aa013f2cf80b
ord: provide better error messages
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12368
diff
changeset
|
1457 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
|
1458 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
|
1459 } |
|
41452
3c339de80010
Support marshal.dump(x, f) where f is not a real file.
Guido van Rossum <guido@python.org>
parents:
41226
diff
changeset
|
1460 } |
|
3c339de80010
Support marshal.dump(x, f) where f is not a real file.
Guido van Rossum <guido@python.org>
parents:
41226
diff
changeset
|
1461 else if (PyUnicode_Check(obj)) { |
|
12384
aa013f2cf80b
ord: provide better error messages
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12368
diff
changeset
|
1462 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
|
1463 if (size == 1) { |
|
12384
aa013f2cf80b
ord: provide better error messages
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12368
diff
changeset
|
1464 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
|
1465 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
|
1466 } |
|
41452
3c339de80010
Support marshal.dump(x, f) where f is not a real file.
Guido van Rossum <guido@python.org>
parents:
41226
diff
changeset
|
1467 } |
|
3c339de80010
Support marshal.dump(x, f) where f is not a real file.
Guido van Rossum <guido@python.org>
parents:
41226
diff
changeset
|
1468 else if (PyBytes_Check(obj)) { |
|
3c339de80010
Support marshal.dump(x, f) where f is not a real file.
Guido van Rossum <guido@python.org>
parents:
41226
diff
changeset
|
1469 /* XXX Hopefully this is temporary */ |
|
3c339de80010
Support marshal.dump(x, f) where f is not a real file.
Guido van Rossum <guido@python.org>
parents:
41226
diff
changeset
|
1470 size = PyBytes_GET_SIZE(obj); |
|
3c339de80010
Support marshal.dump(x, f) where f is not a real file.
Guido van Rossum <guido@python.org>
parents:
41226
diff
changeset
|
1471 if (size == 1) { |
|
41650
23a8b3dfbe95
Given that ord() of a bytes object of length 1 is defined, it should
Guido van Rossum <guido@python.org>
parents:
41645
diff
changeset
|
1472 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj)); |
|
41452
3c339de80010
Support marshal.dump(x, f) where f is not a real file.
Guido van Rossum <guido@python.org>
parents:
41226
diff
changeset
|
1473 return PyInt_FromLong(ord); |
|
3c339de80010
Support marshal.dump(x, f) where f is not a real file.
Guido van Rossum <guido@python.org>
parents:
41226
diff
changeset
|
1474 } |
|
3c339de80010
Support marshal.dump(x, f) where f is not a real file.
Guido van Rossum <guido@python.org>
parents:
41226
diff
changeset
|
1475 } |
|
3c339de80010
Support marshal.dump(x, f) where f is not a real file.
Guido van Rossum <guido@python.org>
parents:
41226
diff
changeset
|
1476 else { |
|
12384
aa013f2cf80b
ord: provide better error messages
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12368
diff
changeset
|
1477 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
|
1478 "ord() expected string of length 1, but " \ |
|
12384
aa013f2cf80b
ord: provide better error messages
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12368
diff
changeset
|
1479 "%.200s found", obj->ob_type->tp_name); |
| 86 | 1480 return NULL; |
|
11973
8bdc25d22925
Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
1481 } |
|
8bdc25d22925
Marc-Andre Lemburg: added new builtin functions unicode() and
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
1482 |
|
15829
9308dc8c85e0
(Modified) patch by Ping - SF Patch #102681.
Guido van Rossum <guido@python.org>
parents:
15727
diff
changeset
|
1483 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
|
1484 "ord() expected a character, " |
|
36521
30aef3ce2b26
Use Py_ssize_t to count the
Martin v. Löwis <martin@v.loewis.de>
parents:
36501
diff
changeset
|
1485 "but string of length %zd found", |
|
12384
aa013f2cf80b
ord: provide better error messages
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12368
diff
changeset
|
1486 size); |
|
aa013f2cf80b
ord: provide better error messages
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12368
diff
changeset
|
1487 return NULL; |
| 86 | 1488 } |
| 1489 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1490 PyDoc_STRVAR(ord_doc, |
| 8561 | 1491 "ord(c) -> integer\n\ |
| 1492 \n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1493 Return the integer ordinal of a one-character string."); |
| 8561 | 1494 |
| 1495 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1496 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
1497 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
|
1498 { |
|
8402
0cb0394c2edc
A bunch of functions are now properly implemented in abstract.c, and
Guido van Rossum <guido@python.org>
parents:
8287
diff
changeset
|
1499 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
|
1500 |
|
26818
e094a03a80ff
SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents:
26612
diff
changeset
|
1501 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
|
1502 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
|
1503 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
|
1504 } |
|
6693c5d87f3a
Added long() and support for longs in int() and float();
Guido van Rossum <guido@python.org>
parents:
182
diff
changeset
|
1505 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1506 PyDoc_STRVAR(pow_doc, |
| 8561 | 1507 "pow(x, y[, z]) -> number\n\ |
| 1508 \n\ | |
| 1509 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
|
1510 equivalent to (x**y) % z, but may be more efficient (e.g. for longs)."); |
| 8561 | 1511 |
| 1512 | |
|
28583
a0c002050526
Patch by Chad Netzer (with significant change):
Guido van Rossum <guido@python.org>
parents:
28513
diff
changeset
|
1513 |
|
40410
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1514 static PyObject * |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1515 builtin_print(PyObject *self, PyObject *args, PyObject *kwds) |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1516 { |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1517 static char *kwlist[] = {"sep", "end", "file", 0}; |
|
40922
be41da66ce37
Fix leak in the print function.
Georg Brandl <georg@python.org>
parents:
40788
diff
changeset
|
1518 static PyObject *dummy_args; |
|
40410
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1519 PyObject *sep = NULL, *end = NULL, *file = NULL; |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1520 int i, err; |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1521 |
|
40922
be41da66ce37
Fix leak in the print function.
Georg Brandl <georg@python.org>
parents:
40788
diff
changeset
|
1522 if (dummy_args == NULL) { |
|
be41da66ce37
Fix leak in the print function.
Georg Brandl <georg@python.org>
parents:
40788
diff
changeset
|
1523 if (!(dummy_args = PyTuple_New(0))) |
|
be41da66ce37
Fix leak in the print function.
Georg Brandl <georg@python.org>
parents:
40788
diff
changeset
|
1524 return NULL; |
|
be41da66ce37
Fix leak in the print function.
Georg Brandl <georg@python.org>
parents:
40788
diff
changeset
|
1525 } |
|
40788
e9a6234b26af
* Remove PRINT_ITEM(_TO), PRINT_NEWLINE(_TO) opcodes.
Georg Brandl <georg@python.org>
parents:
40774
diff
changeset
|
1526 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print", |
|
40410
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1527 kwlist, &sep, &end, &file)) |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1528 return NULL; |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1529 if (file == NULL || file == Py_None) |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1530 file = PySys_GetObject("stdout"); |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1531 |
|
40411
b3ed053cc6a1
Check "sep" and "end" for stringness in Print().
Georg Brandl <georg@python.org>
parents:
40410
diff
changeset
|
1532 if (sep && sep != Py_None && !PyString_Check(sep) && |
|
b3ed053cc6a1
Check "sep" and "end" for stringness in Print().
Georg Brandl <georg@python.org>
parents:
40410
diff
changeset
|
1533 !PyUnicode_Check(sep)) { |
|
b3ed053cc6a1
Check "sep" and "end" for stringness in Print().
Georg Brandl <georg@python.org>
parents:
40410
diff
changeset
|
1534 PyErr_Format(PyExc_TypeError, |
|
b3ed053cc6a1
Check "sep" and "end" for stringness in Print().
Georg Brandl <georg@python.org>
parents:
40410
diff
changeset
|
1535 "sep must be None, str or unicode, not %.200s", |
|
b3ed053cc6a1
Check "sep" and "end" for stringness in Print().
Georg Brandl <georg@python.org>
parents:
40410
diff
changeset
|
1536 sep->ob_type->tp_name); |
|
b3ed053cc6a1
Check "sep" and "end" for stringness in Print().
Georg Brandl <georg@python.org>
parents:
40410
diff
changeset
|
1537 return NULL; |
|
b3ed053cc6a1
Check "sep" and "end" for stringness in Print().
Georg Brandl <georg@python.org>
parents:
40410
diff
changeset
|
1538 } |
|
b3ed053cc6a1
Check "sep" and "end" for stringness in Print().
Georg Brandl <georg@python.org>
parents:
40410
diff
changeset
|
1539 if (end && end != Py_None && !PyString_Check(end) && |
|
b3ed053cc6a1
Check "sep" and "end" for stringness in Print().
Georg Brandl <georg@python.org>
parents:
40410
diff
changeset
|
1540 !PyUnicode_Check(end)) { |
|
b3ed053cc6a1
Check "sep" and "end" for stringness in Print().
Georg Brandl <georg@python.org>
parents:
40410
diff
changeset
|
1541 PyErr_Format(PyExc_TypeError, |
|
b3ed053cc6a1
Check "sep" and "end" for stringness in Print().
Georg Brandl <georg@python.org>
parents:
40410
diff
changeset
|
1542 "end must be None, str or unicode, not %.200s", |
|
b3ed053cc6a1
Check "sep" and "end" for stringness in Print().
Georg Brandl <georg@python.org>
parents:
40410
diff
changeset
|
1543 end->ob_type->tp_name); |
|
b3ed053cc6a1
Check "sep" and "end" for stringness in Print().
Georg Brandl <georg@python.org>
parents:
40410
diff
changeset
|
1544 return NULL; |
|
b3ed053cc6a1
Check "sep" and "end" for stringness in Print().
Georg Brandl <georg@python.org>
parents:
40410
diff
changeset
|
1545 } |
|
40410
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1546 |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1547 for (i = 0; i < PyTuple_Size(args); i++) { |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1548 if (i > 0) { |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1549 if (sep == NULL || sep == Py_None) |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1550 err = PyFile_WriteString(" ", file); |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1551 else |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1552 err = PyFile_WriteObject(sep, file, |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1553 Py_PRINT_RAW); |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1554 if (err) |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1555 return NULL; |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1556 } |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1557 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file, |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1558 Py_PRINT_RAW); |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1559 if (err) |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1560 return NULL; |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1561 } |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1562 |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1563 if (end == NULL || end == Py_None) |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1564 err = PyFile_WriteString("\n", file); |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1565 else |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1566 err = PyFile_WriteObject(end, file, Py_PRINT_RAW); |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1567 if (err) |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1568 return NULL; |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1569 |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1570 Py_RETURN_NONE; |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1571 } |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1572 |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1573 PyDoc_STRVAR(print_doc, |
|
40774
793e0323d4d6
Essential changes for print function changes.
Guido van Rossum <guido@python.org>
parents:
40644
diff
changeset
|
1574 "print(value, ..., file=None, sep=' ', end='\\n')\n\ |
|
40410
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1575 \n\ |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1576 Prints the values to a stream, or to sys.stdout by default.\n\ |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1577 Optional keyword arguments:\n\ |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1578 file: a file-like object (stream); defaults to the current sys.stdout.\n\ |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1579 sep: string inserted between values, default a space.\n\ |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1580 end: string appended after the last value, default a newline."); |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1581 |
|
2e5011acb414
Add built-in Print() function. This is PEP 3105 except for the name;
Guido van Rossum <guido@python.org>
parents:
39782
diff
changeset
|
1582 |
|
40933
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1583 static PyObject * |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1584 builtin_input(PyObject *self, PyObject *args) |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1585 { |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1586 PyObject *v = NULL; |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1587 PyObject *fin = PySys_GetObject("stdin"); |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1588 PyObject *fout = PySys_GetObject("stdout"); |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1589 |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1590 if (!PyArg_UnpackTuple(args, "input", 0, 1, &v)) |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1591 return NULL; |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1592 |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1593 if (fin == NULL) { |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1594 PyErr_SetString(PyExc_RuntimeError, "input: lost sys.stdin"); |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1595 return NULL; |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1596 } |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1597 if (fout == NULL) { |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1598 PyErr_SetString(PyExc_RuntimeError, "input: lost sys.stdout"); |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1599 return NULL; |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1600 } |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1601 if (PyFile_AsFile(fin) && PyFile_AsFile(fout) |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1602 && isatty(fileno(PyFile_AsFile(fin))) |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1603 && isatty(fileno(PyFile_AsFile(fout)))) { |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1604 PyObject *po; |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1605 char *prompt; |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1606 char *s; |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1607 PyObject *result; |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1608 if (v != NULL) { |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1609 po = PyObject_Str(v); |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1610 if (po == NULL) |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1611 return NULL; |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1612 prompt = PyString_AsString(po); |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1613 if (prompt == NULL) |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1614 return NULL; |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1615 } |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1616 else { |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1617 po = NULL; |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1618 prompt = ""; |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1619 } |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1620 s = PyOS_Readline(PyFile_AsFile(fin), PyFile_AsFile(fout), |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1621 prompt); |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1622 Py_XDECREF(po); |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1623 if (s == NULL) { |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1624 if (!PyErr_Occurred()) |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1625 PyErr_SetNone(PyExc_KeyboardInterrupt); |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1626 return NULL; |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1627 } |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1628 if (*s == '\0') { |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1629 PyErr_SetNone(PyExc_EOFError); |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1630 result = NULL; |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1631 } |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1632 else { /* strip trailing '\n' */ |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1633 size_t len = strlen(s); |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1634 if (len > PY_SSIZE_T_MAX) { |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1635 PyErr_SetString(PyExc_OverflowError, |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1636 "input: input too long"); |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1637 result = NULL; |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1638 } |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1639 else { |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1640 result = PyString_FromStringAndSize(s, len-1); |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1641 } |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1642 } |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1643 PyMem_FREE(s); |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1644 return result; |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1645 } |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1646 if (v != NULL) { |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1647 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0) |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1648 return NULL; |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1649 } |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1650 return PyFile_GetLine(fin, -1); |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1651 } |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1652 |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1653 PyDoc_STRVAR(input_doc, |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1654 "input([prompt]) -> string\n\ |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1655 \n\ |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1656 Read a string from standard input. The trailing newline is stripped.\n\ |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1657 If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\ |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1658 On Unix, GNU readline is used if enabled. The prompt string, if given,\n\ |
|
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1659 is printed without a trailing newline before reading."); |
| 8561 | 1660 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1661 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
|
1662 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
|
1663 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1664 return PyImport_ReloadModule(v); |
| 86 | 1665 } |
| 1666 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1667 PyDoc_STRVAR(reload_doc, |
| 8561 | 1668 "reload(module) -> module\n\ |
| 1669 \n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1670 Reload the module. The module must have been successfully imported before."); |
| 8561 | 1671 |
| 1672 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1673 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
|
1674 builtin_repr(PyObject *self, PyObject *v) |
|
1094
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1079
diff
changeset
|
1675 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1676 return PyObject_Repr(v); |
|
1094
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1079
diff
changeset
|
1677 } |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1079
diff
changeset
|
1678 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1679 PyDoc_STRVAR(repr_doc, |
| 8561 | 1680 "repr(object) -> string\n\ |
| 1681 \n\ | |
| 1682 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
|
1683 For most object types, eval(repr(object)) == object."); |
| 8561 | 1684 |
| 1685 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1686 static PyObject * |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
1687 builtin_round(PyObject *self, PyObject *args, PyObject *kwds) |
|
1215
9d6cf529bb71
bltinmodule.c: added round(x, [n]); coerce() of two class instances
Guido van Rossum <guido@python.org>
parents:
1096
diff
changeset
|
1688 { |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
1689 double number; |
|
1215
9d6cf529bb71
bltinmodule.c: added round(x, [n]); coerce() of two class instances
Guido van Rossum <guido@python.org>
parents:
1096
diff
changeset
|
1690 double f; |
|
9d6cf529bb71
bltinmodule.c: added round(x, [n]); coerce() of two class instances
Guido van Rossum <guido@python.org>
parents:
1096
diff
changeset
|
1691 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
|
1692 int i; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
1693 static char *kwlist[] = {"number", "ndigits", 0}; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2002
diff
changeset
|
1694 |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
1695 if (!PyArg_ParseTupleAndKeywords(args, kwds, "d|i:round", |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
1696 kwlist, &number, &ndigits)) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
1697 return NULL; |
|
1215
9d6cf529bb71
bltinmodule.c: added round(x, [n]); coerce() of two class instances
Guido van Rossum <guido@python.org>
parents:
1096
diff
changeset
|
1698 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
|
1699 i = abs(ndigits); |
|
d3bf3c2ad75a
Implement round() slightly different, so that for negative ndigits no
Guido van Rossum <guido@python.org>
parents:
8138
diff
changeset
|
1700 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
|
1701 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
|
1702 if (ndigits < 0) |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
1703 number /= f; |
|
8287
d3bf3c2ad75a
Implement round() slightly different, so that for negative ndigits no
Guido van Rossum <guido@python.org>
parents:
8138
diff
changeset
|
1704 else |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
1705 number *= f; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
1706 if (number >= 0.0) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
1707 number = floor(number + 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
|
1708 else |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
1709 number = ceil(number - 0.5); |
|
8287
d3bf3c2ad75a
Implement round() slightly different, so that for negative ndigits no
Guido van Rossum <guido@python.org>
parents:
8138
diff
changeset
|
1710 if (ndigits < 0) |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
1711 number *= f; |
|
8287
d3bf3c2ad75a
Implement round() slightly different, so that for negative ndigits no
Guido van Rossum <guido@python.org>
parents:
8138
diff
changeset
|
1712 else |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
1713 number /= f; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
1714 return PyFloat_FromDouble(number); |
|
1215
9d6cf529bb71
bltinmodule.c: added round(x, [n]); coerce() of two class instances
Guido van Rossum <guido@python.org>
parents:
1096
diff
changeset
|
1715 } |
|
9d6cf529bb71
bltinmodule.c: added round(x, [n]); coerce() of two class instances
Guido van Rossum <guido@python.org>
parents:
1096
diff
changeset
|
1716 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1717 PyDoc_STRVAR(round_doc, |
| 8561 | 1718 "round(number[, ndigits]) -> floating point number\n\ |
| 1719 \n\ | |
| 1720 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
|
1721 This always returns a floating point number. Precision may be negative."); |
| 8561 | 1722 |
|
31210
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1723 static PyObject * |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1724 builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds) |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1725 { |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1726 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs; |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1727 PyObject *callable; |
|
36675
dba6494735d0
Revert backwards-incompatible const changes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36660
diff
changeset
|
1728 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0}; |
|
36034
fdf0ac36eb74
Fix an int/long mismatch identified here:
Neal Norwitz <nnorwitz@gmail.com>
parents:
35999
diff
changeset
|
1729 int reverse; |
|
31210
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1730 |
|
36034
fdf0ac36eb74
Fix an int/long mismatch identified here:
Neal Norwitz <nnorwitz@gmail.com>
parents:
35999
diff
changeset
|
1731 /* args 1-4 should match listsort in Objects/listobject.c */ |
|
35608
a670a5dd1fc6
Removed a check "if (args != NULL)" which is always True and makes no sense.
Armin Rigo <arigo@tunes.org>
parents:
35567
diff
changeset
|
1732 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted", |
|
a670a5dd1fc6
Removed a check "if (args != NULL)" which is always True and makes no sense.
Armin Rigo <arigo@tunes.org>
parents:
35567
diff
changeset
|
1733 kwlist, &seq, &compare, &keyfunc, &reverse)) |
|
a670a5dd1fc6
Removed a check "if (args != NULL)" which is always True and makes no sense.
Armin Rigo <arigo@tunes.org>
parents:
35567
diff
changeset
|
1734 return NULL; |
|
31210
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1735 |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1736 newlist = PySequence_List(seq); |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1737 if (newlist == NULL) |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1738 return NULL; |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1739 |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1740 callable = PyObject_GetAttrString(newlist, "sort"); |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1741 if (callable == NULL) { |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1742 Py_DECREF(newlist); |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1743 return NULL; |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1744 } |
|
35500
8fa83a9ebc6e
Whitespace normalization.
Georg Brandl <georg@python.org>
parents:
35364
diff
changeset
|
1745 |
|
31210
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1746 newargs = PyTuple_GetSlice(args, 1, 4); |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1747 if (newargs == NULL) { |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1748 Py_DECREF(newlist); |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1749 Py_DECREF(callable); |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1750 return NULL; |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1751 } |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1752 |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1753 v = PyObject_Call(callable, newargs, kwds); |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1754 Py_DECREF(newargs); |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1755 Py_DECREF(callable); |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1756 if (v == NULL) { |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1757 Py_DECREF(newlist); |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1758 return NULL; |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1759 } |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1760 Py_DECREF(v); |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1761 return newlist; |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1762 } |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1763 |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1764 PyDoc_STRVAR(sorted_doc, |
|
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1765 "sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list"); |
| 8561 | 1766 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1767 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
1768 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
|
1769 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1770 PyObject *v = NULL; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1771 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
|
1772 |
|
26818
e094a03a80ff
SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents:
26612
diff
changeset
|
1773 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
|
1774 return NULL; |
|
1840
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1775 if (v == NULL) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1776 d = PyEval_GetLocals(); |
|
2857
eebbdbee54f9
be more suspicious of getlocals()
Guido van Rossum <guido@python.org>
parents:
2844
diff
changeset
|
1777 if (d == NULL) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1778 if (!PyErr_Occurred()) |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1779 PyErr_SetString(PyExc_SystemError, |
|
28740
d3297e298211
some more error-message enhancements
Alex Martelli <aleaxit@gmail.com>
parents:
28738
diff
changeset
|
1780 "vars(): no locals!?"); |
|
2857
eebbdbee54f9
be more suspicious of getlocals()
Guido van Rossum <guido@python.org>
parents:
2844
diff
changeset
|
1781 } |
|
eebbdbee54f9
be more suspicious of getlocals()
Guido van Rossum <guido@python.org>
parents:
2844
diff
changeset
|
1782 else |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1783 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
|
1784 } |
|
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1785 else { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1786 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
|
1787 if (d == NULL) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1788 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
|
1789 "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
|
1790 return NULL; |
|
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1791 } |
|
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1792 } |
|
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1793 return d; |
|
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1794 } |
|
bfd11620a2d8
* Python/bltinmodule.c (builtin_vars): correct typo in error msg
Guido van Rossum <guido@python.org>
parents:
1444
diff
changeset
|
1795 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1796 PyDoc_STRVAR(vars_doc, |
| 8561 | 1797 "vars([object]) -> dictionary\n\ |
| 1798 \n\ | |
| 1799 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
|
1800 With an argument, equivalent to object.__dict__."); |
| 8561 | 1801 |
|
28717
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1802 |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1803 static PyObject* |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1804 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
|
1805 { |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1806 PyObject *seq; |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1807 PyObject *result = NULL; |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1808 PyObject *temp, *item, *iter; |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1809 |
|
30774
2d98710f272e
Use PyArg_UnpackTuple() where possible.
Raymond Hettinger <python@rcn.com>
parents:
30683
diff
changeset
|
1810 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
|
1811 return NULL; |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1812 |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1813 iter = PyObject_GetIter(seq); |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1814 if (iter == NULL) |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1815 return NULL; |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1816 |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1817 if (result == NULL) { |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1818 result = PyInt_FromLong(0); |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1819 if (result == NULL) { |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1820 Py_DECREF(iter); |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1821 return NULL; |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1822 } |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1823 } else { |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1824 /* 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
|
1825 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
|
1826 PyErr_SetString(PyExc_TypeError, |
|
28740
d3297e298211
some more error-message enhancements
Alex Martelli <aleaxit@gmail.com>
parents:
28738
diff
changeset
|
1827 "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
|
1828 Py_DECREF(iter); |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1829 return NULL; |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1830 } |
|
28718
16ef5b9bc789
fixed a potential refcount bug (thanks Raymond!).
Alex Martelli <aleaxit@gmail.com>
parents:
28717
diff
changeset
|
1831 Py_INCREF(result); |
|
28717
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1832 } |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1833 |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1834 for(;;) { |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1835 item = PyIter_Next(iter); |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1836 if (item == NULL) { |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1837 /* 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
|
1838 if (PyErr_Occurred()) { |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1839 Py_DECREF(result); |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1840 result = NULL; |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1841 } |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1842 break; |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1843 } |
|
30784
37285a0346c1
regressing the performance bugfix -- Guido wants the performance bug left
Alex Martelli <aleaxit@gmail.com>
parents:
30776
diff
changeset
|
1844 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
|
1845 Py_DECREF(result); |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1846 Py_DECREF(item); |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1847 result = temp; |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1848 if (result == NULL) |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1849 break; |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1850 } |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1851 Py_DECREF(iter); |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1852 return result; |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1853 } |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1854 |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1855 PyDoc_STRVAR(sum_doc, |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40411
diff
changeset
|
1856 "sum(sequence[, start]) -> value\n\ |
|
28717
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1857 \n\ |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1858 Returns the sum of a sequence of numbers (NOT strings) plus the value\n\ |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40411
diff
changeset
|
1859 of parameter 'start' (which defaults to 0). When the sequence is\n\ |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40411
diff
changeset
|
1860 empty, returns start."); |
|
28717
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1861 |
|
13d0a3c4e465
Adding new built-in function sum, with docs and tests.
Alex Martelli <aleaxit@gmail.com>
parents:
28612
diff
changeset
|
1862 |
|
6145
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
1863 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
1864 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
|
1865 { |
|
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
1866 PyObject *inst; |
|
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
1867 PyObject *cls; |
|
17111
bf678a11c21a
Move the code implementing isinstance() and issubclass() to new C
Guido van Rossum <guido@python.org>
parents:
16048
diff
changeset
|
1868 int retval; |
|
6145
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
1869 |
|
26818
e094a03a80ff
SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents:
26612
diff
changeset
|
1870 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
|
1871 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
|
1872 |
|
17111
bf678a11c21a
Move the code implementing isinstance() and issubclass() to new C
Guido van Rossum <guido@python.org>
parents:
16048
diff
changeset
|
1873 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
|
1874 if (retval < 0) |
|
15829
9308dc8c85e0
(Modified) patch by Ping - SF Patch #102681.
Guido van Rossum <guido@python.org>
parents:
15727
diff
changeset
|
1875 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
|
1876 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
|
1877 } |
|
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
1878 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1879 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
|
1880 "isinstance(object, class-or-type-or-tuple) -> bool\n\ |
| 8561 | 1881 \n\ |
| 1882 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
|
1883 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
|
1884 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
|
1885 isinstance(x, A) or isinstance(x, B) or ... (etc.)."); |
| 8561 | 1886 |
|
6145
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
1887 |
|
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
1888 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
1889 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
|
1890 { |
|
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
1891 PyObject *derived; |
|
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
1892 PyObject *cls; |
|
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
1893 int retval; |
|
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
1894 |
|
26818
e094a03a80ff
SF patch #659536: Use PyArg_UnpackTuple where possible.
Raymond Hettinger <python@rcn.com>
parents:
26612
diff
changeset
|
1895 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
|
1896 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
|
1897 |
|
17111
bf678a11c21a
Move the code implementing isinstance() and issubclass() to new C
Guido van Rossum <guido@python.org>
parents:
16048
diff
changeset
|
1898 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
|
1899 if (retval < 0) |
|
bf678a11c21a
Move the code implementing isinstance() and issubclass() to new C
Guido van Rossum <guido@python.org>
parents:
16048
diff
changeset
|
1900 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
|
1901 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
|
1902 } |
|
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
1903 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1904 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
|
1905 "issubclass(C, B) -> bool\n\ |
| 8561 | 1906 \n\ |
|
26612
97f83542f8ee
Enhance issubclass() and PyObject_IsSubclass() so that a tuple is
Walter Dörwald <walter@livinglogic.de>
parents:
25924
diff
changeset
|
1907 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
|
1908 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
|
1909 is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.)."); |
| 8561 | 1910 |
|
6145
341fcb7bad90
Two new built-in functions: issubclass() and isinstance(). Both take
Barry Warsaw <barry@python.org>
parents:
5926
diff
changeset
|
1911 |
|
13822
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
1912 static PyObject* |
|
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
1913 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
|
1914 { |
|
39686
aca709f33a6a
SF patch 1546297 (with some tweaks):
Guido van Rossum <guido@python.org>
parents:
39656
diff
changeset
|
1915 /* args must be a tuple */ |
|
aca709f33a6a
SF patch 1546297 (with some tweaks):
Guido van Rossum <guido@python.org>
parents:
39656
diff
changeset
|
1916 assert(PyTuple_Check(args)); |
|
13822
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
1917 |
|
39686
aca709f33a6a
SF patch 1546297 (with some tweaks):
Guido van Rossum <guido@python.org>
parents:
39656
diff
changeset
|
1918 return _PyZip_CreateIter(args); |
|
13822
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
1919 } |
|
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
1920 |
|
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
1921 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1922 PyDoc_STRVAR(zip_doc, |
|
39656
08005ba6ceb9
Make built-in zip() equal to itertools.izip().
Guido van Rossum <guido@python.org>
parents:
39645
diff
changeset
|
1923 "zip(it1 [, it2 [...]]) -> iter([(it1[0], it2[0] ...), ...])\n\ |
|
13822
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
1924 \n\ |
|
39656
08005ba6ceb9
Make built-in zip() equal to itertools.izip().
Guido van Rossum <guido@python.org>
parents:
39645
diff
changeset
|
1925 Return an iterator yielding tuples, where each tuple contains the\n\ |
|
08005ba6ceb9
Make built-in zip() equal to itertools.izip().
Guido van Rossum <guido@python.org>
parents:
39645
diff
changeset
|
1926 corresponding element from each of the argument iterables.\n\ |
|
08005ba6ceb9
Make built-in zip() equal to itertools.izip().
Guido van Rossum <guido@python.org>
parents:
39645
diff
changeset
|
1927 The returned iterator ends when the shortest argument iterable is exhausted.\n\ |
|
08005ba6ceb9
Make built-in zip() equal to itertools.izip().
Guido van Rossum <guido@python.org>
parents:
39645
diff
changeset
|
1928 NOTE: This is implemented using itertools.izip()."); |
|
13822
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
1929 |
|
c57b574e6766
Both PEP 201 Lockstep Iteration and SF patch #101030 have been
Barry Warsaw <barry@python.org>
parents:
13761
diff
changeset
|
1930 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1931 static PyMethodDef builtin_methods[] = { |
|
41226
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
1932 {"__build_class__", (PyCFunction)builtin___build_class__, |
|
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
41107
diff
changeset
|
1933 METH_VARARGS | METH_KEYWORDS, build_class_doc}, |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
1934 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc}, |
|
19301
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
1935 {"abs", builtin_abs, METH_O, abs_doc}, |
|
34736
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
1936 {"all", builtin_all, METH_O, all_doc}, |
|
81b5a13fa38a
Add two new functions, any() and all().
Raymond Hettinger <python@rcn.com>
parents:
34123
diff
changeset
|
1937 {"any", builtin_any, METH_O, any_doc}, |
|
41585
825d966338ea
Rename 'unicode' to 'str' in its tp_name field. Rename 'str' to 'str8'.
Guido van Rossum <guido@python.org>
parents:
41558
diff
changeset
|
1938 {"chr", builtin_unichr, METH_VARARGS, unichr_doc}, |
|
41609
92ead87bf984
Add 8-bit chr() back as chr8().
Guido van Rossum <guido@python.org>
parents:
41595
diff
changeset
|
1939 {"chr8", builtin_chr, METH_VARARGS, chr_doc}, |
|
19301
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
1940 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc}, |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41501
diff
changeset
|
1941 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc}, |
|
19301
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
1942 {"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
|
1943 {"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
|
1944 {"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
|
1945 {"eval", builtin_eval, METH_VARARGS, eval_doc}, |
|
39782
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39686
diff
changeset
|
1946 {"exec", builtin_exec, METH_VARARGS, exec_doc}, |
|
19301
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
1947 {"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
|
1948 {"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
|
1949 {"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
|
1950 {"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
|
1951 {"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
|
1952 {"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
|
1953 {"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
|
1954 {"id", builtin_id, METH_O, id_doc}, |
|
40933
a2629be1b1d0
Add raw_input() back, named input(). Revive the old unittests too.
Guido van Rossum <guido@python.org>
parents:
40922
diff
changeset
|
1955 {"input", builtin_input, METH_VARARGS, input_doc}, |
|
19301
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
1956 {"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
|
1957 {"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
|
1958 {"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
|
1959 {"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
|
1960 {"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
|
1961 {"map", builtin_map, METH_VARARGS, map_doc}, |
|
34085
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1962 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc}, |
|
cc9ce6837ea9
SF patch #1077353: add key= argument to min and max
Raymond Hettinger <python@rcn.com>
parents:
33261
diff
changeset
|
1963 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc}, |
|
41501
0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
Georg Brandl <georg@python.org>
parents:
41452
diff
changeset
|
1964 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc}, |
|
19301
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
1965 {"oct", builtin_oct, METH_O, oct_doc}, |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37927
diff
changeset
|
1966 {"open", (PyCFunction)builtin_open, METH_VARARGS | METH_KEYWORDS, open_doc}, |
|
19301
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
1967 {"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
|
1968 {"pow", builtin_pow, METH_VARARGS, pow_doc}, |
|
40774
793e0323d4d6
Essential changes for print function changes.
Guido van Rossum <guido@python.org>
parents:
40644
diff
changeset
|
1969 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc}, |
|
19301
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
1970 {"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
|
1971 {"repr", builtin_repr, METH_O, repr_doc}, |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
1972 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc}, |
|
19301
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
1973 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc}, |
|
31210
c06b570adf12
Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents:
31122
diff
changeset
|
1974 {"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
|
1975 {"sum", builtin_sum, METH_VARARGS, sum_doc}, |
|
19301
b9701538f827
Patch #427190: Implement and use METH_NOARGS and METH_O.
Martin v. Löwis <martin@v.loewis.de>
parents:
19061
diff
changeset
|
1976 {"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
|
1977 {"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
|
1978 {NULL, NULL}, |
| 86 | 1979 }; |
| 1980 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1981 PyDoc_STRVAR(builtin_doc, |
| 8561 | 1982 "Built-in functions, exceptions, and other objects.\n\ |
| 1983 \n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23695
diff
changeset
|
1984 Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices."); |
| 8561 | 1985 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5610
diff
changeset
|
1986 PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
1987 _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
|
1988 { |
|
12961
eb911eca9ee9
Christopher Fandrich <cfandrich@8cs.com>:
Fred Drake <fdrake@acm.org>
parents:
12756
diff
changeset
|
1989 PyObject *mod, *dict, *debug; |
| 8561 | 1990 mod = Py_InitModule4("__builtin__", builtin_methods, |
| 1991 builtin_doc, (PyObject *)NULL, | |
| 1992 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
|
1993 if (mod == NULL) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5610
diff
changeset
|
1994 return NULL; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5610
diff
changeset
|
1995 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
|
1996 |
|
28396
d56282c28a1e
Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents:
28027
diff
changeset
|
1997 #ifdef Py_TRACE_REFS |
|
d56282c28a1e
Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents:
28027
diff
changeset
|
1998 /* __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
|
1999 * 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
|
2000 * 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
|
2001 * 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
|
2002 * 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
|
2003 */ |
|
d56282c28a1e
Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents:
28027
diff
changeset
|
2004 #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
|
2005 #else |
|
d56282c28a1e
Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents:
28027
diff
changeset
|
2006 #define ADD_TO_ALL(OBJECT) (void)0 |
|
d56282c28a1e
Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents:
28027
diff
changeset
|
2007 #endif |
|
d56282c28a1e
Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents:
28027
diff
changeset
|
2008 |
|
19902
de39956b5458
_PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents:
19894
diff
changeset
|
2009 #define SETBUILTIN(NAME, OBJECT) \ |
|
28396
d56282c28a1e
Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents:
28027
diff
changeset
|
2010 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
|
2011 return NULL; \ |
|
d56282c28a1e
Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents:
28027
diff
changeset
|
2012 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
|
2013 |
|
de39956b5458
_PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents:
19894
diff
changeset
|
2014 SETBUILTIN("None", Py_None); |
|
de39956b5458
_PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents:
19894
diff
changeset
|
2015 SETBUILTIN("Ellipsis", Py_Ellipsis); |
|
de39956b5458
_PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents:
19894
diff
changeset
|
2016 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
|
2017 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
|
2018 SETBUILTIN("True", Py_True); |
|
23597
ed007e47b3a1
Change name from string to basestring
Neal Norwitz <nnorwitz@gmail.com>
parents:
23542
diff
changeset
|
2019 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
|
2020 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
|
2021 SETBUILTIN("buffer", &PyBuffer_Type); |
|
37927
a7f3765ea464
Here is a bytes type. It's very minimal but it's a start.
Guido van Rossum <guido@python.org>
parents:
37879
diff
changeset
|
2022 SETBUILTIN("bytes", &PyBytes_Type); |
|
19902
de39956b5458
_PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents:
19894
diff
changeset
|
2023 SETBUILTIN("classmethod", &PyClassMethod_Type); |
|
18933
09df3254b49d
Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents:
18890
diff
changeset
|
2024 #ifndef WITHOUT_COMPLEX |
|
19902
de39956b5458
_PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents:
19894
diff
changeset
|
2025 SETBUILTIN("complex", &PyComplex_Type); |
|
18933
09df3254b49d
Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents:
18890
diff
changeset
|
2026 #endif |
|
20754
272336648d1f
Rename "dictionary" (type and constructor) to "dict".
Tim Peters <tim.peters@gmail.com>
parents:
20654
diff
changeset
|
2027 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
|
2028 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
|
2029 SETBUILTIN("float", &PyFloat_Type); |
|
30929
54ff68e973ee
* Migrate set() and frozenset() from the sandbox.
Raymond Hettinger <python@rcn.com>
parents:
30865
diff
changeset
|
2030 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
|
2031 SETBUILTIN("property", &PyProperty_Type); |
|
40626
4aee3f672f77
Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents:
40484
diff
changeset
|
2032 SETBUILTIN("int", &PyLong_Type); |
|
19902
de39956b5458
_PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents:
19894
diff
changeset
|
2033 SETBUILTIN("list", &PyList_Type); |
|
de39956b5458
_PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents:
19894
diff
changeset
|
2034 SETBUILTIN("object", &PyBaseObject_Type); |
|
41642
a6eb6acfe04a
Merged revisions 55007-55179 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41609
diff
changeset
|
2035 SETBUILTIN("range", &PyRange_Type); |
|
30865
41c4e143e6e6
Implement and apply PEP 322, reverse iteration
Raymond Hettinger <python@rcn.com>
parents:
30784
diff
changeset
|
2036 SETBUILTIN("reversed", &PyReversed_Type); |
|
30929
54ff68e973ee
* Migrate set() and frozenset() from the sandbox.
Raymond Hettinger <python@rcn.com>
parents:
30865
diff
changeset
|
2037 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
|
2038 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
|
2039 SETBUILTIN("staticmethod", &PyStaticMethod_Type); |
|
41558
29ae667f3239
Checkpoint. Manipulated things so that string literals are always
Guido van Rossum <guido@python.org>
parents:
41554
diff
changeset
|
2040 SETBUILTIN("str", &PyUnicode_Type); |
|
41585
825d966338ea
Rename 'unicode' to 'str' in its tp_name field. Rename 'str' to 'str8'.
Guido van Rossum <guido@python.org>
parents:
41558
diff
changeset
|
2041 SETBUILTIN("str8", &PyString_Type); |
|
19902
de39956b5458
_PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents:
19894
diff
changeset
|
2042 SETBUILTIN("super", &PySuper_Type); |
|
de39956b5458
_PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents:
19894
diff
changeset
|
2043 SETBUILTIN("tuple", &PyTuple_Type); |
|
de39956b5458
_PyBuiltin_Init(): For clarity, macroize this purely repetitive code.
Tim Peters <tim.peters@gmail.com>
parents:
19894
diff
changeset
|
2044 SETBUILTIN("type", &PyType_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
|
2045 debug = PyBool_FromLong(Py_OptimizeFlag == 0); |
|
12961
eb911eca9ee9
Christopher Fandrich <cfandrich@8cs.com>:
Fred Drake <fdrake@acm.org>
parents:
12756
diff
changeset
|
2046 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) { |
|
eb911eca9ee9
Christopher Fandrich <cfandrich@8cs.com>:
Fred Drake <fdrake@acm.org>
parents:
12756
diff
changeset
|
2047 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
|
2048 return NULL; |
|
12961
eb911eca9ee9
Christopher Fandrich <cfandrich@8cs.com>:
Fred Drake <fdrake@acm.org>
parents:
12756
diff
changeset
|
2049 } |
|
eb911eca9ee9
Christopher Fandrich <cfandrich@8cs.com>:
Fred Drake <fdrake@acm.org>
parents:
12756
diff
changeset
|
2050 Py_XDECREF(debug); |
|
6198
c43ca8dd0081
Removed obsolete exception PyExc_AccessError.
Barry Warsaw <barry@python.org>
parents:
6145
diff
changeset
|
2051 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5610
diff
changeset
|
2052 return mod; |
|
28396
d56282c28a1e
Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents:
28027
diff
changeset
|
2053 #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
|
2054 #undef SETBUILTIN |
| 86 | 2055 } |
| 2056 | |
|
1393
7d6a2d950f13
* nismodule.c: database keys and values can contain null bytes. be more
Guido van Rossum <guido@python.org>
parents:
1387
diff
changeset
|
2057 /* 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
|
2058 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2059 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
2060 filtertuple(PyObject *func, PyObject *tuple) |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2061 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2062 PyObject *result; |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36484
diff
changeset
|
2063 Py_ssize_t i, j; |
|
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36484
diff
changeset
|
2064 Py_ssize_t len = PyTuple_Size(tuple); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2065 |
|
2890
04e1690fb4d1
avoid resize of 0-length tuple
Guido van Rossum <guido@python.org>
parents:
2857
diff
changeset
|
2066 if (len == 0) { |
|
27681
e5454fe1aafd
Make sure filter() never returns tuple, str or unicode
Walter Dörwald <walter@livinglogic.de>
parents:
27675
diff
changeset
|
2067 if (PyTuple_CheckExact(tuple)) |
|
e5454fe1aafd
Make sure filter() never returns tuple, str or unicode
Walter Dörwald <walter@livinglogic.de>
parents:
27675
diff
changeset
|
2068 Py_INCREF(tuple); |
|
e5454fe1aafd
Make sure filter() never returns tuple, str or unicode
Walter Dörwald <walter@livinglogic.de>
parents:
27675
diff
changeset
|
2069 else |
|
e5454fe1aafd
Make sure filter() never returns tuple, str or unicode
Walter Dörwald <walter@livinglogic.de>
parents:
27675
diff
changeset
|
2070 tuple = PyTuple_New(0); |
|
2890
04e1690fb4d1
avoid resize of 0-length tuple
Guido van Rossum <guido@python.org>
parents:
2857
diff
changeset
|
2071 return tuple; |
|
04e1690fb4d1
avoid resize of 0-length tuple
Guido van Rossum <guido@python.org>
parents:
2857
diff
changeset
|
2072 } |
|
04e1690fb4d1
avoid resize of 0-length tuple
Guido van Rossum <guido@python.org>
parents:
2857
diff
changeset
|
2073 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2074 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
|
2075 return NULL; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2076 |
|
1375
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
2077 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
|
2078 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
|
2079 int ok; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2080 |
|
27795
2042e2051d97
Change filtertuple() to use tp_as_sequence->sq_item
Walter Dörwald <walter@livinglogic.de>
parents:
27790
diff
changeset
|
2081 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
|
2082 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
|
2083 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
|
2084 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
|
2085 goto Fail_1; |
|
27795
2042e2051d97
Change filtertuple() to use tp_as_sequence->sq_item
Walter Dörwald <walter@livinglogic.de>
parents:
27790
diff
changeset
|
2086 } else { |
|
28740
d3297e298211
some more error-message enhancements
Alex Martelli <aleaxit@gmail.com>
parents:
28738
diff
changeset
|
2087 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
|
2088 goto Fail_1; |
|
27795
2042e2051d97
Change filtertuple() to use tp_as_sequence->sq_item
Walter Dörwald <walter@livinglogic.de>
parents:
27790
diff
changeset
|
2089 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2090 if (func == Py_None) { |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2091 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
|
2092 good = item; |
|
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
2093 } |
|
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
2094 else { |
|
30683
3b59fa5d25b1
Simplify and speedup uses of Py_BuildValue():
Raymond Hettinger <python@rcn.com>
parents:
30430
diff
changeset
|
2095 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
|
2096 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
|
2097 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
|
2098 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
|
2099 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2100 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
|
2101 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
|
2102 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
|
2103 Py_DECREF(item); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2104 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
|
2105 } |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2106 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2107 ok = PyObject_IsTrue(good); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2108 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
|
2109 if (ok) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2110 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
|
2111 goto Fail_1; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2112 } |
|
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
|
2113 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
|
2114 Py_DECREF(item); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2115 } |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2116 |
|
17976
d579a5d8b3fe
Cruft cleanup: Removed the unused last_is_sticky argument from the internal
Tim Peters <tim.peters@gmail.com>
parents:
17874
diff
changeset
|
2117 if (_PyTuple_Resize(&result, j) < 0) |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2118 return NULL; |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2119 |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2120 return result; |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2121 |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2122 Fail_1: |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2123 Py_DECREF(result); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2124 return NULL; |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2125 } |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2126 |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2127 |
|
1393
7d6a2d950f13
* nismodule.c: database keys and values can contain null bytes. be more
Guido van Rossum <guido@python.org>
parents:
1387
diff
changeset
|
2128 /* 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
|
2129 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2130 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
2131 filterstring(PyObject *func, PyObject *strobj) |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2132 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2133 PyObject *result; |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36484
diff
changeset
|
2134 Py_ssize_t i, j; |
|
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36484
diff
changeset
|
2135 Py_ssize_t len = PyString_Size(strobj); |
|
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36484
diff
changeset
|
2136 Py_ssize_t outlen = len; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2137 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2138 if (func == Py_None) { |
|
27786
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2139 /* 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
|
2140 * 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
|
2141 * 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
|
2142 * we must go through the __getitem__ loop */ |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2143 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
|
2144 Py_INCREF(strobj); |
|
27786
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2145 return strobj; |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2146 } |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2147 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2148 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
|
2149 return NULL; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2150 |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2151 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
|
2152 PyObject *item; |
|
1375
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
2153 int ok; |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2154 |
|
1375
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
2155 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
|
2156 if (item == NULL) |
|
f3a325662d39
* listobject.c (list_ass_slice): XDECREF instead of DECREF so
Guido van Rossum <guido@python.org>
parents:
1369
diff
changeset
|
2157 goto Fail_1; |
|
27786
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2158 if (func==Py_None) { |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2159 ok = 1; |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2160 } else { |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2161 PyObject *arg, *good; |
|
30683
3b59fa5d25b1
Simplify and speedup uses of Py_BuildValue():
Raymond Hettinger <python@rcn.com>
parents:
30430
diff
changeset
|
2162 arg = PyTuple_Pack(1, item); |
|
27786
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2163 if (arg == NULL) { |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2164 Py_DECREF(item); |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2165 goto Fail_1; |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2166 } |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2167 good = PyEval_CallObject(func, arg); |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2168 Py_DECREF(arg); |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2169 if (good == NULL) { |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2170 Py_DECREF(item); |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2171 goto Fail_1; |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2172 } |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2173 ok = PyObject_IsTrue(good); |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2174 Py_DECREF(good); |
|
17337
96ea0eccdb31
SF patch #413552 - Premature decref on object
Tim Peters <tim.peters@gmail.com>
parents:
17125
diff
changeset
|
2175 } |
|
27674
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2176 if (ok) { |
|
36521
30aef3ce2b26
Use Py_ssize_t to count the
Martin v. Löwis <martin@v.loewis.de>
parents:
36501
diff
changeset
|
2177 Py_ssize_t reslen; |
|
27674
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2178 if (!PyString_Check(item)) { |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2179 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
|
2180 " __getitem__ returned different type"); |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2181 Py_DECREF(item); |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2182 goto Fail_1; |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2183 } |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2184 reslen = PyString_GET_SIZE(item); |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2185 if (reslen == 1) { |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2186 PyString_AS_STRING(result)[j++] = |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2187 PyString_AS_STRING(item)[0]; |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2188 } else { |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2189 /* do we need more space? */ |
|
36521
30aef3ce2b26
Use Py_ssize_t to count the
Martin v. Löwis <martin@v.loewis.de>
parents:
36501
diff
changeset
|
2190 Py_ssize_t 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
|
2191 if (need > outlen) { |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2192 /* overallocate, to avoid reallocations */ |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2193 if (need<2*outlen) |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2194 need = 2*outlen; |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2195 if (_PyString_Resize(&result, need)) { |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2196 Py_DECREF(item); |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2197 return NULL; |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2198 } |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2199 outlen = need; |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2200 } |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2201 memcpy( |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2202 PyString_AS_STRING(result) + j, |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2203 PyString_AS_STRING(item), |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2204 reslen |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2205 ); |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2206 j += reslen; |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2207 } |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2208 } |
|
17337
96ea0eccdb31
SF patch #413552 - Premature decref on object
Tim Peters <tim.peters@gmail.com>
parents:
17125
diff
changeset
|
2209 Py_DECREF(item); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2210 } |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2211 |
|
27674
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2212 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
|
2213 _PyString_Resize(&result, j); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2214 |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2215 return result; |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2216 |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2217 Fail_1: |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2218 Py_DECREF(result); |
|
1369
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2219 return NULL; |
|
89e1e5d9ccbf
* compile.[ch]: support for lambda()
Guido van Rossum <guido@python.org>
parents:
1360
diff
changeset
|
2220 } |
|
27385
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2221 |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2222 /* 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
|
2223 |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2224 static PyObject * |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2225 filterunicode(PyObject *func, PyObject *strobj) |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2226 { |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2227 PyObject *result; |
|
36866
9eb24f92a784
Change int to Py_ssize_t in several places.
Martin v. Löwis <martin@v.loewis.de>
parents:
36712
diff
changeset
|
2228 register Py_ssize_t i, j; |
|
36521
30aef3ce2b26
Use Py_ssize_t to count the
Martin v. Löwis <martin@v.loewis.de>
parents:
36501
diff
changeset
|
2229 Py_ssize_t len = PyUnicode_GetSize(strobj); |
|
30aef3ce2b26
Use Py_ssize_t to count the
Martin v. Löwis <martin@v.loewis.de>
parents:
36501
diff
changeset
|
2230 Py_ssize_t outlen = len; |
|
27385
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2231 |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2232 if (func == Py_None) { |
|
27786
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2233 /* 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
|
2234 * 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
|
2235 * 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
|
2236 * we must go through the __getitem__ loop */ |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2237 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
|
2238 Py_INCREF(strobj); |
|
27786
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2239 return strobj; |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2240 } |
|
27385
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2241 } |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2242 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
|
2243 return NULL; |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2244 |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2245 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
|
2246 PyObject *item, *arg, *good; |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2247 int ok; |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2248 |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2249 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
|
2250 if (item == NULL) |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2251 goto Fail_1; |
|
27786
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2252 if (func == Py_None) { |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2253 ok = 1; |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2254 } else { |
|
30683
3b59fa5d25b1
Simplify and speedup uses of Py_BuildValue():
Raymond Hettinger <python@rcn.com>
parents:
30430
diff
changeset
|
2255 arg = PyTuple_Pack(1, item); |
|
27786
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2256 if (arg == NULL) { |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2257 Py_DECREF(item); |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2258 goto Fail_1; |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2259 } |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2260 good = PyEval_CallObject(func, arg); |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2261 Py_DECREF(arg); |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2262 if (good == NULL) { |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2263 Py_DECREF(item); |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2264 goto Fail_1; |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2265 } |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2266 ok = PyObject_IsTrue(good); |
|
f34446fa216e
Change filterstring() and filterunicode(): If the
Walter Dörwald <walter@livinglogic.de>
parents:
27782
diff
changeset
|
2267 Py_DECREF(good); |
|
27385
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2268 } |
|
27674
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2269 if (ok) { |
|
36521
30aef3ce2b26
Use Py_ssize_t to count the
Martin v. Löwis <martin@v.loewis.de>
parents:
36501
diff
changeset
|
2270 Py_ssize_t reslen; |
|
27674
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2271 if (!PyUnicode_Check(item)) { |
|
35500
8fa83a9ebc6e
Whitespace normalization.
Georg Brandl <georg@python.org>
parents:
35364
diff
changeset
|
2272 PyErr_SetString(PyExc_TypeError, |
|
30429
c9cc35249322
Reflow long lines and reformat.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
30182
diff
changeset
|
2273 "can't filter unicode to unicode:" |
|
c9cc35249322
Reflow long lines and reformat.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
30182
diff
changeset
|
2274 " __getitem__ returned different type"); |
|
27674
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2275 Py_DECREF(item); |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2276 goto Fail_1; |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2277 } |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2278 reslen = PyUnicode_GET_SIZE(item); |
|
35500
8fa83a9ebc6e
Whitespace normalization.
Georg Brandl <georg@python.org>
parents:
35364
diff
changeset
|
2279 if (reslen == 1) |
|
27674
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2280 PyUnicode_AS_UNICODE(result)[j++] = |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2281 PyUnicode_AS_UNICODE(item)[0]; |
|
30429
c9cc35249322
Reflow long lines and reformat.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
30182
diff
changeset
|
2282 else { |
|
27674
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2283 /* do we need more space? */ |
|
36521
30aef3ce2b26
Use Py_ssize_t to count the
Martin v. Löwis <martin@v.loewis.de>
parents:
36501
diff
changeset
|
2284 Py_ssize_t 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
|
2285 if (need > outlen) { |
|
35500
8fa83a9ebc6e
Whitespace normalization.
Georg Brandl <georg@python.org>
parents:
35364
diff
changeset
|
2286 /* overallocate, |
|
30429
c9cc35249322
Reflow long lines and reformat.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
30182
diff
changeset
|
2287 to avoid reallocations */ |
|
c9cc35249322
Reflow long lines and reformat.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
30182
diff
changeset
|
2288 if (need < 2 * outlen) |
|
c9cc35249322
Reflow long lines and reformat.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
30182
diff
changeset
|
2289 need = 2 * outlen; |
|
30430
a8f04cbf659c
Correct check of PyUnicode_Resize() return value.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
30429
diff
changeset
|
2290 if (PyUnicode_Resize( |
|
a8f04cbf659c
Correct check of PyUnicode_Resize() return value.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
30429
diff
changeset
|
2291 &result, need) < 0) { |
|
27674
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2292 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
|
2293 goto Fail_1; |
|
27674
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2294 } |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2295 outlen = need; |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2296 } |
|
30429
c9cc35249322
Reflow long lines and reformat.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
30182
diff
changeset
|
2297 memcpy(PyUnicode_AS_UNICODE(result) + j, |
|
c9cc35249322
Reflow long lines and reformat.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
30182
diff
changeset
|
2298 PyUnicode_AS_UNICODE(item), |
|
c9cc35249322
Reflow long lines and reformat.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
30182
diff
changeset
|
2299 reslen*sizeof(Py_UNICODE)); |
|
27674
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2300 j += reslen; |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2301 } |
|
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2302 } |
|
27385
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2303 Py_DECREF(item); |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2304 } |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2305 |
|
27674
ce3faab06de7
filterstring() and filterunicode() in Python/bltinmodule.c
Walter Dörwald <walter@livinglogic.de>
parents:
27652
diff
changeset
|
2306 if (j < outlen) |
|
27385
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2307 PyUnicode_Resize(&result, j); |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2308 |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2309 return result; |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2310 |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2311 Fail_1: |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2312 Py_DECREF(result); |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2313 return NULL; |
|
91a573243d5d
Patch #636005: Filter unicode into unicode.
Martin v. Löwis <martin@v.loewis.de>
parents:
27076
diff
changeset
|
2314 } |
