mirror of
https://github.com/python/cpython.git
synced 2025-11-10 18:42:04 +00:00
Fix for bug 4360 "SystemError when method has both super() & closure". Patch
by amaury.forgeotdarc and reviewed by brett.cannon. Also add release notes about the known problems with the email package.
This commit is contained in:
parent
2d1ca2dbab
commit
91cc8fb92b
3 changed files with 21 additions and 2 deletions
|
|
@ -70,6 +70,17 @@ def testSuperInClassMethodsWorking(self):
|
||||||
e = E()
|
e = E()
|
||||||
self.assertEqual(e.cm(), (e, (E, (E, (E, 'A'), 'B'), 'C'), 'D'))
|
self.assertEqual(e.cm(), (e, (E, (E, (E, 'A'), 'B'), 'C'), 'D'))
|
||||||
|
|
||||||
|
def testSuperWithClosure(self):
|
||||||
|
# Issue4360: super() did not work in a function that
|
||||||
|
# contains a closure
|
||||||
|
class E(A):
|
||||||
|
def f(self):
|
||||||
|
def nested():
|
||||||
|
self
|
||||||
|
return super().f() + 'E'
|
||||||
|
|
||||||
|
self.assertEqual(E().f(), 'AE')
|
||||||
|
|
||||||
|
|
||||||
def test_main():
|
def test_main():
|
||||||
support.run_unittest(TestSuper)
|
support.run_unittest(TestSuper)
|
||||||
|
|
|
||||||
|
|
@ -6170,8 +6170,9 @@ super_init(PyObject *self, PyObject *args, PyObject *kwds)
|
||||||
assert(PyUnicode_Check(name));
|
assert(PyUnicode_Check(name));
|
||||||
if (!PyUnicode_CompareWithASCIIString(name,
|
if (!PyUnicode_CompareWithASCIIString(name,
|
||||||
"__class__")) {
|
"__class__")) {
|
||||||
PyObject *cell =
|
Py_ssize_t index = co->co_nlocals +
|
||||||
f->f_localsplus[co->co_nlocals + i];
|
PyTuple_GET_SIZE(co->co_cellvars) + i;
|
||||||
|
PyObject *cell = f->f_localsplus[index];
|
||||||
if (cell == NULL || !PyCell_Check(cell)) {
|
if (cell == NULL || !PyCell_Check(cell)) {
|
||||||
PyErr_SetString(PyExc_SystemError,
|
PyErr_SetString(PyExc_SystemError,
|
||||||
"super(): bad __class__ cell");
|
"super(): bad __class__ cell");
|
||||||
|
|
|
||||||
7
RELNOTES
7
RELNOTES
|
|
@ -20,3 +20,10 @@ Additional notes for Python 3.0 final
|
||||||
If you need bsddb3 support in Python 3.0, you can find it here:
|
If you need bsddb3 support in Python 3.0, you can find it here:
|
||||||
|
|
||||||
http://pypi.python.org/pypi/bsddb3
|
http://pypi.python.org/pypi/bsddb3
|
||||||
|
|
||||||
|
* The email package needs quite a bit of work to make it consistent with
|
||||||
|
respect to bytes and strings. There have been discussions on
|
||||||
|
email-sig@python.org about where to go with the email package for 3.0, but
|
||||||
|
this was not resolved in time for 3.0 final. With enough care though, the
|
||||||
|
email package in Python 3.0 should be about as usable as it is with Python
|
||||||
|
2.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue