aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java
diff options
context:
space:
mode:
authorGravatar Francois-Rene Rideau <tunes@google.com>2015-09-17 19:17:20 +0000
committerGravatar David Chen <dzc@google.com>2015-09-17 19:36:15 +0000
commit6c10eac70123104a2b48eaf58075374e155ed12d (patch)
tree833ef1d51ee50f0385035c3d2c49a2ea6bfc719a /src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java
parent159b74c8b96622428840bf9918cce3b95021b095 (diff)
Cleanup Skylark types some more
Clarify the criterion for being a valid Skylark value; stop claiming immutability is "the" criterion when Skylark now has mutable values; stop relying on a reflection with a magic list (this also fixes the SkylarkShell build). Clarify the criterion for determining immutable types when making a SkylarkNestedSet. Clarify and use the criterion for being a valid Skylark dict key. -- MOS_MIGRATED_REVID=103313934
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java
index fb4f2457d4..282a7af590 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java
@@ -41,7 +41,7 @@ import java.util.List;
+ "error. Lists - just like everything - are immutable, therefore <code>x[1] = \"a\""
+ "</code> is not supported.")
// TODO(bazel-team): should we instead have it implement List<Object> like ImmutableList does?
-public abstract class SkylarkList implements Iterable<Object> {
+public abstract class SkylarkList implements Iterable<Object>, SkylarkValue {
private final boolean tuple;
private final SkylarkType contentType;
@@ -412,4 +412,22 @@ public abstract class SkylarkList implements Iterable<Object> {
public static SkylarkList tuple(Object... elements) {
return new SimpleSkylarkList(ImmutableList.copyOf(elements), true, SkylarkType.TOP);
}
+
+ @Override
+ public boolean isImmutable() {
+ if (!isTuple()) {
+ return false;
+ }
+ for (Object item : this) {
+ if (!EvalUtils.isImmutable(item)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public void write(Appendable buffer, char quotationMark) {
+ Printer.printList(buffer, toList(), isTuple(), quotationMark);
+ }
}