diff options
author | Greg Estren <gregce@google.com> | 2017-01-31 23:18:11 +0000 |
---|---|---|
committer | Yun Peng <pcloudy@google.com> | 2017-02-01 08:56:28 +0000 |
commit | bfd3ec5bdcbec16f1f055b3b5196c01fa7dc6fc2 (patch) | |
tree | 991a6bc7bf8d6ba2554af5caf08b514aad7d8e25 /src/main/java/com/google/devtools/build | |
parent | a5bc67ed07938c3e6dedeb7eaedd8fc6520fef03 (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.java | 12 |
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)); } }; |