diff --git a/compiler/src/symboltable.rs b/compiler/src/symboltable.rs index 3c70d4fc2..df6c6d52e 100644 --- a/compiler/src/symboltable.rs +++ b/compiler/src/symboltable.rs @@ -585,7 +585,7 @@ impl SymbolTableBuilder { } Bytes { .. } => {} Tuple { elements } | Set { elements } | List { elements } | Slice { elements } => { - self.scan_expressions(elements, &ExpressionContext::Load)?; + self.scan_expressions(elements, context)?; } Comprehension { kind, generators } => { match **kind { diff --git a/tests/snippets/comprehensions.py b/tests/snippets/comprehensions.py index 132f3cdcb..c87f3b168 100644 --- a/tests/snippets/comprehensions.py +++ b/tests/snippets/comprehensions.py @@ -27,3 +27,17 @@ z = [(9,), (10,)] w = [x for x, in z] assert w == [9, 10] +# generator targets shouldn't affect scopes out of comprehensions +[a for a in range(5)] +assert 'a' not in locals() +assert 'a' not in globals() + +[b for a, b in [(1, 1), (2, 2)]] +assert 'b' not in locals() +assert 'b' not in globals() + +{b: c for b, c in {1: 2}.items()} +assert 'b' not in locals() +assert 'c' not in locals() +assert 'b' not in globals() +assert 'c' not in globals()