diff options
author | Laurent Le Brun <laurentlb@google.com> | 2015-03-09 20:55:40 +0000 |
---|---|---|
committer | Damien Martin-Guillerez <dmarting@google.com> | 2015-03-10 15:08:09 +0000 |
commit | c7a6e3602def43512f8553c86298e1be037594d5 (patch) | |
tree | 60d3baa4fc2368790eeb8d6977c8f985b1474641 /src/main/java/com | |
parent | 50fe7e143f46d7b92857ad51cbacfd075298b62f (diff) |
Skylark: Show ordering when pretty-printing sets.
--
MOS_MIGRATED_REVID=88149329
Diffstat (limited to 'src/main/java/com')
3 files changed, 46 insertions, 16 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 65ad87a0dd..4fce8b113b 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 @@ -608,19 +608,7 @@ public class MethodLibrary { @Override public Object call(Object[] args, FuncallExpression ast) throws EvalException, ConversionException { - Order order; - if (args[1] == null || args[1].equals("stable")) { - order = Order.STABLE_ORDER; - } else if (args[1].equals("compile")) { - order = Order.COMPILE_ORDER; - } else if (args[1].equals("link")) { - order = Order.LINK_ORDER; - } else if (args[1].equals("naive_link")) { - order = Order.NAIVE_LINK_ORDER; - } else { - throw new EvalException(ast.getLocation(), "Invalid order: " + args[1]); - } - + Order order = SkylarkNestedSet.parseOrder((String) args[1], ast.getLocation()); if (args[0] == null) { return new SkylarkNestedSet(order, SkylarkList.EMPTY_LIST, ast.getLocation()); } diff --git a/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java b/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java index 15eaaa20c5..59aadd1819 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java @@ -22,6 +22,7 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.devtools.build.lib.collect.nestedset.NestedSet; +import com.google.devtools.build.lib.collect.nestedset.Order; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.vfs.PathFragment; @@ -302,9 +303,14 @@ public abstract class EvalUtils { prettyPrintValue(entry.getValue(), buffer); } else if (o instanceof SkylarkNestedSet) { - Iterable<?> seq = (Iterable<?>) o; - // TODO(bazel-team): preserve the order= flag when not the default "stable". - printList(seq, "set([", ", ", "])", buffer); + SkylarkNestedSet set = (SkylarkNestedSet) o; + buffer.append("set("); + printList(set, "[", ", ", "]", buffer); + Order order = set.getOrder(); + if (order != Order.STABLE_ORDER) { + buffer.append(", order = \"" + SkylarkNestedSet.orderString(order) + "\""); + } + buffer.append(")"); } else if (o instanceof Function) { Function func = (Function) o; diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java index d946454c36..233cfdd6c8 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java @@ -207,4 +207,40 @@ public final class SkylarkNestedSet implements Iterable<Object> { public String toString() { return EvalUtils.prettyPrintValue(this); } + + /** + * Parse the string as a set order. + */ + public static Order parseOrder(String s, Location loc) throws EvalException { + // Keep in sync with orderString + if (s == null || s.equals("stable")) { + return Order.STABLE_ORDER; + } else if (s.equals("compile")) { + return Order.COMPILE_ORDER; + } else if (s.equals("link")) { + return Order.LINK_ORDER; + } else if (s.equals("naive_link")) { + return Order.NAIVE_LINK_ORDER; + } else { + throw new EvalException(loc, "Invalid order: " + s); + } + } + + /** + * Get the order as a string. + */ + public static String orderString(Order order) { + // Keep in sync with parseOrder + switch (order) { + case STABLE_ORDER: return "stable"; + case COMPILE_ORDER: return "compile"; + case LINK_ORDER: return "link"; + case NAIVE_LINK_ORDER: return "naive_link"; + default: throw new IllegalStateException("unknown order: " + order); + } + } + + public Order getOrder() { + return set.getOrder(); + } } |