return locals and cells in get_locals() not bound globals, though

This commit is contained in:
Benjamin Peterson 2009-06-28 19:27:55 +00:00
parent 8f7b94eae9
commit 552e7a7e2f
2 changed files with 5 additions and 3 deletions

View File

@ -3,7 +3,7 @@
import _symtable import _symtable
from _symtable import (USE, DEF_GLOBAL, DEF_LOCAL, DEF_PARAM, from _symtable import (USE, DEF_GLOBAL, DEF_LOCAL, DEF_PARAM,
DEF_IMPORT, DEF_BOUND, OPT_IMPORT_STAR, OPT_EXEC, OPT_BARE_EXEC, 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 import weakref
@ -137,7 +137,9 @@ class Function(SymbolTable):
def get_locals(self): def get_locals(self):
if self.__locals is None: 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 return self.__locals
def get_globals(self): def get_globals(self):

View File

@ -92,7 +92,7 @@ class SymtableTest(unittest.TestCase):
func = self.spam func = self.spam
self.assertEqual(func.get_parameters(), ("a", "b", "kw", "var")) self.assertEqual(func.get_parameters(), ("a", "b", "kw", "var"))
self.assertEqual(func.get_locals(), 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(func.get_globals(), ("bar", "glob"))
self.assertEqual(self.internal.get_frees(), ("x",)) self.assertEqual(self.internal.get_frees(), ("x",))