Commit 8432d86b authored by Amaury Forgeot d'Arc's avatar Amaury Forgeot d'Arc

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
parent 198e3537
...@@ -398,6 +398,10 @@ if 1: ...@@ -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? ...@@ -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) ...@@ -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__");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment