aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/BinaryOperatorExpression.java18
1 files changed, 14 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 0e03157a2d..2274076d88 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
@@ -69,8 +69,18 @@ public final class BinaryOperatorExpression extends Expression {
}
/** Implements the "in" operator. */
- private static boolean in(Object lval, Object rval, Location location) throws EvalException {
- if (rval instanceof SkylarkQueryable) {
+ private static boolean in(Object lval, Object rval, Location location, Environment env)
+ throws EvalException {
+ if (env.getSemantics().incompatibleDepsetIsNotIterable && rval instanceof SkylarkNestedSet) {
+ throw new EvalException(
+ location,
+ "argument of type '"
+ + EvalUtils.getDataTypeName(rval)
+ + "' is not iterable. "
+ + "in operator only works on lists, tuples, dicts and strings. "
+ + "Use --incompatible_depset_is_not_iterable=false to temporarily disable "
+ + "this check.");
+ } else if (rval instanceof SkylarkQueryable) {
return ((SkylarkQueryable) rval).containsKey(lval, location);
} else if (rval instanceof String) {
if (lval instanceof String) {
@@ -159,10 +169,10 @@ public final class BinaryOperatorExpression extends Expression {
return compare(lval, rval, location) >= 0;
case IN:
- return in(lval, rval, location);
+ return in(lval, rval, location, env);
case NOT_IN:
- return !in(lval, rval, location);
+ return !in(lval, rval, location, env);
default:
throw new AssertionError("Unsupported binary operator: " + operator);