From e9c280368aaa237c09c8f8651640a510ef9de478 Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Fri, 30 Aug 2019 01:53:54 +0900 Subject: [PATCH] Fix scan_expression not to mark sequence as Load --- compiler/src/symboltable.rs | 2 +- tests/snippets/comprehensions.py | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) 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()