summaryrefslogtreecommitdiffstats
path: root/Lib/test
diff options
context:
space:
mode:
authorIrit Katriel <1055913+iritkatriel@users.noreply.github.com>2024-08-02 22:56:51 (GMT)
committerGitHub <noreply@github.com>2024-08-02 22:56:51 (GMT)
commitfe0a28d850943cf2ba132c9b0a933bb0c98ff0ae (patch)
tree02211945b8b257dc7903cb8d949d86a43593d7f4 /Lib/test
parent4b63cd170e5dd840bffc80922f09f2d69932ff5c (diff)
downloadcpython-fe0a28d850943cf2ba132c9b0a933bb0c98ff0ae.zip
cpython-fe0a28d850943cf2ba132c9b0a933bb0c98ff0ae.tar.gz
cpython-fe0a28d850943cf2ba132c9b0a933bb0c98ff0ae.tar.bz2
gh-122560: add test that comprehension loop var appears only in one scope of the symtable (#122582)
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/test_symtable.py21
1 files changed, 21 insertions, 0 deletions
diff --git a/Lib/test/test_symtable.py b/Lib/test/test_symtable.py
index bd367c1..24d89b0 100644
--- a/Lib/test/test_symtable.py
+++ b/Lib/test/test_symtable.py
@@ -528,6 +528,27 @@ class SymtableTest(unittest.TestCase):
self.assertEqual(repr(self.top._table), expected)
+class ComprehensionTests(unittest.TestCase):
+ def get_identifiers_recursive(self, st, res):
+ res.extend(st.get_identifiers())
+ for ch in st.get_children():
+ self.get_identifiers_recursive(ch, res)
+
+ def test_loopvar_in_only_one_scope(self):
+ # ensure that the loop variable appears only once in the symtable
+ comps = [
+ "[x for x in [1]]",
+ "{x for x in [1]}",
+ "{x:x*x for x in [1]}",
+ ]
+ for comp in comps:
+ with self.subTest(comp=comp):
+ st = symtable.symtable(comp, "?", "exec")
+ ids = []
+ self.get_identifiers_recursive(st, ids)
+ self.assertEqual(len([x for x in ids if x == 'x']), 1)
+
+
class CommandLineTest(unittest.TestCase):
maxDiff = None