aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools
diff options
context:
space:
mode:
authorGravatar Laurent Le Brun <laurentlb@google.com>2015-03-31 17:13:25 +0000
committerGravatar Laurent Le Brun <laurentlb@google.com>2015-03-31 20:12:20 +0000
commitab0ca1afa5fdb79fdd2d6602c3db20c737fd8491 (patch)
treedc10c0bb4d9a924caf095282db548348e5178464 /src/main/java/com/google/devtools
parent81cacd78ec026b1cc5406896bcbcbc116553ed3e (diff)
Skylark: 'in' works on sets.
-- MOS_MIGRATED_REVID=89977206
Diffstat (limited to 'src/main/java/com/google/devtools')
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/BinaryOperatorExpression.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java5
2 files changed, 9 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/BinaryOperatorExpression.java b/src/main/java/com/google/devtools/build/lib/syntax/BinaryOperatorExpression.java
index 39f220e21c..7b8c2dfdc1 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/BinaryOperatorExpression.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/BinaryOperatorExpression.java
@@ -36,9 +36,7 @@ public final class BinaryOperatorExpression extends Expression {
private final Operator operator;
- public BinaryOperatorExpression(Operator operator,
- Expression lhs,
- Expression rhs) {
+ public BinaryOperatorExpression(Operator operator, Expression lhs, Expression rhs) {
this.lhs = lhs;
this.rhs = rhs;
this.operator = operator;
@@ -250,6 +248,8 @@ public final class BinaryOperatorExpression extends Expression {
return ((Collection<?>) rval).contains(lval);
} else if (rval instanceof Map<?, ?>) {
return ((Map<?, ?>) rval).containsKey(lval);
+ } else if (rval instanceof SkylarkNestedSet) {
+ return ((SkylarkNestedSet) rval).expandedSet().contains(lval);
} else if (rval instanceof String) {
if (lval instanceof String) {
return ((String) rval).contains((String) lval);
@@ -259,7 +259,7 @@ public final class BinaryOperatorExpression extends Expression {
}
} else {
throw new EvalException(getLocation(),
- "in operator only works on lists, tuples, dictionaries and strings");
+ "in operator only works on lists, tuples, sets, dicts and strings");
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java
index 233cfdd6c8..39441b004f 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java
@@ -26,6 +26,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
+import java.util.Set;
import javax.annotation.Nullable;
@@ -183,6 +184,10 @@ public final class SkylarkNestedSet implements Iterable<Object> {
return (NestedSet<T>) set;
}
+ public Set<?> expandedSet() {
+ return set.toSet();
+ }
+
// For some reason this cast is unsafe in Java
@SuppressWarnings("unchecked")
@Override