aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/syntax/AbstractComprehension.java
diff options
context:
space:
mode:
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.java13
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();
+ }
}
/**