mirror of https://github.com/python/cpython
return locals and cells in get_locals() not bound globals, though
This commit is contained in:
parent
8f7b94eae9
commit
552e7a7e2f
|
@ -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):
|
||||||
|
|
|
@ -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",))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue