From f249d761abfa5e8892d12860a0f90e2c2d0aa32b Mon Sep 17 00:00:00 2001 From: Francois-Rene Rideau Date: Mon, 2 Mar 2015 08:14:46 +0000 Subject: Fix race condition in SkylarkType.of Fix race condition in SkylarkType.of(), whereby .equals() but not same (==) types were created, by making Simple.of() synchronized. Also make SkylarkType#includes() more robust by using .equals() instead of == (it's a little bit slower in the case of Simple types once fixed, but also works on complex types that don't hash-cons their values). Also, distinguish SkylarkList (printed as list) and java.util.List (printed as List) and similarly for tuple vs Tuple, when printing types in debugging messages. -- MOS_MIGRATED_REVID=87490176 --- .../java/com/google/devtools/build/lib/syntax/BuildFileASTTest.java | 2 +- .../java/com/google/devtools/build/lib/syntax/EvalUtilsTest.java | 4 ++-- .../java/com/google/devtools/build/lib/syntax/EvaluationTest.java | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) (limited to 'src/test/java/com') diff --git a/src/test/java/com/google/devtools/build/lib/syntax/BuildFileASTTest.java b/src/test/java/com/google/devtools/build/lib/syntax/BuildFileASTTest.java index e32005065c..3d463f3018 100644 --- a/src/test/java/com/google/devtools/build/lib/syntax/BuildFileASTTest.java +++ b/src/test/java/com/google/devtools/build/lib/syntax/BuildFileASTTest.java @@ -97,7 +97,7 @@ public class BuildFileASTTest { assertFalse(buildfile.exec(env, reporter)); Event e = JunitTestUtils.assertContainsEvent(collector, - "unsupported operand type(s) for +: 'int' and 'list'"); + "unsupported operand type(s) for +: 'int' and 'List'"); assertEquals(4, e.getLocation().getStartLineAndColumn().getLine()); } diff --git a/src/test/java/com/google/devtools/build/lib/syntax/EvalUtilsTest.java b/src/test/java/com/google/devtools/build/lib/syntax/EvalUtilsTest.java index 7aad74fba9..9da4ed2f81 100644 --- a/src/test/java/com/google/devtools/build/lib/syntax/EvalUtilsTest.java +++ b/src/test/java/com/google/devtools/build/lib/syntax/EvalUtilsTest.java @@ -61,8 +61,8 @@ public class EvalUtilsTest { public void testDataTypeNames() throws Exception { assertEquals("string", EvalUtils.getDataTypeName("foo")); assertEquals("int", EvalUtils.getDataTypeName(3)); - assertEquals("tuple", EvalUtils.getDataTypeName(makeTuple(1, 2, 3))); - assertEquals("list", EvalUtils.getDataTypeName(makeList(1, 2, 3))); + assertEquals("Tuple", EvalUtils.getDataTypeName(makeTuple(1, 2, 3))); + assertEquals("List", EvalUtils.getDataTypeName(makeList(1, 2, 3))); assertEquals("dict", EvalUtils.getDataTypeName(makeDict())); assertEquals("FilesetEntry", EvalUtils.getDataTypeName(makeFilesetEntry())); assertEquals("None", EvalUtils.getDataTypeName(Environment.NONE)); 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 f33b500c32..c31b17b161 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 @@ -302,7 +302,7 @@ public class EvaluationTest extends AbstractEvaluationTestCase { assertTrue(EvalUtils.isImmutable(x)); checkEvalError("(1,2) + [3,4]", // list + tuple - "can only concatenate list (not \"tuple\") to list"); + "can only concatenate List (not \"Tuple\") to List"); } @SuppressWarnings("unchecked") @@ -380,8 +380,8 @@ public class EvaluationTest extends AbstractEvaluationTestCase { public void testListConcatenation() throws Exception { assertEquals(Arrays.asList(1, 2, 3, 4), eval("[1, 2] + [3, 4]", env)); assertEquals(ImmutableList.of(1, 2, 3, 4), eval("(1, 2) + (3, 4)", env)); - checkEvalError("[1, 2] + (3, 4)", "can only concatenate tuple (not \"list\") to tuple"); - checkEvalError("(1, 2) + [3, 4]", "can only concatenate list (not \"tuple\") to list"); + checkEvalError("[1, 2] + (3, 4)", "can only concatenate Tuple (not \"List\") to Tuple"); + checkEvalError("(1, 2) + [3, 4]", "can only concatenate List (not \"Tuple\") to List"); } @Test -- cgit v1.2.3