Skip to content

Commit 57b36be

Browse files
committed
symtable fix 5
1 parent f096488 commit 57b36be

2 files changed

Lines changed: 18 additions & 19 deletions

File tree

Lib/symtable.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -171,10 +171,6 @@ def get_children(self):
171171
return [_newSymbolTable(st, self._filename)
172172
for st in self._table.children]
173173

174-
def get_cells(self):
175-
"""Return a list of cell variable names in the table."""
176-
return [s.get_name() for s in self.get_symbols() if s.is_cell()]
177-
178174

179175

180176
def _get_scope(flags): # like _PyST_GetScope()
@@ -189,7 +185,6 @@ class Function(SymbolTable):
189185
__frees = None
190186
__globals = None
191187
__nonlocals = None
192-
__cells = None
193188

194189
def __idents_matching(self, test_func):
195190
return tuple(ident for ident in self.get_identifiers()
@@ -235,6 +230,10 @@ def get_frees(self):
235230
self.__frees = self.__idents_matching(is_free)
236231
return self.__frees
237232

233+
def get_cells(self):
234+
"""Return a list of cell variable names in the table."""
235+
return [s.get_name() for s in self.get_symbols() if s.is_cell()]
236+
238237

239238
class Class(SymbolTable):
240239

Lib/test/test_symtable.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,20 @@ def test_local(self):
284284
def test_free(self):
285285
self.assertTrue(self.internal.lookup("x").is_free())
286286

287+
def test_cells(self):
288+
#test for addition of is_cell() and get_cells()
289+
#see https://github.com/python/cpython/issues/143504
290+
code="""def outer():
291+
x=1
292+
def inner():
293+
return x"""
294+
295+
top=symtable.symtable(code,"?","exec")
296+
outer = find_block(top, "outer")
297+
self.assertIn("x",outer.get_cells())
298+
self.assertTrue(outer.lookup("x").is_cell())
299+
self.assertFalse(outer.lookup("inner").is_cell())
300+
287301
def test_referenced(self):
288302
self.assertTrue(self.internal.lookup("x").is_referenced())
289303
self.assertTrue(self.spam.lookup("internal").is_referenced())
@@ -611,20 +625,6 @@ def test_filter_syntax_warnings_by_module(self):
611625
self.assertEqual(wm.filename, filename)
612626
self.assertIs(wm.category, SyntaxWarning)
613627

614-
def test_cells(self):
615-
#test for addition of is_cell() and get_cells()
616-
#see https://github.com/python/cpython/issues/143504
617-
code="""def outer():
618-
x=1
619-
def inner():
620-
return x"""
621-
622-
top=symtable.symtable(code,"?","exec")
623-
outer = find_block(top, "outer")
624-
self.assertIn("x",outer.get_cells())
625-
self.assertTrue(outer.lookup("x").is_cell())
626-
self.assertFalse(outer.lookup("inner").is_cell())
627-
628628

629629
class ComprehensionTests(unittest.TestCase):
630630
def get_identifiers_recursive(self, st, res):

0 commit comments

Comments
 (0)