diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/syntax/AbstractComprehension.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/syntax/AbstractComprehension.java | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/AbstractComprehension.java b/src/main/java/com/google/devtools/build/lib/syntax/AbstractComprehension.java index 31c74c0f7a..1e092d1b81 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/AbstractComprehension.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/AbstractComprehension.java @@ -308,12 +308,11 @@ public abstract class AbstractComprehension extends Expression { } @Override - void validate(ValidationEnvironment parentEnv) throws EvalException { + void validate(ValidationEnvironment env) throws EvalException { // Create a new scope so that loop variables do not leak outside the comprehension. - ValidationEnvironment env = - parentEnv.getSemantics().incompatibleComprehensionVariablesDoNotLeak - ? new ValidationEnvironment(parentEnv) - : parentEnv; + if (env.getSemantics().incompatibleComprehensionVariablesDoNotLeak) { + env.openScope(); + } for (Clause clause : clauses) { clause.validate(env, getLocation()); @@ -323,6 +322,10 @@ public abstract class AbstractComprehension extends Expression { for (Expression expr : outputExpressions) { expr.validate(env); } + + if (env.getSemantics().incompatibleComprehensionVariablesDoNotLeak) { + env.closeScope(); + } } /** |