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:
Barry Warsaw 2008-11-20 20:01:57 +00:00
parent 2d1ca2dbab
commit 91cc8fb92b
3 changed files with 21 additions and 2 deletions

View file

@ -70,6 +70,17 @@ class TestSuper(unittest.TestCase):
e = E()
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():
support.run_unittest(TestSuper)

View file

@ -6170,8 +6170,9 @@ super_init(PyObject *self, PyObject *args, PyObject *kwds)
assert(PyUnicode_Check(name));
if (!PyUnicode_CompareWithASCIIString(name,
"__class__")) {
PyObject *cell =
f->f_localsplus[co->co_nlocals + i];
Py_ssize_t index = co->co_nlocals +
PyTuple_GET_SIZE(co->co_cellvars) + i;
PyObject *cell = f->f_localsplus[index];
if (cell == NULL || !PyCell_Check(cell)) {
PyErr_SetString(PyExc_SystemError,
"super(): bad __class__ cell");

View file

@ -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:
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.