diff options
author | 2015-03-03 09:44:18 +0000 | |
---|---|---|
committer | 2015-03-05 14:22:33 +0000 | |
commit | 05a0494a7f151d514cfa3050587220a2cffaf55b (patch) | |
tree | 153bf016c38d37bcbb8b73b601c778187a058792 /src/main | |
parent | 2cbac1f35f263480b8f42743c02d2b29e0e87f0a (diff) |
Skylark: 'enumerate' function is fixed (see the extra check in MethodLibraryTest#testEnumerate), it returns a SkylarkList of tuples.
MethodLibrary tests are cleaned up.
--
MOS_MIGRATED_REVID=87592639
Diffstat (limited to 'src/main')
3 files changed, 8 insertions, 6 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/packages/MethodLibrary.java b/src/main/java/com/google/devtools/build/lib/packages/MethodLibrary.java index 43dc269257..65ad87a0dd 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/MethodLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/packages/MethodLibrary.java @@ -641,14 +641,16 @@ public class MethodLibrary { @Override public Object call(Object[] args, FuncallExpression ast) throws EvalException, ConversionException { - List<Object> input = Type.OBJECT_LIST.convert(args[0], "'enumerate' operand"); - List<List<Object>> result = Lists.newArrayList(); + // Note that enumerate is only available in Skylark. + SkylarkList input = cast( + args[0], SkylarkList.class, "enumerate operand", ast.getLocation()); + List<SkylarkList> result = Lists.newArrayList(); int count = 0; for (Object obj : input) { - result.add(Lists.newArrayList(count, obj)); + result.add(SkylarkList.tuple(Lists.newArrayList(count, obj))); count++; } - return result; + return SkylarkList.list(result, ast.getLocation()); } }; diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkFunction.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkFunction.java index ecfd660c48..6a1aadf78c 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkFunction.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkFunction.java @@ -300,7 +300,7 @@ public abstract class SkylarkFunction extends AbstractFunction { return type.cast(elem); } catch (ClassCastException e) { throw new EvalException(loc, String.format("expected %s for '%s' but got %s instead", - type.getSimpleName(), what, EvalUtils.getDataTypeName(elem))); + EvalUtils.getDataTypeNameFromClass(type), what, EvalUtils.getDataTypeName(elem))); } } } diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java index 4e25b771b0..9e9788a1d4 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java @@ -353,7 +353,7 @@ public abstract class SkylarkList implements Iterable<Object> { /** * @param elements the contents of the list * @return a Skylark list containing elements - * @throws an EvalException in case the list is not monomorphic + * @throws EvalException in case the list is not monomorphic */ public static SkylarkList list(Collection<?> elements, Location loc) throws EvalException { if (elements.isEmpty()) { |