mirror of
https://github.com/python/cpython.git
synced 2025-08-21 17:25:34 +00:00
Fix a reference leak found by Georg, when compiling a class nested in another class.
Test is run with "regrtest.py -R:: test_compile" Backport of r62015
This commit is contained in:
parent
198e353735
commit
8432d86b9f
3 changed files with 8 additions and 0 deletions
|
@ -398,6 +398,10 @@ if 1:
|
||||||
del d[..., ...]
|
del d[..., ...]
|
||||||
self.assertEqual((Ellipsis, Ellipsis) in d, False)
|
self.assertEqual((Ellipsis, Ellipsis) in d, False)
|
||||||
|
|
||||||
|
def test_nested_classes(self):
|
||||||
|
# Verify that it does not leak
|
||||||
|
compile("class A:\n class B: pass", 'tmp', 'exec')
|
||||||
|
|
||||||
def test_main():
|
def test_main():
|
||||||
test_support.run_unittest(TestSpecifics)
|
test_support.run_unittest(TestSpecifics)
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,9 @@ What's New in Python 2.5.3?
|
||||||
Core and builtins
|
Core and builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- The compilation of a class nested in another class used to leak one
|
||||||
|
reference on the outer class name.
|
||||||
|
|
||||||
- Issue #1477: With narrow Unicode builds, the unicode escape sequence
|
- Issue #1477: With narrow Unicode builds, the unicode escape sequence
|
||||||
\Uxxxxxxxx did not accept values outside the Basic Multilingual Plane. This
|
\Uxxxxxxxx did not accept values outside the Basic Multilingual Plane. This
|
||||||
affected raw unicode literals and the 'raw-unicode-escape' codec. Now
|
affected raw unicode literals and the 'raw-unicode-escape' codec. Now
|
||||||
|
|
|
@ -2061,6 +2061,7 @@ compiler_class(struct compiler *c, stmt_ty s)
|
||||||
if (!compiler_enter_scope(c, s->v.ClassDef.name, (void *)s,
|
if (!compiler_enter_scope(c, s->v.ClassDef.name, (void *)s,
|
||||||
s->lineno))
|
s->lineno))
|
||||||
return 0;
|
return 0;
|
||||||
|
Py_XDECREF(c->u->u_private);
|
||||||
c->u->u_private = s->v.ClassDef.name;
|
c->u->u_private = s->v.ClassDef.name;
|
||||||
Py_INCREF(c->u->u_private);
|
Py_INCREF(c->u->u_private);
|
||||||
str = PyString_InternFromString("__name__");
|
str = PyString_InternFromString("__name__");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue