Build language: Add sorted function.
--
MOS_MIGRATED_REVID=91322217
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 83704f5..7104ead 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
@@ -444,6 +444,22 @@
};
// supported list methods
+ @SkylarkBuiltin(name = "sorted", doc = "Sort a collection.")
+ private static Function sorted = new MixedModeFunction("sorted",
+ ImmutableList.of("this"), 1, false) {
+ @Override
+ public Object call(Object[] args, FuncallExpression ast, Environment env)
+ throws EvalException, ConversionException {
+ List<Object> thiz = Type.OBJECT_LIST.convert(args[0], "'sorted' operand");
+ try {
+ thiz = Ordering.from(EvalUtils.SKYLARK_COMPARATOR).sortedCopy(thiz);
+ } catch (EvalUtils.ComparisonException e) {
+ throw new EvalException(ast.getLocation(), e);
+ }
+ return convert(thiz, env, ast.getLocation());
+ }
+ };
+
@SkylarkBuiltin(name = "append", documented = false,
doc = "Adds an item to the end of the list.")
private static Function append = new MixedModeFunction("append",
@@ -1098,7 +1114,7 @@
public static final List<Function> dictFunctions = ImmutableList.of(items, get, keys, values);
private static final List<Function> pureGlobalFunctions =
- ImmutableList.of(bool, int_, len, minus, select, str);
+ ImmutableList.of(bool, int_, len, minus, select, sorted, str);
private static final List<Function> skylarkGlobalFunctions = ImmutableList
.<Function>builder()