]> granicus.if.org Git - python/commitdiff
return locals and cells in get_locals() not bound globals, though
authorBenjamin Peterson <benjamin@python.org>
Sun, 28 Jun 2009 19:27:55 +0000 (19:27 +0000)
committerBenjamin Peterson <benjamin@python.org>
Sun, 28 Jun 2009 19:27:55 +0000 (19:27 +0000)
Lib/symtable.py
Lib/test/test_symtable.py

index 44d70a35fda5a1c3dc6cb314d5be27077f7262d8..ca73f586511257603cf310a79340f14ca0008de1 100644 (file)
@@ -3,7 +3,7 @@
 import _symtable
 from _symtable import (USE, DEF_GLOBAL, DEF_LOCAL, DEF_PARAM,
      DEF_IMPORT, DEF_BOUND, OPT_IMPORT_STAR, OPT_EXEC, OPT_BARE_EXEC,
-     SCOPE_OFF, SCOPE_MASK, FREE, GLOBAL_IMPLICIT, GLOBAL_EXPLICIT)
+     SCOPE_OFF, SCOPE_MASK, FREE, GLOBAL_IMPLICIT, GLOBAL_EXPLICIT, CELL, LOCAL)
 
 import weakref
 
@@ -137,7 +137,9 @@ class Function(SymbolTable):
 
     def get_locals(self):
         if self.__locals is None:
-            self.__locals = self.__idents_matching(lambda x:x & DEF_BOUND)
+            locs = (LOCAL, CELL)
+            test = lambda x: ((x >> SCOPE_OFF) & SCOPE_MASK) in locs
+            self.__locals = self.__idents_matching(test)
         return self.__locals
 
     def get_globals(self):
index 792d9c3343e84d66948aad77b56a46fa099c7f03..2de30ae6644d6be21eb596d8debec5cb7d1fc3fa 100644 (file)
@@ -92,7 +92,7 @@ class SymtableTest(unittest.TestCase):
         func = self.spam
         self.assertEqual(func.get_parameters(), ("a", "b", "kw", "var"))
         self.assertEqual(func.get_locals(),
-                         ("a", "b", "bar", "internal", "kw", "var", "x"))
+                         ("a", "b", "internal", "kw", "var", "x"))
         self.assertEqual(func.get_globals(), ("bar", "glob"))
         self.assertEqual(self.internal.get_frees(), ("x",))