diff options
Diffstat (limited to 'Lib/test/test_scope.py')
-rw-r--r-- | Lib/test/test_scope.py | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/Lib/test/test_scope.py b/Lib/test/test_scope.py index 65d87cf..fb1e26f 100644 --- a/Lib/test/test_scope.py +++ b/Lib/test/test_scope.py @@ -618,7 +618,6 @@ self.assert_(X.passed) self.assertEqual(dec(), 0) def testNonLocalMethod(self): - def f(x): class c: def inc(self): @@ -630,13 +629,36 @@ self.assert_(X.passed) x -= 1 return x return c() - c = f(0) self.assertEqual(c.inc(), 1) self.assertEqual(c.inc(), 2) self.assertEqual(c.dec(), 1) self.assertEqual(c.dec(), 0) + def testGlobalInParallelNestedFunctions(self): + # A symbol table bug leaked the global statement from one + # function to other nested functions in the same block. + # This test verifies that a global statement in the first + # function does not affect the second function. + CODE = """def f(): + y = 1 + def g(): + global y + return y + def h(): + return y + 1 + return g, h +y = 9 +g, h = f() +result9 = g() +result2 = h() +""" + local_ns = {} + global_ns = {} + exec(CODE, local_ns, global_ns) + self.assertEqual(2, global_ns["result2"]) + self.assertEqual(9, global_ns["result9"]) + def testNonLocalClass(self): def f(x): |