diff options
author | 2017-09-07 19:17:52 +0200 | |
---|---|---|
committer | 2017-09-08 09:47:24 +0200 | |
commit | ee250c6e9e7e24761ff26d3ee225ad485a7facf3 (patch) | |
tree | d4a674353c50b9a708c3e63f4e49c91e28603286 /src | |
parent | fb829994988798e3d6663d66497f4614148ea79a (diff) |
--incompatible_comprehension_variables_do_not_leak defaults to true
RELNOTES[INC]:
--incompatible_comprehension_variables_do_not_leak defaults to "true."
Iteration variable becomes inaccessible after a list/dict comprehension.
PiperOrigin-RevId: 167876119
Diffstat (limited to 'src')
3 files changed, 5 insertions, 12 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemanticsOptions.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemanticsOptions.java index 89fabf6ab0..4613359509 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemanticsOptions.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemanticsOptions.java @@ -148,7 +148,7 @@ public class SkylarkSemanticsOptions extends OptionsBase implements Serializable @Option( name = "incompatible_comprehension_variables_do_not_leak", - defaultValue = "false", + defaultValue = "true", category = "incompatible changes", documentationCategory = OptionDocumentationCategory.UNCATEGORIZED, effectTags = {OptionEffectTag.UNKNOWN}, diff --git a/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java b/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java index fb438a6e70..ae21bee88a 100644 --- a/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java +++ b/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java @@ -406,12 +406,10 @@ public class EvaluationTest extends EvaluationTestCase { } @Test - public void testListComprehensionModifiesGlobalEnv() throws Exception { - new SkylarkTest() - .update("x", 42) - .testIfErrorContains("Variable x is read only", "[x + 1 for x in [1,2,3]]"); - new BuildTest().update("x", 42).setUp("y =[x + 1 for x in [1,2,3]]") - .testExactOrder("y", 2, 3, 4).testLookup("x", 3); // (x is global) + public void testListComprehensionAtTopLevel() throws Exception { + // It is allowed to have a loop variable with the same name as a global variable. + newTest().update("x", 42).setUp("y = [x + 1 for x in [1,2,3]]") + .testExactOrder("y", 2, 3, 4); } @Test diff --git a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java index e27cb6372f..7ab15c9d87 100644 --- a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java +++ b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java @@ -1384,11 +1384,6 @@ public class SkylarkEvaluationTest extends EvaluationTest { + "evaluates to value of length 2", "[x + y for x, y, z in [(1, 2), (3, 4)]]"); - // can't reuse the same local variable twice(!) - new SkylarkTest() - .testIfErrorContains( - "Variable x is read only", "[x + y for x, y in (1, 2)]", "[x + y for x, y in (1, 2)]"); - new SkylarkTest() .testIfErrorContains("type 'int' is not a collection", "[x2 + y2 for x2, y2 in (1, 2)]"); |