Compile list literals to byte code.
--
MOS_MIGRATED_REVID=107231604
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 d284427..29e160c 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,8 +22,11 @@
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.events.Location;
+import com.google.devtools.build.lib.syntax.compiler.ByteCodeUtils;
import com.google.devtools.build.lib.vfs.PathFragment;
+import net.bytebuddy.implementation.bytecode.StackManipulation;
+
import java.util.Collection;
import java.util.Comparator;
import java.util.List;
@@ -111,12 +114,15 @@
return false;
}
+ public static final StackManipulation checkValidDictKey =
+ ByteCodeUtils.invoke(EvalUtils.class, "checkValidDictKey", Object.class);
+
/**
* Checks that an Object is a valid key for a Skylark dict.
* @param o an Object to validate
* @throws EvalException if o is not a valid key
*/
- static void checkValidDictKey(Object o) throws EvalException {
+ public static void checkValidDictKey(Object o) throws EvalException {
// TODO(bazel-team): check that all recursive elements are both Immutable AND Comparable.
if (isImmutable(o)) {
return;
@@ -339,6 +345,9 @@
return obj;
}
+ public static final StackManipulation toBoolean =
+ ByteCodeUtils.invoke(EvalUtils.class, "toBoolean", Object.class);
+
/**
* @return the truth value of an object, according to Python rules.
* http://docs.python.org/2/library/stdtypes.html#truth-value-testing
@@ -367,6 +376,9 @@
}
}
+ public static final StackManipulation toCollection =
+ ByteCodeUtils.invoke(EvalUtils.class, "toCollection", Object.class, Location.class);
+
@SuppressWarnings("unchecked")
public static Collection<?> toCollection(Object o, Location loc) throws EvalException {
if (o instanceof Collection) {
@@ -390,6 +402,9 @@
}
}
+ public static final StackManipulation toIterable =
+ ByteCodeUtils.invoke(EvalUtils.class, "toIterable", Object.class, Location.class);
+
@SuppressWarnings("unchecked")
public static Iterable<?> toIterable(Object o, Location loc) throws EvalException {
if (o instanceof String) {