aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build
diff options
context:
space:
mode:
authorGravatar Greg Estren <gregce@google.com>2017-01-31 23:18:11 +0000
committerGravatar Yun Peng <pcloudy@google.com>2017-02-01 08:56:28 +0000
commitbfd3ec5bdcbec16f1f055b3b5196c01fa7dc6fc2 (patch)
tree991a6bc7bf8d6ba2554af5caf08b514aad7d8e25 /src/main/java/com/google/devtools/build
parenta5bc67ed07938c3e6dedeb7eaedd8fc6520fef03 (diff)
Add type checking to select() keys.
Aside from making error messaging clearer, this stops Bazel from crashing on select({None: ...}) (a pretty anti-social error message). -- PiperOrigin-RevId: 146173043 MOS_MIGRATED_REVID=146173043
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/BazelLibrary.java12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/BazelLibrary.java b/src/main/java/com/google/devtools/build/lib/syntax/BazelLibrary.java
index c55e607003..b943e4aaab 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/BazelLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/BazelLibrary.java
@@ -172,11 +172,19 @@ public class BazelLibrary {
defaultValue = "''",
doc = "Optional custom error to report if no condition matches."
)
- }
+ },
+ useLocation = true
)
private static final BuiltinFunction select =
new BuiltinFunction("select") {
- public Object invoke(SkylarkDict<?, ?> dict, String noMatchError) throws EvalException {
+ public Object invoke(SkylarkDict<?, ?> dict, String noMatchError, Location loc)
+ throws EvalException {
+ for (Object key : dict.keySet()) {
+ if (!(key instanceof String)) {
+ throw new EvalException(loc,
+ String.format("Invalid key: %s. select keys must be label references", key));
+ }
+ }
return SelectorList.of(new SelectorValue(dict, noMatchError));
}
};