diff options
author | Laurent Le Brun <laurentlb@google.com> | 2017-02-20 14:04:57 +0000 |
---|---|---|
committer | Irina Iancu <elenairina@google.com> | 2017-02-20 15:34:45 +0000 |
commit | 54b9d2c3d514c7023948930a86db88178309149a (patch) | |
tree | b0ae8c5bf41b8b04795ec791b840927fb6a02cc1 /src/main/java/com/google/devtools/build/lib/syntax | |
parent | e86550a5e82f28360cf49ec42318c52973dac93b (diff) |
Raise error in function calls when star argument is not iterable
This was a bug, f(*4) was silently handled as f().
--
PiperOrigin-RevId: 148017021
MOS_MIGRATED_REVID=148017021
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/syntax')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/syntax/FuncallExpression.java | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/FuncallExpression.java b/src/main/java/com/google/devtools/build/lib/syntax/FuncallExpression.java index f6082d9227..c301061dc3 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/FuncallExpression.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/FuncallExpression.java @@ -675,9 +675,12 @@ public final class FuncallExpression extends Expression { if (arg.isPositional()) { posargs.add(value); } else if (arg.isStar()) { // expand the starArg - if (value instanceof Iterable) { - posargs.addAll((Iterable<Object>) value); + if (!(value instanceof Iterable)) { + throw new EvalException( + getLocation(), + "argument after * must be an iterable, not " + EvalUtils.getDataTypeName(value)); } + posargs.addAll((Iterable<Object>) value); } else if (arg.isStarStar()) { // expand the kwargs addKeywordArgs(kwargs, value, duplicates, getLocation()); } else { |