diff options
author | 2015-09-17 19:17:20 +0000 | |
---|---|---|
committer | 2015-09-17 19:36:15 +0000 | |
commit | 6c10eac70123104a2b48eaf58075374e155ed12d (patch) | |
tree | 833ef1d51ee50f0385035c3d2c49a2ea6bfc719a /src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java | |
parent | 159b74c8b96622428840bf9918cce3b95021b095 (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.java | 20 |
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); + } } |