bazel: rename imports of lib.syntax to java.starlark.net

This change was produced mechanically by running the
script added in CL 322652849.

PiperOrigin-RevId: 331611185
diff --git a/src/main/java/com/google/devtools/build/docgen/ApiExporter.java b/src/main/java/com/google/devtools/build/docgen/ApiExporter.java
index 258f301..0a792b4 100644
--- a/src/main/java/com/google/devtools/build/docgen/ApiExporter.java
+++ b/src/main/java/com/google/devtools/build/docgen/ApiExporter.java
@@ -24,11 +24,6 @@
 import com.google.devtools.build.docgen.starlark.StarlarkConstructorMethodDoc;
 import com.google.devtools.build.docgen.starlark.StarlarkMethodDoc;
 import com.google.devtools.build.docgen.starlark.StarlarkParamDoc;
-import com.google.devtools.build.lib.syntax.BuiltinCallable;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkFunction;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.common.options.OptionsParser;
 import java.io.BufferedOutputStream;
 import java.io.FileOutputStream;
@@ -43,6 +38,11 @@
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkInterfaceUtils;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.BuiltinCallable;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkFunction;
+import net.starlark.java.eval.StarlarkSemantics;
 
 /** The main class for the Starlark documentation generator. */
 public class ApiExporter {
diff --git a/src/main/java/com/google/devtools/build/docgen/BUILD b/src/main/java/com/google/devtools/build/docgen/BUILD
index 819a692..7ec1735d 100644
--- a/src/main/java/com/google/devtools/build/docgen/BUILD
+++ b/src/main/java/com/google/devtools/build/docgen/BUILD
@@ -11,7 +11,6 @@
     srcs = glob(["**/*.java"]),
     resources = [":template_files"],
     deps = [
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/collect/nestedset",
@@ -46,6 +45,8 @@
         "//src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test",
         "//src/main/java/com/google/devtools/common/options",
         "//src/main/java/net/starlark/java/annot",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//src/main/protobuf:builtin_java_proto",
         "//third_party:apache_velocity",
         "//third_party:guava",
diff --git a/src/main/java/com/google/devtools/build/docgen/StarlarkDocumentationCollector.java b/src/main/java/com/google/devtools/build/docgen/StarlarkDocumentationCollector.java
index e81710b..8d71958 100644
--- a/src/main/java/com/google/devtools/build/docgen/StarlarkDocumentationCollector.java
+++ b/src/main/java/com/google/devtools/build/docgen/StarlarkDocumentationCollector.java
@@ -19,9 +19,6 @@
 import com.google.devtools.build.docgen.starlark.StarlarkBuiltinDoc;
 import com.google.devtools.build.docgen.starlark.StarlarkConstructorMethodDoc;
 import com.google.devtools.build.docgen.starlark.StarlarkJavaMethodDoc;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import com.google.devtools.build.lib.util.Classpath;
 import com.google.devtools.build.lib.util.Classpath.ClassPathException;
 import java.lang.reflect.Method;
@@ -33,6 +30,9 @@
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkGlobalLibrary;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkValue;
 
 /** A helper class that collects Starlark module documentation. */
 final class StarlarkDocumentationCollector {
@@ -70,11 +70,11 @@
    * a map from the name of each Starlark module to its documentation.
    */
   static ImmutableMap<String, StarlarkBuiltinDoc> collectModules(Iterable<Class<?>> classes) {
-    // Force class loading of com.google.devtools.build.lib.syntax.Starlark before we do any of our
-    // own processing. Otherwise, we're in trouble since com.google.devtools.build.lib.syntax.Dict
+    // Force class loading of net.starlark.java.eval.Starlark before we do any of our
+    // own processing. Otherwise, we're in trouble since net.starlark.java.eval.Dict
     // happens to be the first class on our classpath that we proccess via #collectModuleMethods,
     // but that entails a logical cycle in
-    // com.google.devtools.build.lib.syntax.CallUtils#getCacheValue.
+    // net.starlark.java.eval.CallUtils#getCacheValue.
     // TODO(b/161479826): Address this in a less hacky manner.
     @SuppressWarnings("unused")
     Object forceClassLoading = Starlark.UNIVERSE;
diff --git a/src/main/java/com/google/devtools/build/docgen/SymbolFamilies.java b/src/main/java/com/google/devtools/build/docgen/SymbolFamilies.java
index ad89034..101c040 100644
--- a/src/main/java/com/google/devtools/build/docgen/SymbolFamilies.java
+++ b/src/main/java/com/google/devtools/build/docgen/SymbolFamilies.java
@@ -31,7 +31,6 @@
 import com.google.devtools.build.lib.starlarkbuildapi.stubs.ProviderStub;
 import com.google.devtools.build.lib.starlarkbuildapi.stubs.StarlarkAspectStub;
 import com.google.devtools.build.lib.starlarkbuildapi.test.TestingBootstrap;
-import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.devtools.build.lib.util.Classpath.ClassPathException;
 import com.google.devtools.build.skydoc.fakebuildapi.FakeActionsInfoProvider;
 import com.google.devtools.build.skydoc.fakebuildapi.FakeBuildApiGlobals;
@@ -96,6 +95,7 @@
 import java.lang.reflect.Method;
 import java.util.List;
 import java.util.Map;
+import net.starlark.java.eval.Starlark;
 
 /**
  * A helper class that collects Starlark Api symbols including top level modules, native rules and
diff --git a/src/main/java/com/google/devtools/build/docgen/starlark/StarlarkConstructorMethodDoc.java b/src/main/java/com/google/devtools/build/docgen/starlark/StarlarkConstructorMethodDoc.java
index 710fa46..8b87abd 100644
--- a/src/main/java/com/google/devtools/build/docgen/starlark/StarlarkConstructorMethodDoc.java
+++ b/src/main/java/com/google/devtools/build/docgen/starlark/StarlarkConstructorMethodDoc.java
@@ -14,11 +14,11 @@
 package com.google.devtools.build.docgen.starlark;
 
 import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.syntax.Starlark;
 import java.lang.reflect.Method;
 import java.util.List;
 import net.starlark.java.annot.StarlarkDeprecated;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Starlark;
 
 /**
  * A class representing a Java method callable from Starlark which constructs a type of Starlark
diff --git a/src/main/java/com/google/devtools/build/docgen/starlark/StarlarkDoc.java b/src/main/java/com/google/devtools/build/docgen/starlark/StarlarkDoc.java
index 78c1693..c7df5d4 100644
--- a/src/main/java/com/google/devtools/build/docgen/starlark/StarlarkDoc.java
+++ b/src/main/java/com/google/devtools/build/docgen/starlark/StarlarkDoc.java
@@ -15,11 +15,6 @@
 
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
-import com.google.devtools.build.lib.syntax.NoneType;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkList;
-import com.google.devtools.build.lib.syntax.Tuple;
 import java.lang.reflect.Method;
 import java.util.Arrays;
 import java.util.Map;
@@ -27,6 +22,11 @@
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkInterfaceUtils;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.NoneType;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkList;
+import net.starlark.java.eval.Tuple;
 
 /** Abstract class for containing documentation for a Starlark syntactic entity. */
 abstract class StarlarkDoc {
diff --git a/src/main/java/com/google/devtools/build/docgen/starlark/StarlarkJavaMethodDoc.java b/src/main/java/com/google/devtools/build/docgen/starlark/StarlarkJavaMethodDoc.java
index 3653b04..8582e70 100644
--- a/src/main/java/com/google/devtools/build/docgen/starlark/StarlarkJavaMethodDoc.java
+++ b/src/main/java/com/google/devtools/build/docgen/starlark/StarlarkJavaMethodDoc.java
@@ -15,7 +15,6 @@
 
 import com.google.common.base.Joiner;
 import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.syntax.Starlark;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.List;
@@ -23,6 +22,7 @@
 import net.starlark.java.annot.StarlarkDeprecated;
 import net.starlark.java.annot.StarlarkInterfaceUtils;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Starlark;
 
 /** A class representing a Java method callable from Starlark with annotation. */
 public final class StarlarkJavaMethodDoc extends StarlarkMethodDoc {
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD
index 5d60ab5..31fac29 100644
--- a/src/main/java/com/google/devtools/build/lib/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/BUILD
@@ -141,11 +141,11 @@
     visibility = ["//visibility:public"],
     exports = [
         "//src/main/java/com/google/devtools/build/lib/events",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
-        "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
         "//src/main/java/com/google/devtools/build/lib/vfs/inmemoryfs",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
     ],
 )
 
@@ -154,8 +154,8 @@
     srcs = [],
     visibility = ["//visibility:public"],
     exports = [
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
-        "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
     ],
 )
 
@@ -379,8 +379,6 @@
         "//src/main/java/com/google/devtools/build/lib/skyframe:skyframe_cluster",
         "//src/main/java/com/google/devtools/build/lib/skyframe:target_pattern_phase_value",
         "//src/main/java/com/google/devtools/build/lib/skyframe:top_down_action_cache",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
-        "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
         "//src/main/java/com/google/devtools/build/lib/unix",
         "//src/main/java/com/google/devtools/build/lib/util",
         "//src/main/java/com/google/devtools/build/lib/util:TestType",
@@ -406,6 +404,8 @@
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
         "//src/main/java/com/google/devtools/common/options",
         "//src/main/java/com/google/devtools/common/options:invocation_policy",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//src/main/protobuf:action_cache_java_proto",
         "//src/main/protobuf:analysis_java_proto",
         "//src/main/protobuf:command_line_java_proto",
diff --git a/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java b/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java
index f03fd1b..3ceccee 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java
@@ -34,10 +34,6 @@
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.starlarkbuildapi.ActionApi;
 import com.google.devtools.build.lib.starlarkbuildapi.CommandLineArgsApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
 import com.google.devtools.build.lib.vfs.BulkDeleter;
 import com.google.devtools.build.lib.vfs.Path;
 import com.google.devtools.build.lib.vfs.Root;
@@ -47,6 +43,10 @@
 import java.util.Map;
 import javax.annotation.Nullable;
 import javax.annotation.concurrent.GuardedBy;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
 
 /**
  * Abstract implementation of Action which implements basic functionality: the inputs, outputs, and
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionException.java b/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionException.java
index 73e9d68..8fb293e 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionException.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionException.java
@@ -22,9 +22,9 @@
 import com.google.devtools.build.lib.collect.nestedset.Order;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
 import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
-import com.google.devtools.build.lib.syntax.Location;
 import com.google.devtools.build.lib.util.DetailedExitCode;
 import com.google.devtools.build.lib.util.ExitCode;
+import net.starlark.java.syntax.Location;
 
 /**
  * This exception gets thrown if {@link Action#execute(ActionExecutionContext)} is unsuccessful.
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionOwner.java b/src/main/java/com/google/devtools/build/lib/actions/ActionOwner.java
index bf4d4bd..1c1a159 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionOwner.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionOwner.java
@@ -24,8 +24,8 @@
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.packages.AspectDescriptor;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
-import com.google.devtools.build.lib.syntax.Location;
 import javax.annotation.Nullable;
+import net.starlark.java.syntax.Location;
 
 /**
  * Contains metadata used for reporting the progress and status of an action.
diff --git a/src/main/java/com/google/devtools/build/lib/actions/Artifact.java b/src/main/java/com/google/devtools/build/lib/actions/Artifact.java
index 1f480f7..70deb02 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/Artifact.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/Artifact.java
@@ -40,9 +40,6 @@
 import com.google.devtools.build.lib.skyframe.serialization.SerializationException;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.devtools.build.lib.util.FileType;
 import com.google.devtools.build.lib.util.FileTypeSet;
 import com.google.devtools.build.lib.vfs.Path;
@@ -59,6 +56,9 @@
 import java.util.List;
 import java.util.Map;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Starlark;
 
 /**
  * An Artifact represents a file used by the build system, whether it's a source file or a derived
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ArtifactRoot.java b/src/main/java/com/google/devtools/build/lib/actions/ArtifactRoot.java
index e8ef677..7eb5893 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ArtifactRoot.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ArtifactRoot.java
@@ -21,12 +21,12 @@
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.starlarkbuildapi.FileRootApi;
-import com.google.devtools.build.lib.syntax.Printer;
 import com.google.devtools.build.lib.vfs.Path;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.lib.vfs.Root;
 import java.io.Serializable;
 import java.util.Objects;
+import net.starlark.java.eval.Printer;
 
 /**
  * A root for an artifact. The roots are the directories containing artifacts, and they are mapped
diff --git a/src/main/java/com/google/devtools/build/lib/actions/BUILD b/src/main/java/com/google/devtools/build/lib/actions/BUILD
index 2887382..6ec3d88 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/actions/BUILD
@@ -64,7 +64,6 @@
         ":fileset_output_symlink",
         ":localhost_capacity",
         ":middleman_type",
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/analysis/platform",
         "//src/main/java/com/google/devtools/build/lib/bugreport",
         "//src/main/java/com/google/devtools/build/lib/buildeventstream",
@@ -106,6 +105,8 @@
         "//src/main/java/com/google/devtools/build/skyframe",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
         "//src/main/java/com/google/devtools/common/options",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//src/main/protobuf:action_cache_java_proto",
         "//src/main/protobuf:extra_actions_base_java_proto",
         "//src/main/protobuf:failure_details_java_proto",
@@ -175,12 +176,12 @@
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
         "//src/main/java/com/google/devtools/build/lib/util",
         "//src/main/java/com/google/devtools/build/lib/util:filetype",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
+        "//src/main/java/net/starlark/java/eval",
         "//third_party:guava",
         "//third_party:jsr305",
         "//third_party/protobuf:protobuf_java",
diff --git a/src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParams.java b/src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParams.java
index 7cb17de..b837eb6 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParams.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParams.java
@@ -24,7 +24,6 @@
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.Instantiator;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
-import com.google.devtools.build.lib.syntax.Location;
 import com.google.devtools.build.lib.util.Fingerprint;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.lib.vfs.Root;
@@ -32,6 +31,7 @@
 import java.io.IOException;
 import java.util.Objects;
 import javax.annotation.Nullable;
+import net.starlark.java.syntax.Location;
 
 /**
  * Parameters of a filesystem traversal requested by a Fileset rule.
diff --git a/src/main/java/com/google/devtools/build/lib/actions/MissingInputFileException.java b/src/main/java/com/google/devtools/build/lib/actions/MissingInputFileException.java
index 78ed120..a06c22c 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/MissingInputFileException.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/MissingInputFileException.java
@@ -15,8 +15,8 @@
 package com.google.devtools.build.lib.actions;
 
 import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
-import com.google.devtools.build.lib.syntax.Location;
 import com.google.devtools.build.lib.util.DetailedExitCode;
+import net.starlark.java.syntax.Location;
 
 /**
  * This exception is thrown during a build when an input file is missing, but the file is not the
diff --git a/src/main/java/com/google/devtools/build/lib/actions/RunfilesSupplier.java b/src/main/java/com/google/devtools/build/lib/actions/RunfilesSupplier.java
index 2e854fa..2835236 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/RunfilesSupplier.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/RunfilesSupplier.java
@@ -18,10 +18,10 @@
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import java.io.IOException;
 import java.util.Map;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Convenience wrapper around runfiles allowing lazy expansion. */
 // TODO(bazel-team): Ideally we could refer to Runfiles objects directly here, but current package
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ActionsProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/ActionsProvider.java
index 068f160..242d354 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ActionsProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ActionsProvider.java
@@ -20,10 +20,10 @@
 import com.google.devtools.build.lib.packages.StarlarkInfo;
 import com.google.devtools.build.lib.packages.StructImpl;
 import com.google.devtools.build.lib.starlarkbuildapi.ActionsInfoProviderApi;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Starlark;
 import java.util.HashMap;
 import java.util.Map;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.syntax.Location;
 
 /**
  * This provides a view over the actions that were created during the analysis of a rule
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AnalysisEnvironment.java b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisEnvironment.java
index 69cf115..28051d4 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/AnalysisEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisEnvironment.java
@@ -26,10 +26,10 @@
 import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoKey;
 import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
 import com.google.devtools.build.lib.events.ExtendedEventHandler;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.lib.vfs.Root;
 import com.google.devtools.build.skyframe.SkyFunction;
+import net.starlark.java.eval.StarlarkSemantics;
 
 /**
  * The set of services that are provided to {@link ConfiguredTarget} objects during initialization.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AspectValue.java b/src/main/java/com/google/devtools/build/lib/analysis/AspectValue.java
index 9da5f0a..58a84d0 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/AspectValue.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/AspectValue.java
@@ -20,8 +20,8 @@
 import com.google.devtools.build.lib.packages.Aspect;
 import com.google.devtools.build.lib.packages.Package;
 import com.google.devtools.build.lib.skyframe.AspectValueKey.AspectKey;
-import com.google.devtools.build.lib.syntax.Location;
 import javax.annotation.Nullable;
+import net.starlark.java.syntax.Location;
 
 /** An aspect in the context of the Skyframe graph. */
 public final class AspectValue extends BasicActionLookupValue implements ConfiguredObjectValue {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BUILD b/src/main/java/com/google/devtools/build/lib/analysis/BUILD
index bae61ac..92564fd 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BUILD
@@ -422,8 +422,6 @@
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
-        "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
         "//src/main/java/com/google/devtools/build/lib/util",
         "//src/main/java/com/google/devtools/build/lib/util:detailed_exit_code",
         "//src/main/java/com/google/devtools/build/lib/util:filetype",
@@ -437,6 +435,8 @@
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
         "//src/main/java/com/google/devtools/common/options",
         "//src/main/java/net/starlark/java/annot",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//src/main/protobuf:extra_actions_base_java_proto",
         "//src/main/protobuf:failure_details_java_proto",
         "//src/main/protobuf:test_status_java_proto",
@@ -455,8 +455,8 @@
         "//src/main/java/com/google/devtools/build/lib/actions:artifacts",
         "//src/main/java/com/google/devtools/build/lib/packages",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
-        "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:guava",
     ],
 )
@@ -694,7 +694,7 @@
         "//src/main/java/com/google/devtools/build/lib/actions:artifacts",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/skyframe:build_configuration_value",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
+        "//src/main/java/net/starlark/java/eval",
         "//third_party:guava",
         "//third_party:jsr305",
     ],
@@ -779,7 +779,7 @@
     deps = [
         ":aspect_collection",
         "//src/main/java/com/google/devtools/build/lib/packages",
-        "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
+        "//src/main/java/net/starlark/java/syntax",
     ],
 )
 
@@ -790,7 +790,7 @@
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/packages",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
-        "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:auto_value",
     ],
 )
@@ -982,7 +982,7 @@
         "//src/main/java/com/google/devtools/build/lib/skyframe:toolchain_exception",
         "//src/main/java/com/google/devtools/build/lib/skyframe:unloaded_toolchain_context",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
+        "//src/main/java/net/starlark/java/eval",
         "//third_party:auto_value",
         "//third_party:guava",
         "//third_party:jsr305",
@@ -1044,8 +1044,8 @@
         "//src/main/java/com/google/devtools/build/lib/packages",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
-        "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:guava",
     ],
 )
@@ -1091,7 +1091,7 @@
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/packages",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
+        "//src/main/java/net/starlark/java/eval",
     ],
 )
 
@@ -1336,8 +1336,8 @@
         "//src/main/java/com/google/devtools/build/lib/collect/nestedset",
         "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
         "//src/main/java/com/google/devtools/build/lib/util",
+        "//src/main/java/net/starlark/java/eval",
         "//src/main/protobuf:failure_details_java_proto",
         "//third_party:guava",
         "//third_party:jsr305",
@@ -1435,9 +1435,9 @@
         "//src/main/java/com/google/devtools/build/lib/collect/nestedset",
         "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
         "//src/main/java/com/google/devtools/build/lib/util",
         "//src/main/java/com/google/devtools/build/lib/util:string",
+        "//src/main/java/net/starlark/java/eval",
         "//src/main/protobuf:failure_details_java_proto",
         "//third_party:guava",
         "//third_party:jsr305",
@@ -1643,7 +1643,7 @@
         ":config/build_options",
         "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/events",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
+        "//src/main/java/net/starlark/java/eval",
         "//third_party:jsr305",
     ],
 )
@@ -1740,8 +1740,8 @@
         "//src/main/java/com/google/devtools/build/lib/events",
         "//src/main/java/com/google/devtools/build/lib/packages",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
-        "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:guava",
     ],
 )
@@ -2015,8 +2015,8 @@
         "//src/main/java/com/google/devtools/build/lib/collect/nestedset",
         "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
-        "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:guava",
         "//third_party:jsr305",
     ],
@@ -2029,7 +2029,7 @@
         ":starlark/starlark_late_bound_default",
         "//src/main/java/com/google/devtools/build/lib/packages",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
+        "//src/main/java/net/starlark/java/eval",
     ],
 )
 
@@ -2044,10 +2044,10 @@
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/events",
         "//src/main/java/com/google/devtools/build/lib/packages",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
-        "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
         "//src/main/java/com/google/devtools/build/lib/util",
         "//src/main/java/com/google/devtools/common/options",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:guava",
     ],
 )
@@ -2068,7 +2068,7 @@
         "//src/main/java/com/google/devtools/build/lib/actions:artifacts",
         "//src/main/java/com/google/devtools/build/lib/collect/nestedset",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
+        "//src/main/java/net/starlark/java/eval",
     ],
 )
 
@@ -2085,10 +2085,10 @@
         "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
-        "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
         "//src/main/java/com/google/devtools/build/lib/util",
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:guava",
         "//third_party:jsr305",
     ],
@@ -2100,7 +2100,7 @@
     deps = [
         ":analysis_cluster",
         "//src/main/java/com/google/devtools/build/lib/packages",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
+        "//src/main/java/net/starlark/java/eval",
     ],
 )
 
@@ -2113,8 +2113,8 @@
         "//src/main/java/com/google/devtools/build/lib/packages",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
         "//src/main/java/net/starlark/java/annot",
+        "//src/main/java/net/starlark/java/eval",
         "//third_party:guava",
         "//third_party:jsr305",
     ],
@@ -2127,7 +2127,7 @@
         ":config/execution_transition_factory",
         "//src/main/java/com/google/devtools/build/lib/packages",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
+        "//src/main/java/net/starlark/java/eval",
     ],
 )
 
@@ -2139,7 +2139,7 @@
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/collect/nestedset",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
+        "//src/main/java/net/starlark/java/eval",
     ],
 )
 
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/CachingAnalysisEnvironment.java b/src/main/java/com/google/devtools/build/lib/analysis/CachingAnalysisEnvironment.java
index 9927546..1ba4623 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/CachingAnalysisEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/CachingAnalysisEnvironment.java
@@ -35,7 +35,6 @@
 import com.google.devtools.build.lib.skyframe.BuildInfoCollectionValue;
 import com.google.devtools.build.lib.skyframe.PrecomputedValue;
 import com.google.devtools.build.lib.skyframe.WorkspaceStatusValue;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.util.Pair;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.lib.vfs.Root;
@@ -52,6 +51,7 @@
 import java.util.Set;
 import java.util.TreeMap;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.StarlarkSemantics;
 
 /**
  * The implementation of AnalysisEnvironment used for analysis. It tracks metadata for each
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/CommandHelper.java b/src/main/java/com/google/devtools/build/lib/analysis/CommandHelper.java
index 49e5df9..cc1088f 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/CommandHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/CommandHelper.java
@@ -26,8 +26,6 @@
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkList;
 import com.google.devtools.build.lib.util.OS;
 import com.google.devtools.build.lib.util.Pair;
 import com.google.devtools.build.lib.vfs.PathFragment;
@@ -36,6 +34,8 @@
 import java.util.List;
 import java.util.Map;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkList;
 
 /**
  * Provides shared functionality for parameterized command-line launching.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfigurationMakeVariableContext.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfigurationMakeVariableContext.java
index 465d8e0..3b19eb8 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfigurationMakeVariableContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfigurationMakeVariableContext.java
@@ -23,11 +23,11 @@
 import com.google.devtools.build.lib.analysis.stringtemplate.ExpansionException;
 import com.google.devtools.build.lib.analysis.stringtemplate.TemplateContext;
 import com.google.devtools.build.lib.packages.Package;
-import com.google.devtools.build.lib.syntax.Dict;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
+import net.starlark.java.eval.Dict;
 
 /**
  * Implements make variable expansion for make variables that depend on the configuration and the
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java
index 39dae34..8850f0c 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java
@@ -32,13 +32,13 @@
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.packages.Info;
 import com.google.devtools.build.lib.packages.Provider;
-import com.google.devtools.build.lib.syntax.EvalException;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.LinkedHashSet;
 import java.util.Map;
 import java.util.TreeMap;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
 
 /**
  * Extra information about a configured target computed on request of a dependent.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
index d24204f..923fe95 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
@@ -53,7 +53,6 @@
 import com.google.devtools.build.lib.packages.RuleClass.Builder.ThirdPartyLicenseExistencePolicy;
 import com.google.devtools.build.lib.packages.SymbolGenerator;
 import com.google.devtools.build.lib.starlarkbuildapi.core.Bootstrap;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import com.google.devtools.common.options.Option;
 import com.google.devtools.common.options.OptionDefinition;
 import com.google.devtools.common.options.OptionsProvider;
@@ -71,6 +70,7 @@
 import javax.annotation.Nullable;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkInterfaceUtils;
+import net.starlark.java.eval.StarlarkThread;
 
 /**
  * Knows about every rule Blaze supports and the associated configuration options.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTarget.java
index 80c913c..4d66778 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTarget.java
@@ -18,8 +18,8 @@
 import com.google.devtools.build.lib.actions.Artifact.SourceArtifact;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.skyframe.BuildConfigurationValue;
-import com.google.devtools.build.lib.syntax.ClassObject;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.ClassObject;
 
 /**
  * A {@link ConfiguredTarget} is conceptually a {@link TransitiveInfoCollection} coupled with the
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/DefaultInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/DefaultInfo.java
index 76b3e25..a09a4e6 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/DefaultInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/DefaultInfo.java
@@ -19,11 +19,11 @@
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.starlarkbuildapi.DefaultInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
 
 /** DefaultInfo is provided by all targets implicitly and contains all standard fields. */
 @Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java b/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java
index edab353..7547dc4 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java
@@ -56,8 +56,6 @@
 import com.google.devtools.build.lib.packages.RuleClass;
 import com.google.devtools.build.lib.packages.Target;
 import com.google.devtools.build.lib.skyframe.ToolchainContextKey;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.devtools.build.lib.util.OrderedSetMultimap;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -65,6 +63,8 @@
 import java.util.List;
 import java.util.Map;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
 
 /**
  * Resolver for dependencies between configured targets.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/EventHandlingErrorReporter.java b/src/main/java/com/google/devtools/build/lib/analysis/EventHandlingErrorReporter.java
index f138abc..ebe3cc2 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/EventHandlingErrorReporter.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/EventHandlingErrorReporter.java
@@ -17,7 +17,7 @@
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.events.Event;
 import com.google.devtools.build.lib.packages.Attribute;
-import com.google.devtools.build.lib.syntax.Location;
+import net.starlark.java.syntax.Location;
 
 /**
  * Base class for implementations of {@link
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ExecGroupCollection.java b/src/main/java/com/google/devtools/build/lib/analysis/ExecGroupCollection.java
index f257cdd..6059857 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ExecGroupCollection.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ExecGroupCollection.java
@@ -19,14 +19,14 @@
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.ImmutableMap;
 import com.google.devtools.build.lib.starlarkbuildapi.platform.ExecGroupCollectionApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Identifier;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkIndexable;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import java.util.List;
 import java.util.stream.Collectors;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkIndexable;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.syntax.Identifier;
 
 /**
  * A {@link StarlarkIndexable} collection of resolved toolchain contexts that can be exposed to
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/InconsistentAspectOrderException.java b/src/main/java/com/google/devtools/build/lib/analysis/InconsistentAspectOrderException.java
index 87b6503..f211a08 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/InconsistentAspectOrderException.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/InconsistentAspectOrderException.java
@@ -15,7 +15,7 @@
 
 import com.google.devtools.build.lib.analysis.AspectCollection.AspectCycleOnPathException;
 import com.google.devtools.build.lib.packages.Target;
-import com.google.devtools.build.lib.syntax.Location;
+import net.starlark.java.syntax.Location;
 
 /**
  * Signals an inconsistency on an aspect path: an aspect occurs twice on the path and the second
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/LabelAndLocation.java b/src/main/java/com/google/devtools/build/lib/analysis/LabelAndLocation.java
index d01d377..d2602d2 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/LabelAndLocation.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/LabelAndLocation.java
@@ -18,7 +18,7 @@
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.packages.Target;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.syntax.Location;
+import net.starlark.java.syntax.Location;
 
 /**
  * Container for some attributes of a {@link Target} that is significantly less heavyweight than an
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/OutputGroupInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/OutputGroupInfo.java
index cb80201..07d593f 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/OutputGroupInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/OutputGroupInfo.java
@@ -30,19 +30,19 @@
 import com.google.devtools.build.lib.packages.StructImpl;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.starlarkbuildapi.OutputGroupInfoApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkIndexable;
-import com.google.devtools.build.lib.syntax.StarlarkIterable;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkIndexable;
+import net.starlark.java.eval.StarlarkIterable;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.syntax.Location;
 
 /**
  * {@code ConfiguredTarget}s implementing this interface can provide artifacts that <b>can</b> be
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ResolvedToolchainContext.java b/src/main/java/com/google/devtools/build/lib/analysis/ResolvedToolchainContext.java
index ee6ce9f..439e07b 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ResolvedToolchainContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ResolvedToolchainContext.java
@@ -31,11 +31,11 @@
 import com.google.devtools.build.lib.skyframe.ToolchainException;
 import com.google.devtools.build.lib.skyframe.UnloadedToolchainContext;
 import com.google.devtools.build.lib.starlarkbuildapi.platform.ToolchainContextApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkSemantics;
 
 /**
  * Represents the data needed for a specific target's use of toolchains and platforms, including
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java
index 266a702..07487fd 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java
@@ -53,8 +53,6 @@
 import com.google.devtools.build.lib.packages.TargetUtils;
 import com.google.devtools.build.lib.packages.Type;
 import com.google.devtools.build.lib.packages.Type.LabelClass;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
 import java.util.Collection;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
@@ -62,6 +60,8 @@
 import java.util.Map;
 import java.util.TreeMap;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.syntax.Location;
 
 /**
  * Builder class for analyzed rule instances.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
index d08e51c..f24f435 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
@@ -91,9 +91,6 @@
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import com.google.devtools.build.lib.skyframe.SaneAnalysisException;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.util.FileTypeSet;
 import com.google.devtools.build.lib.util.OS;
 import com.google.devtools.build.lib.util.OrderedSetMultimap;
@@ -110,6 +107,9 @@
 import java.util.Set;
 import java.util.stream.Collectors;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.syntax.Location;
 
 /**
  * The totality of data available during the analysis of a rule.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java b/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java
index 481f6c1..d9c79ee 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java
@@ -36,8 +36,6 @@
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.starlarkbuildapi.RunfilesApi;
 import com.google.devtools.build.lib.starlarkbuildapi.SymlinkEntryApi;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Printer;
 import com.google.devtools.build.lib.util.Fingerprint;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import java.util.Collections;
@@ -47,6 +45,8 @@
 import java.util.Objects;
 import java.util.Set;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.syntax.Location;
 
 /**
  * An object that encapsulates runfiles. Conceptually, the runfiles are a map of paths to files,
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/StarlarkProviderValidationUtil.java b/src/main/java/com/google/devtools/build/lib/analysis/StarlarkProviderValidationUtil.java
index e18cd98..90f3c52 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/StarlarkProviderValidationUtil.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/StarlarkProviderValidationUtil.java
@@ -17,8 +17,8 @@
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 import com.google.devtools.build.lib.actions.Artifact;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
 
 /** Utility class to validate results of executing Starlark rules and aspects. */
 public class StarlarkProviderValidationUtil {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TemplateVariableInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/TemplateVariableInfo.java
index 27b3c16..d542743 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/TemplateVariableInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/TemplateVariableInfo.java
@@ -20,11 +20,11 @@
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.starlarkbuildapi.TemplateVariableInfoApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import java.util.Map;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
 
 /** Provides access to make variables from the current fragments. */
 @Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java
index 0ed5b6b..93d6be8 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java
@@ -17,7 +17,7 @@
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.packages.RequiredProviders;
 import com.google.devtools.build.lib.starlarkbuildapi.core.TransitiveInfoCollectionApi;
-import com.google.devtools.build.lib.syntax.StarlarkIndexable;
+import net.starlark.java.eval.StarlarkIndexable;
 
 /**
  * Multiple {@link TransitiveInfoProvider}s bundled together.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/ParameterFileWriteAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/ParameterFileWriteAction.java
index 883c081..8e41b91 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/ParameterFileWriteAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/ParameterFileWriteAction.java
@@ -40,13 +40,13 @@
 import com.google.devtools.build.lib.server.FailureDetails.Spawn.Code;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.devtools.build.lib.util.Fingerprint;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
 
 /** Action to write a parameter file for a {@link CommandLine}. */
 @Immutable // if commandLine is immutable
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
index b20f8e4..7972e8b 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
@@ -72,9 +72,6 @@
 import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
 import com.google.devtools.build.lib.server.FailureDetails.Spawn.Code;
 import com.google.devtools.build.lib.starlarkbuildapi.CommandLineArgsApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkList;
 import com.google.devtools.build.lib.util.DetailedExitCode;
 import com.google.devtools.build.lib.util.Fingerprint;
 import com.google.devtools.build.lib.util.LazyString;
@@ -92,6 +89,9 @@
 import java.util.function.Consumer;
 import javax.annotation.CheckReturnValue;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkList;
 
 /** An Action representing an arbitrary subprocess to be forked and exec'd. */
 public class SpawnAction extends AbstractAction implements CommandAction {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/TemplateExpansionAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/TemplateExpansionAction.java
index 9340b77..4f63cd3 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/TemplateExpansionAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/TemplateExpansionAction.java
@@ -38,11 +38,11 @@
 import com.google.devtools.build.lib.collect.nestedset.Order;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.syntax.Dict;
 import com.google.devtools.build.lib.util.Fingerprint;
 import java.io.IOException;
 import java.util.List;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
 
 /** Action to expand a template and write the expanded content to a file. */
 @AutoCodec
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/Fragment.java b/src/main/java/com/google/devtools/build/lib/analysis/config/Fragment.java
index 61597cc..1ce43ce 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/Fragment.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/Fragment.java
@@ -15,9 +15,9 @@
 
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.events.EventHandler;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import java.util.List;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.StarlarkValue;
 
 /**
  * An interface for language-specific configurations.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentCollection.java b/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentCollection.java
index 1988d78..051a7e6 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentCollection.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentCollection.java
@@ -19,8 +19,8 @@
 import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransition;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.starlarkbuildapi.FragmentCollectionApi;
-import com.google.devtools.build.lib.syntax.EvalException;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
 
 /** Represents a collection of configuration fragments in Starlark. */
 // Documentation can be found at ctx.fragments
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/StarlarkDefinedConfigTransition.java b/src/main/java/com/google/devtools/build/lib/analysis/config/StarlarkDefinedConfigTransition.java
index 3e02e59..1cf7e72 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/StarlarkDefinedConfigTransition.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/StarlarkDefinedConfigTransition.java
@@ -23,19 +23,19 @@
 import com.google.devtools.build.lib.packages.BazelStarlarkContext;
 import com.google.devtools.build.lib.packages.StructImpl;
 import com.google.devtools.build.lib.starlarkbuildapi.config.ConfigurationTransitionApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
 
 /**
  * Implementation of {@link ConfigurationTransitionApi}.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/AbstractConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/AbstractConfiguredTarget.java
index 219ee6d..b9f32fc 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/AbstractConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/AbstractConfiguredTarget.java
@@ -35,13 +35,13 @@
 import com.google.devtools.build.lib.packages.Provider;
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.skyframe.BuildConfigurationValue;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.function.Consumer;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkSemantics;
 
 /**
  * An abstract implementation of ConfiguredTarget in which all properties are assigned trivial
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/InputFileConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/InputFileConfiguredTarget.java
index 65b0f11..d980d27 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/InputFileConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/InputFileConfiguredTarget.java
@@ -29,8 +29,8 @@
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.Instantiator;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
-import com.google.devtools.build.lib.syntax.Printer;
 import java.util.Objects;
+import net.starlark.java.eval.Printer;
 
 /**
  * A ConfiguredTarget for an InputFile.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/MergedConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/MergedConfiguredTarget.java
index 3dd1003..720f720 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/MergedConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/MergedConfiguredTarget.java
@@ -32,10 +32,10 @@
 import com.google.devtools.build.lib.packages.Provider;
 import com.google.devtools.build.lib.packages.Provider.Key;
 import com.google.devtools.build.lib.starlarkbuildapi.ActionApi;
-import com.google.devtools.build.lib.syntax.Printer;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.function.Consumer;
+import net.starlark.java.eval.Printer;
 
 /**
  * A single dependency with its configured target and aspects merged together.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/OutputFileConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/OutputFileConfiguredTarget.java
index 8ba3006..2e57bc5 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/OutputFileConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/OutputFileConfiguredTarget.java
@@ -34,7 +34,7 @@
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.Instantiator;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
 
 /** A ConfiguredTarget for an OutputFile. */
 @AutoCodec
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/RuleConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/RuleConfiguredTarget.java
index ba717ea..89d0aaa 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/RuleConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/RuleConfiguredTarget.java
@@ -46,10 +46,10 @@
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.Instantiator;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.starlarkbuildapi.ActionApi;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Starlark;
 import java.util.function.Consumer;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Starlark;
 
 /**
  * A {@link com.google.devtools.build.lib.analysis.ConfiguredTarget} that is produced by a rule.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/BUILD b/src/main/java/com/google/devtools/build/lib/analysis/platform/BUILD
index 6578c33..be0d6a5 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/platform/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/BUILD
@@ -21,7 +21,6 @@
         exclude = UTIL_SRCS + ["PlatformUtils.java"],
     ),
     deps = [
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/analysis:config/config_matching_provider",
         "//src/main/java/com/google/devtools/build/lib/analysis:transitive_info_provider",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
@@ -31,6 +30,8 @@
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform",
         "//src/main/java/com/google/devtools/build/lib/util",
         "//src/main/java/com/google/devtools/build/lib/util:string",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:auto_value",
         "//third_party:guava",
         "//third_party:jsr305",
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintCollection.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintCollection.java
index 7cc1443..bcfde54 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintCollection.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintCollection.java
@@ -32,18 +32,18 @@
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintCollectionApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkList;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.util.Fingerprint;
 import java.util.Collection;
 import java.util.Map;
 import java.util.Objects;
 import java.util.function.Function;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkList;
+import net.starlark.java.eval.StarlarkSemantics;
 
 /** A collection of constraint values. */
 @Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfo.java
index fffe7e9..01489a3 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfo.java
@@ -22,10 +22,10 @@
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintSettingInfoApi;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Printer;
 import com.google.devtools.build.lib.util.Fingerprint;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.syntax.Location;
 
 /** Provider for a platform constraint setting that is available to be fulfilled. */
 @Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfo.java
index 27c8de3..328fea7 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfo.java
@@ -25,10 +25,10 @@
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Printer;
 import com.google.devtools.build.lib.util.Fingerprint;
 import java.util.Objects;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.syntax.Location;
 
 /** Provider for a platform constraint value that fulfills a {@link ConstraintSettingInfo}. */
 @Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformInfo.java
index 81172eb..9fbd1fd 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformInfo.java
@@ -24,19 +24,19 @@
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.starlarkbuildapi.platform.PlatformInfoApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import com.google.devtools.build.lib.util.Fingerprint;
 import com.google.devtools.build.lib.util.StringUtilities;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Objects;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
 
 /** Provider for a platform, which is a group of constraints and values. */
 @Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainInfo.java
index 8d37cd8..c4593eb 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainInfo.java
@@ -24,12 +24,12 @@
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.starlarkbuildapi.platform.ToolchainInfoApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import java.util.Map;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
 
 /**
  * A provider that supplies information about a specific language toolchain, including what platform
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainTypeInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainTypeInfo.java
index 5b1cea2..7422803 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainTypeInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainTypeInfo.java
@@ -21,9 +21,9 @@
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.starlarkbuildapi.platform.ToolchainTypeInfoApi;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Printer;
 import java.util.Objects;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.syntax.Location;
 
 /** A provider that supplies information about a specific toolchain type. */
 @Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/Args.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/Args.java
index 982f9a0..3db934f 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/Args.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/Args.java
@@ -28,22 +28,22 @@
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.starlarkbuildapi.CommandLineArgsApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
+import net.starlark.java.syntax.Location;
 
 /**
  * Implementation of the {@code Args} Starlark type, which, in a builder-like pattern, encapsulates
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/BazelBuildApiGlobals.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/BazelBuildApiGlobals.java
index 50bcee9..5e635c8 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/BazelBuildApiGlobals.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/BazelBuildApiGlobals.java
@@ -16,9 +16,9 @@
 
 import com.google.devtools.build.lib.packages.BazelStarlarkContext;
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkBuildApiGlobals;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkThread;
 
 /**
  * Bazel implementation of {@link StarlarkBuildApiGlobals}: a collection of global Starlark build
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/FunctionTransitionUtil.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/FunctionTransitionUtil.java
index 4611892..36a1fad 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/FunctionTransitionUtil.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/FunctionTransitionUtil.java
@@ -28,12 +28,6 @@
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.events.EventHandler;
 import com.google.devtools.build.lib.packages.StructImpl;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.NoneType;
-import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.devtools.build.lib.util.Fingerprint;
 import com.google.devtools.common.options.OptionDefinition;
 import com.google.devtools.common.options.OptionsParser;
@@ -47,6 +41,12 @@
 import java.util.Set;
 import java.util.TreeMap;
 import java.util.TreeSet;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.NoneType;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.syntax.Location;
 
 /**
  * Utility class for common work done across {@link StarlarkAttributeTransitionProvider} and {@link
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkActionFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkActionFactory.java
index 5c86270..257f373 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkActionFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkActionFactory.java
@@ -51,13 +51,6 @@
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkActionFactoryApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.protobuf.GeneratedMessage;
 import java.nio.charset.StandardCharsets;
@@ -66,6 +59,13 @@
 import java.util.Map;
 import java.util.Optional;
 import java.util.UUID;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
 
 /** Provides a Starlark interface for all action creation needs. */
 public class StarlarkActionFactory implements StarlarkActionFactoryApi {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkAttrModule.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkAttrModule.java
index eea769d..e1d0909 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkAttrModule.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkAttrModule.java
@@ -43,19 +43,19 @@
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkAttrModuleApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkFunction;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import com.google.devtools.build.lib.util.FileType;
 import com.google.devtools.build.lib.util.FileTypeSet;
 import java.util.List;
 import java.util.Map;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkFunction;
+import net.starlark.java.eval.StarlarkThread;
 
 /**
  * A helper class to provide Attr module in Starlark.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkAttributeTransitionProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkAttributeTransitionProvider.java
index f8d7eae..0f28df6 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkAttributeTransitionProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkAttributeTransitionProvider.java
@@ -34,11 +34,11 @@
 import com.google.devtools.build.lib.packages.StructImpl;
 import com.google.devtools.build.lib.packages.StructProvider;
 import com.google.devtools.build.lib.starlarkbuildapi.SplitTransitionProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Starlark;
 import java.util.LinkedHashMap;
 import java.util.Map;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Starlark;
 
 /**
  * This class implements {@link TransitionFactory} to provide a starlark-defined transition that
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkAttributesCollection.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkAttributesCollection.java
index d0ba263..ca59e2e 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkAttributesCollection.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkAttributesCollection.java
@@ -26,14 +26,14 @@
 import com.google.devtools.build.lib.packages.Type;
 import com.google.devtools.build.lib.packages.Type.LabelClass;
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkAttributesCollectionApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkList;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkList;
 
 /** Information about attributes of a rule an aspect is applied to. */
 class StarlarkAttributesCollection implements StarlarkAttributesCollectionApi {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkCommandLine.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkCommandLine.java
index ec5b4f1..a4562b8 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkCommandLine.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkCommandLine.java
@@ -18,7 +18,7 @@
 import com.google.devtools.build.lib.collect.nestedset.Depset;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkCommandLineApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
 
 /** A Starlark module class to create memory efficient command lines. */
 public class StarlarkCommandLine implements StarlarkCommandLineApi {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkConfig.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkConfig.java
index c57210f..d637899 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkConfig.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkConfig.java
@@ -22,8 +22,8 @@
 import com.google.devtools.build.lib.analysis.config.ExecutionTransitionFactory;
 import com.google.devtools.build.lib.packages.BuildSetting;
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkConfigApi;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Starlark;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Starlark;
 
 /** Starlark namespace for creating build settings. */
 // TODO(juliexxia): Consider adding more types of build settings, specifically other label types.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkCustomCommandLine.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkCustomCommandLine.java
index dc54573..93c48bb 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkCustomCommandLine.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkCustomCommandLine.java
@@ -38,16 +38,6 @@
 import com.google.devtools.build.lib.starlarkbuildapi.DirectoryExpander;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.FileRootApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkFunction;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import com.google.devtools.build.lib.util.Fingerprint;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import java.io.IOException;
@@ -59,6 +49,16 @@
 import java.util.UUID;
 import java.util.function.Consumer;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkFunction;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
 
 /** Supports ctx.actions.args() from Starlark. */
 @AutoCodec
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkErrorReporter.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkErrorReporter.java
index 96b5fca..e8da1ff 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkErrorReporter.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkErrorReporter.java
@@ -15,8 +15,8 @@
 
 import com.google.devtools.build.lib.analysis.RuleErrorConsumer;
 import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
 
 /**
  * {@link RuleErrorConsumer} for Native implementations of Starlark APIs.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkLateBoundDefault.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkLateBoundDefault.java
index 78cabf1..db0d290 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkLateBoundDefault.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkLateBoundDefault.java
@@ -27,7 +27,6 @@
 import com.google.devtools.build.lib.packages.Rule;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.starlarkbuildapi.LateBoundDefaultApi;
-import com.google.devtools.build.lib.syntax.Printer;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.Map;
@@ -35,6 +34,7 @@
 import javax.annotation.concurrent.Immutable;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkInterfaceUtils;
+import net.starlark.java.eval.Printer;
 
 /**
  * An implementation of {@link LateBoundDefault} which obtains a late-bound attribute value (of type
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleClassFunctions.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleClassFunctions.java
index 9f982e9..d13363e 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleClassFunctions.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleClassFunctions.java
@@ -81,25 +81,25 @@
 import com.google.devtools.build.lib.packages.Type.ConversionException;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkRuleFunctionsApi;
-import com.google.devtools.build.lib.syntax.Debug;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Identifier;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkFunction;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.Tuple;
 import com.google.devtools.build.lib.util.FileTypeSet;
 import com.google.devtools.build.lib.util.Pair;
 import java.util.Collection;
 import java.util.Map;
 import java.util.concurrent.ExecutionException;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Debug;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkFunction;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.Tuple;
+import net.starlark.java.syntax.Identifier;
+import net.starlark.java.syntax.Location;
 
 /** A helper class to provide an easier API for Starlark rule definitions. */
 public class StarlarkRuleClassFunctions implements StarlarkRuleFunctionsApi<Artifact> {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleConfiguredTargetUtil.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleConfiguredTargetUtil.java
index dc35bfa..e90a9db 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleConfiguredTargetUtil.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleConfiguredTargetUtil.java
@@ -51,22 +51,22 @@
 import com.google.devtools.build.lib.packages.TargetUtils;
 import com.google.devtools.build.lib.packages.Type;
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
+import net.starlark.java.syntax.Location;
 
 /**
  * A helper class to build Rule Configured Targets via runtime loaded rule implementations defined
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleContext.java
index b2f7764..e82aa25 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleContext.java
@@ -77,17 +77,6 @@
 import com.google.devtools.build.lib.shell.ShellUtils;
 import com.google.devtools.build.lib.shell.ShellUtils.TokenizationException;
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkRuleContextApi;
-import com.google.devtools.build.lib.syntax.ClassObject;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkList;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
-import com.google.devtools.build.lib.syntax.Tuple;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -98,6 +87,17 @@
 import java.util.Map;
 import java.util.Set;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.ClassObject;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkList;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
+import net.starlark.java.eval.Tuple;
 
 /**
  * A Starlark API for the ruleContext.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleTransitionProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleTransitionProvider.java
index d63f656..0cccb89 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleTransitionProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleTransitionProvider.java
@@ -31,11 +31,11 @@
 import com.google.devtools.build.lib.packages.Rule;
 import com.google.devtools.build.lib.packages.StructImpl;
 import com.google.devtools.build.lib.packages.StructProvider;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Objects;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
 
 /**
  * This class implements {@link TransitionFactory} to provide a starlark-defined transition that
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/AnalysisFailure.java b/src/main/java/com/google/devtools/build/lib/analysis/test/AnalysisFailure.java
index 50a126d..9855949 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/AnalysisFailure.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/AnalysisFailure.java
@@ -17,7 +17,7 @@
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.collect.nestedset.Depset;
 import com.google.devtools.build.lib.starlarkbuildapi.test.AnalysisFailureApi;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
 
 /**
  * Encapsulates information about an analysis-phase error which would have occurred during a build.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/CoverageCommon.java b/src/main/java/com/google/devtools/build/lib/analysis/test/CoverageCommon.java
index 9964a40..57df1c7 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/CoverageCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/CoverageCommon.java
@@ -25,16 +25,16 @@
 import com.google.devtools.build.lib.packages.TargetUtils;
 import com.google.devtools.build.lib.starlarkbuildapi.test.CoverageCommonApi;
 import com.google.devtools.build.lib.starlarkbuildapi.test.InstrumentedFilesInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.devtools.build.lib.util.FileType;
 import com.google.devtools.build.lib.util.FileTypeSet;
 import com.google.devtools.build.lib.util.Pair;
 import java.util.Arrays;
 import java.util.List;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
 
 /** Helper functions for Starlark to access coverage-related infrastructure. */
 public class CoverageCommon implements CoverageCommonApi<ConstraintValueInfo, StarlarkRuleContext> {
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/commands/BUILD b/src/main/java/com/google/devtools/build/lib/bazel/commands/BUILD
index c479d9d..e7d0c41 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/commands/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/bazel/commands/BUILD
@@ -22,7 +22,6 @@
         "//src/main/java/com/google/devtools/build/lib:loading-phase-threads-option",
         "//src/main/java/com/google/devtools/build/lib:runtime",
         "//src/main/java/com/google/devtools/build/lib:runtime/blaze_command_result",
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/analysis:no_build_event",
         "//src/main/java/com/google/devtools/build/lib/analysis:no_build_request_finished_event",
         "//src/main/java/com/google/devtools/build/lib/bazel/repository",
@@ -48,6 +47,8 @@
         "//src/main/java/com/google/devtools/build/skyframe",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
         "//src/main/java/com/google/devtools/common/options",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//src/main/protobuf:failure_details_java_proto",
         "//third_party:guava",
     ],
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/commands/SyncCommand.java b/src/main/java/com/google/devtools/build/lib/bazel/commands/SyncCommand.java
index a15f019..5bf13fc 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/commands/SyncCommand.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/commands/SyncCommand.java
@@ -45,7 +45,6 @@
 import com.google.devtools.build.lib.skyframe.PackageLookupValue;
 import com.google.devtools.build.lib.skyframe.PrecomputedValue;
 import com.google.devtools.build.lib.skyframe.SkyframeExecutor;
-import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.devtools.build.lib.util.AbruptExitException;
 import com.google.devtools.build.lib.util.DetailedExitCode;
 import com.google.devtools.build.lib.util.ExitCode;
@@ -60,6 +59,7 @@
 import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
+import net.starlark.java.eval.Starlark;
 
 /** Syncs all repositories specified in the workspace file */
 @Command(
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/debug/BUILD b/src/main/java/com/google/devtools/build/lib/bazel/debug/BUILD
index 8f4b66c..022e0d2 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/debug/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/bazel/debug/BUILD
@@ -43,7 +43,7 @@
     deps = [
         ":workspace_log_java_proto",
         "//src/main/java/com/google/devtools/build/lib/events",
-        "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
+        "//src/main/java/net/starlark/java/syntax",
     ],
 )
 
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/debug/WorkspaceRuleEvent.java b/src/main/java/com/google/devtools/build/lib/bazel/debug/WorkspaceRuleEvent.java
index 4ebe08d..1973da3 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/debug/WorkspaceRuleEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/debug/WorkspaceRuleEvent.java
@@ -21,10 +21,10 @@
 import com.google.devtools.build.lib.bazel.debug.proto.WorkspaceLogProtos.TemplateEvent;
 import com.google.devtools.build.lib.bazel.debug.proto.WorkspaceLogProtos.WhichEvent;
 import com.google.devtools.build.lib.events.ExtendedEventHandler.ProgressLike;
-import com.google.devtools.build.lib.syntax.Location;
 import java.net.URL;
 import java.util.List;
 import java.util.Map;
+import net.starlark.java.syntax.Location;
 
 /** An event to record events happening during workspace rule resolution */
 public final class WorkspaceRuleEvent implements ProgressLike {
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/BUILD b/src/main/java/com/google/devtools/build/lib/bazel/repository/BUILD
index c05b568..46ee385 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/BUILD
@@ -23,7 +23,6 @@
     deps = [
         "//src/java_tools/singlejar/java/com/google/devtools/build/zip",
         "//src/main/java/com/google/devtools/build/lib:runtime",
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster",
         "//src/main/java/com/google/devtools/build/lib/analysis:blaze_directories",
         "//src/main/java/com/google/devtools/build/lib/analysis:rule_definition_environment",
@@ -44,6 +43,8 @@
         "//src/main/java/com/google/devtools/build/skyframe",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
         "//src/main/java/com/google/devtools/common/options",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:apache_commons_compress",
         "//third_party:auto_value",
         "//third_party:flogger",
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/DecompressorValue.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/DecompressorValue.java
index f0f71e3..81061c8 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/DecompressorValue.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/DecompressorValue.java
@@ -16,13 +16,13 @@
 
 import com.google.common.base.Optional;
 import com.google.devtools.build.lib.rules.repository.RepositoryFunction.RepositoryFunctionException;
-import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.devtools.build.lib.vfs.Path;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.skyframe.SkyFunctionException.Transience;
 import com.google.devtools.build.skyframe.SkyValue;
 import java.io.IOException;
 import java.util.Set;
+import net.starlark.java.eval.Starlark;
 
 /**
  * The contents of decompressed archive.
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/RepositoryResolvedEvent.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/RepositoryResolvedEvent.java
index 5cbfa80..f86b4b0 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/RepositoryResolvedEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/RepositoryResolvedEvent.java
@@ -28,14 +28,14 @@
 import com.google.devtools.build.lib.packages.Attribute;
 import com.google.devtools.build.lib.packages.Rule;
 import com.google.devtools.build.lib.packages.StructImpl;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import com.google.devtools.build.lib.util.Pair;
 import com.google.devtools.build.lib.vfs.Path;
 import java.io.IOException;
 import java.util.List;
 import java.util.Map;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkThread;
 
 /**
  * Event indicating that a repository rule was executed, together with the return value of the rule.
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/RepositoryResolvedModule.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/RepositoryResolvedModule.java
index 74f4150..ac797b4 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/RepositoryResolvedModule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/RepositoryResolvedModule.java
@@ -24,7 +24,6 @@
 import com.google.devtools.build.lib.runtime.BlazeModule;
 import com.google.devtools.build.lib.runtime.Command;
 import com.google.devtools.build.lib.runtime.CommandEnvironment;
-import com.google.devtools.build.lib.syntax.Printer;
 import com.google.devtools.common.options.OptionsBase;
 import java.io.File;
 import java.io.IOException;
@@ -32,6 +31,7 @@
 import java.nio.charset.StandardCharsets;
 import java.util.LinkedHashMap;
 import java.util.Map;
+import net.starlark.java.eval.Printer;
 
 /** Module providing the collection of the resolved values for the repository rules executed. */
 public final class RepositoryResolvedModule extends BlazeModule {
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/BUILD b/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/BUILD
index 2833627..2af591b 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/BUILD
@@ -37,7 +37,6 @@
         "//src/main/java/com/google/devtools/build/lib/skyframe:ignored_package_prefixes_value",
         "//src/main/java/com/google/devtools/build/lib/skyframe:precomputed_value",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
         "//src/main/java/com/google/devtools/build/lib/util",
         "//src/main/java/com/google/devtools/build/lib/util:string",
         "//src/main/java/com/google/devtools/build/lib/util/io",
@@ -46,6 +45,7 @@
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
         "//src/main/java/com/google/devtools/build/skyframe",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
+        "//src/main/java/net/starlark/java/eval",
         "//third_party:guava",
         "//third_party:java-diff-utils",
         "//third_party:jsr305",
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkExecutionResult.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkExecutionResult.java
index eee5ed1..a8275f5 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkExecutionResult.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkExecutionResult.java
@@ -25,7 +25,6 @@
 import com.google.devtools.build.lib.shell.CommandResult;
 import com.google.devtools.build.lib.shell.TerminationStatus;
 import com.google.devtools.build.lib.starlarkbuildapi.repository.StarlarkExecutionResultApi;
-import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.util.io.DelegatingOutErr;
 import com.google.devtools.build.lib.util.io.OutErr;
 import com.google.devtools.build.lib.util.io.RecordingOutErr;
@@ -35,6 +34,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import net.starlark.java.eval.EvalException;
 
 /**
  * A structure callable from Starlark that stores the result of repository_ctx.execute() method. It
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkPath.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkPath.java
index e97702a..92aaca6 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkPath.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkPath.java
@@ -17,9 +17,9 @@
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.starlarkbuildapi.repository.RepositoryPathApi;
-import com.google.devtools.build.lib.syntax.Printer;
 import com.google.devtools.build.lib.vfs.Path;
 import java.io.IOException;
+import net.starlark.java.eval.Printer;
 
 /**
  * A Path object to be used into Starlark remote repository.
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryContext.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryContext.java
index 7593e87..e1dc5fb 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryContext.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryContext.java
@@ -54,13 +54,6 @@
 import com.google.devtools.build.lib.runtime.RepositoryRemoteExecutor;
 import com.google.devtools.build.lib.runtime.RepositoryRemoteExecutor.ExecutionResult;
 import com.google.devtools.build.lib.starlarkbuildapi.repository.StarlarkRepositoryContextApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import com.google.devtools.build.lib.util.OsUtils;
 import com.google.devtools.build.lib.util.StringUtilities;
 import com.google.devtools.build.lib.util.io.OutErr;
@@ -89,6 +82,13 @@
 import java.util.List;
 import java.util.Map;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
 
 /** Starlark API for the repository_rule's context. */
 public class StarlarkRepositoryContext
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryFunction.java
index c52eaca..5652d97 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryFunction.java
@@ -39,12 +39,6 @@
 import com.google.devtools.build.lib.runtime.RepositoryRemoteExecutor;
 import com.google.devtools.build.lib.skyframe.IgnoredPackagePrefixesValue;
 import com.google.devtools.build.lib.skyframe.PrecomputedValue;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import com.google.devtools.build.lib.vfs.Path;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.skyframe.SkyFunction.Environment;
@@ -54,6 +48,12 @@
 import java.util.Map;
 import java.util.Set;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
 
 /** A repository function to delegate work done by Starlark remote repositories. */
 public class StarlarkRepositoryFunction extends RepositoryFunction {
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryModule.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryModule.java
index be3ac04..a45f85f 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryModule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryModule.java
@@ -39,16 +39,16 @@
 import com.google.devtools.build.lib.packages.WorkspaceFactoryHelper;
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.starlarkbuildapi.repository.RepositoryModuleApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.Tuple;
 import java.util.Map;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.Tuple;
 
 /**
  * The Starlark module containing the definition of {@code repository_rule} function to define a
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryFunction.java
index afd0ea6..d1c3061 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryFunction.java
@@ -38,7 +38,6 @@
 import com.google.devtools.build.lib.rules.repository.RepositoryDirectoryValue;
 import com.google.devtools.build.lib.rules.repository.WorkspaceAttributeMapper;
 import com.google.devtools.build.lib.skyframe.DirectoryListingValue;
-import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.util.ResourceFileLoader;
 import com.google.devtools.build.lib.vfs.FileSystemUtils;
 import com.google.devtools.build.lib.vfs.Path;
@@ -58,6 +57,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import net.starlark.java.eval.EvalException;
 
 /** Implementation of the {@code android_ndk_repository} rule. */
 public class AndroidNdkRepositoryFunction extends AndroidRepositoryFunction {
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java
index 7f15f08..192c185 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java
@@ -32,7 +32,6 @@
 import com.google.devtools.build.lib.rules.repository.WorkspaceAttributeMapper;
 import com.google.devtools.build.lib.skyframe.DirectoryListingValue;
 import com.google.devtools.build.lib.skyframe.Dirents;
-import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.util.ResourceFileLoader;
 import com.google.devtools.build.lib.vfs.Dirent;
 import com.google.devtools.build.lib.vfs.FileSystem;
@@ -49,6 +48,7 @@
 import java.io.InputStream;
 import java.util.Map;
 import java.util.Properties;
+import net.starlark.java.eval.EvalException;
 
 /** Implementation of the {@code android_sdk_repository} rule. */
 public class AndroidSdkRepositoryFunction extends AndroidRepositoryFunction {
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BUILD b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BUILD
index 3793f15..85db1da 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BUILD
@@ -22,7 +22,6 @@
         ],
     ),
     deps = [
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/actions:artifacts",
         "//src/main/java/com/google/devtools/build/lib/actions:file_metadata",
         "//src/main/java/com/google/devtools/build/lib/analysis:actions/custom_command_line",
@@ -57,6 +56,8 @@
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
         "//src/main/java/com/google/devtools/build/skyframe",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//src/main/protobuf:crosstool_config_java_proto",
         "//third_party:android_common_25_0_0_lite",
         "//third_party:auto_value",
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BUILD b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BUILD
index 43e7727..5b2cc59 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BUILD
@@ -21,7 +21,6 @@
     resources = glob(["*.WORKSPACE"]),
     deps = [
         ":bazel_cpp_semantics",
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/actions:artifacts",
         "//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster",
         "//src/main/java/com/google/devtools/build/lib/analysis:config/host_transition",
@@ -32,6 +31,8 @@
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp",
         "//src/main/java/com/google/devtools/build/lib/util:filetype",
         "//src/main/java/com/google/devtools/build/lib/util:os",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:guava",
     ],
 )
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcModule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcModule.java
index 893af10..7068ddf 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcModule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcModule.java
@@ -32,11 +32,11 @@
 import com.google.devtools.build.lib.rules.cpp.FeatureConfigurationForStarlark;
 import com.google.devtools.build.lib.rules.cpp.LibraryToLink;
 import com.google.devtools.build.lib.starlarkbuildapi.cpp.BazelCcModuleApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkList;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.Tuple;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkList;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.Tuple;
 
 /**
  * A module that contains Starlark utilities for C++ support.
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/BUILD b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/BUILD
index cd37e3d..d5567ca 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/BUILD
@@ -36,13 +36,13 @@
         "//src/main/java/com/google/devtools/build/lib/rules/cpp",
         "//src/main/java/com/google/devtools/build/lib/skyframe:skyframe_cluster",
         "//src/main/java/com/google/devtools/build/lib/skyframe:track_source_directories_flag",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
         "//src/main/java/com/google/devtools/build/lib/util",
         "//src/main/java/com/google/devtools/build/lib/util:filetype",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
         "//src/main/java/com/google/devtools/build/skyframe",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
+        "//src/main/java/net/starlark/java/eval",
         "//src/main/protobuf:failure_details_java_proto",
         "//third_party:guava",
         "//third_party:jsr305",
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraphRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraphRule.java
index 95907e5..177282e 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraphRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraphRule.java
@@ -26,9 +26,9 @@
 import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
 import com.google.devtools.build.lib.packages.RuleClass;
 import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import com.google.devtools.build.lib.util.FileTypeSet;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
 
 /**
  * The rule that parses the Ninja graph and symlinks inputs into output_root.
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/SymlinkForest.java b/src/main/java/com/google/devtools/build/lib/buildtool/SymlinkForest.java
index c869c1f..7bda966 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/SymlinkForest.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/SymlinkForest.java
@@ -29,9 +29,6 @@
 import com.google.devtools.build.lib.server.FailureDetails;
 import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
 import com.google.devtools.build.lib.server.FailureDetails.SymlinkForest.Code;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import com.google.devtools.build.lib.util.AbruptExitException;
 import com.google.devtools.build.lib.util.DetailedExitCode;
 import com.google.devtools.build.lib.util.ExitCode;
@@ -43,6 +40,9 @@
 import java.util.Collections;
 import java.util.Map;
 import java.util.Set;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
 
 /** Creates a symlink forest based on a package path map. */
 public class SymlinkForest {
diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/BUILD b/src/main/java/com/google/devtools/build/lib/cmdline/BUILD
index 8cf9fd0..f1c790c 100644
--- a/src/main/java/com/google/devtools/build/lib/cmdline/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/cmdline/BUILD
@@ -27,7 +27,6 @@
     deps = [
         ":LabelValidator",
         ":cmdline-primitives",
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/actions:commandline_item",
         "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/packages/semantics",
@@ -38,6 +37,8 @@
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
         "//src/main/java/net/starlark/java/annot",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//src/main/protobuf:failure_details_java_proto",
         "//third_party:error_prone_annotations",
         "//third_party:guava",
diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/Label.java b/src/main/java/com/google/devtools/build/lib/cmdline/Label.java
index 12b33d8..8febf16 100644
--- a/src/main/java/com/google/devtools/build/lib/cmdline/Label.java
+++ b/src/main/java/com/google/devtools/build/lib/cmdline/Label.java
@@ -25,10 +25,6 @@
 import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import com.google.devtools.build.lib.util.StringUtilities;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.skyframe.SkyFunctionName;
@@ -42,6 +38,10 @@
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
 
 /**
  * A class to identify a BUILD target. All targets belong to exactly one package. The name of a
diff --git a/src/main/java/com/google/devtools/build/lib/collect/nestedset/BUILD b/src/main/java/com/google/devtools/build/lib/collect/nestedset/BUILD
index 3132422..1bef09e 100644
--- a/src/main/java/com/google/devtools/build/lib/collect/nestedset/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/collect/nestedset/BUILD
@@ -30,9 +30,9 @@
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:constants",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
         "//src/main/java/com/google/devtools/build/lib/util:exit_code",
         "//src/main/java/net/starlark/java/annot",
+        "//src/main/java/net/starlark/java/eval",
         "//third_party:auto_value",
         "//third_party:error_prone_annotations",
         "//third_party:flogger",
diff --git a/src/main/java/com/google/devtools/build/lib/collect/nestedset/Depset.java b/src/main/java/com/google/devtools/build/lib/collect/nestedset/Depset.java
index 4db871c..0254fb7 100644
--- a/src/main/java/com/google/devtools/build/lib/collect/nestedset/Depset.java
+++ b/src/main/java/com/google/devtools/build/lib/collect/nestedset/Depset.java
@@ -18,16 +18,6 @@
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.syntax.Debug;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkList;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicInteger;
 import javax.annotation.Nullable;
@@ -35,6 +25,16 @@
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkInterfaceUtils;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Debug;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkList;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
 
 /**
  * A Depset is a Starlark value that wraps a {@link NestedSet}.
diff --git a/src/main/java/com/google/devtools/build/lib/events/BUILD b/src/main/java/com/google/devtools/build/lib/events/BUILD
index 6cf889f..aad49b2 100644
--- a/src/main/java/com/google/devtools/build/lib/events/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/events/BUILD
@@ -12,10 +12,10 @@
     name = "events",
     srcs = glob(["*.java"]),
     deps = [
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
-        "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
         "//src/main/java/com/google/devtools/build/lib/util/io",
         "//src/main/java/com/google/devtools/build/lib/util/io:out-err",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:guava",
         "//third_party:jsr305",
     ],
diff --git a/src/main/java/com/google/devtools/build/lib/events/Event.java b/src/main/java/com/google/devtools/build/lib/events/Event.java
index 9d764ed..f699405 100644
--- a/src/main/java/com/google/devtools/build/lib/events/Event.java
+++ b/src/main/java/com/google/devtools/build/lib/events/Event.java
@@ -19,9 +19,6 @@
 import static java.util.Comparator.comparing;
 
 import com.google.common.collect.ImmutableClassToInstanceMap;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.SyntaxError;
 import com.google.devtools.build.lib.util.io.FileOutErr;
 import java.io.IOException;
 import java.io.Serializable;
@@ -32,6 +29,9 @@
 import java.util.stream.Stream;
 import javax.annotation.Nullable;
 import javax.annotation.concurrent.Immutable;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
+import net.starlark.java.syntax.SyntaxError;
 
 /**
  * A situation encountered by the build system that's worth reporting.
diff --git a/src/main/java/com/google/devtools/build/lib/events/ExceptionListener.java b/src/main/java/com/google/devtools/build/lib/events/ExceptionListener.java
index 62432a1..fb29f20 100644
--- a/src/main/java/com/google/devtools/build/lib/events/ExceptionListener.java
+++ b/src/main/java/com/google/devtools/build/lib/events/ExceptionListener.java
@@ -13,7 +13,7 @@
 // limitations under the License.
 package com.google.devtools.build.lib.events;
 
-import com.google.devtools.build.lib.syntax.Location;
+import net.starlark.java.syntax.Location;
 
 /**
  * The ExceptionListener is the primary means of reporting exceptions. It is a subset of the
diff --git a/src/main/java/com/google/devtools/build/lib/events/Reporter.java b/src/main/java/com/google/devtools/build/lib/events/Reporter.java
index ec20b38..dcfe8be 100644
--- a/src/main/java/com/google/devtools/build/lib/events/Reporter.java
+++ b/src/main/java/com/google/devtools/build/lib/events/Reporter.java
@@ -16,11 +16,11 @@
 import static com.google.common.base.Preconditions.checkNotNull;
 
 import com.google.common.eventbus.EventBus;
-import com.google.devtools.build.lib.syntax.Location;
 import com.google.devtools.build.lib.util.io.OutErr;
 import java.io.PrintStream;
 import java.util.HashSet;
 import java.util.concurrent.ConcurrentLinkedQueue;
+import net.starlark.java.syntax.Location;
 
 /**
  * The reporter is the primary means of reporting events such as errors, warnings, progress
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
index 9c405bf..1458585 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
@@ -40,10 +40,6 @@
 import com.google.devtools.build.lib.packages.Type.LabelClass;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
-import com.google.devtools.build.lib.syntax.ClassObject;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import com.google.devtools.build.lib.util.FileType;
 import com.google.devtools.build.lib.util.FileTypeSet;
 import com.google.devtools.build.lib.util.StringUtil;
@@ -60,6 +56,10 @@
 import java.util.concurrent.atomic.AtomicReference;
 import javax.annotation.Nullable;
 import javax.annotation.concurrent.Immutable;
+import net.starlark.java.eval.ClassObject;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkValue;
 
 /**
  * Metadata of a rule attribute. Contains the attribute name and type, and an default value to be
diff --git a/src/main/java/com/google/devtools/build/lib/packages/AttributeValueSource.java b/src/main/java/com/google/devtools/build/lib/packages/AttributeValueSource.java
index 7effc45..7e013b7 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/AttributeValueSource.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/AttributeValueSource.java
@@ -13,8 +13,8 @@
 // limitations under the License.
 package com.google.devtools.build.lib.packages;
 
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
 
 /**
  * An enum that represents different types of rule attributes, based on where their values come
diff --git a/src/main/java/com/google/devtools/build/lib/packages/BUILD b/src/main/java/com/google/devtools/build/lib/packages/BUILD
index 74d8a82..3aa84a2 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/packages/BUILD
@@ -41,8 +41,6 @@
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
-        "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
         "//src/main/java/com/google/devtools/build/lib/util",
         "//src/main/java/com/google/devtools/build/lib/util:detailed_exit_code",
         "//src/main/java/com/google/devtools/build/lib/util:exit_code",
@@ -53,7 +51,9 @@
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
         "//src/main/java/com/google/devtools/common/options",
         "//src/main/java/net/starlark/java/annot",
+        "//src/main/java/net/starlark/java/eval",
         "//src/main/java/net/starlark/java/spelling",
+        "//src/main/java/net/starlark/java/syntax",
         "//src/main/protobuf:build_java_proto",
         "//src/main/protobuf:failure_details_java_proto",
         "//third_party:auto_value",
diff --git a/src/main/java/com/google/devtools/build/lib/packages/BazelModuleContext.java b/src/main/java/com/google/devtools/build/lib/packages/BazelModuleContext.java
index 5f1e36f..f3f81d2 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/BazelModuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/BazelModuleContext.java
@@ -17,15 +17,15 @@
 import com.google.auto.value.AutoValue;
 import com.google.common.collect.ImmutableMap;
 import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.syntax.Module;
+import net.starlark.java.eval.Module;
 
 /**
  * BazelModuleContext records Bazel-specific information associated with a .bzl {@link
- * com.google.devtools.build.lib.syntax.Module}.
+ * net.starlark.java.eval.Module}.
  */
 @AutoValue
 public abstract class BazelModuleContext {
-  /** Label associated with the Starlark {@link com.google.devtools.build.lib.syntax.Module}. */
+  /** Label associated with the Starlark {@link net.starlark.java.eval.Module}. */
   public abstract Label label();
 
   /** Returns the name of the module's .bzl file, as provided to the parser. */
@@ -38,19 +38,19 @@
   public abstract ImmutableMap<String, Module> loads();
 
   /**
-   * Transitive digest of the .bzl file of the {@link com.google.devtools.build.lib.syntax.Module}
-   * itself and all files it transitively loads.
+   * Transitive digest of the .bzl file of the {@link net.starlark.java.eval.Module} itself and all
+   * files it transitively loads.
    */
   @SuppressWarnings({"AutoValueImmutableFields", "mutable"})
   @AutoValue.CopyAnnotations
   public abstract byte[] bzlTransitiveDigest();
 
   /**
-   * Returns a label for a {@link com.google.devtools.build.lib.syntax.Module}.
+   * Returns a label for a {@link net.starlark.java.eval.Module}.
    *
    * <p>This is a user-facing value and we rely on this string to be a valid label for the {@link
-   * com.google.devtools.build.lib.syntax.Module} (and that only). Please see the documentation of
-   * {@link com.google.devtools.build.lib.syntax.Module#setClientData(Object)} for more details.
+   * net.starlark.java.eval.Module} (and that only). Please see the documentation of {@link
+   * net.starlark.java.eval.Module#setClientData(Object)} for more details.
    */
   @Override
   public final String toString() {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/BazelStarlarkContext.java b/src/main/java/com/google/devtools/build/lib/packages/BazelStarlarkContext.java
index 24a7b3b..813837f 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/BazelStarlarkContext.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/BazelStarlarkContext.java
@@ -19,10 +19,10 @@
 import com.google.devtools.build.lib.analysis.RuleDefinitionContext;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.cmdline.RepositoryName;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkThread;
 
 /** Contextual information associated with each Starlark thread created by Bazel. */
 // TODO(adonovan): rename BazelThreadContext, for symmetry with BazelModuleContext.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/BuildSetting.java b/src/main/java/com/google/devtools/build/lib/packages/BuildSetting.java
index d8cddf0..ac5f493 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/BuildSetting.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/BuildSetting.java
@@ -15,7 +15,7 @@
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkConfigApi.BuildSettingApi;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
 
 /**
  * Metadata of a build setting rule's properties. This describes the build setting's type (for
diff --git a/src/main/java/com/google/devtools/build/lib/packages/BuildType.java b/src/main/java/com/google/devtools/build/lib/packages/BuildType.java
index 8b495f4..bdf25b7 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/BuildType.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/BuildType.java
@@ -29,10 +29,6 @@
 import com.google.devtools.build.lib.packages.Type.LabelClass;
 import com.google.devtools.build.lib.packages.Type.ListType;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.LinkedHashMap;
@@ -40,6 +36,10 @@
 import java.util.Map;
 import java.util.Set;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkValue;
 
 /**
  * Collection of data types that are specific to building things, i.e. not inherent to Starlark.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/BuiltinProvider.java b/src/main/java/com/google/devtools/build/lib/packages/BuiltinProvider.java
index 496701b..0ff81ee 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/BuiltinProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/BuiltinProvider.java
@@ -15,11 +15,11 @@
 
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.packages.NativeProvider.NativeKey;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Starlark;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.syntax.Location;
 
 /**
  * Base class for declared providers {@see Provider} defined in native code.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/CallStack.java b/src/main/java/com/google/devtools/build/lib/packages/CallStack.java
index 65a1880..a08b017 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/CallStack.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/CallStack.java
@@ -15,14 +15,14 @@
 package com.google.devtools.build.lib.packages;
 
 import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
 
 /**
  * A CallStack is an opaque immutable stack of Starlark call frames, outermost call first. Its
diff --git a/src/main/java/com/google/devtools/build/lib/packages/ConfiguredAttributeMapper.java b/src/main/java/com/google/devtools/build/lib/packages/ConfiguredAttributeMapper.java
index a4de20e..f56753e 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/ConfiguredAttributeMapper.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/ConfiguredAttributeMapper.java
@@ -23,7 +23,6 @@
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.packages.BuildType.Selector;
 import com.google.devtools.build.lib.packages.BuildType.SelectorList;
-import com.google.devtools.build.lib.syntax.EvalException;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
@@ -32,6 +31,7 @@
 import java.util.Map;
 import java.util.Set;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
 
 /**
  * {@link AttributeMap} implementation that binds a rule's attribute as follows:
diff --git a/src/main/java/com/google/devtools/build/lib/packages/ConstantRuleVisibility.java b/src/main/java/com/google/devtools/build/lib/packages/ConstantRuleVisibility.java
index 935d48d..5c041c3 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/ConstantRuleVisibility.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/ConstantRuleVisibility.java
@@ -20,11 +20,11 @@
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
 import java.io.Serializable;
 import java.util.Collections;
 import java.util.List;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
 
 /**
  * A rule visibility that simply says yes or no. It corresponds to public,
diff --git a/src/main/java/com/google/devtools/build/lib/packages/DefaultPackageArguments.java b/src/main/java/com/google/devtools/build/lib/packages/DefaultPackageArguments.java
index ffca6d7..4ec2aef 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/DefaultPackageArguments.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/DefaultPackageArguments.java
@@ -17,10 +17,10 @@
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.packages.License.DistributionType;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
 import java.util.List;
 import java.util.Set;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.syntax.Location;
 
 /** Encapsulates the core, default set of {@link PackageArgument}s. */
 final class DefaultPackageArguments {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/EnvironmentGroup.java b/src/main/java/com/google/devtools/build/lib/packages/EnvironmentGroup.java
index 587d626..1f1c850 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/EnvironmentGroup.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/EnvironmentGroup.java
@@ -26,13 +26,13 @@
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.events.Event;
 import com.google.devtools.build.lib.server.FailureDetails.PackageLoading.Code;
-import com.google.devtools.build.lib.syntax.Location;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import net.starlark.java.syntax.Location;
 
 /**
  * Model for the "environment_group' rule: the piece of Bazel's rule constraint system that binds
diff --git a/src/main/java/com/google/devtools/build/lib/packages/FilesetEntry.java b/src/main/java/com/google/devtools/build/lib/packages/FilesetEntry.java
index 87e7228..cc625fa 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/FilesetEntry.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/FilesetEntry.java
@@ -23,8 +23,6 @@
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
 import com.google.devtools.build.lib.starlarkbuildapi.FilesetEntryApi;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import java.util.Collection;
 import java.util.Collections;
@@ -33,6 +31,8 @@
 import java.util.Locale;
 import java.util.Set;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.StarlarkValue;
 
 /**
  * FilesetEntry is a value object used to represent a "FilesetEntry" inside a "Fileset" BUILD rule.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/ImplicitOutputsFunction.java b/src/main/java/com/google/devtools/build/lib/packages/ImplicitOutputsFunction.java
index ace5f64..5fa594a 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/ImplicitOutputsFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/ImplicitOutputsFunction.java
@@ -29,10 +29,6 @@
 import com.google.devtools.build.lib.events.EventHandler;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
-import com.google.devtools.build.lib.syntax.ClassObject;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.devtools.build.lib.util.StringUtil;
 import com.google.devtools.build.lib.vfs.FileSystemUtils;
 import com.google.devtools.build.lib.vfs.PathFragment;
@@ -44,6 +40,10 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import net.starlark.java.eval.ClassObject;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
 
 /**
  * A function interface allowing rules to specify their set of implicit outputs in a more dynamic
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Info.java b/src/main/java/com/google/devtools/build/lib/packages/Info.java
index 99c273d..2d013b2 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Info.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Info.java
@@ -13,9 +13,9 @@
 // limitations under the License.
 package com.google.devtools.build.lib.packages;
 
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.StarlarkValue;
+import net.starlark.java.syntax.Location;
 
 /**
  * An Info is a unit of information produced by analysis of one configured target and consumed by
diff --git a/src/main/java/com/google/devtools/build/lib/packages/InputFile.java b/src/main/java/com/google/devtools/build/lib/packages/InputFile.java
index 64f1577..40de222 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/InputFile.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/InputFile.java
@@ -18,9 +18,9 @@
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
-import com.google.devtools.build.lib.syntax.Location;
 import com.google.devtools.build.lib.vfs.Path;
 import com.google.devtools.build.lib.vfs.PathFragment;
+import net.starlark.java.syntax.Location;
 
 /**
  * A file that is an input to the build system.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/InternalModule.java b/src/main/java/com/google/devtools/build/lib/packages/InternalModule.java
index 817f5bb..10bed35 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/InternalModule.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/InternalModule.java
@@ -14,10 +14,10 @@
 
 package com.google.devtools.build.lib.packages;
 
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.StarlarkValue;
 
 // TODO(#11437): Factor an API out into skylarkbuildapi, for stardoc's benefit. Otherwise, stardoc
 // can't run on @builtins bzls.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/License.java b/src/main/java/com/google/devtools/build/lib/packages/License.java
index bf70b93..8bbfa39 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/License.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/License.java
@@ -24,13 +24,13 @@
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.starlarkbuildapi.LicenseApi;
-import com.google.devtools.build.lib.syntax.Printer;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.EnumSet;
 import java.util.List;
 import java.util.Locale;
 import java.util.Set;
+import net.starlark.java.eval.Printer;
 
 /** Support for license and distribution checking. */
 @Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/packages/NativeInfo.java b/src/main/java/com/google/devtools/build/lib/packages/NativeInfo.java
index 9592565..1c1eda1 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/NativeInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/NativeInfo.java
@@ -15,10 +15,10 @@
 
 import com.google.common.collect.ImmutableCollection;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.syntax.Location;
 
 /**
  * Abstract base class for implementations of {@link StructImpl} that expose
diff --git a/src/main/java/com/google/devtools/build/lib/packages/NativeProvider.java b/src/main/java/com/google/devtools/build/lib/packages/NativeProvider.java
index 9dac3cf..ed8ebfe 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/NativeProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/NativeProvider.java
@@ -16,10 +16,10 @@
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import com.google.devtools.build.lib.util.Pair;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.StarlarkValue;
+import net.starlark.java.syntax.Location;
 
 /**
  * Base class for declared providers {@see Provider} defined in native code.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/OutputFile.java b/src/main/java/com/google/devtools/build/lib/packages/OutputFile.java
index 490db8a..3b6c138 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/OutputFile.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/OutputFile.java
@@ -15,7 +15,7 @@
 package com.google.devtools.build.lib.packages;
 
 import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.syntax.Location;
+import net.starlark.java.syntax.Location;
 
 /**
  * A generated file that is the output of a rule.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Package.java b/src/main/java/com/google/devtools/build/lib/packages/Package.java
index 20c8635..68dd22a 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Package.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Package.java
@@ -49,10 +49,6 @@
 import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
 import com.google.devtools.build.lib.skyframe.serialization.SerializationContext;
 import com.google.devtools.build.lib.skyframe.serialization.SerializationException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import com.google.devtools.build.lib.util.DetailedExitCode;
 import com.google.devtools.build.lib.vfs.Path;
 import com.google.devtools.build.lib.vfs.PathFragment;
@@ -73,7 +69,11 @@
 import java.util.Set;
 import java.util.TreeMap;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
 import net.starlark.java.spelling.SpellChecker;
+import net.starlark.java.syntax.Location;
 
 /**
  * A package, which is a container of {@link Rule}s, each of which contains a dictionary of named
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageArgument.java b/src/main/java/com/google/devtools/build/lib/packages/PackageArgument.java
index 20f9646..a7aca37 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/PackageArgument.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/PackageArgument.java
@@ -14,8 +14,8 @@
 
 package com.google.devtools.build.lib.packages;
 
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.syntax.Location;
 
 /** Defines an argument to the {@code package()} function. */
 public abstract class PackageArgument<T> {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java b/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
index 02825ae..137e1b5 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
@@ -43,35 +43,6 @@
 import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
 import com.google.devtools.build.lib.server.FailureDetails.PackageLoading;
 import com.google.devtools.build.lib.server.FailureDetails.PackageLoading.Code;
-import com.google.devtools.build.lib.syntax.Argument;
-import com.google.devtools.build.lib.syntax.CallExpression;
-import com.google.devtools.build.lib.syntax.DefStatement;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Expression;
-import com.google.devtools.build.lib.syntax.FileOptions;
-import com.google.devtools.build.lib.syntax.ForStatement;
-import com.google.devtools.build.lib.syntax.Identifier;
-import com.google.devtools.build.lib.syntax.IfStatement;
-import com.google.devtools.build.lib.syntax.IntegerLiteral;
-import com.google.devtools.build.lib.syntax.ListExpression;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.NodeVisitor;
-import com.google.devtools.build.lib.syntax.NoneType;
-import com.google.devtools.build.lib.syntax.ParserInput;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Program;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkFile;
-import com.google.devtools.build.lib.syntax.StarlarkFunction;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StringLiteral;
-import com.google.devtools.build.lib.syntax.SyntaxError;
-import com.google.devtools.build.lib.syntax.Tuple;
 import com.google.devtools.build.lib.util.DetailedExitCode;
 import com.google.devtools.build.lib.util.ExitCode;
 import com.google.devtools.build.lib.vfs.FileSystem;
@@ -90,6 +61,35 @@
 import java.util.concurrent.ForkJoinPool;
 import java.util.concurrent.atomic.AtomicReference;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.NoneType;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkFunction;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.Tuple;
+import net.starlark.java.syntax.Argument;
+import net.starlark.java.syntax.CallExpression;
+import net.starlark.java.syntax.DefStatement;
+import net.starlark.java.syntax.Expression;
+import net.starlark.java.syntax.FileOptions;
+import net.starlark.java.syntax.ForStatement;
+import net.starlark.java.syntax.Identifier;
+import net.starlark.java.syntax.IfStatement;
+import net.starlark.java.syntax.IntegerLiteral;
+import net.starlark.java.syntax.ListExpression;
+import net.starlark.java.syntax.Location;
+import net.starlark.java.syntax.NodeVisitor;
+import net.starlark.java.syntax.ParserInput;
+import net.starlark.java.syntax.Program;
+import net.starlark.java.syntax.StarlarkFile;
+import net.starlark.java.syntax.StringLiteral;
+import net.starlark.java.syntax.SyntaxError;
 
 /**
  * The package factory is responsible for constructing Package instances from a BUILD file's
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageGroup.java b/src/main/java/com/google/devtools/build/lib/packages/PackageGroup.java
index ca1aa12..2b12e33 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/PackageGroup.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/PackageGroup.java
@@ -22,11 +22,11 @@
 import com.google.devtools.build.lib.packages.License.DistributionType;
 import com.google.devtools.build.lib.packages.PackageSpecification.PackageGroupContents;
 import com.google.devtools.build.lib.server.FailureDetails.PackageLoading.Code;
-import com.google.devtools.build.lib.syntax.Location;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.Set;
+import net.starlark.java.syntax.Location;
 
 /**
  * This class represents a package group BUILD target. It has a name, a list of {@link
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageLoadingListener.java b/src/main/java/com/google/devtools/build/lib/packages/PackageLoadingListener.java
index ce3398d..163743b 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/PackageLoadingListener.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/PackageLoadingListener.java
@@ -14,8 +14,8 @@
 
 package com.google.devtools.build.lib.packages;
 
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import java.util.List;
+import net.starlark.java.eval.StarlarkSemantics;
 
 /** Listener for package-loading events. */
 public interface PackageLoadingListener {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageUtils.java b/src/main/java/com/google/devtools/build/lib/packages/PackageUtils.java
index 5d8e06d..58af703 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/PackageUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/PackageUtils.java
@@ -15,8 +15,8 @@
 package com.google.devtools.build.lib.packages;
 
 import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.syntax.EvalException;
 import java.util.List;
+import net.starlark.java.eval.EvalException;
 
 /** Miscellaneous utils internal to Packages. */
 final class PackageUtils {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Provider.java b/src/main/java/com/google/devtools/build/lib/packages/Provider.java
index 5c2fb2d..3e623e2 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Provider.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Provider.java
@@ -15,7 +15,7 @@
 
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.syntax.Location;
+import net.starlark.java.syntax.Location;
 
 /**
  * Declared Provider (a constructor for {@link Info}).
@@ -48,7 +48,7 @@
 
   /**
    * Returns an error message format string for instances to use for their {@link
-   * com.google.devtools.build.lib.syntax.ClassObject#getErrorMessageForUnknownField(String)}.
+   * net.starlark.java.eval.ClassObject#getErrorMessageForUnknownField(String)}.
    *
    * <p>The format string must contain one {@code '%s'} placeholder for the field name.
    */
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Rule.java b/src/main/java/com/google/devtools/build/lib/packages/Rule.java
index 81d8899..e5095e8 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Rule.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Rule.java
@@ -32,14 +32,14 @@
 import com.google.devtools.build.lib.events.Event;
 import com.google.devtools.build.lib.events.EventHandler;
 import com.google.devtools.build.lib.packages.License.DistributionType;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
 import com.google.devtools.build.lib.util.BinaryPredicate;
 import java.util.Collection;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.syntax.Location;
 
 /**
  * An instance of a build rule in the build language. A rule has a name, a package to which it
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
index cf713a3..e14887d 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
@@ -56,11 +56,6 @@
 import com.google.devtools.build.lib.packages.Type.ConversionException;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import com.google.devtools.build.lib.util.FileTypeSet;
 import com.google.devtools.build.lib.util.StringUtil;
 import com.google.devtools.build.lib.vfs.PathFragment;
@@ -80,6 +75,11 @@
 import java.util.regex.Pattern;
 import javax.annotation.Nullable;
 import javax.annotation.concurrent.Immutable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
 
 /**
  * Instances of RuleClass encapsulate the set of attributes of a given "class" of rule, such as
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/packages/RuleClassProvider.java
index 7676916..a35a351 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RuleClassProvider.java
@@ -19,8 +19,8 @@
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.packages.RuleClass.Builder.ThirdPartyLicenseExistencePolicy;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import java.util.Map;
+import net.starlark.java.eval.StarlarkThread;
 
 /**
  * The collection of the supported build rules. Provides an StarlarkThread for Starlark rule
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleFactory.java b/src/main/java/com/google/devtools/build/lib/packages/RuleFactory.java
index e54cc34..b1a402c 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RuleFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RuleFactory.java
@@ -24,13 +24,13 @@
 import com.google.devtools.build.lib.packages.Package.NameConflictException;
 import com.google.devtools.build.lib.packages.PackageFactory.PackageContext;
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkThread.CallStackEntry;
 import java.util.Map;
 import java.util.Set;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkThread.CallStackEntry;
+import net.starlark.java.syntax.Location;
 
 /**
  * Given a {@link RuleClass} and a set of attribute values, returns a {@link Rule} instance. Also
diff --git a/src/main/java/com/google/devtools/build/lib/packages/SelectorList.java b/src/main/java/com/google/devtools/build/lib/packages/SelectorList.java
index 548149c..7a66a7c 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/SelectorList.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/SelectorList.java
@@ -18,17 +18,17 @@
 import com.google.common.collect.Iterables;
 import com.google.devtools.build.lib.collect.nestedset.Depset;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.HasBinary;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
-import com.google.devtools.build.lib.syntax.TokenKind;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
 import net.starlark.java.annot.StarlarkBuiltin;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.HasBinary;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkValue;
+import net.starlark.java.syntax.TokenKind;
 
 /**
  * An attribute value consisting of a concatenation of native types and selects, e.g:
diff --git a/src/main/java/com/google/devtools/build/lib/packages/SelectorValue.java b/src/main/java/com/google/devtools/build/lib/packages/SelectorValue.java
index 1a484e7..414905f 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/SelectorValue.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/SelectorValue.java
@@ -17,14 +17,14 @@
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Iterables;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.HasBinary;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
-import com.google.devtools.build.lib.syntax.TokenKind;
 import java.util.Map;
 import net.starlark.java.annot.StarlarkBuiltin;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.HasBinary;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkValue;
+import net.starlark.java.syntax.TokenKind;
 
 /**
  * The value returned by a call to {@code select({...})}, for example:
diff --git a/src/main/java/com/google/devtools/build/lib/packages/StarlarkAspect.java b/src/main/java/com/google/devtools/build/lib/packages/StarlarkAspect.java
index df46dfe..7c65d9b 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StarlarkAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StarlarkAspect.java
@@ -16,7 +16,7 @@
 
 import com.google.common.collect.ImmutableSet;
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkAspectApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
 
 /** Represents an aspect which can be attached to a Starlark-defined rule attribute. */
 public interface StarlarkAspect extends StarlarkAspectApi {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/StarlarkCallbackHelper.java b/src/main/java/com/google/devtools/build/lib/packages/StarlarkCallbackHelper.java
index ec84dac..1f3ef02 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StarlarkCallbackHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StarlarkCallbackHelper.java
@@ -18,13 +18,13 @@
 import com.google.devtools.build.lib.events.Event;
 import com.google.devtools.build.lib.events.EventHandler;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.syntax.ClassObject;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkFunction;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
+import net.starlark.java.eval.ClassObject;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkFunction;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
 
 /**
  * A helper class for calling Starlark functions from Java, where the argument values are supplied
diff --git a/src/main/java/com/google/devtools/build/lib/packages/StarlarkDefinedAspect.java b/src/main/java/com/google/devtools/build/lib/packages/StarlarkDefinedAspect.java
index ffb9794..6c2efab 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StarlarkDefinedAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StarlarkDefinedAspect.java
@@ -22,13 +22,13 @@
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
 
 /** A Starlark value that is a result of an 'aspect(..)' function call. */
 @AutoCodec
diff --git a/src/main/java/com/google/devtools/build/lib/packages/StarlarkExportable.java b/src/main/java/com/google/devtools/build/lib/packages/StarlarkExportable.java
index 58805bc..0898726 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StarlarkExportable.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StarlarkExportable.java
@@ -15,8 +15,8 @@
 package com.google.devtools.build.lib.packages;
 
 import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkValue;
 
 /**
  * {@link StarlarkValue}s that need special handling when they are exported from an extension file.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/StarlarkInfo.java b/src/main/java/com/google/devtools/build/lib/packages/StarlarkInfo.java
index 3f23e2d..d829fe9 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StarlarkInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StarlarkInfo.java
@@ -19,17 +19,17 @@
 import com.google.common.collect.ImmutableCollection;
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.collect.nestedset.Depset;
-import com.google.devtools.build.lib.syntax.ClassObject;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.HasBinary;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.TokenKind;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.ClassObject;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.HasBinary;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.syntax.Location;
+import net.starlark.java.syntax.TokenKind;
 
 /** An Info (provider instance) for providers defined in Starlark. */
 public final class StarlarkInfo extends StructImpl implements HasBinary, ClassObject {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/StarlarkLibrary.java b/src/main/java/com/google/devtools/build/lib/packages/StarlarkLibrary.java
index 3fe9883..3a16365 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StarlarkLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StarlarkLibrary.java
@@ -24,18 +24,18 @@
 import com.google.devtools.build.lib.packages.Type.ConversionException;
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.server.FailureDetails.PackageLoading.Code;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.NoneType;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import java.util.List;
 import java.util.Set;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkGlobalLibrary;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.NoneType;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
 
 /**
  * A library of pre-declared Bazel Starlark functions.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/StarlarkNativeAspect.java b/src/main/java/com/google/devtools/build/lib/packages/StarlarkNativeAspect.java
index 114382c..6d0fe86 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StarlarkNativeAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StarlarkNativeAspect.java
@@ -15,7 +15,7 @@
 package com.google.devtools.build.lib.packages;
 
 import com.google.common.collect.ImmutableSet;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
 
 /** A natively-defined aspect that is may be referenced by Starlark attribute definitions. */
 public abstract class StarlarkNativeAspect extends NativeAspectClass implements StarlarkAspect {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/StarlarkNativeModule.java b/src/main/java/com/google/devtools/build/lib/packages/StarlarkNativeModule.java
index 34caa41..2d44acf 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StarlarkNativeModule.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StarlarkNativeModule.java
@@ -32,17 +32,6 @@
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.server.FailureDetails.PackageLoading.Code;
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkNativeModuleApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.NoneType;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkList;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
-import com.google.devtools.build.lib.syntax.Tuple;
 import com.google.devtools.build.lib.util.DetailedExitCode;
 import java.io.IOException;
 import java.util.ArrayList;
@@ -52,6 +41,17 @@
 import java.util.Map;
 import java.util.TreeMap;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.NoneType;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkList;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
+import net.starlark.java.eval.Tuple;
+import net.starlark.java.syntax.Location;
 
 /** The Starlark native module. */
 // TODO(cparsons): Move the definition of native.package() to this class.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/StarlarkProvider.java b/src/main/java/com/google/devtools/build/lib/packages/StarlarkProvider.java
index 87d10c8..baadd2a 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StarlarkProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StarlarkProvider.java
@@ -18,15 +18,15 @@
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import java.util.Collection;
 import java.util.Objects;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
 
 /**
  * A provider defined in Starlark rather than in native code.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/StructImpl.java b/src/main/java/com/google/devtools/build/lib/packages/StructImpl.java
index 4238bec..ec675f8 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StructImpl.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StructImpl.java
@@ -17,19 +17,19 @@
 import com.google.common.base.Objects;
 import com.google.common.collect.Ordering;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.ClassObject;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.protobuf.TextFormat;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.ClassObject;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.syntax.Location;
 
 /**
  * An abstract base class for Starlark values that have fields, have to_json and to_proto methods,
diff --git a/src/main/java/com/google/devtools/build/lib/packages/StructProvider.java b/src/main/java/com/google/devtools/build/lib/packages/StructProvider.java
index c196b16..2a1fd88 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StructProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StructProvider.java
@@ -15,12 +15,12 @@
 package com.google.devtools.build.lib.packages;
 
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import java.util.Map;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
 
 /**
  * The provider for the built-in type {@code struct}.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Target.java b/src/main/java/com/google/devtools/build/lib/packages/Target.java
index 3d1b8e7..9dc1fc9 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Target.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Target.java
@@ -16,9 +16,9 @@
 
 import com.google.devtools.build.lib.packages.License.DistributionType;
 import com.google.devtools.build.lib.starlarkbuildapi.TargetApi;
-import com.google.devtools.build.lib.syntax.Location;
 import java.util.Set;
 import javax.annotation.Nullable;
+import net.starlark.java.syntax.Location;
 
 /**
  * A node in the build dependency graph, identified by a Label.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/TargetUtils.java b/src/main/java/com/google/devtools/build/lib/packages/TargetUtils.java
index b45939f..b2ddd09 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/TargetUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/TargetUtils.java
@@ -24,9 +24,6 @@
 import com.google.common.collect.Maps;
 import com.google.devtools.build.lib.actions.ExecutionRequirements;
 import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
 import com.google.devtools.build.lib.util.Pair;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -34,6 +31,9 @@
 import java.util.List;
 import java.util.Map;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.syntax.Location;
 
 /**
  * Utility functions over Targets that don't really belong in the base {@link
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Type.java b/src/main/java/com/google/devtools/build/lib/packages/Type.java
index 46474c3..0a734ad 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Type.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Type.java
@@ -23,10 +23,6 @@
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.collect.nestedset.Depset;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.devtools.build.lib.util.LoggingUtil;
 import com.google.devtools.build.lib.util.StringCanonicalizer;
 import java.util.ArrayList;
@@ -38,6 +34,10 @@
 import java.util.Set;
 import java.util.logging.Level;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
 
 /**
  * Root of Type symbol hierarchy for values in the build language.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java
index fcb462f..4890bd2 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java
@@ -25,19 +25,6 @@
 import com.google.devtools.build.lib.packages.Package.NameConflictException;
 import com.google.devtools.build.lib.packages.PackageFactory.EnvironmentExtension;
 import com.google.devtools.build.lib.server.FailureDetails.PackageLoading.Code;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Program;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkFile;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.SyntaxError;
-import com.google.devtools.build.lib.syntax.Tuple;
 import com.google.devtools.build.lib.vfs.Path;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import java.util.ArrayList;
@@ -45,6 +32,19 @@
 import java.util.List;
 import java.util.Map;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.Tuple;
+import net.starlark.java.syntax.Program;
+import net.starlark.java.syntax.StarlarkFile;
+import net.starlark.java.syntax.SyntaxError;
 
 /** Parser for WORKSPACE files. Fills in an ExternalPackage.Builder */
 // TODO(adonovan): make a simpler API around a single static function of this form:
diff --git a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactoryHelper.java b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactoryHelper.java
index 1ffd028..a0eaad8 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactoryHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactoryHelper.java
@@ -25,12 +25,12 @@
 import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.events.StoredEventHandler;
 import com.google.devtools.build.lib.packages.RuleFactory.BuildLangTypedAttributeValuesMap;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import java.util.Map;
 import java.util.stream.Collectors;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
 
 /** A helper for the {@link WorkspaceFactory} to create repository rules */
 public class WorkspaceFactoryHelper {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFileValue.java b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFileValue.java
index c9b6af9..ebfaa96 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFileValue.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFileValue.java
@@ -22,7 +22,6 @@
 import com.google.devtools.build.lib.concurrent.BlazeInterners;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.syntax.Module;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.lib.vfs.RootedPath;
 import com.google.devtools.build.skyframe.SkyFunctionName;
@@ -30,6 +29,7 @@
 import com.google.devtools.build.skyframe.SkyValue;
 import java.util.Map;
 import java.util.Objects;
+import net.starlark.java.eval.Module;
 
 /**
  * A SkyValue that contains the result of the parsing of one part of the WORKSPACE file. The parsing
diff --git a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceGlobals.java b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceGlobals.java
index b024078..9321fde 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceGlobals.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceGlobals.java
@@ -14,7 +14,7 @@
 
 package com.google.devtools.build.lib.packages;
 
-import static com.google.devtools.build.lib.syntax.Starlark.NONE;
+import static net.starlark.java.eval.Starlark.NONE;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
@@ -30,13 +30,6 @@
 import com.google.devtools.build.lib.packages.Package.NameConflictException;
 import com.google.devtools.build.lib.packages.RuleFactory.InvalidRuleException;
 import com.google.devtools.build.lib.starlarkbuildapi.WorkspaceGlobalsApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.NoneType;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import java.util.List;
 import java.util.Map;
@@ -45,6 +38,13 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.NoneType;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkThread;
 
 /** A collection of global Starlark build API functions that apply to WORKSPACE files. */
 public class WorkspaceGlobals implements WorkspaceGlobalsApi {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/metrics/BUILD b/src/main/java/com/google/devtools/build/lib/packages/metrics/BUILD
index 35df550..07f7069 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/metrics/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/packages/metrics/BUILD
@@ -22,9 +22,9 @@
         "//src/main/java/com/google/devtools/build/lib/cmdline:cmdline-primitives",
         "//src/main/java/com/google/devtools/build/lib/collect:extrema",
         "//src/main/java/com/google/devtools/build/lib/packages",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/common/options",
+        "//src/main/java/net/starlark/java/eval",
         "//third_party:auto_value",
         "//third_party:flogger",
         "//third_party:guava",
diff --git a/src/main/java/com/google/devtools/build/lib/packages/metrics/PackageMetricsPackageLoadingListener.java b/src/main/java/com/google/devtools/build/lib/packages/metrics/PackageMetricsPackageLoadingListener.java
index 904c780..a43937f 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/metrics/PackageMetricsPackageLoadingListener.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/metrics/PackageMetricsPackageLoadingListener.java
@@ -15,9 +15,9 @@
 
 import com.google.devtools.build.lib.packages.Package;
 import com.google.devtools.build.lib.packages.PackageLoadingListener;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.protobuf.util.Durations;
 import javax.annotation.concurrent.GuardedBy;
+import net.starlark.java.eval.StarlarkSemantics;
 
 /** Tracks per-invocation extreme package loading events. */
 public class PackageMetricsPackageLoadingListener implements PackageLoadingListener {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/semantics/BUILD b/src/main/java/com/google/devtools/build/lib/packages/semantics/BUILD
index 16a8d6c..00345cc 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/semantics/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/packages/semantics/BUILD
@@ -20,8 +20,8 @@
     srcs = ["BuildLanguageOptions.java"],
     deps = [
         "//src/main/java/com/google/devtools/build/lib/concurrent",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
         "//src/main/java/com/google/devtools/common/options",
+        "//src/main/java/net/starlark/java/eval",
         "//third_party:guava",
     ],
 )
diff --git a/src/main/java/com/google/devtools/build/lib/packages/semantics/BuildLanguageOptions.java b/src/main/java/com/google/devtools/build/lib/packages/semantics/BuildLanguageOptions.java
index 023430e..287aa38 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/semantics/BuildLanguageOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/semantics/BuildLanguageOptions.java
@@ -18,7 +18,6 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Interner;
 import com.google.devtools.build.lib.concurrent.BlazeInterners;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.common.options.Converters.CommaSeparatedOptionListConverter;
 import com.google.devtools.common.options.Option;
 import com.google.devtools.common.options.OptionDocumentationCategory;
@@ -27,6 +26,7 @@
 import com.google.devtools.common.options.OptionsBase;
 import java.io.Serializable;
 import java.util.List;
+import net.starlark.java.eval.StarlarkSemantics;
 
 /**
  * Options that affect the semantics of Bazel's build language.
diff --git a/src/main/java/com/google/devtools/build/lib/profiler/memory/AllocationTracker.java b/src/main/java/com/google/devtools/build/lib/profiler/memory/AllocationTracker.java
index bb099a4..b80228a 100644
--- a/src/main/java/com/google/devtools/build/lib/profiler/memory/AllocationTracker.java
+++ b/src/main/java/com/google/devtools/build/lib/profiler/memory/AllocationTracker.java
@@ -23,10 +23,6 @@
 import com.google.devtools.build.lib.packages.AspectClass;
 import com.google.devtools.build.lib.packages.RuleClass;
 import com.google.devtools.build.lib.packages.RuleFunction;
-import com.google.devtools.build.lib.syntax.Debug;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import com.google.monitoring.runtime.instrumentation.Sampler;
 import com.google.perftools.profiles.ProfileProto.Function;
 import com.google.perftools.profiles.ProfileProto.Line;
@@ -41,6 +37,10 @@
 import java.util.Random;
 import java.util.zip.GZIPOutputStream;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Debug;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
 
 /** Tracks allocations for memory reporting. */
 @ConditionallyThreadCompatible
diff --git a/src/main/java/com/google/devtools/build/lib/profiler/memory/AllocationTrackerModule.java b/src/main/java/com/google/devtools/build/lib/profiler/memory/AllocationTrackerModule.java
index e0d1fd7..d0870d6 100644
--- a/src/main/java/com/google/devtools/build/lib/profiler/memory/AllocationTrackerModule.java
+++ b/src/main/java/com/google/devtools/build/lib/profiler/memory/AllocationTrackerModule.java
@@ -21,10 +21,10 @@
 import com.google.devtools.build.lib.runtime.BlazeModule;
 import com.google.devtools.build.lib.runtime.BlazeRuntime;
 import com.google.devtools.build.lib.runtime.WorkspaceBuilder;
-import com.google.devtools.build.lib.syntax.Debug;
 import com.google.devtools.build.lib.vfs.FileSystem;
 import com.google.devtools.common.options.OptionsParsingResult;
 import java.util.UUID;
+import net.starlark.java.eval.Debug;
 
 /**
  * A {@link BlazeModule} that can be used to record interesting information about all allocations
diff --git a/src/main/java/com/google/devtools/build/lib/profiler/memory/BUILD b/src/main/java/com/google/devtools/build/lib/profiler/memory/BUILD
index 3daefef..62a315e 100644
--- a/src/main/java/com/google/devtools/build/lib/profiler/memory/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/profiler/memory/BUILD
@@ -18,13 +18,14 @@
         ":allocationtracker",
         ":current_rule_tracker",
         "//src/main/java/com/google/devtools/build/lib:runtime",
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/analysis:blaze_directories",
         "//src/main/java/com/google/devtools/build/lib/analysis:blaze_version_info",
         "//src/main/java/com/google/devtools/build/lib/analysis:server_directories",
         "//src/main/java/com/google/devtools/build/lib/clock",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/common/options",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party/allocation_instrumenter",
     ],
 )
@@ -45,9 +46,10 @@
     ],
     deps = [
         ":current_rule_tracker",
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/packages",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:guava",
         "//third_party:jsr305",
         "//third_party/allocation_instrumenter",
diff --git a/src/main/java/com/google/devtools/build/lib/query2/BUILD b/src/main/java/com/google/devtools/build/lib/query2/BUILD
index b184ff2..752e46a 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/query2/BUILD
@@ -23,7 +23,6 @@
         ],
     ),
     deps = [
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/actions",
         "//src/main/java/com/google/devtools/build/lib/actions:artifacts",
         "//src/main/java/com/google/devtools/build/lib/actions:file_metadata",
@@ -100,6 +99,8 @@
         "//src/main/java/com/google/devtools/build/skyframe",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
         "//src/main/java/com/google/devtools/common/options",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//src/main/protobuf:analysis_java_proto",
         "//src/main/protobuf:build_java_proto",
         "//src/main/protobuf:failure_details_java_proto",
diff --git a/src/main/java/com/google/devtools/build/lib/query2/compat/BUILD b/src/main/java/com/google/devtools/build/lib/query2/compat/BUILD
index 5be5b08..d4db794 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/compat/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/query2/compat/BUILD
@@ -16,7 +16,7 @@
     deps = [
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/packages",
-        "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:guava",
     ],
 )
diff --git a/src/main/java/com/google/devtools/build/lib/query2/compat/FakeLoadTarget.java b/src/main/java/com/google/devtools/build/lib/query2/compat/FakeLoadTarget.java
index 24c7abb..571edd7 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/compat/FakeLoadTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/compat/FakeLoadTarget.java
@@ -22,9 +22,9 @@
 import com.google.devtools.build.lib.packages.Rule;
 import com.google.devtools.build.lib.packages.RuleVisibility;
 import com.google.devtools.build.lib.packages.Target;
-import com.google.devtools.build.lib.syntax.Location;
 import java.util.Objects;
 import java.util.Set;
+import net.starlark.java.syntax.Location;
 
 /**
  * A fake Target - Use only so that "blaze query" can report Load files as Targets.
diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/StarlarkOutputFormatterCallback.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/StarlarkOutputFormatterCallback.java
index 1481235..1c8fff9 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/cquery/StarlarkOutputFormatterCallback.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/StarlarkOutputFormatterCallback.java
@@ -21,18 +21,18 @@
 import com.google.devtools.build.lib.query2.engine.QueryException;
 import com.google.devtools.build.lib.server.FailureDetails.ConfigurableQuery.Code;
 import com.google.devtools.build.lib.skyframe.SkyframeExecutor;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Expression;
-import com.google.devtools.build.lib.syntax.FileOptions;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.ParserInput;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkFunction;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.SyntaxError;
 import java.io.OutputStream;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkFunction;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Expression;
+import net.starlark.java.syntax.FileOptions;
+import net.starlark.java.syntax.ParserInput;
+import net.starlark.java.syntax.SyntaxError;
 
 /**
  * Starlark output formatter for cquery results. Each configured target will result in an evaluation
diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/TransitionsOutputFormatterCallback.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/TransitionsOutputFormatterCallback.java
index 1ce6898..4fea7461 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/cquery/TransitionsOutputFormatterCallback.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/TransitionsOutputFormatterCallback.java
@@ -45,7 +45,6 @@
 import com.google.devtools.build.lib.packages.Target;
 import com.google.devtools.build.lib.query2.engine.QueryEnvironment.TargetAccessor;
 import com.google.devtools.build.lib.skyframe.SkyframeExecutor;
-import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.util.OrderedSetMultimap;
 import java.io.OutputStream;
 import java.util.Collection;
@@ -55,6 +54,7 @@
 import java.util.function.Function;
 import java.util.stream.Collectors;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
 
 /**
  * Output formatter that prints {@link ConfigurationTransition} information for rule configured
diff --git a/src/main/java/com/google/devtools/build/lib/query2/query/output/BUILD b/src/main/java/com/google/devtools/build/lib/query2/query/output/BUILD
index e0d8678..6e03651 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/query/output/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/query2/query/output/BUILD
@@ -12,7 +12,6 @@
     name = "output",
     srcs = glob(["*.java"]),
     deps = [
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/collect",
         "//src/main/java/com/google/devtools/build/lib/collect/compacthashset",
@@ -28,6 +27,8 @@
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
         "//src/main/java/com/google/devtools/common/options",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//src/main/protobuf:build_java_proto",
         "//src/main/protobuf:failure_details_java_proto",
         "//third_party:flogger",
diff --git a/src/main/java/com/google/devtools/build/lib/query2/query/output/BuildOutputFormatter.java b/src/main/java/com/google/devtools/build/lib/query2/query/output/BuildOutputFormatter.java
index 1ace23e..85c9f37 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/query/output/BuildOutputFormatter.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/query/output/BuildOutputFormatter.java
@@ -29,8 +29,6 @@
 import com.google.devtools.build.lib.query2.engine.QueryEnvironment;
 import com.google.devtools.build.lib.query2.engine.SynchronizedDelegatingOutputFormatterCallback;
 import com.google.devtools.build.lib.query2.engine.ThreadSafeOutputFormatterCallback;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.io.Writer;
@@ -38,6 +36,8 @@
 import java.util.List;
 import java.util.Set;
 import java.util.function.BiPredicate;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.StarlarkThread;
 
 /**
  * An output formatter that prints the generating rules using the syntax of the BUILD files. If
diff --git a/src/main/java/com/google/devtools/build/lib/query2/query/output/FormatUtils.java b/src/main/java/com/google/devtools/build/lib/query2/query/output/FormatUtils.java
index e4b9697..7a12a7f 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/query/output/FormatUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/query/output/FormatUtils.java
@@ -19,11 +19,11 @@
 import com.google.devtools.build.lib.packages.Rule;
 import com.google.devtools.build.lib.packages.Target;
 import com.google.devtools.build.lib.query2.common.CommonQueryOptions;
-import com.google.devtools.build.lib.syntax.Location;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.lib.vfs.Root;
 import java.util.Comparator;
 import javax.annotation.Nullable;
+import net.starlark.java.syntax.Location;
 
 /**
  * Given a set of query options, returns a BinaryPredicate suitable for passing to {@link
diff --git a/src/main/java/com/google/devtools/build/lib/query2/query/output/LocationOutputFormatter.java b/src/main/java/com/google/devtools/build/lib/query2/query/output/LocationOutputFormatter.java
index 1ade9dc..c0d964e 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/query/output/LocationOutputFormatter.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/query/output/LocationOutputFormatter.java
@@ -25,9 +25,9 @@
 import com.google.devtools.build.lib.query2.engine.SynchronizedDelegatingOutputFormatterCallback;
 import com.google.devtools.build.lib.query2.engine.ThreadSafeOutputFormatterCallback;
 import com.google.devtools.build.lib.server.FailureDetails.Query;
-import com.google.devtools.build.lib.syntax.Location;
 import java.io.IOException;
 import java.io.OutputStream;
+import net.starlark.java.syntax.Location;
 
 /**
  * An output formatter that prints the labels of the targets, preceded by
diff --git a/src/main/java/com/google/devtools/build/lib/query2/query/output/ProtoOutputFormatter.java b/src/main/java/com/google/devtools/build/lib/query2/query/output/ProtoOutputFormatter.java
index 9ac436d..5e389fd 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/query/output/ProtoOutputFormatter.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/query/output/ProtoOutputFormatter.java
@@ -62,7 +62,6 @@
 import com.google.devtools.build.lib.query2.proto.proto2api.Build.SourceFile;
 import com.google.devtools.build.lib.query2.query.aspectresolvers.AspectResolver;
 import com.google.devtools.build.lib.query2.query.output.QueryOptions.OrderOutput;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import com.google.protobuf.CodedOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
@@ -74,6 +73,7 @@
 import java.util.Map;
 import java.util.stream.Collectors;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.StarlarkThread;
 
 /**
  * An output formatter that outputs a protocol buffer representation
diff --git a/src/main/java/com/google/devtools/build/lib/repository/BUILD b/src/main/java/com/google/devtools/build/lib/repository/BUILD
index 7219732..93a5cd7 100644
--- a/src/main/java/com/google/devtools/build/lib/repository/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/repository/BUILD
@@ -13,8 +13,8 @@
     srcs = ["ExternalPackageException.java"],
     deps = [
         "//src/main/java/com/google/devtools/build/lib/packages",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
         "//src/main/java/com/google/devtools/build/skyframe",
+        "//src/main/java/net/starlark/java/eval",
     ],
 )
 
diff --git a/src/main/java/com/google/devtools/build/lib/repository/ExternalPackageException.java b/src/main/java/com/google/devtools/build/lib/repository/ExternalPackageException.java
index 956a6b8..9ada52b 100644
--- a/src/main/java/com/google/devtools/build/lib/repository/ExternalPackageException.java
+++ b/src/main/java/com/google/devtools/build/lib/repository/ExternalPackageException.java
@@ -15,9 +15,9 @@
 package com.google.devtools.build.lib.repository;
 
 import com.google.devtools.build.lib.packages.NoSuchPackageException;
-import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.skyframe.SkyFunctionException;
 import java.io.IOException;
+import net.starlark.java.eval.EvalException;
 
 /** Exception thrown when something goes wrong accessing a rule. */
 public class ExternalPackageException extends SkyFunctionException {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java
index 20aab02..cbd6ffc 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java
@@ -30,11 +30,11 @@
 import com.google.devtools.build.lib.skyframe.BuildConfigurationValue;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
-import com.google.devtools.build.lib.syntax.ClassObject;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.ClassObject;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.StarlarkSemantics;
 
 /**
  * This configured target pretends to be whatever type of target "actual" is, returning its label,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/BUILD b/src/main/java/com/google/devtools/build/lib/rules/BUILD
index 63c25c4..82deea9 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/BUILD
@@ -129,9 +129,9 @@
         "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/packages",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
         "//src/main/java/com/google/devtools/build/lib/util",
         "//src/main/java/com/google/devtools/build/lib/vfs",
+        "//src/main/java/net/starlark/java/eval",
         "//src/main/protobuf:test_status_java_proto",
         "//third_party:guava",
     ],
@@ -163,8 +163,8 @@
         "//src/main/java/com/google/devtools/build/lib/packages",
         "//src/main/java/com/google/devtools/build/lib/skyframe:build_configuration_value",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
         "//src/main/java/com/google/devtools/build/lib/util:filetype",
+        "//src/main/java/net/starlark/java/eval",
         "//third_party:guava",
         "//third_party:jsr305",
     ],
@@ -336,11 +336,11 @@
         "//src/main/java/com/google/devtools/build/lib/events",
         "//src/main/java/com/google/devtools/build/lib/packages",
         "//src/main/java/com/google/devtools/build/lib/skyframe:directory_listing_value",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
         "//src/main/java/com/google/devtools/build/skyframe",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
+        "//src/main/java/net/starlark/java/eval",
         "//third_party:guava",
     ],
 )
@@ -368,11 +368,11 @@
         "//src/main/java/com/google/devtools/build/lib/cmdline:LabelValidator",
         "//src/main/java/com/google/devtools/build/lib/packages",
         "//src/main/java/com/google/devtools/build/lib/skyframe:package_lookup_value",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
         "//src/main/java/com/google/devtools/build/skyframe",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
+        "//src/main/java/net/starlark/java/eval",
         "//third_party:guava",
     ],
 )
@@ -430,14 +430,14 @@
         "//src/main/java/com/google/devtools/build/lib/skyframe:precomputed_value",
         "//src/main/java/com/google/devtools/build/lib/skyframe:sky_functions",
         "//src/main/java/com/google/devtools/build/lib/skyframe:sky_value_dirtiness_checker",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
-        "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
         "//src/main/java/com/google/devtools/build/lib/util",
         "//src/main/java/com/google/devtools/build/lib/util/io",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
         "//src/main/java/com/google/devtools/build/skyframe",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:guava",
         "//third_party:jsr305",
     ],
@@ -487,7 +487,7 @@
     srcs = ["repository/WorkspaceAttributeMapper.java"],
     deps = [
         "//src/main/java/com/google/devtools/build/lib/packages",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
+        "//src/main/java/net/starlark/java/eval",
         "//third_party:guava",
         "//third_party:jsr305",
     ],
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidApplicationResourceInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidApplicationResourceInfo.java
index ecb7c0d..697b34c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidApplicationResourceInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidApplicationResourceInfo.java
@@ -20,7 +20,7 @@
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidApplicationResourceInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
 
 /** A provider for Android resource APKs (".ap_") and related info. */
 @Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssetsInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssetsInfo.java
index fbcf8b5..84c3b06 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssetsInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssetsInfo.java
@@ -25,9 +25,9 @@
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidAssetsInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
 import java.util.Optional;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
 
 /** Provides information about transitive Android assets. */
 public final class AndroidAssetsInfo extends NativeInfo
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryDataInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryDataInfo.java
index e0f55c6..c961f84 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryDataInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryDataInfo.java
@@ -17,7 +17,7 @@
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidBinaryDataInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
 
 /**
  * Provides information on Android resource, asset, and manifest information specific to binaries.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCcLinkParamsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCcLinkParamsProvider.java
index a66f6c0..543a88e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCcLinkParamsProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCcLinkParamsProvider.java
@@ -20,7 +20,7 @@
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.rules.cpp.CcInfo;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidCcLinkParamsProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
 
 /** A target that provides C++ libraries to be linked into Android targets. */
 @Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeviceBrokerInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeviceBrokerInfo.java
index 0309843..7432277 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeviceBrokerInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeviceBrokerInfo.java
@@ -17,7 +17,7 @@
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidDeviceBrokerInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
 
 /** Supplies the device broker type string, passed to the Android test runtime. */
 @Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidFeatureFlagSetProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidFeatureFlagSetProvider.java
index ac09a67..30f1aa8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidFeatureFlagSetProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidFeatureFlagSetProvider.java
@@ -31,9 +31,9 @@
 import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
 import com.google.devtools.build.lib.rules.config.ConfigFeatureFlag;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidFeatureFlagSetProviderApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
 import java.util.Map;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
 
 /**
  * Provider for checking the set of feature flags used by an android_binary.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdeInfoProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdeInfoProvider.java
index 5b27fab..215663b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdeInfoProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdeInfoProvider.java
@@ -28,14 +28,14 @@
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider.OutputJar;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidIdeInfoProviderApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
 import java.util.Collection;
 import java.util.LinkedHashSet;
 import java.util.Map;
 import java.util.Set;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
 
 /** An Android target provider to provide Android-specific info to IDEs. */
 @Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdlProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdlProvider.java
index 4da98c0..852a87d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdlProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdlProvider.java
@@ -21,7 +21,7 @@
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidIdlProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
 
 /**
  * Configured targets implementing this provider can contribute Android IDL information to the
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationInfo.java
index d424202..062e8a3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationInfo.java
@@ -17,7 +17,7 @@
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidInstrumentationInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
 
 /**
  * A provider for targets that create Android instrumentations. Consumed by Android testing rules.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarInfo.java
index 51e093e..92accf0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarInfo.java
@@ -25,10 +25,10 @@
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidLibraryAarInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
 import java.util.Objects;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
 
 /**
  * A target that can provide the aar artifact of Android libraries and all the manifests that are
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryResourceClassJarProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryResourceClassJarProvider.java
index 275f587..8b5acd5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryResourceClassJarProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryResourceClassJarProvider.java
@@ -22,7 +22,7 @@
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidLibraryResourceClassJarProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
 
 /**
  * A provider which contains the resource class jars from android_library rules. See {@link
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNativeLibsInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNativeLibsInfo.java
index f2ecffa..42b0ccd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNativeLibsInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNativeLibsInfo.java
@@ -20,7 +20,7 @@
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidNativeLibsInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
 
 /**
  * Provider of transitively available ZIPs of native libs that should be directly copied into the
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidPreDexJarProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidPreDexJarProvider.java
index ccbd2da..5b4a2bb 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidPreDexJarProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidPreDexJarProvider.java
@@ -19,7 +19,7 @@
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidPreDexJarProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
 
 /** A provider of the final Jar to be dexed for targets that build APKs. */
 @Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidProguardInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidProguardInfo.java
index cb07cd5..816c076 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidProguardInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidProguardInfo.java
@@ -20,8 +20,8 @@
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.rules.java.ProguardLibrary;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidProguardInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
 
 /**
  * A target that can provide local proguard specifications, returned by the {@link
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesInfo.java
index 78d842a..1312244 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesInfo.java
@@ -24,7 +24,7 @@
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidResourcesInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
 
 /** A provider that supplies ResourceContainers from its transitive closure. */
 @Immutable
@@ -255,7 +255,7 @@
     private static <T> NestedSet<T> nestedSet(Object from, Class<T> with, String fieldName)
         throws EvalException {
       Preconditions.checkArgument(
-          from instanceof Depset || from == com.google.devtools.build.lib.syntax.Starlark.UNBOUND);
+          from instanceof Depset || from == net.starlark.java.eval.Starlark.UNBOUND);
 
       if (from instanceof Depset) {
         return nestedSet((Depset) from, with, fieldName);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
index ce674ef..a0f3190 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
@@ -66,10 +66,10 @@
 import com.google.devtools.build.lib.rules.java.JavaSemantics;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidSplitTransititionApi;
-import com.google.devtools.build.lib.syntax.Printer;
 import com.google.devtools.build.lib.util.FileType;
 import com.google.devtools.build.lib.util.FileTypeSet;
 import java.util.List;
+import net.starlark.java.eval.Printer;
 
 /** Rule definitions for Android rules. */
 public final class AndroidRuleClasses {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java
index 514d36e..6982175 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java
@@ -25,8 +25,8 @@
 import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
 import com.google.devtools.build.lib.rules.java.BootClassPathInfo;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidSdkProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
 
 /** Description of the tools Blaze needs from an Android SDK. */
 @Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidStarlarkData.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidStarlarkData.java
index b89b878..77ced86 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidStarlarkData.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidStarlarkData.java
@@ -40,19 +40,19 @@
 import com.google.devtools.build.lib.rules.java.ProguardSpecProvider;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidBinaryDataSettingsApi;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidDataProcessingApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkList;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkList;
+import net.starlark.java.eval.StarlarkThread;
 
 /** Starlark-visible methods for working with Android data (manifests, resources, and assets). */
 public abstract class AndroidStarlarkData
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ApkInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/ApkInfo.java
index d45ddf9..b5312eb 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ApkInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ApkInfo.java
@@ -19,10 +19,10 @@
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.starlarkbuildapi.android.ApkInfoApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
 import java.util.List;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
 
 /** A provider for targets that produce an apk file. */
 @Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/BUILD b/src/main/java/com/google/devtools/build/lib/rules/android/BUILD
index 3ea1e8d..559a5de 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/BUILD
@@ -81,13 +81,13 @@
         "//src/main/java/com/google/devtools/build/lib/skyframe:configured_target_and_data",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
         "//src/main/java/com/google/devtools/build/lib/util",
         "//src/main/java/com/google/devtools/build/lib/util:filetype",
         "//src/main/java/com/google/devtools/build/lib/util:os",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
         "//src/main/java/com/google/devtools/common/options",
+        "//src/main/java/net/starlark/java/eval",
         "//src/main/protobuf:android_deploy_info_java_proto",
         "//third_party:android_common_25_0_0_lite",
         "//third_party:auto_value",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ProguardMappingProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/ProguardMappingProvider.java
index 5d428e8..8c5822d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ProguardMappingProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ProguardMappingProvider.java
@@ -18,7 +18,7 @@
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.starlarkbuildapi.android.ProguardMappingProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
 
 /** A target that can provide a proguard obfuscation mapping to Android binaries or tests. */
 @Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ValidatedAndroidResources.java b/src/main/java/com/google/devtools/build/lib/rules/android/ValidatedAndroidResources.java
index d0e23f4..fa46add 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ValidatedAndroidResources.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ValidatedAndroidResources.java
@@ -18,11 +18,11 @@
 import com.google.devtools.build.lib.collect.nestedset.Depset;
 import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
 import com.google.devtools.build.lib.starlarkbuildapi.android.ValidatedAndroidDataApi;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkList;
 import java.util.Objects;
 import java.util.Optional;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkList;
 
 /** Wraps validated and packaged Android resource information */
 public class ValidatedAndroidResources extends MergedAndroidResources
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/databinding/DataBindingV2Provider.java b/src/main/java/com/google/devtools/build/lib/rules/android/databinding/DataBindingV2Provider.java
index 91cfe8b..01a60f0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/databinding/DataBindingV2Provider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/databinding/DataBindingV2Provider.java
@@ -23,9 +23,9 @@
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.starlarkbuildapi.android.DataBindingV2ProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
 
 /**
  * A provider that exposes this enables <a
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/databinding/UsesDataBindingProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/databinding/UsesDataBindingProvider.java
index 9fb3b88..49f9910 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/databinding/UsesDataBindingProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/databinding/UsesDataBindingProvider.java
@@ -18,9 +18,9 @@
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.starlarkbuildapi.android.UsesDataBindingProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
 import java.util.Collection;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
 
 /**
  * A provider that exposes this enables <a
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java
index f0aa5fe..a84b1c1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java
@@ -27,7 +27,6 @@
 import com.google.devtools.build.lib.skyframe.serialization.SerializationContext;
 import com.google.devtools.build.lib.skyframe.serialization.SerializationException;
 import com.google.devtools.build.lib.starlarkbuildapi.apple.AppleBitcodeModeApi;
-import com.google.devtools.build.lib.syntax.Printer;
 import com.google.devtools.common.options.Converters.CommaSeparatedOptionListConverter;
 import com.google.devtools.common.options.EnumConverter;
 import com.google.devtools.common.options.Option;
@@ -39,6 +38,7 @@
 import java.io.IOException;
 import java.util.List;
 import java.util.Map;
+import net.starlark.java.eval.Printer;
 
 /** Command-line options for building for Apple platforms. */
 public class AppleCommandLineOptions extends FragmentOptions {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/ApplePlatform.java b/src/main/java/com/google/devtools/build/lib/rules/apple/ApplePlatform.java
index 3fbe29f..7759984 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/ApplePlatform.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/ApplePlatform.java
@@ -23,11 +23,11 @@
 import com.google.devtools.build.lib.packages.StructImpl;
 import com.google.devtools.build.lib.starlarkbuildapi.apple.ApplePlatformApi;
 import com.google.devtools.build.lib.starlarkbuildapi.apple.ApplePlatformTypeApi;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Printer;
 import java.util.HashMap;
 import java.util.Locale;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.syntax.Location;
 
 /** An enum that can be used to distinguish between various apple platforms. */
 @Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/BUILD b/src/main/java/com/google/devtools/build/lib/rules/apple/BUILD
index f1ace74..a8bcaca 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/BUILD
@@ -17,7 +17,6 @@
     name = "apple",
     srcs = glob(["*.java"]),
     deps = [
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/actions",
         "//src/main/java/com/google/devtools/build/lib/actions:execution_requirements",
         "//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster",
@@ -42,6 +41,8 @@
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple",
         "//src/main/java/com/google/devtools/common/options",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//src/main/protobuf:xcode_java_proto",
         "//third_party:flogger",
         "//third_party:guava",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/DottedVersion.java b/src/main/java/com/google/devtools/build/lib/rules/apple/DottedVersion.java
index 90538cd..821fcbe 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/DottedVersion.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/DottedVersion.java
@@ -24,12 +24,12 @@
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.starlarkbuildapi.apple.DottedVersionApi;
-import com.google.devtools.build.lib.syntax.Printer;
 import java.util.ArrayList;
 import java.util.Objects;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Printer;
 
 /**
  * Represents Xcode versions and allows parsing them.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeConfigInfo.java b/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeConfigInfo.java
index c8ac555..b440c9f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeConfigInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeConfigInfo.java
@@ -22,10 +22,10 @@
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.rules.apple.ApplePlatform.PlatformType;
 import com.google.devtools.build.lib.starlarkbuildapi.apple.XcodeConfigInfoApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
 import java.util.Map;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
 
 /**
  * The set of Apple versions computed from command line options and the {@code xcode_config} rule.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/BUILD b/src/main/java/com/google/devtools/build/lib/rules/config/BUILD
index 40eac38..c03df96 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/config/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/config/BUILD
@@ -14,7 +14,6 @@
     name = "config",
     srcs = glob(["*.java"]),
     deps = [
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/actions",
         "//src/main/java/com/google/devtools/build/lib/actions:artifact_owner",
         "//src/main/java/com/google/devtools/build/lib/actions:artifacts",
@@ -56,6 +55,8 @@
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
         "//src/main/java/com/google/devtools/common/options",
         "//src/main/java/net/starlark/java/annot",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:auto_value",
         "//third_party:guava",
         "//third_party:jsr305",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlag.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlag.java
index c8e1497..2f3b850 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlag.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlag.java
@@ -38,9 +38,9 @@
 import com.google.devtools.build.lib.packages.Attribute;
 import com.google.devtools.build.lib.packages.Attribute.ComputedDefault;
 import com.google.devtools.build.lib.packages.AttributeMap;
-import com.google.devtools.build.lib.syntax.Starlark;
 import java.util.List;
 import java.util.Optional;
+import net.starlark.java.eval.Starlark;
 
 /**
  * The implementation of the config_feature_flag rule for defining custom flags for Android rules.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java
index f088dfe..e820c51 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java
@@ -24,11 +24,11 @@
 import com.google.devtools.build.lib.packages.RequiredProviders;
 import com.google.devtools.build.lib.packages.StarlarkProviderIdentifier;
 import com.google.devtools.build.lib.starlarkbuildapi.config.ConfigFeatureFlagProviderApi;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Provider for exporting value and valid value predicate of feature flags to consuming targets. */
 // TODO(adonovan): rename this to *Info and its constructor to *Provider.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigGlobalLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigGlobalLibrary.java
index 91533d2..457ce14 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigGlobalLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigGlobalLibrary.java
@@ -23,16 +23,16 @@
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.starlarkbuildapi.config.ConfigGlobalLibraryApi;
 import com.google.devtools.build.lib.starlarkbuildapi.config.ConfigurationTransitionApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
 
 /**
  * Implementation of {@link ConfigGlobalLibraryApi}.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/ArtifactCategory.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/ArtifactCategory.java
index 847ee47..46249c0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/ArtifactCategory.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/ArtifactCategory.java
@@ -15,9 +15,9 @@
 
 import com.google.common.base.Joiner;
 import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
 import java.util.Arrays;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.syntax.Location;
 
 /**
  * A category of artifacts that are candidate input/output to an action, for which the toolchain can
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD b/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD
index 49c2f3f..50cc994 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD
@@ -32,7 +32,6 @@
     deps = [
         ":cpp_interface",
         ":denied_implicit_outputs_marker_provider",
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/actions",
         "//src/main/java/com/google/devtools/build/lib/actions:action_lookup_key",
         "//src/main/java/com/google/devtools/build/lib/actions:artifacts",
@@ -118,6 +117,8 @@
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
         "//src/main/java/com/google/devtools/common/options",
         "//src/main/java/net/starlark/java/annot",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//src/main/protobuf:crosstool_config_java_proto",
         "//src/main/protobuf:extra_actions_base_java_proto",
         "//src/main/protobuf:failure_details_java_proto",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
index f16ea74..178ae1d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
@@ -72,10 +72,6 @@
 import com.google.devtools.build.lib.rules.cpp.CppConfiguration.Tool;
 import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType;
 import com.google.devtools.build.lib.rules.cpp.Link.LinkingMode;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.Tuple;
 import com.google.devtools.build.lib.util.Pair;
 import com.google.devtools.build.lib.vfs.FileSystemUtils;
 import com.google.devtools.build.lib.vfs.PathFragment;
@@ -89,6 +85,10 @@
 import java.util.Set;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.Tuple;
 
 /**
  * A ConfiguredTarget for <code>cc_binary</code> rules.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
index 3b2c472..d0198f9 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
@@ -58,8 +58,6 @@
 import com.google.devtools.build.lib.shell.ShellUtils;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.devtools.build.lib.util.FileType;
 import com.google.devtools.build.lib.util.Pair;
 import com.google.devtools.build.lib.vfs.PathFragment;
@@ -72,6 +70,8 @@
 import java.util.regex.PatternSyntaxException;
 import java.util.stream.Stream;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
 
 /**
  * Common parts of the implementation of cc rules.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java
index c2cf2b3..a8fe47f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java
@@ -39,7 +39,6 @@
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcCompilationContextApi;
-import com.google.devtools.build.lib.syntax.StarlarkList;
 import com.google.devtools.build.lib.util.Pair;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.skyframe.SkyFunction.Environment;
@@ -55,6 +54,7 @@
 import java.util.Map;
 import java.util.Set;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.StarlarkList;
 
 /**
  * Immutable store of information needed for C++ compilation that is aggregated across dependencies.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationOutputs.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationOutputs.java
index e7a2e75..16eb175 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationOutputs.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationOutputs.java
@@ -21,11 +21,11 @@
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
 import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcCompilationOutputsApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkList;
 import java.util.LinkedHashSet;
 import java.util.Set;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkList;
 
 /** A structured representation of the compilation outputs of a C++ rule. */
 public class CcCompilationOutputs implements CcCompilationOutputsApi<Artifact> {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcInfo.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcInfo.java
index 7442b0f..c802de3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcInfo.java
@@ -22,10 +22,10 @@
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
 import java.util.Collection;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
 
 /** Provider for C++ compilation and linking information. */
 @Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java
index a5af8be..f0ac8dd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java
@@ -52,7 +52,6 @@
 import com.google.devtools.build.lib.rules.cpp.CcCompilationHelper.CompilationInfo;
 import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
 import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType;
-import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.util.FileTypeSet;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import java.util.ArrayList;
@@ -62,6 +61,7 @@
 import java.util.Map;
 import java.util.Set;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
 
 /**
  * A ConfiguredTarget for <code>cc_library</code> rules.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingContext.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingContext.java
index e76510c..2a8c200 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingContext.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingContext.java
@@ -31,16 +31,16 @@
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcLinkingContextApi;
 import com.google.devtools.build.lib.starlarkbuildapi.cpp.LinkerInputApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkList;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.util.Fingerprint;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkList;
+import net.starlark.java.eval.StarlarkSemantics;
 
 /** Structure of CcLinkingContext. */
 public class CcLinkingContext implements CcLinkingContextApi<Artifact> {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java
index dd3acea..a41b395 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java
@@ -41,12 +41,12 @@
 import com.google.devtools.build.lib.rules.cpp.Link.LinkingMode;
 import com.google.devtools.build.lib.rules.cpp.Link.Picness;
 import com.google.devtools.build.lib.starlarkbuildapi.cpp.LinkingInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.vfs.FileSystemUtils;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import java.util.ArrayList;
 import java.util.List;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
 
 /**
  * A class to create C/C++ link actions in a way that is consistent with cc_library. Rules that
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
index 487f1c0..a80ff57 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
@@ -61,15 +61,6 @@
 import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType;
 import com.google.devtools.build.lib.rules.cpp.Link.LinkingMode;
 import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcModuleApi;
-import com.google.devtools.build.lib.syntax.ClassObject;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.NoneType;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkList;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.Tuple;
 import com.google.devtools.build.lib.util.FileTypeSet;
 import com.google.devtools.build.lib.util.Pair;
 import com.google.devtools.build.lib.util.StringUtil;
@@ -81,6 +72,15 @@
 import java.util.Locale;
 import java.util.Set;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.ClassObject;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.NoneType;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkList;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.Tuple;
 
 /** A module that contains Starlark utilities for C++ support. */
 public abstract class CcModule
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
index 855c65c..110fb5b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
@@ -26,9 +26,9 @@
 import com.google.devtools.build.lib.analysis.TemplateVariableInfo;
 import com.google.devtools.build.lib.analysis.config.BuildOptions;
 import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.syntax.Location;
 import java.io.Serializable;
 import java.util.HashMap;
+import net.starlark.java.syntax.Location;
 
 /**
  * Implementation for the cc_toolchain rule.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainAttributesProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainAttributesProvider.java
index 32fc6d3..c5521d8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainAttributesProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainAttributesProvider.java
@@ -40,7 +40,7 @@
 import com.google.devtools.build.lib.packages.NativeProvider;
 import com.google.devtools.build.lib.packages.Type;
 import com.google.devtools.build.lib.rules.cpp.CcToolchain.AdditionalBuildVariablesComputer;
-import com.google.devtools.build.lib.syntax.Location;
+import net.starlark.java.syntax.Location;
 
 /**
  * Provider encapsulating all the information from the cc_toolchain rule that affects creation of
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainConfigInfo.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainConfigInfo.java
index 7e8a4c1..d5bed42 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainConfigInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainConfigInfo.java
@@ -34,11 +34,11 @@
 import com.google.devtools.build.lib.rules.cpp.CcToolchainVariables.Expandable;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcToolchainConfigInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.util.Pair;
 import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig;
 import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain;
 import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath;
+import net.starlark.java.eval.EvalException;
 
 /** Information describing C++ toolchain derived from CROSSTOOL file. */
 @Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java
index 63189d6..dfad3d6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java
@@ -37,8 +37,6 @@
 import com.google.devtools.build.lib.rules.cpp.CcToolchainVariables.StringValueParser;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.devtools.build.lib.util.Pair;
 import com.google.devtools.build.lib.util.StringUtil;
 import com.google.devtools.build.lib.vfs.PathFragment;
@@ -53,6 +51,8 @@
 import java.util.Set;
 import java.util.concurrent.ExecutionException;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
 
 /**
  * Provides access to features supported by a specific toolchain.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java
index b332a30..62a23f8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java
@@ -36,11 +36,11 @@
 import com.google.devtools.build.lib.rules.cpp.CppConfiguration.Tool;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcToolchainProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.syntax.Location;
 
 /** Information about a C++ compiler used by the <code>cc_*</code> rules. */
 @Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderHelper.java
index 3d4f253..61ab9d6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderHelper.java
@@ -38,8 +38,6 @@
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.rules.cpp.CcToolchain.AdditionalBuildVariablesComputer;
 import com.google.devtools.build.lib.rules.cpp.CppConfiguration.Tool;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.devtools.build.lib.util.Pair;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import java.util.EnumSet;
@@ -47,6 +45,8 @@
 import java.util.List;
 import java.util.Map;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
 
 /** Helper responsible for creating CcToolchainProvider */
 public class CcToolchainProviderHelper {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainVariables.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainVariables.java
index ae7e477..7617111 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainVariables.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainVariables.java
@@ -32,8 +32,6 @@
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcToolchainVariablesApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.LinkedHashMap;
@@ -43,6 +41,8 @@
 import java.util.Set;
 import java.util.Stack;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
 
 /**
  * Configured build variables usable by the toolchain configuration.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CompileBuildVariables.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CompileBuildVariables.java
index 4666a91..601541a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CompileBuildVariables.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CompileBuildVariables.java
@@ -26,10 +26,10 @@
 import com.google.devtools.build.lib.collect.nestedset.Order;
 import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
 import com.google.devtools.build.lib.rules.cpp.CcToolchainVariables.VariablesExtension;
-import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import java.util.List;
 import java.util.Map;
+import net.starlark.java.eval.EvalException;
 
 /** Enum covering all build variables we create for all various {@link CppCompileAction}. */
 public enum CompileBuildVariables {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
index 33a3cea..b7237ba 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
@@ -76,9 +76,6 @@
 import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
 import com.google.devtools.build.lib.skyframe.ActionExecutionValue;
 import com.google.devtools.build.lib.starlarkbuildapi.CommandLineArgsApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkList;
 import com.google.devtools.build.lib.util.DependencySet;
 import com.google.devtools.build.lib.util.DetailedExitCode;
 import com.google.devtools.build.lib.util.Fingerprint;
@@ -108,6 +105,9 @@
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeoutException;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkList;
 
 /** Action that represents some kind of C++ compilation step. */
 @ThreadCompatible
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionTemplate.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionTemplate.java
index 9076f39..37f55a5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionTemplate.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionTemplate.java
@@ -34,12 +34,12 @@
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
 import com.google.devtools.build.lib.collect.nestedset.Order;
 import com.google.devtools.build.lib.rules.cpp.CcCompilationHelper.SourceCategory;
-import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.util.Fingerprint;
 import com.google.devtools.build.lib.vfs.FileSystemUtils;
 import java.util.ArrayList;
 import java.util.List;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
 
 /** An {@link ActionTemplate} that expands into {@link CppCompileAction}s at execution time. */
 public final class CppCompileActionTemplate extends ActionKeyCacher
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
index 2cff1bc..0f29222 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
@@ -67,8 +67,6 @@
 import com.google.devtools.build.lib.rules.cpp.CppConfiguration.Tool;
 import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType;
 import com.google.devtools.build.lib.shell.ShellUtils;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.util.FileTypeSet;
 import com.google.devtools.build.lib.util.Fingerprint;
 import com.google.devtools.build.lib.util.Pair;
@@ -78,6 +76,8 @@
 import java.util.List;
 import java.util.Map;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkSemantics;
 
 /**
  * Helper class for functionality shared by cpp related rules.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java
index 0359646..9f72386 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java
@@ -59,9 +59,6 @@
 import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.starlarkbuildapi.CommandLineArgsApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkList;
 import com.google.devtools.build.lib.util.DetailedExitCode;
 import com.google.devtools.build.lib.util.Fingerprint;
 import com.google.devtools.build.lib.util.ShellEscaper;
@@ -70,6 +67,9 @@
 import java.util.List;
 import java.util.Map;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkList;
 
 /** Action that represents a linking step. */
 @ThreadCompatible
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java
index 3a20665..30e4b1f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java
@@ -48,7 +48,6 @@
 import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType;
 import com.google.devtools.build.lib.rules.cpp.Link.LinkerOrArchiver;
 import com.google.devtools.build.lib.rules.cpp.Link.LinkingMode;
-import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.vfs.FileSystemUtils;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import java.util.ArrayList;
@@ -61,6 +60,7 @@
 import java.util.Set;
 import java.util.regex.Matcher;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
 
 /** Builder class to construct {@link CppLinkAction}s. */
 public class CppLinkActionBuilder {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/FeatureConfigurationForStarlark.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/FeatureConfigurationForStarlark.java
index a41b6df..14d0367 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/FeatureConfigurationForStarlark.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/FeatureConfigurationForStarlark.java
@@ -19,7 +19,7 @@
 import com.google.devtools.build.lib.analysis.config.BuildOptions;
 import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
 import com.google.devtools.build.lib.starlarkbuildapi.cpp.FeatureConfigurationApi;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
 
 /**
  * Wrapper for {@link FeatureConfiguration}, {@link CppConfiguration}, and {@link BuildOptions}.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/GoogleLegacyStubs.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/GoogleLegacyStubs.java
index e2b4f92..c6a296d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/GoogleLegacyStubs.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/GoogleLegacyStubs.java
@@ -37,10 +37,10 @@
 import com.google.devtools.build.lib.starlarkbuildapi.go.GoContextInfoApi;
 import com.google.devtools.build.lib.starlarkbuildapi.go.GoPackageInfoApi;
 import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Tuple;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Tuple;
 
 /**
  * Fake stub implementations for C++-related Starlark API which are unsupported without use of
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/LibraryToLink.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/LibraryToLink.java
index 986c462..d92f7c6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/LibraryToLink.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/LibraryToLink.java
@@ -24,11 +24,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.starlarkbuildapi.cpp.LibraryToLinkApi;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkList;
 import java.util.List;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkList;
 
 /**
  * Encapsulates information for linking a library.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkBuildVariables.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkBuildVariables.java
index 68a67c4..88d45fe 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkBuildVariables.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkBuildVariables.java
@@ -21,8 +21,8 @@
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
 import com.google.devtools.build.lib.rules.cpp.CcToolchainVariables.SequenceBuilder;
-import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.vfs.PathFragment;
+import net.starlark.java.eval.EvalException;
 
 /** Enum covering all build variables we create for all various {@link CppLinkAction}. */
 public enum LinkBuildVariables {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/BUILD b/src/main/java/com/google/devtools/build/lib/rules/java/BUILD
index 8fa8c30..1669890 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/BUILD
@@ -50,7 +50,6 @@
         ":RpcSupport",
         ":java-compilation",
         ":java-implicit-attributes",
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/actions",
         "//src/main/java/com/google/devtools/build/lib/actions:artifacts",
         "//src/main/java/com/google/devtools/build/lib/analysis:actions/custom_command_line",
@@ -96,6 +95,8 @@
         "//src/main/java/com/google/devtools/build/lib/util:os",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:guava",
         "//third_party:jsr305",
     ],
@@ -167,7 +168,6 @@
         "proto/GeneratedExtensionRegistryProvider.java",
     ],
     deps = [
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/actions",
         "//src/main/java/com/google/devtools/build/lib/actions:artifacts",
         "//src/main/java/com/google/devtools/build/lib/actions:commandline_item",
@@ -225,6 +225,8 @@
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
         "//src/main/java/com/google/devtools/common/options",
         "//src/main/java/net/starlark/java/annot",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//src/main/protobuf:deps_java_proto",
         "//src/main/protobuf:extra_actions_base_java_proto",
         "//src/main/protobuf:failure_details_java_proto",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/BootClassPathInfo.java b/src/main/java/com/google/devtools/build/lib/rules/java/BootClassPathInfo.java
index 81f0629..c1249cc 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/BootClassPathInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/BootClassPathInfo.java
@@ -24,16 +24,16 @@
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import javax.annotation.Nullable;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
+import net.starlark.java.syntax.Location;
 
 /** Information about the system APIs for a Java compilation. */
 @AutoCodec
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java
index 7544ca0..c95201a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java
@@ -52,7 +52,6 @@
 import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider.ClasspathType;
 import com.google.devtools.build.lib.rules.java.JavaConfiguration.OneVersionEnforcementLevel;
 import com.google.devtools.build.lib.rules.java.proto.GeneratedExtensionRegistryProvider;
-import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.util.OS;
 import com.google.devtools.build.lib.util.Pair;
 import com.google.devtools.build.lib.vfs.FileSystemUtils;
@@ -60,6 +59,7 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import net.starlark.java.eval.EvalException;
 
 /** An implementation of java_binary. */
 public class JavaBinary implements RuleConfiguredTargetFactory {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCcLinkParamsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCcLinkParamsProvider.java
index ae6887c..3bf4412 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCcLinkParamsProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCcLinkParamsProvider.java
@@ -20,7 +20,7 @@
 import com.google.devtools.build.lib.packages.Info;
 import com.google.devtools.build.lib.rules.cpp.CcInfo;
 import com.google.devtools.build.lib.starlarkbuildapi.java.JavaCcLinkParamsProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
 
 /** A target that provides C++ libraries to be linked into Java targets. */
 @Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java
index a5a4df8..a1bbb00 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java
@@ -69,9 +69,6 @@
 import com.google.devtools.build.lib.server.FailureDetails.JavaCompile.Code;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.starlarkbuildapi.CommandLineArgsApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkList;
 import com.google.devtools.build.lib.util.DetailedExitCode;
 import com.google.devtools.build.lib.util.Fingerprint;
 import com.google.devtools.build.lib.util.LazyString;
@@ -85,6 +82,9 @@
 import java.util.Map;
 import java.util.UUID;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkList;
 
 /** Action that represents a Java compilation. */
 @ThreadCompatible
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaHelper.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaHelper.java
index 6b32881..b6dac49 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaHelper.java
@@ -22,10 +22,10 @@
 import com.google.devtools.build.lib.packages.BuildType;
 import com.google.devtools.build.lib.packages.Type;
 import com.google.devtools.build.lib.shell.ShellUtils;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import java.util.ArrayList;
 import java.util.List;
+import net.starlark.java.eval.StarlarkSemantics;
 
 /** Utility methods for use by Java-related parts of Bazel. */
 // TODO(bazel-team): Merge with JavaUtil.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java
index 59123e8..9d21f31 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java
@@ -37,19 +37,19 @@
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.java.JavaInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkList;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 import java.util.function.Function;
 import java.util.stream.Stream;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkList;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
+import net.starlark.java.syntax.Location;
 
 /** A Starlark declared provider that encapsulates all providers that are needed by Java rules. */
 @Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfoBuildHelper.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfoBuildHelper.java
index 1af7f95..f837710 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfoBuildHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfoBuildHelper.java
@@ -39,16 +39,16 @@
 import com.google.devtools.build.lib.collect.nestedset.Order;
 import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider.ClasspathType;
 import com.google.devtools.build.lib.shell.ShellUtils;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import com.google.devtools.build.lib.vfs.FileSystemUtils;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Stream;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
 
 /** Implements logic for creating JavaInfo from different set of input parameters. */
 final class JavaInfoBuildHelper {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaNativeLibraryInfo.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaNativeLibraryInfo.java
index 5b2c52b..61fa7c0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaNativeLibraryInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaNativeLibraryInfo.java
@@ -24,7 +24,7 @@
 import com.google.devtools.build.lib.rules.cpp.LibraryToLink;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.starlarkbuildapi.java.JavaNativeLibraryInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
 
 /**
  * A target that provides native libraries in the transitive closure of its deps that are needed for
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java
index a5cf8a8..87679ed 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java
@@ -26,11 +26,11 @@
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.starlarkbuildapi.java.JavaRuleOutputJarsProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.java.OutputJarApi;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkList;
 import java.util.Collection;
 import java.util.stream.Collectors;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkList;
 
 /** Provides information about jar files produced by a Java rule. */
 @Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeInfo.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeInfo.java
index 0af7741..22552e6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeInfo.java
@@ -30,9 +30,9 @@
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.starlarkbuildapi.java.JavaRuntimeInfoApi;
-import com.google.devtools.build.lib.syntax.Location;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import javax.annotation.Nullable;
+import net.starlark.java.syntax.Location;
 
 /** Information about the Java runtime used by the <code>java_*</code> rules. */
 @Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaStarlarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaStarlarkCommon.java
index ea80528..6434491 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaStarlarkCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaStarlarkCommon.java
@@ -26,10 +26,10 @@
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.java.JavaCommonApi;
 import com.google.devtools.build.lib.starlarkbuildapi.java.JavaToolchainStarlarkApiProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkThread;
 
 /** A module that contains Starlark utilities for Java support. */
 public class JavaStarlarkCommon
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java
index c9be452..a7e75ad 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java
@@ -34,11 +34,11 @@
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.java.JavaToolchainStarlarkApiProviderApi;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkList;
 import java.util.Iterator;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkList;
+import net.starlark.java.syntax.Location;
 
 /** Information about the JDK used by the <code>java_*</code> rules. */
 @Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/MessageBundleInfo.java b/src/main/java/com/google/devtools/build/lib/rules/java/MessageBundleInfo.java
index 6576bc9..df4ca74 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/MessageBundleInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/MessageBundleInfo.java
@@ -24,16 +24,16 @@
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import java.util.List;
 import javax.annotation.Nullable;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
+import net.starlark.java.syntax.Location;
 
 /** Marks configured targets that are able to supply message bundles to their dependents. */
 @AutoCodec
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/ProguardSpecProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/ProguardSpecProvider.java
index b356e73..2950dcd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/ProguardSpecProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/ProguardSpecProvider.java
@@ -21,7 +21,7 @@
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.starlarkbuildapi.java.ProguardSpecProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
 
 /** A target that can provide proguard specifications to Android binaries. */
 @Immutable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/GeneratedExtensionRegistryProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/GeneratedExtensionRegistryProvider.java
index 74f923b..b1de0eb 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/GeneratedExtensionRegistryProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/GeneratedExtensionRegistryProvider.java
@@ -24,7 +24,7 @@
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.starlarkbuildapi.java.GeneratedExtensionRegistryProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
 
 /**
  * A {@link com.google.devtools.build.lib.analysis.TransitiveInfoProvider} for {@link Artifact}s
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoStarlarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoStarlarkCommon.java
index e3764e9..2b556b7 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoStarlarkCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoStarlarkCommon.java
@@ -30,7 +30,7 @@
 import com.google.devtools.build.lib.rules.proto.ProtoInfo;
 import com.google.devtools.build.lib.rules.proto.ProtoLangToolchainProvider;
 import com.google.devtools.build.lib.starlarkbuildapi.java.JavaProtoCommonApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
 
 /** A class that exposes Java common methods for proto compilation. */
 public class JavaProtoStarlarkCommon
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStarlarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStarlarkCommon.java
index b6fee9f..3530893 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStarlarkCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStarlarkCommon.java
@@ -43,16 +43,16 @@
 import com.google.devtools.build.lib.rules.objc.ObjcProvider.Key;
 import com.google.devtools.build.lib.starlarkbuildapi.SplitTransitionProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.apple.AppleCommonApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import java.util.Map;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
+import net.starlark.java.syntax.Location;
 
 /** A class that exposes apple rule implementation internals to Starlark. */
 public class AppleStarlarkCommon
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryInfo.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryInfo.java
index 19b9023..3e69875 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryInfo.java
@@ -18,7 +18,7 @@
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.starlarkbuildapi.apple.AppleStaticLibraryInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
 
 /**
  * Provider containing information regarding multi-architecture Apple static libraries, as is
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/BUILD b/src/main/java/com/google/devtools/build/lib/rules/objc/BUILD
index d12c157..7313f0f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/BUILD
@@ -14,7 +14,6 @@
     name = "objc",
     srcs = glob(["*.java"]),
     deps = [
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/actions",
         "//src/main/java/com/google/devtools/build/lib/actions:artifacts",
         "//src/main/java/com/google/devtools/build/lib/analysis:actions/custom_command_line",
@@ -69,6 +68,8 @@
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
         "//src/main/java/com/google/devtools/common/options",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:auto_value",
         "//third_party:guava",
         "//third_party:jsr305",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchSplitTransitionProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchSplitTransitionProvider.java
index 8f78c22..0a9ecd7 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchSplitTransitionProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchSplitTransitionProvider.java
@@ -45,11 +45,11 @@
 import com.google.devtools.build.lib.rules.objc.ObjcRuleClasses.PlatformRule;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.starlarkbuildapi.SplitTransitionProviderApi;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.StarlarkValue;
 
 /**
  * {@link TransitionFactory} implementation for multi-architecture apple rules which can accept
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java
index f377b1d..beb1c64 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java
@@ -56,12 +56,12 @@
 import com.google.devtools.build.lib.rules.cpp.CppModuleMap;
 import com.google.devtools.build.lib.rules.cpp.LibraryToLink;
 import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.util.FileType;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import net.starlark.java.eval.StarlarkSemantics;
 
 /**
  * Contains information common to multiple objc_* rules, and provides a unified API for extracting
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java
index 8172c21..3268de5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java
@@ -41,17 +41,17 @@
 import com.google.devtools.build.lib.rules.cpp.CppModuleMap;
 import com.google.devtools.build.lib.rules.cpp.LibraryToLink;
 import com.google.devtools.build.lib.starlarkbuildapi.apple.ObjcProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkList;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkList;
+import net.starlark.java.eval.StarlarkSemantics;
 
 /**
  * A provider that provides all compiling and linking information in the transitive closure of its
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProviderStarlarkConverters.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProviderStarlarkConverters.java
index 04560e8..986d8d3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProviderStarlarkConverters.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProviderStarlarkConverters.java
@@ -22,9 +22,9 @@
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
 import com.google.devtools.build.lib.rules.objc.ObjcProvider.Key;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.devtools.build.lib.vfs.PathFragment;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
 
 /** A utility class for converting ObjcProvider values between java and Starlark representation. */
 public class ObjcProviderStarlarkConverters {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/proto/BUILD b/src/main/java/com/google/devtools/build/lib/rules/proto/BUILD
index 3d1fcac..db13c34 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/proto/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/proto/BUILD
@@ -49,13 +49,13 @@
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
-        "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
         "//src/main/java/com/google/devtools/build/lib/util",
         "//src/main/java/com/google/devtools/build/lib/util:filetype",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
         "//src/main/java/com/google/devtools/common/options",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:auto_value",
         "//third_party:guava",
         "//third_party:jsr305",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoCommon.java b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoCommon.java
index d47ac2e..9c3691b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoCommon.java
@@ -32,12 +32,12 @@
 import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
 import com.google.devtools.build.lib.packages.Type;
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.util.Pair;
 import com.google.devtools.build.lib.vfs.FileSystemUtils;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.syntax.Location;
 
 /**
  * Utility functions for proto_library and proto aspect implementations.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoInfo.java b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoInfo.java
index 112e98c..243df22 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoInfo.java
@@ -24,9 +24,9 @@
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.starlarkbuildapi.ProtoInfoApi;
 import com.google.devtools.build.lib.starlarkbuildapi.proto.ProtoBootstrap;
-import com.google.devtools.build.lib.syntax.Location;
 import com.google.devtools.build.lib.util.Pair;
 import javax.annotation.Nullable;
+import net.starlark.java.syntax.Location;
 
 /**
  * Configured target classes that implement this class can contribute .proto files to the
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/BUILD b/src/main/java/com/google/devtools/build/lib/rules/python/BUILD
index f61630d..63b821d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/python/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/python/BUILD
@@ -45,14 +45,14 @@
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
-        "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
         "//src/main/java/com/google/devtools/build/lib/util:filetype",
         "//src/main/java/com/google/devtools/build/lib/util:os",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
         "//src/main/java/com/google/devtools/common/options",
         "//src/main/java/net/starlark/java/annot",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//src/main/protobuf:extra_actions_base_java_proto",
         "//third_party:error_prone_annotations",
         "//third_party:guava",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java
index 4f779cf..c9da2de 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java
@@ -13,7 +13,7 @@
 // limitations under the License.
 package com.google.devtools.build.lib.rules.python;
 
-import static com.google.devtools.build.lib.syntax.Starlark.NONE;
+import static net.starlark.java.eval.Starlark.NONE;
 
 import com.google.common.base.Joiner;
 import com.google.common.base.Preconditions;
@@ -50,8 +50,6 @@
 import com.google.devtools.build.lib.rules.cpp.CcInfo;
 import com.google.devtools.build.lib.rules.cpp.CppFileTypes;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.devtools.build.lib.util.FileType;
 import com.google.devtools.build.lib.util.OS;
 import com.google.devtools.build.lib.vfs.PathFragment;
@@ -62,6 +60,8 @@
 import java.util.Map;
 import java.util.UUID;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
 
 /** A helper class for analyzing a Python configured target. */
 public final class PyCommon {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyInfo.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyInfo.java
index d56959c..e1824ab 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/python/PyInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyInfo.java
@@ -24,12 +24,12 @@
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.Info;
 import com.google.devtools.build.lib.starlarkbuildapi.python.PyInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import java.util.Objects;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
 
 /** Instance of the provider type for the Python rules. */
 public final class PyInfo implements Info, PyInfoApi<Artifact> {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyProviderUtils.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyProviderUtils.java
index 4947a2e..7325ed2 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/python/PyProviderUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyProviderUtils.java
@@ -23,9 +23,9 @@
 import com.google.devtools.build.lib.collect.nestedset.Order;
 import com.google.devtools.build.lib.packages.StructImpl;
 import com.google.devtools.build.lib.rules.cpp.CppFileTypes;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.devtools.build.lib.util.FileType;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
 
 /**
  * Static helper class for creating and accessing Python provider information.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyRuntimeInfo.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyRuntimeInfo.java
index bb8f264..1e816e3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/python/PyRuntimeInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyRuntimeInfo.java
@@ -14,7 +14,7 @@
 
 package com.google.devtools.build.lib.rules.python;
 
-import static com.google.devtools.build.lib.syntax.Starlark.NONE;
+import static net.starlark.java.eval.Starlark.NONE;
 
 import com.google.common.base.Preconditions;
 import com.google.devtools.build.lib.actions.Artifact;
@@ -25,13 +25,13 @@
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.Info;
 import com.google.devtools.build.lib.starlarkbuildapi.python.PyRuntimeInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import java.util.Objects;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
 
 /**
  * Instance of the provider type that describes Python runtimes.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyStarlarkTransitions.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyStarlarkTransitions.java
index 622d3e0..eb7ac6d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/python/PyStarlarkTransitions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyStarlarkTransitions.java
@@ -21,8 +21,8 @@
 import com.google.devtools.build.lib.analysis.config.transitions.TransitionFactory;
 import com.google.devtools.build.lib.packages.AttributeTransitionData;
 import com.google.devtools.build.lib.starlarkbuildapi.python.PyStarlarkTransitionsApi;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.StarlarkValue;
 
 /**
  * Exposes a native transition to Starlark for changing the Python version.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyStructUtils.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyStructUtils.java
index c2dc8ee..48d972f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/python/PyStructUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyStructUtils.java
@@ -23,8 +23,8 @@
 import com.google.devtools.build.lib.collect.nestedset.Order;
 import com.google.devtools.build.lib.packages.StructImpl;
 import com.google.devtools.build.lib.packages.StructProvider;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
 
 /** Static helper class for creating and accessing instances of the legacy "py" struct provider. */
 // TODO(b/153363654): Remove this file.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PythonConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/python/PythonConfiguration.java
index 5d6899f..61661f2 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/python/PythonConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/python/PythonConfiguration.java
@@ -18,11 +18,11 @@
 import com.google.common.base.Verify;
 import com.google.devtools.build.lib.analysis.config.Fragment;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import com.google.devtools.build.lib.util.OS;
 import com.google.devtools.common.options.TriState;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkValue;
 
 /**
  * The configuration fragment containing information about the various pieces of infrastructure
diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/LocalRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/rules/repository/LocalRepositoryFunction.java
index e4714b8..cbc5779 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/repository/LocalRepositoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/repository/LocalRepositoryFunction.java
@@ -20,7 +20,6 @@
 import com.google.devtools.build.lib.analysis.RuleDefinition;
 import com.google.devtools.build.lib.events.ExtendedEventHandler.ResolvedEvent;
 import com.google.devtools.build.lib.packages.Rule;
-import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.devtools.build.lib.vfs.Path;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.lib.vfs.RootedPath;
@@ -30,6 +29,7 @@
 import java.io.IOException;
 import java.util.Map;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Starlark;
 
 /**
  * Access a repository on the local filesystem.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/NewLocalRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/rules/repository/NewLocalRepositoryFunction.java
index 8b326f4..6d1403b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/repository/NewLocalRepositoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/repository/NewLocalRepositoryFunction.java
@@ -23,7 +23,6 @@
 import com.google.devtools.build.lib.events.ExtendedEventHandler.ResolvedEvent;
 import com.google.devtools.build.lib.packages.Rule;
 import com.google.devtools.build.lib.skyframe.DirectoryListingValue;
-import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.devtools.build.lib.vfs.FileSystem;
 import com.google.devtools.build.lib.vfs.Path;
 import com.google.devtools.build.lib.vfs.PathFragment;
@@ -36,6 +35,7 @@
 import com.google.devtools.build.skyframe.SkyValue;
 import java.io.IOException;
 import java.util.Map;
+import net.starlark.java.eval.Starlark;
 
 /**
  * Create a repository from a directory on the local filesystem.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/NewRepositoryFileHandler.java b/src/main/java/com/google/devtools/build/lib/rules/repository/NewRepositoryFileHandler.java
index 1576e23..c63f322 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/repository/NewRepositoryFileHandler.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/repository/NewRepositoryFileHandler.java
@@ -23,7 +23,6 @@
 import com.google.devtools.build.lib.packages.Type;
 import com.google.devtools.build.lib.rules.repository.RepositoryFunction.RepositoryFunctionException;
 import com.google.devtools.build.lib.skyframe.PackageLookupValue;
-import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.vfs.Path;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.lib.vfs.Root;
@@ -33,6 +32,7 @@
 import com.google.devtools.build.skyframe.SkyKey;
 import java.io.IOException;
 import java.util.Map;
+import net.starlark.java.eval.EvalException;
 
 /**
  * Encapsulates the 2-step behavior of creating workspace and build files for the new_*_repository
diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryFunction.java
index beb0553..55e658e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryFunction.java
@@ -39,8 +39,6 @@
 import com.google.devtools.build.lib.skyframe.PackageLookupFunction;
 import com.google.devtools.build.lib.skyframe.PackageLookupValue;
 import com.google.devtools.build.lib.skyframe.PrecomputedValue;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.devtools.build.lib.vfs.FileSystemUtils;
 import com.google.devtools.build.lib.vfs.Path;
 import com.google.devtools.build.lib.vfs.PathFragment;
@@ -57,6 +55,8 @@
 import java.util.Map;
 import java.util.Objects;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
 
 /**
  * Implementation of fetching various external repository types.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/ResolvedFileFunction.java b/src/main/java/com/google/devtools/build/lib/rules/repository/ResolvedFileFunction.java
index c71948f..553eb41 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/repository/ResolvedFileFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/repository/ResolvedFileFunction.java
@@ -23,16 +23,6 @@
 import com.google.devtools.build.lib.packages.NoSuchThingException;
 import com.google.devtools.build.lib.rules.repository.ResolvedFileValue.ResolvedFileKey;
 import com.google.devtools.build.lib.skyframe.PrecomputedValue;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.ParserInput;
-import com.google.devtools.build.lib.syntax.Program;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkFile;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.SyntaxError;
 import com.google.devtools.build.lib.vfs.FileSystemUtils;
 import com.google.devtools.build.skyframe.SkyFunction;
 import com.google.devtools.build.skyframe.SkyFunctionException;
@@ -42,6 +32,16 @@
 import java.util.List;
 import java.util.Map;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.ParserInput;
+import net.starlark.java.syntax.Program;
+import net.starlark.java.syntax.StarlarkFile;
+import net.starlark.java.syntax.SyntaxError;
 
 /** Function computing the Starlark value of 'resolved' in a file. */
 public class ResolvedFileFunction implements SkyFunction {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/WorkspaceAttributeMapper.java b/src/main/java/com/google/devtools/build/lib/rules/repository/WorkspaceAttributeMapper.java
index c63cc84..95ddff2 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/repository/WorkspaceAttributeMapper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/repository/WorkspaceAttributeMapper.java
@@ -21,9 +21,9 @@
 import com.google.devtools.build.lib.packages.BuildType.SelectorList;
 import com.google.devtools.build.lib.packages.Rule;
 import com.google.devtools.build.lib.packages.Type;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
 
 /**
  * An attribute mapper for workspace rules. Similar to NonconfigurableAttributeWrapper, but throws
diff --git a/src/main/java/com/google/devtools/build/lib/rules/test/StarlarkTestingModule.java b/src/main/java/com/google/devtools/build/lib/rules/test/StarlarkTestingModule.java
index 28ff317..08f938c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/test/StarlarkTestingModule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/test/StarlarkTestingModule.java
@@ -16,8 +16,8 @@
 import com.google.devtools.build.lib.analysis.test.ExecutionInfo;
 import com.google.devtools.build.lib.analysis.test.TestEnvironmentInfo;
 import com.google.devtools.build.lib.starlarkbuildapi.test.TestingModuleApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
 
 /** A class that exposes testing infrastructure to Starlark. */
 public class StarlarkTestingModule implements TestingModuleApi {
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcher.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcher.java
index c43f2b7..45612d8 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcher.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcher.java
@@ -48,7 +48,6 @@
 import com.google.devtools.build.lib.server.FailureDetails;
 import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
 import com.google.devtools.build.lib.server.FailureDetails.Interrupted.Code;
-import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.devtools.build.lib.util.AbruptExitException;
 import com.google.devtools.build.lib.util.AnsiStrippingOutputStream;
 import com.google.devtools.build.lib.util.DebugLoggerConfigurator;
@@ -73,6 +72,7 @@
 import java.util.List;
 import java.util.Optional;
 import java.util.logging.Level;
+import net.starlark.java.eval.Starlark;
 
 /**
  * Dispatches to the Blaze commands; that is, given a command line, this abstraction looks up the
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
index 539e0a2..15c8148 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
@@ -81,7 +81,6 @@
 import com.google.devtools.build.lib.shell.JavaSubprocessFactory;
 import com.google.devtools.build.lib.shell.SubprocessBuilder;
 import com.google.devtools.build.lib.shell.SubprocessFactory;
-import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.util.AbruptExitException;
 import com.google.devtools.build.lib.util.CrashFailureDetails;
 import com.google.devtools.build.lib.util.CustomExitCodePublisher;
@@ -139,6 +138,7 @@
 import java.util.logging.LogRecord;
 import java.util.logging.Logger;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
 
 /**
  * The BlazeRuntime class encapsulates the immutable configuration of the current instance. These
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/LocationPrinter.java b/src/main/java/com/google/devtools/build/lib/runtime/LocationPrinter.java
index d6e2bfe..94acb32 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/LocationPrinter.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/LocationPrinter.java
@@ -16,11 +16,11 @@
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
-import com.google.devtools.build.lib.syntax.Location;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.lib.vfs.Root;
 import java.util.concurrent.atomic.AtomicReference;
 import javax.annotation.Nullable;
+import net.starlark.java.syntax.Location;
 
 class LocationPrinter {
   private final boolean attemptToPrintRelativePaths;
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/UiEventHandler.java b/src/main/java/com/google/devtools/build/lib/runtime/UiEventHandler.java
index ee0ca7c..5f3f4b0 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/UiEventHandler.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/UiEventHandler.java
@@ -45,7 +45,6 @@
 import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
 import com.google.devtools.build.lib.skyframe.ConfigurationPhaseStartedEvent;
 import com.google.devtools.build.lib.skyframe.LoadingPhaseStartedEvent;
-import com.google.devtools.build.lib.syntax.Location;
 import com.google.devtools.build.lib.util.io.AnsiTerminal;
 import com.google.devtools.build.lib.util.io.AnsiTerminal.Color;
 import com.google.devtools.build.lib.util.io.AnsiTerminalWriter;
@@ -69,6 +68,7 @@
 import java.util.concurrent.locks.ReentrantLock;
 import java.util.function.Supplier;
 import javax.annotation.Nullable;
+import net.starlark.java.syntax.Location;
 
 /** An experimental new output stream. */
 public class UiEventHandler implements EventHandler {
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/info/BUILD b/src/main/java/com/google/devtools/build/lib/runtime/commands/info/BUILD
index dbc6246..f88e38f 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/info/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/info/BUILD
@@ -20,13 +20,13 @@
         "//src/main/java/com/google/devtools/build/lib/packages/semantics",
         "//src/main/java/com/google/devtools/build/lib/pkgcache",
         "//src/main/java/com/google/devtools/build/lib/skyframe:skyframe_cluster",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
         "//src/main/java/com/google/devtools/build/lib/util:abrupt_exit_exception",
         "//src/main/java/com/google/devtools/build/lib/util:debug-logger-configurator",
         "//src/main/java/com/google/devtools/build/lib/util:process",
         "//src/main/java/com/google/devtools/build/lib/util:string",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/common/options",
+        "//src/main/java/net/starlark/java/eval",
         "//src/main/protobuf:build_java_proto",
         "//third_party:flogger",
         "//third_party:guava",
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/info/StarlarkSemanticsInfoItem.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/info/StarlarkSemanticsInfoItem.java
index 6a7aea7..7fb3456 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/info/StarlarkSemanticsInfoItem.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/info/StarlarkSemanticsInfoItem.java
@@ -20,8 +20,8 @@
 import com.google.devtools.build.lib.runtime.CommandEnvironment;
 import com.google.devtools.build.lib.runtime.InfoItem;
 import com.google.devtools.build.lib.skyframe.SkyframeExecutor;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.common.options.OptionsParsingResult;
+import net.starlark.java.eval.StarlarkSemantics;
 
 /**
  * Info item for the effective current set of Starlark semantics option values.
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ASTFileLookupFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ASTFileLookupFunction.java
index b378532..8882681 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ASTFileLookupFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ASTFileLookupFunction.java
@@ -20,12 +20,6 @@
 import com.google.devtools.build.lib.events.Event;
 import com.google.devtools.build.lib.packages.PackageFactory;
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
-import com.google.devtools.build.lib.syntax.FileOptions;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.ParserInput;
-import com.google.devtools.build.lib.syntax.Resolver;
-import com.google.devtools.build.lib.syntax.StarlarkFile;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.vfs.FileSystemUtils;
 import com.google.devtools.build.lib.vfs.Path;
 import com.google.devtools.build.lib.vfs.RootedPath;
@@ -37,6 +31,12 @@
 import java.io.IOException;
 import java.util.Map;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.syntax.FileOptions;
+import net.starlark.java.syntax.ParserInput;
+import net.starlark.java.syntax.Resolver;
+import net.starlark.java.syntax.StarlarkFile;
 
 /**
  * A Skyframe function that reads, parses, and resolves the .bzl file denoted by a Label.
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ASTFileLookupValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/ASTFileLookupValue.java
index 440a198..842b953 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ASTFileLookupValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ASTFileLookupValue.java
@@ -20,7 +20,6 @@
 import com.google.devtools.build.lib.concurrent.BlazeInterners;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
-import com.google.devtools.build.lib.syntax.StarlarkFile;
 import com.google.devtools.build.lib.vfs.Root;
 import com.google.devtools.build.skyframe.NotComparableSkyValue;
 import com.google.devtools.build.skyframe.SkyFunctionName;
@@ -28,6 +27,7 @@
 import com.google.errorprone.annotations.FormatMethod;
 import java.util.Objects;
 import javax.annotation.Nullable;
+import net.starlark.java.syntax.StarlarkFile;
 
 // TODO(adonovan): Ensure the result is always resolved and update the docstring.
 /**
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
index 3f6f62a..c053b8c 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
@@ -78,7 +78,6 @@
 import com.google.devtools.build.lib.skyframe.ArtifactFunction.MissingFileArtifactValue;
 import com.google.devtools.build.lib.skyframe.ArtifactNestedSetFunction.ArtifactNestedSetEvalException;
 import com.google.devtools.build.lib.skyframe.SkyframeActionExecutor.ActionPostprocessing;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.util.DetailedExitCode;
 import com.google.devtools.build.lib.util.Pair;
 import com.google.devtools.build.lib.util.io.FileOutErr;
@@ -107,6 +106,7 @@
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.function.IntFunction;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.StarlarkSemantics;
 
 /**
  * A {@link SkyFunction} that creates {@link ActionExecutionValue}s. There are four points where
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BUILD b/src/main/java/com/google/devtools/build/lib/skyframe/BUILD
index 47da2a4..0e8ad98 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BUILD
@@ -293,8 +293,6 @@
         "//src/main/java/com/google/devtools/build/lib/rules/cpp:cpp_interface",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/trimming:trimmed_configuration_cache",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
-        "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
         "//src/main/java/com/google/devtools/build/lib/util",
         "//src/main/java/com/google/devtools/build/lib/util:TestType",
         "//src/main/java/com/google/devtools/build/lib/util:abrupt_exit_exception",
@@ -309,6 +307,8 @@
         "//src/main/java/com/google/devtools/build/skyframe",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
         "//src/main/java/com/google/devtools/common/options",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//src/main/protobuf:analysis_java_proto",
         "//src/main/protobuf:analysis_v2_java_proto",
         "//src/main/protobuf:failure_details_java_proto",
@@ -883,10 +883,10 @@
         "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
-        "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/build/skyframe",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:error_prone_annotations",
         "//third_party:guava",
         "//third_party:jsr305",
@@ -1743,11 +1743,11 @@
         "//src/main/java/com/google/devtools/build/lib/packages/semantics",
         "//src/main/java/com/google/devtools/build/lib/pkgcache",
         "//src/main/java/com/google/devtools/build/lib/repository:external_package_helper",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
         "//src/main/java/com/google/devtools/build/skyframe",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
+        "//src/main/java/net/starlark/java/eval",
         "//third_party:guava",
         "//third_party:jsr305",
     ],
@@ -1876,9 +1876,9 @@
         "//src/main/java/com/google/devtools/build/lib/pkgcache",
         "//src/main/java/com/google/devtools/build/lib/remote/options",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
         "//src/main/java/com/google/devtools/build/skyframe",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
+        "//src/main/java/net/starlark/java/eval",
         "//third_party:guava",
         "//third_party:jsr305",
     ],
@@ -2347,9 +2347,9 @@
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
-        "//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
+        "//src/main/java/net/starlark/java/eval",
         "//third_party:guava",
     ],
 )
@@ -2730,9 +2730,9 @@
         ":sky_functions",
         "//src/main/java/com/google/devtools/build/lib/concurrent",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
-        "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:guava",
     ],
 )
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadFunction.java
index abe9f8a..d6e3320 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadFunction.java
@@ -43,16 +43,6 @@
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.skyframe.ASTFileLookupFunction.ASTLookupFailedException;
 import com.google.devtools.build.lib.skyframe.StarlarkBuiltinsFunction.BuiltinsFailedException;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.LoadStatement;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.Program;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkFile;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.Statement;
 import com.google.devtools.build.lib.util.Fingerprint;
 import com.google.devtools.build.lib.util.Pair;
 import com.google.devtools.build.lib.vfs.PathFragment;
@@ -70,6 +60,16 @@
 import java.util.Map;
 import java.util.function.Consumer;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.LoadStatement;
+import net.starlark.java.syntax.Program;
+import net.starlark.java.syntax.StarlarkFile;
+import net.starlark.java.syntax.Statement;
 
 /**
  * A Skyframe function to look up and load a single .bzl module.
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadValue.java
index 37b30c8..b8732a2 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadValue.java
@@ -20,13 +20,13 @@
 import com.google.devtools.build.lib.concurrent.BlazeInterners;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.syntax.Module;
 import com.google.devtools.build.lib.vfs.Root;
 import com.google.devtools.build.lib.vfs.RootedPath;
 import com.google.devtools.build.skyframe.SkyFunctionName;
 import com.google.devtools.build.skyframe.SkyKey;
 import com.google.devtools.build.skyframe.SkyValue;
 import java.util.Objects;
+import net.starlark.java.eval.Module;
 
 /**
  * A value that represents the .bzl module loaded by a Starlark {@code load()} statement.
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
index e337aa5..4b93f82 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
@@ -80,7 +80,6 @@
 import com.google.devtools.build.lib.packages.Target;
 import com.google.devtools.build.lib.packages.TargetUtils;
 import com.google.devtools.build.lib.skyframe.SkyframeExecutor.BuildViewProvider;
-import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.util.OrderedSetMultimap;
 import com.google.devtools.build.skyframe.SkyFunction;
 import com.google.devtools.build.skyframe.SkyFunctionException;
@@ -100,6 +99,7 @@
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
 
 /**
  * SkyFunction for {@link ConfiguredTargetValue}s.
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
index f92fb2d..12829ef 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
@@ -61,13 +61,6 @@
 import com.google.devtools.build.lib.server.FailureDetails.PackageLoading.Code;
 import com.google.devtools.build.lib.skyframe.BzlLoadFunction.BzlLoadFailedException;
 import com.google.devtools.build.lib.skyframe.GlobValue.InvalidGlobPatternException;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.FileOptions;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.ParserInput;
-import com.google.devtools.build.lib.syntax.StarlarkFile;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.util.DetailedExitCode;
 import com.google.devtools.build.lib.util.ExitCode;
 import com.google.devtools.build.lib.util.Pair;
@@ -98,6 +91,13 @@
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.syntax.FileOptions;
+import net.starlark.java.syntax.Location;
+import net.starlark.java.syntax.ParserInput;
+import net.starlark.java.syntax.StarlarkFile;
 
 /** A SkyFunction for {@link PackageValue}s. */
 public class PackageFunction implements SkyFunction {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java
index 183ea8a..020aae3 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java
@@ -30,8 +30,6 @@
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
 import com.google.devtools.build.lib.repository.ExternalPackageHelper;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.lib.vfs.Root;
 import com.google.devtools.build.lib.vfs.RootedPath;
@@ -43,6 +41,8 @@
 import java.io.IOException;
 import java.util.concurrent.atomic.AtomicReference;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkSemantics;
 
 /**
  * SkyFunction for {@link PackageLookupValue}s.
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PlatformMappingFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PlatformMappingFunction.java
index 2799fcc..58e3d42 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PlatformMappingFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PlatformMappingFunction.java
@@ -29,7 +29,6 @@
 import com.google.devtools.build.lib.server.FailureDetails.BuildConfiguration;
 import com.google.devtools.build.lib.server.FailureDetails.BuildConfiguration.Code;
 import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
-import com.google.devtools.build.lib.syntax.Location;
 import com.google.devtools.build.lib.vfs.FileSystemUtils;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.lib.vfs.Root;
@@ -44,6 +43,7 @@
 import java.util.Map;
 import java.util.Optional;
 import javax.annotation.Nullable;
+import net.starlark.java.syntax.Location;
 
 /**
  * Function that reads the contents of a mapping file specified in {@code --platform_mappings} and
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PrecomputedValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/PrecomputedValue.java
index dc1419b..b03a8f7 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PrecomputedValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PrecomputedValue.java
@@ -23,7 +23,6 @@
 import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
 import com.google.devtools.build.lib.remote.options.RemoteOutputsMode;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.skyframe.AbstractSkyKey;
 import com.google.devtools.build.skyframe.Injectable;
 import com.google.devtools.build.skyframe.SkyFunction;
@@ -32,6 +31,7 @@
 import java.util.Map;
 import java.util.UUID;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.StarlarkSemantics;
 
 /**
  * A value that represents something computed outside of the skyframe framework. These values are
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
index ec30b71..61038e1 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
@@ -159,8 +159,6 @@
 import com.google.devtools.build.lib.skyframe.SkyframeActionExecutor.ActionCompletedReceiver;
 import com.google.devtools.build.lib.skyframe.SkyframeActionExecutor.ProgressSupplier;
 import com.google.devtools.build.lib.skyframe.trimming.TrimmedConfigurationCache;
-import com.google.devtools.build.lib.syntax.StarlarkFile;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.util.AbruptExitException;
 import com.google.devtools.build.lib.util.DetailedExitCode;
 import com.google.devtools.build.lib.util.ExitCode;
@@ -226,6 +224,8 @@
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.syntax.StarlarkFile;
 
 /**
  * A helper object to support Skyframe-driven execution.
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkAspectFactory.java b/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkAspectFactory.java
index ce86d3b..2568eff 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkAspectFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkAspectFactory.java
@@ -30,13 +30,13 @@
 import com.google.devtools.build.lib.packages.StarlarkDefinedAspect;
 import com.google.devtools.build.lib.packages.StructImpl;
 import com.google.devtools.build.lib.packages.StructProvider;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import java.util.Map;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
 
 /** A factory for aspects that are defined in Starlark. */
 public class StarlarkAspectFactory implements ConfiguredAspectFactory {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkBuiltinsFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkBuiltinsFunction.java
index af12f35..4031514 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkBuiltinsFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkBuiltinsFunction.java
@@ -20,10 +20,6 @@
 import com.google.devtools.build.lib.packages.PackageFactory;
 import com.google.devtools.build.lib.packages.PackageFactory.InjectionException;
 import com.google.devtools.build.lib.skyframe.BzlLoadFunction.BzlLoadFailedException;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.devtools.build.skyframe.RecordingSkyFunctionEnvironment;
 import com.google.devtools.build.skyframe.SkyFunction;
 import com.google.devtools.build.skyframe.SkyFunctionException;
@@ -31,6 +27,10 @@
 import com.google.devtools.build.skyframe.SkyKey;
 import com.google.devtools.build.skyframe.SkyValue;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.Starlark;
 
 // TODO(#11437): Teach ASTFileLookup about builtins keys, then have them modify their env the same
 // way as BzlLoadFunction. This will   allow us to define the _internal symbol for @builtins.
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceASTFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceASTFunction.java
index fc045e4..4981746 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceASTFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceASTFunction.java
@@ -28,13 +28,6 @@
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.rules.repository.RepositoryDelegatorFunction;
 import com.google.devtools.build.lib.rules.repository.ResolvedFileValue;
-import com.google.devtools.build.lib.syntax.FileOptions;
-import com.google.devtools.build.lib.syntax.LoadStatement;
-import com.google.devtools.build.lib.syntax.ParserInput;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkFile;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.Statement;
 import com.google.devtools.build.lib.vfs.FileSystemUtils;
 import com.google.devtools.build.lib.vfs.Path;
 import com.google.devtools.build.lib.vfs.RootedPath;
@@ -48,6 +41,13 @@
 import java.util.Map;
 import java.util.Optional;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.syntax.FileOptions;
+import net.starlark.java.syntax.LoadStatement;
+import net.starlark.java.syntax.ParserInput;
+import net.starlark.java.syntax.StarlarkFile;
+import net.starlark.java.syntax.Statement;
 
 /** A SkyFunction to parse WORKSPACE files into a StarlarkFile. */
 public class WorkspaceASTFunction implements SkyFunction {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceASTValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceASTValue.java
index 6397c79..2b99196 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceASTValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceASTValue.java
@@ -18,12 +18,12 @@
 import com.google.common.collect.Interner;
 import com.google.devtools.build.lib.concurrent.BlazeInterners;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.syntax.StarlarkFile;
 import com.google.devtools.build.lib.vfs.RootedPath;
 import com.google.devtools.build.skyframe.AbstractSkyKey;
 import com.google.devtools.build.skyframe.SkyFunctionName;
 import com.google.devtools.build.skyframe.SkyValue;
 import java.util.List;
+import net.starlark.java.syntax.StarlarkFile;
 
 /**
  * A SkyValue that stores the parsed WORKSPACE file as a list of AST. Each AST contains the part
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java
index 5622827..3922667 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java
@@ -28,10 +28,6 @@
 import com.google.devtools.build.lib.packages.WorkspaceFactory;
 import com.google.devtools.build.lib.packages.WorkspaceFileValue;
 import com.google.devtools.build.lib.packages.WorkspaceFileValue.WorkspaceFileKey;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.StarlarkFile;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.vfs.RootedPath;
 import com.google.devtools.build.skyframe.SkyFunction;
 import com.google.devtools.build.skyframe.SkyFunctionException;
@@ -39,6 +35,10 @@
 import com.google.devtools.build.skyframe.SkyKey;
 import com.google.devtools.build.skyframe.SkyValue;
 import java.io.IOException;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.syntax.StarlarkFile;
 
 /** A SkyFunction to parse the WORKSPACE file at a given path. */
 public class WorkspaceFileFunction implements SkyFunction {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java b/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java
index ac00dc7..55ccad7 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java
@@ -79,8 +79,6 @@
 import com.google.devtools.build.lib.skyframe.WorkspaceASTFunction;
 import com.google.devtools.build.lib.skyframe.WorkspaceFileFunction;
 import com.google.devtools.build.lib.skyframe.WorkspaceNameFunction;
-import com.google.devtools.build.lib.syntax.StarlarkFile;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor;
 import com.google.devtools.build.lib.vfs.Path;
 import com.google.devtools.build.lib.vfs.PathFragment;
@@ -115,6 +113,8 @@
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicReference;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.syntax.StarlarkFile;
 
 /**
  * Abstract base class of a {@link PackageLoader} implementation that has no incrementality or
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/packages/BUILD b/src/main/java/com/google/devtools/build/lib/skyframe/packages/BUILD
index a868913..a8b6824 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/packages/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/packages/BUILD
@@ -28,7 +28,6 @@
     srcs = ["AbstractPackageLoader.java"],
     deps = [
         ":PackageLoader",
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/actions:file_metadata",
         "//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster",
         "//src/main/java/com/google/devtools/build/lib/analysis:blaze_directories",
@@ -60,6 +59,8 @@
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
         "//src/main/java/com/google/devtools/build/skyframe",
         "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:guava",
         "//third_party:jsr305",
     ],
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/BUILD b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/BUILD
index 94a1ad5..d856710 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/BUILD
@@ -22,11 +22,12 @@
         "//src/test/java/com/google/devtools/build/lib/vfs/util",  # For FileSystem modules
     ],
     deps = [
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
         "//src/main/java/com/google/devtools/build/lib/vfs/inmemoryfs",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:flogger",
         "//third_party:guava",
         "//third_party:jsr305",
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/TestUtils.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/TestUtils.java
index 54221dc..7403beb 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/TestUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/TestUtils.java
@@ -24,14 +24,14 @@
 import com.google.devtools.build.lib.skyframe.serialization.ObjectCodecs;
 import com.google.devtools.build.lib.skyframe.serialization.SerializationContext;
 import com.google.devtools.build.lib.skyframe.serialization.SerializationException;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.Mutability;
 import com.google.protobuf.ByteString;
 import com.google.protobuf.CodedInputStream;
 import com.google.protobuf.CodedOutputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.Mutability;
 
 /** Helpers for serialization tests. */
 public class TestUtils {
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/ActionApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/ActionApi.java
index 8b40d54..2c04544 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/ActionApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/ActionApi.java
@@ -16,15 +16,15 @@
 
 import com.google.devtools.build.lib.collect.nestedset.Depset;
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import java.io.IOException;
 import javax.annotation.Nullable;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Interface for actions in Starlark. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/BUILD b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/BUILD
index 4087238..fcf8414 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/BUILD
@@ -41,7 +41,8 @@
     deps = [
         "//third_party:guava",
         "//src/main/java/net/starlark/java/annot",
-        "//src/main/java/com/google/devtools/build/lib:syntax",
+        "//src/main/java/net/starlark/java/syntax",
+        "//src/main/java/net/starlark/java/eval",
         "//src/main/java/com/google/devtools/build/lib/collect/nestedset",
         "//src/main/java/com/google/devtools/build/lib/packages/semantics",
         # TODO(cparsons): Remove dependency on Label implementation.
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/BuildConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/BuildConfigurationApi.java
index 7923d1f..0b58466 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/BuildConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/BuildConfigurationApi.java
@@ -15,10 +15,10 @@
 package com.google.devtools.build.lib.starlarkbuildapi;
 
 import com.google.common.collect.ImmutableMap;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Interface for a configuration object which holds information about the build environment. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/CommandLineArgsApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/CommandLineArgsApi.java
index 263f2e6..f6fb50b 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/CommandLineArgsApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/CommandLineArgsApi.java
@@ -15,16 +15,16 @@
 package com.google.devtools.build.lib.starlarkbuildapi;
 
 import com.google.devtools.build.lib.collect.nestedset.Depset;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.ParamType;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Command line args module. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/DefaultInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/DefaultInfoApi.java
index 2e3e808..b02030a 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/DefaultInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/DefaultInfoApi.java
@@ -17,13 +17,13 @@
 import com.google.devtools.build.lib.collect.nestedset.Depset;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkThread;
 
 /** A provider that gives general information about a target's direct and transitive files. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/DirectoryExpander.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/DirectoryExpander.java
index b78398e..3bcdfbe 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/DirectoryExpander.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/DirectoryExpander.java
@@ -15,11 +15,11 @@
 package com.google.devtools.build.lib.starlarkbuildapi;
 
 import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /** A class that can be used to expand directories at execution time. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/ExecGroupApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/ExecGroupApi.java
index 36dd936..0366c93 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/ExecGroupApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/ExecGroupApi.java
@@ -14,9 +14,9 @@
 
 package com.google.devtools.build.lib.starlarkbuildapi;
 
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkValue;
 
 /** A unit of toolchain resolution. Every rule has one or more of these. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FileApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FileApi.java
index 92866b6..5e494f5 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FileApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FileApi.java
@@ -15,11 +15,11 @@
 package com.google.devtools.build.lib.starlarkbuildapi;
 
 import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkValue;
 
 /** The interface for files in Starlark. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FileProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FileProviderApi.java
index 9e47955..781f90e 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FileProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FileProviderApi.java
@@ -15,10 +15,10 @@
 package com.google.devtools.build.lib.starlarkbuildapi;
 
 import com.google.devtools.build.lib.collect.nestedset.Depset;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /** A representation of the concept "this builds these files". */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FileRootApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FileRootApi.java
index a85ff78..f836d7f 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FileRootApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FileRootApi.java
@@ -14,10 +14,10 @@
 
 package com.google.devtools.build.lib.starlarkbuildapi;
 
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /**
  * A root for a file. The roots are the directories containing files, and they are mapped together
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FilesToRunProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FilesToRunProviderApi.java
index 956450b..559c64e 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FilesToRunProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FilesToRunProviderApi.java
@@ -14,11 +14,11 @@
 
 package com.google.devtools.build.lib.starlarkbuildapi;
 
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import javax.annotation.Nullable;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Returns information about executables produced by a target and the files needed to run it. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FilesetEntryApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FilesetEntryApi.java
index 72e9dc7..207d564 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FilesetEntryApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FilesetEntryApi.java
@@ -14,8 +14,8 @@
 
 package com.google.devtools.build.lib.starlarkbuildapi;
 
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
+import net.starlark.java.eval.StarlarkValue;
 
 /** A value object used to represent an entry inside a "Fileset" BUILD rule. */
 @StarlarkBuiltin(name = "FilesetEntry", doc = "", documented = false)
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FragmentCollectionApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FragmentCollectionApi.java
index c3bbcb8..72c2968 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FragmentCollectionApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/FragmentCollectionApi.java
@@ -14,10 +14,10 @@
 
 package com.google.devtools.build.lib.starlarkbuildapi;
 
-import com.google.devtools.build.lib.syntax.ClassObject;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.ClassObject;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Represents a collection of configuration fragments in Starlark. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/LateBoundDefaultApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/LateBoundDefaultApi.java
index 9d49286..38d42f7 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/LateBoundDefaultApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/LateBoundDefaultApi.java
@@ -14,9 +14,9 @@
 
 package com.google.devtools.build.lib.starlarkbuildapi;
 
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkValue;
 
 /** The interface for late bound defaults in Starlark. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/LicenseApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/LicenseApi.java
index fea2954..287fbe3 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/LicenseApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/LicenseApi.java
@@ -14,9 +14,9 @@
 
 package com.google.devtools.build.lib.starlarkbuildapi;
 
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkValue;
 
 /** The interface for a license in Starlark. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/OutputGroupInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/OutputGroupInfoApi.java
index 91ebf79..3cc0f04 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/OutputGroupInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/OutputGroupInfoApi.java
@@ -16,13 +16,13 @@
 
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
 
 /** Interface for an info object that indicates what output groups a rule has. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/ProtoConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/ProtoConfigurationApi.java
index 6549277..b88cd92 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/ProtoConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/ProtoConfigurationApi.java
@@ -14,9 +14,9 @@
 
 package com.google.devtools.build.lib.starlarkbuildapi;
 
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkValue;
 
 /** A configuration fragment representing protocol buffers. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/RunfilesApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/RunfilesApi.java
index 15479cf9..fa35845 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/RunfilesApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/RunfilesApi.java
@@ -15,11 +15,11 @@
 package com.google.devtools.build.lib.starlarkbuildapi;
 
 import com.google.devtools.build.lib.collect.nestedset.Depset;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /** An interface for a set of runfiles. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/SplitTransitionProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/SplitTransitionProviderApi.java
index ba722a0..50a7bea 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/SplitTransitionProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/SplitTransitionProviderApi.java
@@ -14,7 +14,7 @@
 
 package com.google.devtools.build.lib.starlarkbuildapi;
 
-import com.google.devtools.build.lib.syntax.StarlarkValue;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Interface for a type representing a split configuration transition. */
 public interface SplitTransitionProviderApi extends StarlarkValue {
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkActionFactoryApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkActionFactoryApi.java
index bc27d9d..2694b95 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkActionFactoryApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkActionFactoryApi.java
@@ -16,16 +16,16 @@
 
 import com.google.devtools.build.lib.collect.nestedset.Depset;
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.ParamType;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Module providing functions to create actions. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkAspectApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkAspectApi.java
index e1b9848..8d5667b 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkAspectApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkAspectApi.java
@@ -14,9 +14,9 @@
 
 package com.google.devtools.build.lib.starlarkbuildapi;
 
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkValue;
 
 /** The interface for Starlark-defined aspects in the Build API. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkAttrModuleApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkAttrModuleApi.java
index 2f95d56..e28837e 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkAttrModuleApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkAttrModuleApi.java
@@ -16,17 +16,17 @@
 
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkFunction;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.ParamType;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkFunction;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
 
 /**
  * The "attr" module of the Build API.
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkAttributesCollectionApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkAttributesCollectionApi.java
index 456eaad..b7f61d5 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkAttributesCollectionApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkAttributesCollectionApi.java
@@ -15,11 +15,11 @@
 package com.google.devtools.build.lib.starlarkbuildapi;
 
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Interface for a type containing information about the attributes of a rule. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkBuildApiGlobals.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkBuildApiGlobals.java
index 5dc6b93..66fb472 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkBuildApiGlobals.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkBuildApiGlobals.java
@@ -14,11 +14,11 @@
 
 package com.google.devtools.build.lib.starlarkbuildapi;
 
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkGlobalLibrary;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkThread;
 
 /** A collection of global Starlark build API functions that belong in the global namespace. */
 @StarlarkGlobalLibrary
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkCommandLineApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkCommandLineApi.java
index c9d2daf..9e14edd 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkCommandLineApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkCommandLineApi.java
@@ -15,13 +15,13 @@
 package com.google.devtools.build.lib.starlarkbuildapi;
 
 import com.google.devtools.build.lib.collect.nestedset.Depset;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDeprecated;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Interface for a module associated with creating efficient command lines. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkConfigApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkConfigApi.java
index 2dd9820..67b901e 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkConfigApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkConfigApi.java
@@ -15,11 +15,11 @@
 package com.google.devtools.build.lib.starlarkbuildapi;
 
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /**
  * The "config" module of the Build API.
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkNativeModuleApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkNativeModuleApi.java
index 0c62ff4..e7995b8 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkNativeModuleApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkNativeModuleApi.java
@@ -14,16 +14,16 @@
 
 package com.google.devtools.build.lib.starlarkbuildapi;
 
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.NoneType;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.NoneType;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Interface for a module with native rule and package helper functions. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkRuleContextApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkRuleContextApi.java
index aabec03..7963a17 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkRuleContextApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkRuleContextApi.java
@@ -24,19 +24,19 @@
 import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
 import com.google.devtools.build.lib.starlarkbuildapi.platform.ExecGroupCollectionApi;
 import com.google.devtools.build.lib.starlarkbuildapi.platform.ToolchainContextApi;
-import com.google.devtools.build.lib.syntax.ClassObject;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
-import com.google.devtools.build.lib.syntax.Tuple;
 import javax.annotation.Nullable;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.ParamType;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.ClassObject;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
+import net.starlark.java.eval.Tuple;
 
 /** Interface for a context object given to rule implementation functions. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkRuleFunctionsApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkRuleFunctionsApi.java
index 9f5de36..98c919c 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkRuleFunctionsApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkRuleFunctionsApi.java
@@ -18,18 +18,18 @@
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkConfigApi.BuildSettingApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.NoneType;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkFunction;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.ParamType;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkGlobalLibrary;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.NoneType;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkFunction;
+import net.starlark.java.eval.StarlarkThread;
 
 /**
  * Interface for a global Starlark library containing rule-related helper and registration
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/SymlinkEntryApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/SymlinkEntryApi.java
index 22f8ec0..07f770e 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/SymlinkEntryApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/SymlinkEntryApi.java
@@ -14,10 +14,10 @@
 
 package com.google.devtools.build.lib.starlarkbuildapi;
 
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Interface for a single runfiles symlink represented by a link name and target. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/TargetApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/TargetApi.java
index a9fa8fa..ab6e2a2 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/TargetApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/TargetApi.java
@@ -15,9 +15,9 @@
 package com.google.devtools.build.lib.starlarkbuildapi;
 
 import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /** A node in the build dependency graph, identified by a Label. */
 @StarlarkBuiltin(name = "target", doc = "", documented = false)
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/TemplateVariableInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/TemplateVariableInfoApi.java
index 8be5fbf..6af8770 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/TemplateVariableInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/TemplateVariableInfoApi.java
@@ -17,13 +17,13 @@
 import com.google.common.collect.ImmutableMap;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkThread;
 
 /** Provides access to make variables from the current fragments. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/TopLevelBootstrap.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/TopLevelBootstrap.java
index 142344a..42070ee 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/TopLevelBootstrap.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/TopLevelBootstrap.java
@@ -19,7 +19,7 @@
 import com.google.devtools.build.lib.starlarkbuildapi.OutputGroupInfoApi.OutputGroupInfoApiProvider;
 import com.google.devtools.build.lib.starlarkbuildapi.core.Bootstrap;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.Starlark;
+import net.starlark.java.eval.Starlark;
 
 /**
  * A {@link Bootstrap} for top-level libraries of the build API.
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/WorkspaceGlobalsApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/WorkspaceGlobalsApi.java
index 63fcb4c..8168c4c 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/WorkspaceGlobalsApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/WorkspaceGlobalsApi.java
@@ -16,14 +16,14 @@
 package com.google.devtools.build.lib.starlarkbuildapi;
 
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.NoneType;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkGlobalLibrary;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.NoneType;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
 
 /** A collection of global Starlark build API functions that apply to WORKSPACE files. */
 @StarlarkGlobalLibrary
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidApplicationResourceInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidApplicationResourceInfoApi.java
index d033994..336e23b 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidApplicationResourceInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidApplicationResourceInfoApi.java
@@ -16,11 +16,11 @@
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
 
 /** Supplies a resource apk file (".ap_") and related info. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidAssetsInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidAssetsInfoApi.java
index bb38010..6a7b4ab 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidAssetsInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidAssetsInfoApi.java
@@ -19,13 +19,13 @@
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
 import javax.annotation.Nullable;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
 
 /** Provides information about transitive Android assets. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidBinaryDataInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidBinaryDataInfoApi.java
index 76b3866..8b7d480 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidBinaryDataInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidBinaryDataInfoApi.java
@@ -16,12 +16,12 @@
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
 
 /**
  * Provides information on Android resource, asset, and manifest information specific to binaries.
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidBinaryDataSettingsApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidBinaryDataSettingsApi.java
index da2f124..a9f38f3 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidBinaryDataSettingsApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidBinaryDataSettingsApi.java
@@ -13,8 +13,8 @@
 // limitations under the License.
 package com.google.devtools.build.lib.starlarkbuildapi.android;
 
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Wraps common settings for working with android binary assets, resources, and manifests. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidBootstrap.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidBootstrap.java
index e0f3298..5090891 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidBootstrap.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidBootstrap.java
@@ -23,8 +23,8 @@
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidResourcesInfoApi.AndroidResourcesInfoApiProvider;
 import com.google.devtools.build.lib.starlarkbuildapi.android.ApkInfoApi.ApkInfoApiProvider;
 import com.google.devtools.build.lib.starlarkbuildapi.core.Bootstrap;
-import com.google.devtools.build.lib.syntax.FlagGuardedValue;
 import java.util.Map;
+import net.starlark.java.eval.FlagGuardedValue;
 
 /** {@link Bootstrap} for Starlark objects related to Android rules. */
 public class AndroidBootstrap implements Bootstrap {
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidCcLinkParamsProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidCcLinkParamsProviderApi.java
index b0ffb8e..aa0436e 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidCcLinkParamsProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidCcLinkParamsProviderApi.java
@@ -18,12 +18,12 @@
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
 import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
 
 /** A target that provides C++ libraries to be linked into Android targets. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidConfigurationApi.java
index a30048d..06bf18c 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidConfigurationApi.java
@@ -14,10 +14,10 @@
 package com.google.devtools.build.lib.starlarkbuildapi.android;
 
 import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Configuration fragment for Android rules. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDataContextApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDataContextApi.java
index 665fb2e..26535be 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDataContextApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDataContextApi.java
@@ -13,8 +13,8 @@
 // limitations under the License.
 package com.google.devtools.build.lib.starlarkbuildapi.android;
 
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
+import net.starlark.java.eval.StarlarkValue;
 
 /**
  * Wraps common tools and settings used for working with Android assets, resources, and manifests.
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDataProcessingApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDataProcessingApi.java
index faabbeb..4e0e963 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDataProcessingApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDataProcessingApi.java
@@ -19,14 +19,14 @@
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.TransitiveInfoCollectionApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Starlark-visible methods for working with Android data (manifests, resources, and assets). */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDeviceBrokerInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDeviceBrokerInfoApi.java
index 27b7c8d..2f1c464 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDeviceBrokerInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDeviceBrokerInfoApi.java
@@ -15,11 +15,11 @@
 
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
 
 /** Supplies the device broker type string, passed to the Android test runtime. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDex2OatInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDex2OatInfoApi.java
index 595caf4..05d370f 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDex2OatInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDex2OatInfoApi.java
@@ -17,11 +17,11 @@
 import com.google.devtools.build.lib.starlarkbuildapi.FilesToRunProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.NoneType;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.ParamType;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.NoneType;
 
 /**
  * Supplies the pregenerate_oat_files_for_tests attribute of type boolean provided by android_device
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidFeatureFlagSetProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidFeatureFlagSetProviderApi.java
index d3a2481..8eef428 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidFeatureFlagSetProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidFeatureFlagSetProviderApi.java
@@ -17,13 +17,13 @@
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
 
 /** */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidIdeInfoProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidIdeInfoProviderApi.java
index 9bf5d30..e667b64 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidIdeInfoProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidIdeInfoProviderApi.java
@@ -20,14 +20,14 @@
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
 import com.google.devtools.build.lib.starlarkbuildapi.java.OutputJarApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
 import javax.annotation.Nullable;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
 
 /**
  * Configured targets implementing this provider can contribute Android-specific info to IDE to the
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidIdlProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidIdlProviderApi.java
index e2134a5..b2ad3ad 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidIdlProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidIdlProviderApi.java
@@ -17,12 +17,12 @@
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
 
 /**
  * Configured targets implementing this provider can contribute Android IDL information to the
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidInstrumentationInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidInstrumentationInfoApi.java
index 9c76e3f..46aebd8 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidInstrumentationInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidInstrumentationInfoApi.java
@@ -15,12 +15,12 @@
 
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
 
 /**
  * A provider for targets that create Android instrumentations. Consumed by Android testing rules.
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidLibraryAarInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidLibraryAarInfoApi.java
index 930478f..ab43927 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidLibraryAarInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidLibraryAarInfoApi.java
@@ -17,13 +17,13 @@
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
 
 /** A target that can provide the aar artifact of Android libraries */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidLibraryResourceClassJarProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidLibraryResourceClassJarProviderApi.java
index 0b03f66..32ea703 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidLibraryResourceClassJarProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidLibraryResourceClassJarProviderApi.java
@@ -17,12 +17,12 @@
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
 
 /** Provides resource class jars from android_library rules. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidManifestApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidManifestApi.java
index 9a648b0..d55d25d 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidManifestApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidManifestApi.java
@@ -13,9 +13,9 @@
 // limitations under the License.
 package com.google.devtools.build.lib.starlarkbuildapi.android;
 
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Wraps an Android Manifest and provides utilities for working with it */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidManifestInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidManifestInfoApi.java
index 8139408..14dc173 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidManifestInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidManifestInfoApi.java
@@ -16,11 +16,11 @@
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
 
 /** A provider of information about this target's manifest. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidNativeLibsInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidNativeLibsInfoApi.java
index 9f51ea0..27f0738 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidNativeLibsInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidNativeLibsInfoApi.java
@@ -17,11 +17,11 @@
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
 
 /**
  * Provider of transitively available ZIPs of native libs that should be directly copied into the
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidPreDexJarProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidPreDexJarProviderApi.java
index a9f9990..49adc3c 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidPreDexJarProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidPreDexJarProviderApi.java
@@ -17,12 +17,12 @@
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
 
 /** A provider of the final Jar to be dexed for targets that build APKs. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidProguardInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidProguardInfoApi.java
index 960c260..c377a2e 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidProguardInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidProguardInfoApi.java
@@ -17,12 +17,12 @@
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
 
 /** A target that can provide local proguard specifications. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidResourcesInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidResourcesInfoApi.java
index c89b847..737ce1b 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidResourcesInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidResourcesInfoApi.java
@@ -18,12 +18,12 @@
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
 
 /** A provider that supplies resource information from its transitive closure. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidSdkProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidSdkProviderApi.java
index 8207fce..b4fc5a2 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidSdkProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidSdkProviderApi.java
@@ -18,13 +18,13 @@
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.TransitiveInfoCollectionApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import javax.annotation.Nullable;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkValue;
 
 /**
  * Configured targets implementing this provider can contribute Android Sdk information to the
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidSplitTransititionApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidSplitTransititionApi.java
index 2801b3d..69d496b 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidSplitTransititionApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidSplitTransititionApi.java
@@ -13,8 +13,8 @@
 // limitations under the License.
 package com.google.devtools.build.lib.starlarkbuildapi.android;
 
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Android configuration for properly handling native dependencies */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidStarlarkApiProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidStarlarkApiProviderApi.java
index 8bf2c66..227ddf3 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidStarlarkApiProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidStarlarkApiProviderApi.java
@@ -18,11 +18,11 @@
 import com.google.devtools.build.lib.collect.nestedset.Depset;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.java.OutputJarApi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import javax.annotation.Nullable;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /**
  * A class that exposes the Android providers to Starlark. It is intended to provide a simple and
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidStarlarkCommonApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidStarlarkCommonApi.java
index 161aaf8..e6fa3de 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidStarlarkCommonApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidStarlarkCommonApi.java
@@ -16,10 +16,10 @@
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.java.JavaInfoApi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Common utilities for Starlark rules related to Android. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/ApkInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/ApkInfoApi.java
index 8aa51bb..9b73771 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/ApkInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/ApkInfoApi.java
@@ -17,12 +17,12 @@
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
 
 /** A provider for targets that produce an apk file. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/BUILD b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/BUILD
index 14778ea..a46c0e6 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/BUILD
@@ -20,7 +20,6 @@
     name = "android",
     srcs = glob(["*.java"]),
     deps = [
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/collect/nestedset",
         "//src/main/java/com/google/devtools/build/lib/packages/semantics",
@@ -29,6 +28,8 @@
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java",
         "//src/main/java/net/starlark/java/annot",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:guava",
         "//third_party:jsr305",
     ],
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/DataBindingV2ProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/DataBindingV2ProviderApi.java
index ac05188..482d39e 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/DataBindingV2ProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/DataBindingV2ProviderApi.java
@@ -18,14 +18,14 @@
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import javax.annotation.Nullable;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkValue;
 
 /**
  * An interface for a provider that exposes the use of <a
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/ParsedAndroidAssetsApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/ParsedAndroidAssetsApi.java
index 5c649f3..3a6c682 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/ParsedAndroidAssetsApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/ParsedAndroidAssetsApi.java
@@ -13,9 +13,9 @@
 // limitations under the License.
 package com.google.devtools.build.lib.starlarkbuildapi.android;
 
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Parsed Android assets which can be merged together with assets from dependencies. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/ProguardMappingProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/ProguardMappingProviderApi.java
index 15ba487..1eb2224 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/ProguardMappingProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/ProguardMappingProviderApi.java
@@ -16,12 +16,12 @@
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
 
 /** A target that can provide a proguard obfuscation mapping to Android binaries or tests. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/UsesDataBindingProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/UsesDataBindingProviderApi.java
index 74bc9d4..8acf0f9 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/UsesDataBindingProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/UsesDataBindingProviderApi.java
@@ -17,12 +17,12 @@
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
 
 /**
  * An interface for a provider that exposes the use of <a
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/ValidatedAndroidDataApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/ValidatedAndroidDataApi.java
index 2edfce5..3911e4b 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/ValidatedAndroidDataApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/ValidatedAndroidDataApi.java
@@ -15,12 +15,12 @@
 
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import javax.annotation.Nullable;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Validated Android data which can be merged together with assets from dependencies. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleBitcodeModeApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleBitcodeModeApi.java
index 52bcc47..97c7409 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleBitcodeModeApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleBitcodeModeApi.java
@@ -14,9 +14,9 @@
 
 package com.google.devtools.build.lib.starlarkbuildapi.apple;
 
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkValue;
 
 /**
  * Interface for an enum describing the bitcode mode to use when compiling Objective-C and Swift
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleCommonApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleCommonApi.java
index d485801..df5417d 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleCommonApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleCommonApi.java
@@ -24,14 +24,14 @@
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
 import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Interface for a module with useful functions for creating apple-related rule implementations. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleConfigurationApi.java
index c07bc1f..fbaf900 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleConfigurationApi.java
@@ -14,12 +14,12 @@
 
 package com.google.devtools.build.lib.starlarkbuildapi.apple;
 
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDeprecated;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /** An interface for a configuration type containing info for Apple platforms and tools. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ApplePlatformApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ApplePlatformApi.java
index 19792e4..5b5f5f0 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ApplePlatformApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ApplePlatformApi.java
@@ -14,10 +14,10 @@
 
 package com.google.devtools.build.lib.starlarkbuildapi.apple;
 
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /** An interface for an object representing an Apple platform. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ApplePlatformTypeApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ApplePlatformTypeApi.java
index f7ef612..6ce8302 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ApplePlatformTypeApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ApplePlatformTypeApi.java
@@ -14,9 +14,9 @@
 
 package com.google.devtools.build.lib.starlarkbuildapi.apple;
 
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Interface for a descriptor for an Apple platform type, such as such as iOS or macOS. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleStaticLibraryInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleStaticLibraryInfoApi.java
index 843b4e3..e096c3f 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleStaticLibraryInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleStaticLibraryInfoApi.java
@@ -17,12 +17,12 @@
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
 
 /**
  * Interface for an info type containing information regarding multi-architecture Apple static
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleToolchainApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleToolchainApi.java
index be70c7b..c60aba5 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleToolchainApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/AppleToolchainApi.java
@@ -14,10 +14,10 @@
 
 package com.google.devtools.build.lib.starlarkbuildapi.apple;
 
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Interface for a utility module involving the Apple toolchain. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/BUILD b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/BUILD
index 327f8b0..1f6687c 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/BUILD
@@ -27,7 +27,8 @@
         "//src/main/java/net/starlark/java/annot",
         # TODO(b/80307387): Remove dependency on Depset.
         "//src/main/java/com/google/devtools/build/lib/collect/nestedset",
-        "//src/main/java/com/google/devtools/build/lib:syntax",
+        "//src/main/java/net/starlark/java/syntax",
+        "//src/main/java/net/starlark/java/eval",
         "//src/main/java/com/google/devtools/build/lib/packages/semantics",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
         "//third_party:jsr305",
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/DottedVersionApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/DottedVersionApi.java
index 1ce8cbe..124f05b 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/DottedVersionApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/DottedVersionApi.java
@@ -14,11 +14,11 @@
 
 package com.google.devtools.build.lib.starlarkbuildapi.apple;
 
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /**
  * Interface for a value representing a version with multiple components, separated by periods, such
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/J2ObjcConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/J2ObjcConfigurationApi.java
index 60cbc24..0a1865c 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/J2ObjcConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/J2ObjcConfigurationApi.java
@@ -15,10 +15,10 @@
 package com.google.devtools.build.lib.starlarkbuildapi.apple;
 
 import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /** A configuration fragment for j2objc. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ObjcConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ObjcConfigurationApi.java
index ad6b1c7..a4929e2 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ObjcConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ObjcConfigurationApi.java
@@ -15,12 +15,12 @@
 package com.google.devtools.build.lib.starlarkbuildapi.apple;
 
 import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import javax.annotation.Nullable;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /** A configuration fragment for Objective C. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ObjcProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ObjcProviderApi.java
index bc81269..f6740bf 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ObjcProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ObjcProviderApi.java
@@ -18,11 +18,11 @@
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcCompilationContextApi;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkValue;
 
 /**
  * An interface for an info type that provides all compiling and linking information in the
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/SwiftConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/SwiftConfigurationApi.java
index 51825ef..b4d5c75 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/SwiftConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/SwiftConfigurationApi.java
@@ -15,10 +15,10 @@
 package com.google.devtools.build.lib.starlarkbuildapi.apple;
 
 import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /** A configuration fragment for Swift tools. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/XcodeConfigInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/XcodeConfigInfoApi.java
index 6aed023..5c1c330 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/XcodeConfigInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/XcodeConfigInfoApi.java
@@ -16,13 +16,13 @@
 
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
 
 /**
  * An interface for an info type containing the set of Apple versions computed from command line
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/BUILD b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/BUILD
index dc234fc..7f63b48 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/BUILD
@@ -20,10 +20,11 @@
     name = "config",
     srcs = glob(["*.java"]),
     deps = [
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
         "//src/main/java/net/starlark/java/annot",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:guava",
     ],
 )
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/ConfigBootstrap.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/ConfigBootstrap.java
index fcc804a..e60c408 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/ConfigBootstrap.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/ConfigBootstrap.java
@@ -17,7 +17,7 @@
 import com.google.common.collect.ImmutableMap.Builder;
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkConfigApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.Bootstrap;
-import com.google.devtools.build.lib.syntax.Starlark;
+import net.starlark.java.eval.Starlark;
 
 /**
  * A {@link Bootstrap} for config-related libraries of the build API.
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/ConfigGlobalLibraryApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/ConfigGlobalLibraryApi.java
index 0fa54fb..93fcc37 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/ConfigGlobalLibraryApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/ConfigGlobalLibraryApi.java
@@ -14,15 +14,15 @@
 
 package com.google.devtools.build.lib.starlarkbuildapi.config;
 
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkGlobalLibrary;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkThread;
 
 /** A collection of top-level Starlark functions pertaining to configuration. */
 @StarlarkGlobalLibrary
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/ConfigStarlarkCommonApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/ConfigStarlarkCommonApi.java
index 1817613..b0ad1e5 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/ConfigStarlarkCommonApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/ConfigStarlarkCommonApi.java
@@ -15,9 +15,9 @@
 package com.google.devtools.build.lib.starlarkbuildapi.config;
 
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Helper utility containing functions regarding configurations.ss */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/ConfigurationTransitionApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/ConfigurationTransitionApi.java
index ab20127..36b38de 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/ConfigurationTransitionApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config/ConfigurationTransitionApi.java
@@ -14,9 +14,9 @@
 
 package com.google.devtools.build.lib.starlarkbuildapi.config;
 
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Represents a configuration transition across a dependency edge. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/BUILD b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/BUILD
index 574e52c..1ed8449 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/BUILD
@@ -24,8 +24,9 @@
     name = "core",
     srcs = glob(["*.java"]),
     deps = [
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/net/starlark/java/annot",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:guava",
     ],
 )
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/ProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/ProviderApi.java
index b79e638..9e5bec0 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/ProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/ProviderApi.java
@@ -13,9 +13,9 @@
 // limitations under the License.
 package com.google.devtools.build.lib.starlarkbuildapi.core;
 
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Interface for provider objects (constructors for {@link StructApi} objects). */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/StructApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/StructApi.java
index 943a766..40ba2bc 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/StructApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/StructApi.java
@@ -14,15 +14,15 @@
 
 package com.google.devtools.build.lib.starlarkbuildapi.core;
 
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Interface for the "struct" object in the build API. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/TransitiveInfoCollectionApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/TransitiveInfoCollectionApi.java
index 2445636..c4b8400 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/TransitiveInfoCollectionApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/TransitiveInfoCollectionApi.java
@@ -14,9 +14,9 @@
 
 package com.google.devtools.build.lib.starlarkbuildapi.core;
 
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Interface for a build target. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/BUILD b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/BUILD
index 883566e..129d072 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/BUILD
@@ -20,7 +20,6 @@
     name = "cpp",
     srcs = glob(["*.java"]),
     deps = [
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/collect/nestedset",
         "//src/main/java/com/google/devtools/build/lib/packages/semantics",
@@ -29,6 +28,8 @@
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/go",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform",
         "//src/main/java/net/starlark/java/annot",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:guava",
         "//third_party:jsr305",
     ],
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/BazelCcModuleApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/BazelCcModuleApi.java
index f18321f..bf16581 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/BazelCcModuleApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/BazelCcModuleApi.java
@@ -19,15 +19,15 @@
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkActionFactoryApi;
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkRuleContextApi;
 import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.NoneType;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.Tuple;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.ParamType;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.NoneType;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.Tuple;
 
 /** Utilites related to C++ support. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcBootstrap.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcBootstrap.java
index df8b252..81a332b 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcBootstrap.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcBootstrap.java
@@ -21,7 +21,7 @@
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkRuleContextApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.Bootstrap;
 import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.FlagGuardedValue;
+import net.starlark.java.eval.FlagGuardedValue;
 
 /** {@link Bootstrap} for Starlark objects related to cpp rules. */
 public class CcBootstrap implements Bootstrap {
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcCompilationContextApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcCompilationContextApi.java
index 8f38781..0fee722 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcCompilationContextApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcCompilationContextApi.java
@@ -16,11 +16,11 @@
 
 import com.google.devtools.build.lib.collect.nestedset.Depset;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
-import com.google.devtools.build.lib.syntax.StarlarkList;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkList;
+import net.starlark.java.eval.StarlarkValue;
 
 /**
  * Interface for a store of information needed for C++ compilation aggregated across dependencies.
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcCompilationOutputsApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcCompilationOutputsApi.java
index 3ccb3e3..6fd33da 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcCompilationOutputsApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcCompilationOutputsApi.java
@@ -15,12 +15,12 @@
 package com.google.devtools.build.lib.starlarkbuildapi.cpp;
 
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Interface for a structured representation of the compilation outputs of a C++ rule. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcInfoApi.java
index 8e6f7cc..5638629 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcInfoApi.java
@@ -17,14 +17,14 @@
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.NoneType;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.ParamType;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.NoneType;
 
 /** Wrapper for every C++ compilation and linking provider. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcLinkingContextApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcLinkingContextApi.java
index cd01171..ea1db27 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcLinkingContextApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcLinkingContextApi.java
@@ -17,12 +17,12 @@
 import com.google.devtools.build.lib.collect.nestedset.Depset;
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Wrapper for every C++ linking provider. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcLinkingOutputsApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcLinkingOutputsApi.java
index fae10d8..05b03e0 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcLinkingOutputsApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcLinkingOutputsApi.java
@@ -15,10 +15,10 @@
 package com.google.devtools.build.lib.starlarkbuildapi.cpp;
 
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Interface for a structured representation of the linking outputs of a C++ rule. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcModuleApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcModuleApi.java
index ddf10db..9cd50a8 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcModuleApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcModuleApi.java
@@ -22,17 +22,17 @@
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkRuleContextApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.NoneType;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
-import com.google.devtools.build.lib.syntax.Tuple;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.ParamType;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.NoneType;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
+import net.starlark.java.eval.Tuple;
 
 /** Utilites related to C++ support. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcStarlarkApiProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcStarlarkApiProviderApi.java
index 9bacc71..2e842f6 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcStarlarkApiProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcStarlarkApiProviderApi.java
@@ -17,10 +17,10 @@
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.collect.nestedset.Depset;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Object with information about C++ rules. Every C++-related target should provide this. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcToolchainProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcToolchainProviderApi.java
index ab2333f..4684e35 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcToolchainProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcToolchainProviderApi.java
@@ -17,12 +17,12 @@
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.collect.nestedset.Depset;
 import com.google.devtools.build.lib.starlarkbuildapi.platform.ToolchainInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
 import javax.annotation.Nullable;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
 
 /** Information about the C++ toolchain. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcToolchainVariablesApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcToolchainVariablesApi.java
index ff7c786..05ccff8 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcToolchainVariablesApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcToolchainVariablesApi.java
@@ -14,9 +14,9 @@
 
 package com.google.devtools.build.lib.starlarkbuildapi.cpp;
 
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Type encapsulating build variables. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CompilationInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CompilationInfoApi.java
index 5f6fc2a..4c82da0 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CompilationInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CompilationInfoApi.java
@@ -15,10 +15,10 @@
 package com.google.devtools.build.lib.starlarkbuildapi.cpp;
 
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Interface for a helper class containing CC compilation providers. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CppConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CppConfigurationApi.java
index f2b8a1d..3e179a6 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CppConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CppConfigurationApi.java
@@ -16,11 +16,11 @@
 
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkValue;
 
 /** The C++ configuration fragment. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/FeatureConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/FeatureConfigurationApi.java
index b165dd9..25a3bab 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/FeatureConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/FeatureConfigurationApi.java
@@ -14,9 +14,9 @@
 
 package com.google.devtools.build.lib.starlarkbuildapi.cpp;
 
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Class used to construct command lines from CROSSTOOL features. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/GoCcLinkParamsInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/GoCcLinkParamsInfoApi.java
index f703f67..2917dd3 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/GoCcLinkParamsInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/GoCcLinkParamsInfoApi.java
@@ -17,12 +17,12 @@
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
 
 /** A target that provides C++ libraries to be linked into Go targets. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/GoWrapCcHelperApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/GoWrapCcHelperApi.java
index aa86c22..1845b9b 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/GoWrapCcHelperApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/GoWrapCcHelperApi.java
@@ -23,15 +23,15 @@
 import com.google.devtools.build.lib.starlarkbuildapi.go.GoContextInfoApi;
 import com.google.devtools.build.lib.starlarkbuildapi.go.GoPackageInfoApi;
 import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.NoneType;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Tuple;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.ParamType;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.NoneType;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Tuple;
 
 /**
  * Helper class for the C++ functionality needed from Starlark specifically to implement go_wrap_cc.
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/LibraryToLinkApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/LibraryToLinkApi.java
index 956a0da..5ae3b39 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/LibraryToLinkApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/LibraryToLinkApi.java
@@ -15,11 +15,11 @@
 package com.google.devtools.build.lib.starlarkbuildapi.cpp;
 
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkValue;
 
 /**
  * A library the user can link to. This is different from a simple linker input in that it also has
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/LinkerInputApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/LinkerInputApi.java
index cdb95bf..d294d18 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/LinkerInputApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/LinkerInputApi.java
@@ -16,13 +16,13 @@
 
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Either libraries, flags or other files that may be passed to the linker as inputs. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/LinkingInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/LinkingInfoApi.java
index 322dd17..2909167 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/LinkingInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/LinkingInfoApi.java
@@ -14,10 +14,10 @@
 
 package com.google.devtools.build.lib.starlarkbuildapi.cpp;
 
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Helper object containing CC linking info objects. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/PyWrapCcHelperApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/PyWrapCcHelperApi.java
index 63330ed..a5425c1 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/PyWrapCcHelperApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/PyWrapCcHelperApi.java
@@ -19,12 +19,12 @@
 import com.google.devtools.build.lib.starlarkbuildapi.RunfilesApi;
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkRuleContextApi;
 import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
 
 /**
  * Helper class for the C++ aspects of {py,java,go}_wrap_cc. Provides methods to create the swig and
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/WrapCcHelperApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/WrapCcHelperApi.java
index c416dca..fe854e8 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/WrapCcHelperApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/WrapCcHelperApi.java
@@ -19,14 +19,14 @@
 import com.google.devtools.build.lib.starlarkbuildapi.FilesToRunProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkRuleContextApi;
 import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.NoneType;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.ParamType;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.NoneType;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkValue;
 
 /**
  * Helper class for the C++ aspects of {py,java,go}_wrap_cc. Provides methods to create the swig and
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/go/BUILD b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/go/BUILD
index f377a19..8d12eec 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/go/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/go/BUILD
@@ -20,8 +20,9 @@
     name = "go",
     srcs = glob(["*.java"]),
     deps = [
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
         "//src/main/java/net/starlark/java/annot",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
     ],
 )
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/go/GoConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/go/GoConfigurationApi.java
index 26a08cf..65ad88e 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/go/GoConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/go/GoConfigurationApi.java
@@ -14,9 +14,9 @@
 
 package com.google.devtools.build.lib.starlarkbuildapi.go;
 
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkValue;
 
 /** A configuration fragment for Go. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/BUILD b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/BUILD
index 93c72f4..f6228fc 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/BUILD
@@ -20,7 +20,6 @@
     name = "java",
     srcs = glob(["*.java"]),
     deps = [
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/collect/nestedset",
         "//src/main/java/com/google/devtools/build/lib/packages/semantics",
@@ -29,6 +28,8 @@
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform",
         "//src/main/java/net/starlark/java/annot",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:guava",
         "//third_party:jsr305",
     ],
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/GeneratedExtensionRegistryProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/GeneratedExtensionRegistryProviderApi.java
index 9c9c99d..64afe59 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/GeneratedExtensionRegistryProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/GeneratedExtensionRegistryProviderApi.java
@@ -18,12 +18,12 @@
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
 
 /** Provides information about generated proto extensions. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaAnnotationProcessingApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaAnnotationProcessingApi.java
index e32733c..249f714 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaAnnotationProcessingApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaAnnotationProcessingApi.java
@@ -17,11 +17,11 @@
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.collect.nestedset.Depset;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import javax.annotation.Nullable;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /**
  * Interface for an info object containing information about jars that are a result of annotation
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaBootstrap.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaBootstrap.java
index d6a05aa..41c518c4 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaBootstrap.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaBootstrap.java
@@ -18,7 +18,7 @@
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.starlarkbuildapi.core.Bootstrap;
 import com.google.devtools.build.lib.starlarkbuildapi.java.JavaInfoApi.JavaInfoProviderApi;
-import com.google.devtools.build.lib.syntax.FlagGuardedValue;
+import net.starlark.java.eval.FlagGuardedValue;
 
 /** {@link Bootstrap} for Starlark objects related to the java language. */
 public class JavaBootstrap implements Bootstrap {
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaCcLinkParamsProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaCcLinkParamsProviderApi.java
index 873d28c..7b27939 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaCcLinkParamsProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaCcLinkParamsProviderApi.java
@@ -18,13 +18,13 @@
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkValue;
 
 /** A target that provides C++ libraries to be linked into Java targets. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaCommonApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaCommonApi.java
index bb939a9..c139273 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaCommonApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaCommonApi.java
@@ -23,14 +23,14 @@
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkRuleContextApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.ParamType;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Utilities for Java compilation support in Starlark. */
 @StarlarkBuiltin(name = "java_common", doc = "Utilities for Java compilation support in Starlark.")
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaCompilationInfoProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaCompilationInfoProviderApi.java
index 218bc8f..82b44a7 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaCompilationInfoProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaCompilationInfoProviderApi.java
@@ -17,10 +17,10 @@
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.collect.nestedset.Depset;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Info object for compilation information for java rules. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaConfigurationApi.java
index 1804349..2aa6546 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaConfigurationApi.java
@@ -16,10 +16,10 @@
 
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /** A java compiler configuration. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaInfoApi.java
index ce7a4cd..3dcf336 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaInfoApi.java
@@ -18,14 +18,14 @@
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
 
 /** Info object encapsulating all information by java rules. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaNativeLibraryInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaNativeLibraryInfoApi.java
index 486ec58..279a8e5 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaNativeLibraryInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaNativeLibraryInfoApi.java
@@ -20,12 +20,12 @@
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
 import com.google.devtools.build.lib.starlarkbuildapi.cpp.LibraryToLinkApi;
-import com.google.devtools.build.lib.syntax.EvalException;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
 
 /** A target that provides C++ {@link LibraryToLinkApi}s to be linked into Java targets. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaProtoCommonApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaProtoCommonApi.java
index 8b7f08a..0ac1f5f 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaProtoCommonApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaProtoCommonApi.java
@@ -18,11 +18,11 @@
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkRuleContextApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.TransitiveInfoCollectionApi;
 import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Helper class for Java proto compilation. */
 @StarlarkBuiltin(name = "java_proto_common", doc = "Helper class for Java proto compilation.")
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaRuleOutputJarsProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaRuleOutputJarsProviderApi.java
index 55ca2e3..ac7c18a 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaRuleOutputJarsProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaRuleOutputJarsProviderApi.java
@@ -16,10 +16,10 @@
 
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Info object about outputs of a Java rule. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaRuntimeClasspathProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaRuntimeClasspathProviderApi.java
index 90d65fa6..20c1dcc 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaRuntimeClasspathProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaRuntimeClasspathProviderApi.java
@@ -15,9 +15,9 @@
 package com.google.devtools.build.lib.starlarkbuildapi.java;
 
 import com.google.devtools.build.lib.collect.nestedset.Depset;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Provider for the runtime classpath contributions of a Java binary. */
 @StarlarkBuiltin(name = "JavaRuntimeClasspathProvider", doc = "", documented = false)
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaStarlarkApiProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaStarlarkApiProviderApi.java
index e1eeff3..21811da 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaStarlarkApiProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaStarlarkApiProviderApi.java
@@ -15,10 +15,10 @@
 package com.google.devtools.build.lib.starlarkbuildapi.java;
 
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDeprecated;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkValue;
 
 /**
  * Provides access to information about Java rules. Every Java-related target provides this struct,
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaToolchainStarlarkApiProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaToolchainStarlarkApiProviderApi.java
index 161785c..dbba910 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaToolchainStarlarkApiProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaToolchainStarlarkApiProviderApi.java
@@ -17,10 +17,10 @@
 import com.google.devtools.build.lib.collect.nestedset.Depset;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.platform.ToolchainInfoApi;
-import com.google.devtools.build.lib.syntax.Sequence;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Sequence;
 
 /**
  * Provides access to information about the Java toolchain rule. Accessible as a 'java_toolchain'
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/OutputJarApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/OutputJarApi.java
index 3fc4d8e..6550dd7 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/OutputJarApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/OutputJarApi.java
@@ -15,11 +15,11 @@
 package com.google.devtools.build.lib.starlarkbuildapi.java;
 
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkValue;
 
 /** A tuple of a java classes jar and its associated source and interface archives. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/ProguardSpecProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/ProguardSpecProviderApi.java
index 9d59d0e..3d49b1c 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/ProguardSpecProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/ProguardSpecProviderApi.java
@@ -17,12 +17,12 @@
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
 
 /** Provides information about proguard specs for Android binaries. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/javascript/BUILD b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/javascript/BUILD
index 1294777..0f382f6 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/javascript/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/javascript/BUILD
@@ -20,11 +20,12 @@
     name = "javascript",
     srcs = glob(["*.java"]),
     deps = [
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/packages/semantics",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
         "//src/main/java/net/starlark/java/annot",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
     ],
 )
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/javascript/JsModuleInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/javascript/JsModuleInfoApi.java
index 9a6ccdd..6425b66 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/javascript/JsModuleInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/javascript/JsModuleInfoApi.java
@@ -19,14 +19,14 @@
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Info object propagating information about protocol buffer sources. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/BUILD b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/BUILD
index 74b3778..2c02ccd 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/BUILD
@@ -20,11 +20,12 @@
     name = "platform",
     srcs = glob(["*.java"]),
     deps = [
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/packages/semantics",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
         "//src/main/java/net/starlark/java/annot",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:guava",
         "//third_party:jsr305",
     ],
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/ConstraintCollectionApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/ConstraintCollectionApi.java
index 91c4cba..cf140bf 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/ConstraintCollectionApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/ConstraintCollectionApi.java
@@ -15,14 +15,14 @@
 package com.google.devtools.build.lib.starlarkbuildapi.platform;
 
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkIndexable;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import javax.annotation.Nullable;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkIndexable;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Info object representing data about a specific platform. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/ExecGroupCollectionApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/ExecGroupCollectionApi.java
index c5b3045..ffda138 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/ExecGroupCollectionApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/ExecGroupCollectionApi.java
@@ -13,12 +13,12 @@
 // limitations under the License.
 package com.google.devtools.build.lib.starlarkbuildapi.platform;
 
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkIndexable;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkIndexable;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Stores {@link com.google.devtools.build.lib.packages.ExecGroup}s available to a given rule. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/PlatformCommonApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/PlatformCommonApi.java
index 9101ef0..95f8b29 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/PlatformCommonApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/PlatformCommonApi.java
@@ -15,9 +15,9 @@
 package com.google.devtools.build.lib.starlarkbuildapi.platform;
 
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Module containing functions to interact with the platform APIs. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/PlatformConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/PlatformConfigurationApi.java
index 33694d7..264aaec 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/PlatformConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/PlatformConfigurationApi.java
@@ -16,10 +16,10 @@
 
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /** The platform configuration. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/PlatformInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/PlatformInfoApi.java
index 2338069..8292d5f 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/PlatformInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/PlatformInfoApi.java
@@ -18,16 +18,16 @@
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import java.util.Map;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
 
 /** Info object representing data about a specific platform. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/ToolchainContextApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/ToolchainContextApi.java
index e7096ac..990863e 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/ToolchainContextApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/ToolchainContextApi.java
@@ -14,10 +14,10 @@
 
 package com.google.devtools.build.lib.starlarkbuildapi.platform;
 
-import com.google.devtools.build.lib.syntax.StarlarkIndexable;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
+import net.starlark.java.eval.StarlarkIndexable;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Stores toolchains available to a given rule. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/ToolchainInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/ToolchainInfoApi.java
index f10d686..bfd6a6a 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/ToolchainInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/ToolchainInfoApi.java
@@ -16,13 +16,13 @@
 
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkThread;
 
 /** Info object representing data about a specific toolchain. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/BUILD b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/BUILD
index b8eb8f6..0452a4d 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/BUILD
@@ -20,12 +20,13 @@
     name = "proto",
     srcs = glob(["*.java"]),
     deps = [
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/collect/nestedset",
         "//src/main/java/com/google/devtools/build/lib/packages/semantics",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
         "//src/main/java/net/starlark/java/annot",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:guava",
     ],
 )
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/ProtoBootstrap.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/ProtoBootstrap.java
index 2160d87..f58bfb8 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/ProtoBootstrap.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/ProtoBootstrap.java
@@ -20,7 +20,7 @@
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkAspectApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.Bootstrap;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.syntax.FlagGuardedValue;
+import net.starlark.java.eval.FlagGuardedValue;
 
 /** A {@link Bootstrap} for Starlark objects related to protocol buffers. */
 public class ProtoBootstrap implements Bootstrap {
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/ProtoCommonApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/ProtoCommonApi.java
index ca2453a..020d7a9 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/ProtoCommonApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/ProtoCommonApi.java
@@ -14,8 +14,8 @@
 
 package com.google.devtools.build.lib.starlarkbuildapi.proto;
 
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
+import net.starlark.java.eval.StarlarkValue;
 
 /**
  * Interface for protocol buffers support in Bazel.
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/ProtoRegistryProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/ProtoRegistryProviderApi.java
index f180b9e..d2ce84d 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/ProtoRegistryProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/ProtoRegistryProviderApi.java
@@ -17,10 +17,10 @@
 import com.google.devtools.build.lib.collect.nestedset.Depset;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.Sequence;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Sequence;
 
 /** Provides information about flavors for all built protos. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/BUILD b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/BUILD
index 1acb981..8694043 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/BUILD
@@ -20,12 +20,13 @@
     name = "python",
     srcs = glob(["*.java"]),
     deps = [
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/collect/nestedset",
         "//src/main/java/com/google/devtools/build/lib/packages/semantics",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
         "//src/main/java/net/starlark/java/annot",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:guava",
         "//third_party:jsr305",
     ],
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyBootstrap.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyBootstrap.java
index 484569d..d38e325 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyBootstrap.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyBootstrap.java
@@ -19,7 +19,7 @@
 import com.google.devtools.build.lib.starlarkbuildapi.core.Bootstrap;
 import com.google.devtools.build.lib.starlarkbuildapi.python.PyInfoApi.PyInfoProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.python.PyRuntimeInfoApi.PyRuntimeInfoProviderApi;
-import com.google.devtools.build.lib.syntax.FlagGuardedValue;
+import net.starlark.java.eval.FlagGuardedValue;
 
 /** {@link Bootstrap} for Starlark objects related to the Python rules. */
 public class PyBootstrap implements Bootstrap {
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyInfoApi.java
index 766275d..a6e6dca 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyInfoApi.java
@@ -17,14 +17,14 @@
 import com.google.devtools.build.lib.collect.nestedset.Depset;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Provider instance for the Python rules. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyRuntimeInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyRuntimeInfoApi.java
index d83b2f8..52983c7 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyRuntimeInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyRuntimeInfoApi.java
@@ -17,15 +17,15 @@
 import com.google.devtools.build.lib.collect.nestedset.Depset;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import javax.annotation.Nullable;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Provider instance for {@code py_runtime}. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyStarlarkTransitionsApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyStarlarkTransitionsApi.java
index 360cda1..3619b89 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyStarlarkTransitionsApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyStarlarkTransitionsApi.java
@@ -15,9 +15,9 @@
 package com.google.devtools.build.lib.starlarkbuildapi.python;
 
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /**
  * DO NOT USE. Skarlark module exposing Python transitions for Python 2 to 3 migration purposes
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/BUILD b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/BUILD
index fb0fcf5..ed3ab56 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/BUILD
@@ -23,7 +23,8 @@
         "//third_party:guava",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
         "//src/main/java/net/starlark/java/annot",
-        "//src/main/java/com/google/devtools/build/lib:syntax",
+        "//src/main/java/net/starlark/java/syntax",
+        "//src/main/java/net/starlark/java/eval",
         "//src/main/java/com/google/devtools/build/lib/packages/semantics",
         # TODO(cparsons): Remove dependency on Label implementation.
         "//src/main/java/com/google/devtools/build/lib/cmdline",
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/RepositoryBootstrap.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/RepositoryBootstrap.java
index fc7d246..17fd2aa 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/RepositoryBootstrap.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/RepositoryBootstrap.java
@@ -16,7 +16,7 @@
 
 import com.google.common.collect.ImmutableMap.Builder;
 import com.google.devtools.build.lib.starlarkbuildapi.core.Bootstrap;
-import com.google.devtools.build.lib.syntax.Starlark;
+import net.starlark.java.eval.Starlark;
 
 /**
  * A {@link Bootstrap} for repository-related libraries of the build API.
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/RepositoryModuleApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/RepositoryModuleApi.java
index 0d38eec..572f316 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/RepositoryModuleApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/RepositoryModuleApi.java
@@ -15,14 +15,14 @@
 package com.google.devtools.build.lib.starlarkbuildapi.repository;
 
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkGlobalLibrary;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkThread;
 
 /**
  * The Starlark module containing the definition of {@code repository_rule} function to define a
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/RepositoryPathApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/RepositoryPathApi.java
index c518472..e03367a 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/RepositoryPathApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/RepositoryPathApi.java
@@ -15,12 +15,12 @@
 package com.google.devtools.build.lib.starlarkbuildapi.repository;
 
 import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import java.io.IOException;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /** A structure representing a file to be used inside a repository. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/StarlarkExecutionResultApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/StarlarkExecutionResultApi.java
index cf65241..f0a37da 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/StarlarkExecutionResultApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/StarlarkExecutionResultApi.java
@@ -14,10 +14,10 @@
 
 package com.google.devtools.build.lib.starlarkbuildapi.repository;
 
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /**
  * A structure callable from Starlark that stores the result of repository_ctx.execute() method. It
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/StarlarkOSApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/StarlarkOSApi.java
index 66efb09..feac8ef 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/StarlarkOSApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/StarlarkOSApi.java
@@ -15,10 +15,10 @@
 package com.google.devtools.build.lib.starlarkbuildapi.repository;
 
 import com.google.common.collect.ImmutableMap;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /** A Starlark structure to deliver information about the system we are running on. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/StarlarkRepositoryContextApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/StarlarkRepositoryContextApi.java
index 7f414ec..d278f0f 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/StarlarkRepositoryContextApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/StarlarkRepositoryContextApi.java
@@ -16,16 +16,16 @@
 
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.ParamType;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkDocumentationCategory;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Starlark API for the repository_rule's context. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/stubs/BUILD b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/stubs/BUILD
index a9929b1..4633859 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/stubs/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/stubs/BUILD
@@ -19,8 +19,9 @@
     name = "stubs",
     srcs = glob(["*.java"]),
     deps = [
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
     ],
 )
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/stubs/ProviderStub.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/stubs/ProviderStub.java
index c5e9865..6459d18a 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/stubs/ProviderStub.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/stubs/ProviderStub.java
@@ -15,7 +15,7 @@
 package com.google.devtools.build.lib.starlarkbuildapi.stubs;
 
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
 
 /**
  * Stub implementation of {@link ProviderApi}. Should only be used for experimental, unimplemented
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/stubs/StarlarkAspectStub.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/stubs/StarlarkAspectStub.java
index 5b709e0..7c85107 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/stubs/StarlarkAspectStub.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/stubs/StarlarkAspectStub.java
@@ -15,7 +15,7 @@
 package com.google.devtools.build.lib.starlarkbuildapi.stubs;
 
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkAspectApi;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
 
 /**
  * Stub implementation of {@link StarlarkAspectApi}. Should only be used for experimental,
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/AnalysisFailureApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/AnalysisFailureApi.java
index 4382730..5024f53 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/AnalysisFailureApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/AnalysisFailureApi.java
@@ -15,9 +15,9 @@
 package com.google.devtools.build.lib.starlarkbuildapi.test;
 
 import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /**
  * Encapsulates information about an analysis-phase error which would have occurred during a build.
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/AnalysisFailureInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/AnalysisFailureInfoApi.java
index cff9393..a467557 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/AnalysisFailureInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/AnalysisFailureInfoApi.java
@@ -16,9 +16,9 @@
 
 import com.google.devtools.build.lib.collect.nestedset.Depset;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /**
  * Encapsulates information about an analysis-phase error which would have occurred during a build.
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/AnalysisTestResultInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/AnalysisTestResultInfoApi.java
index 3582708..631daa0 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/AnalysisTestResultInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/AnalysisTestResultInfoApi.java
@@ -15,11 +15,11 @@
 package com.google.devtools.build.lib.starlarkbuildapi.test;
 
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkConstructor;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.StarlarkValue;
 
 /**
  * Encapsulates information about an analysis-phase error which would have occurred during a build.
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/BUILD b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/BUILD
index ce9dc9f..1ec4920 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/BUILD
@@ -27,7 +27,8 @@
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform",
         "//src/main/java/net/starlark/java/annot",
-        "//src/main/java/com/google/devtools/build/lib:syntax",
+        "//src/main/java/net/starlark/java/syntax",
+        "//src/main/java/net/starlark/java/eval",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
     ],
 )
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/CoverageCommonApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/CoverageCommonApi.java
index b7f48bf..bb04ace 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/CoverageCommonApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/CoverageCommonApi.java
@@ -16,12 +16,12 @@
 
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkRuleContextApi;
 import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Helper functions for Starlark to access coverage-related infrastructure */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/TestingModuleApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/TestingModuleApi.java
index 81ecbbf..c63d515 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/TestingModuleApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test/TestingModuleApi.java
@@ -14,12 +14,12 @@
 
 package com.google.devtools.build.lib.starlarkbuildapi.test;
 
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import net.starlark.java.annot.Param;
 import net.starlark.java.annot.StarlarkBuiltin;
 import net.starlark.java.annot.StarlarkMethod;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Helper module for accessing test infrastructure. */
 @StarlarkBuiltin(
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkdebug/module/BUILD b/src/main/java/com/google/devtools/build/lib/starlarkdebug/module/BUILD
index edab2b8..6e4bcbe 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkdebug/module/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/starlarkdebug/module/BUILD
@@ -14,10 +14,11 @@
     deps = [
         ":options",
         "//src/main/java/com/google/devtools/build/lib:runtime",
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/events",
         "//src/main/java/com/google/devtools/build/lib/starlarkdebug/server",
         "//src/main/java/com/google/devtools/common/options",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:guava",
     ],
 )
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkdebug/module/StarlarkDebuggerModule.java b/src/main/java/com/google/devtools/build/lib/starlarkdebug/module/StarlarkDebuggerModule.java
index 25339e7..7ed17db 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkdebug/module/StarlarkDebuggerModule.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkdebug/module/StarlarkDebuggerModule.java
@@ -21,9 +21,9 @@
 import com.google.devtools.build.lib.runtime.Command;
 import com.google.devtools.build.lib.runtime.CommandEnvironment;
 import com.google.devtools.build.lib.starlarkdebug.server.StarlarkDebugServer;
-import com.google.devtools.build.lib.syntax.Debug;
 import com.google.devtools.common.options.OptionsBase;
 import java.io.IOException;
+import net.starlark.java.eval.Debug;
 
 /** Blaze module for setting up Starlark debugging. */
 public final class StarlarkDebuggerModule extends BlazeModule {
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/BUILD b/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/BUILD
index d0127f9..cb1c23a 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/BUILD
@@ -12,10 +12,11 @@
     name = "server",
     srcs = glob(["*.java"]),
     deps = [
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/events",
         "//src/main/java/com/google/devtools/build/lib/starlarkdebug/proto:starlark_debugging_java_proto",
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:guava",
         "//third_party:jsr305",
     ],
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/DebugEventHelper.java b/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/DebugEventHelper.java
index 9a2cc9e..c2da173 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/DebugEventHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/DebugEventHelper.java
@@ -32,13 +32,13 @@
 import com.google.devtools.build.lib.starlarkdebugging.StarlarkDebuggingProtos.ThreadContinuedEvent;
 import com.google.devtools.build.lib.starlarkdebugging.StarlarkDebuggingProtos.ThreadPausedEvent;
 import com.google.devtools.build.lib.starlarkdebugging.StarlarkDebuggingProtos.Value;
-import com.google.devtools.build.lib.syntax.Debug;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.StarlarkFunction;
 import java.util.Collection;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Debug;
+import net.starlark.java.eval.StarlarkFunction;
+import net.starlark.java.syntax.Location;
 
 /**
  * Helper class for constructing event or response protos to be sent from the debug server to a
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/DebuggerSerialization.java b/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/DebuggerSerialization.java
index d11630b..c0f17d3 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/DebuggerSerialization.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/DebuggerSerialization.java
@@ -18,15 +18,15 @@
 import com.google.common.collect.Ordering;
 import com.google.devtools.build.lib.starlarkdebugging.StarlarkDebuggingProtos;
 import com.google.devtools.build.lib.starlarkdebugging.StarlarkDebuggingProtos.Value;
-import com.google.devtools.build.lib.syntax.ClassObject;
-import com.google.devtools.build.lib.syntax.Debug;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import java.lang.reflect.Array;
 import java.util.Map;
 import java.util.Set;
+import net.starlark.java.eval.ClassObject;
+import net.starlark.java.eval.Debug;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Helper class for creating {@link StarlarkDebuggingProtos.Value} from Starlark objects. */
 final class DebuggerSerialization {
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/StarlarkDebugServer.java b/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/StarlarkDebugServer.java
index 8b19aa3..9283485 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/StarlarkDebugServer.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/StarlarkDebugServer.java
@@ -19,13 +19,13 @@
 import com.google.devtools.build.lib.events.Event;
 import com.google.devtools.build.lib.events.EventHandler;
 import com.google.devtools.build.lib.starlarkdebugging.StarlarkDebuggingProtos;
-import com.google.devtools.build.lib.syntax.Debug;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import java.io.IOException;
 import java.net.ServerSocket;
 import java.util.List;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Debug;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
 
 /** Manages the network socket and debugging state for threads running Starlark code. */
 public final class StarlarkDebugServer implements Debug.Debugger {
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/ThreadHandler.java b/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/ThreadHandler.java
index fa86a7a..a47bdc3 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/ThreadHandler.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/ThreadHandler.java
@@ -23,15 +23,6 @@
 import com.google.devtools.build.lib.starlarkdebugging.StarlarkDebuggingProtos.Error;
 import com.google.devtools.build.lib.starlarkdebugging.StarlarkDebuggingProtos.PauseReason;
 import com.google.devtools.build.lib.starlarkdebugging.StarlarkDebuggingProtos.Value;
-import com.google.devtools.build.lib.syntax.Debug;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.FileOptions;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.ParserInput;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.SyntaxError;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
@@ -40,6 +31,15 @@
 import java.util.concurrent.Semaphore;
 import javax.annotation.Nullable;
 import javax.annotation.concurrent.GuardedBy;
+import net.starlark.java.eval.Debug;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.FileOptions;
+import net.starlark.java.syntax.Location;
+import net.starlark.java.syntax.ParserInput;
+import net.starlark.java.syntax.SyntaxError;
 
 /** Handles all thread-related state and debugging tasks. */
 final class ThreadHandler {
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Argument.java b/src/main/java/com/google/devtools/build/lib/syntax/Argument.java
deleted file mode 100644
index b80a2fe..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Argument.java
+++ /dev/null
@@ -1,123 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.base.Preconditions;
-import javax.annotation.Nullable;
-
-/**
- * Syntax node for an argument to a function.
- *
- * <p>Arguments may be of four forms, as in {@code f(expr, id=expr, *expr, **expr)}. These are
- * represented by the subclasses Positional, Keyword, Star, and StarStar.
- */
-public abstract class Argument extends Node {
-
-  protected final Expression value;
-
-  Argument(FileLocations locs, Expression value) {
-    super(locs);
-    this.value = Preconditions.checkNotNull(value);
-  }
-
-  public final Expression getValue() {
-    return value;
-  }
-
-  @Override
-  public int getEndOffset() {
-    return value.getEndOffset();
-  }
-
-  /** Return the name of this argument's parameter, or null if it is not a Keyword argument. */
-  @Nullable
-  public String getName() {
-    return null;
-  }
-
-  /** Syntax node for a positional argument, {@code f(expr)}. */
-  public static final class Positional extends Argument {
-    Positional(FileLocations locs, Expression value) {
-      super(locs, value);
-    }
-
-    @Override
-    public int getStartOffset() {
-      return value.getStartOffset();
-    }
-  }
-
-  /** Syntax node for a keyword argument, {@code f(id=expr)}. */
-  public static final class Keyword extends Argument {
-
-    // Unlike in Python, keyword arguments in Bazel BUILD files
-    // are about 10x more numerous than positional arguments.
-
-    final Identifier id;
-
-    Keyword(FileLocations locs, Identifier id, Expression value) {
-      super(locs, value);
-      this.id = id;
-    }
-
-    public Identifier getIdentifier() {
-      return id;
-    }
-
-    @Override
-    public String getName() {
-      return id.getName();
-    }
-
-    @Override
-    public int getStartOffset() {
-      return id.getStartOffset();
-    }
-  }
-
-  /** Syntax node for an argument of the form {@code f(*expr)}. */
-  public static final class Star extends Argument {
-    private final int starOffset;
-
-    Star(FileLocations locs, int starOffset, Expression value) {
-      super(locs, value);
-      this.starOffset = starOffset;
-    }
-
-    @Override
-    public int getStartOffset() {
-      return starOffset;
-    }
-  }
-
-  /** Syntax node for an argument of the form {@code f(**expr)}. */
-  public static final class StarStar extends Argument {
-    private final int starStarOffset;
-
-    StarStar(FileLocations locs, int starStarOffset, Expression value) {
-      super(locs, value);
-      this.starStarOffset = starStarOffset;
-    }
-
-    @Override
-    public int getStartOffset() {
-      return starStarOffset;
-    }
-  }
-
-  @Override
-  public void accept(NodeVisitor visitor) {
-    visitor.visit(this);
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/AssignmentStatement.java b/src/main/java/com/google/devtools/build/lib/syntax/AssignmentStatement.java
deleted file mode 100644
index edefa52..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/AssignmentStatement.java
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-import javax.annotation.Nullable;
-
-/**
- * Syntax node for an assignment statement ({@code lhs = rhs}) or augmented assignment statement
- * ({@code lhs op= rhs}).
- */
-public final class AssignmentStatement extends Statement {
-
-  private final Expression lhs; // = IDENTIFIER | DOT | INDEX | LIST_EXPR
-  @Nullable private final TokenKind op; // TODO(adonovan): make this mandatory even when '='.
-  private final int opOffset;
-  private final Expression rhs;
-
-  /**
-   * Constructs an assignment statement. For an ordinary assignment ({@code op == null}), the LHS
-   * expression must be of the form {@code id}, {@code x.y}, {@code x[i]}, {@code [e, ...]}, or
-   * {@code (e, ...)}, where x, i, and e are arbitrary expressions. For an augmented assignment, the
-   * list and tuple forms are disallowed.
-   */
-  AssignmentStatement(
-      FileLocations locs, Expression lhs, @Nullable TokenKind op, int opOffset, Expression rhs) {
-    super(locs);
-    this.lhs = lhs;
-    this.op = op;
-    this.opOffset = opOffset;
-    this.rhs = rhs;
-  }
-
-  /** Returns the LHS of the assignment. */
-  public Expression getLHS() {
-    return lhs;
-  }
-
-  /** Returns the operator of an augmented assignment, or null for an ordinary assignment. */
-  @Nullable
-  public TokenKind getOperator() {
-    return op;
-  }
-
-  /** Returns the location of the assignment operator. */
-  public Location getOperatorLocation() {
-    return locs.getLocation(opOffset);
-  }
-
-  @Override
-  public int getStartOffset() {
-    return lhs.getStartOffset();
-  }
-
-  @Override
-  public int getEndOffset() {
-    return rhs.getEndOffset();
-  }
-
-  /** Reports whether this is an augmented assignment ({@code getOperator() != null}). */
-  public boolean isAugmented() {
-    return op != null;
-  }
-
-  /** Returns the RHS of the assignment. */
-  public Expression getRHS() {
-    return rhs;
-  }
-
-  @Override
-  public void accept(NodeVisitor visitor) {
-    visitor.visit(this);
-  }
-
-  @Override
-  public Kind kind() {
-    return Kind.ASSIGNMENT;
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/BUILD b/src/main/java/com/google/devtools/build/lib/syntax/BUILD
index d6ff212..e77778c 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/syntax/BUILD
@@ -1,178 +1,7 @@
-# Description: Bazel's Starlark interpreter
-#
-# This BUILD file defines two java_library rules that
-# define a single Java package in two parts,
-# the Starlark parser and evaluator.
-# Eventually the Java package will be split in two,
-# but splitting only the build rules helps enforce
-# that only evaluator -> frontend dependencies are permitted,
-# without the churn to clients of renaming classes one at a time
-# as they move between two different Java packages.
-#
-# Until the split, clients should depend only on
-# //third_party/bazel/src/main/java/com/google/devtools/build/lib:syntax,
-# which is a facade for the complete package.
-
-load("@rules_java//java:defs.bzl", "java_library")
-
-package(default_visibility = ["//src:__subpackages__"])
-
-licenses(["notice"])  # Apache 2.0
+licenses(["notice"])
 
 filegroup(
     name = "srcs",
-    srcs = glob(["**"]),
+    srcs = ["BUILD"],
     visibility = ["//src/main/java/com/google/devtools/build/lib:__pkg__"],
 )
-
-# The Starlark frontend (syntax, scanner, parser, resolver)
-java_library(
-    name = "frontend",
-    srcs = [
-        "Argument.java",
-        "AssignmentStatement.java",
-        "BinaryOperatorExpression.java",
-        "CallExpression.java",
-        "Comment.java",
-        "Comprehension.java",
-        "ConditionalExpression.java",
-        "DefStatement.java",
-        "DictExpression.java",
-        "DotExpression.java",
-        "Expression.java",
-        "ExpressionStatement.java",
-        "FileLocations.java",
-        "FileOptions.java",
-        "FlowStatement.java",
-        "ForStatement.java",
-        "Identifier.java",
-        "IfStatement.java",
-        "IndexExpression.java",
-        "IntegerLiteral.java",
-        "Lexer.java",
-        "ListExpression.java",
-        "LoadStatement.java",
-        "Location.java",
-        "Node.java",
-        "NodePrinter.java",
-        "NodeVisitor.java",
-        "Parameter.java",
-        "Parser.java",
-        "ParserInput.java",
-        "Program.java",
-        "Resolver.java",
-        "ReturnStatement.java",
-        "SliceExpression.java",
-        "StarlarkFile.java",
-        "Statement.java",
-        "StringLiteral.java",
-        "SyntaxError.java",
-        "TokenKind.java",
-        "UnaryOperatorExpression.java",
-    ],
-    deps = [
-        # Do not add Bazel or Google dependencies here!
-        "//src/main/java/net/starlark/java/spelling",
-        "//third_party:auto_value",
-        "//third_party:guava",
-        "//third_party:jsr305",
-    ],
-)
-
-# The Starlark evaluator
-java_library(
-    name = "evaluator",
-    srcs = [
-        "BuiltinCallable.java",
-        "CallUtils.java",
-        "ClassObject.java",
-        "CpuProfiler.java",
-        "Debug.java",
-        "Dict.java",
-        "Eval.java",
-        "EvalException.java",
-        "EvalUtils.java",
-        "FlagGuardedValue.java",
-        "FormatParser.java",
-        "HasBinary.java",
-        "JNI.java",
-        "MethodDescriptor.java",
-        "MethodLibrary.java",
-        "Module.java",
-        "Mutability.java",
-        "NoneType.java",
-        "ParamDescriptor.java",
-        "Printer.java",
-        "RangeList.java",
-        "Sequence.java",
-        "Starlark.java",
-        "StarlarkCallable.java",
-        "StarlarkFunction.java",
-        "StarlarkIndexable.java",
-        "StarlarkIterable.java",
-        "StarlarkList.java",
-        "StarlarkSemantics.java",
-        "StarlarkThread.java",
-        "StarlarkValue.java",
-        "StringModule.java",
-        "Tuple.java",
-    ],
-    deps = [
-        ":frontend",
-        # Do not add Bazel or Google dependencies here!
-        "//src/main/java/net/starlark/java/annot",
-        "//src/main/java/net/starlark/java/spelling",
-        "//third_party:auto_value",
-        "//third_party:guava",
-        "//third_party:jsr305",
-        "//third_party/protobuf:protobuf_java",
-    ],
-)
-
-# Dynamic library for Starlark CPU profiler.
-# The application or test must arrange for the library to be added
-# to the java.library.path directory (e.g. by 'java -Djava.library.path=<dir>').
-# What a mess.
-filegroup(
-    name = "cpu_profiler",
-    srcs = select({
-        "//src/conditions:darwin": [":libcpu_profiler.dylib"],
-        "//src/conditions:windows": [":cpu_profiler.dll"],
-        "//conditions:default": [":libcpu_profiler.so"],  # POSIX
-    }),
-)
-
-genrule(
-    name = "cpu_profiler_darwin",
-    srcs = ["libcpu_profiler.so"],
-    outs = ["libcpu_profiler.dylib"],
-    cmd = "cp $< $@",
-    visibility = ["//visibility:private"],
-)
-
-genrule(
-    name = "cpu_profiler_windows",
-    srcs = ["libcpu_profiler.so"],
-    outs = ["cpu_profiler.dll"],
-    cmd = "cp $< $@",
-    visibility = ["//visibility:private"],
-)
-
-# The C++ portion of the Starlark CPU profiler.
-cc_binary(
-    name = "libcpu_profiler.so",
-    srcs = select({
-        "//src/conditions:darwin": ["cpu_profiler_posix.cc"],
-        # There is no config_setting for Linux.
-        # See https://github.com/bazelbuild/bazel/issues/11107
-        "//src/conditions:linux_aarch64": ["cpu_profiler_posix.cc"],
-        "//src/conditions:linux_arm": ["cpu_profiler_posix.cc"],
-        "//src/conditions:linux_ppc": ["cpu_profiler_posix.cc"],
-        "//src/conditions:linux_s390x": ["cpu_profiler_posix.cc"],
-        "//src/conditions:linux_x86_64": ["cpu_profiler_posix.cc"],
-        "//conditions:default": ["cpu_profiler_unimpl.cc"],
-    }),
-    linkshared = 1,
-    visibility = ["//visibility:private"],
-    deps = ["@bazel_tools//tools/jdk:jni"],
-)
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/BinaryOperatorExpression.java b/src/main/java/com/google/devtools/build/lib/syntax/BinaryOperatorExpression.java
deleted file mode 100644
index 066e908..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/BinaryOperatorExpression.java
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.syntax;
-
-import java.util.EnumSet;
-
-/** A BinaryExpression represents a binary operator expression 'x op y'. */
-public final class BinaryOperatorExpression extends Expression {
-
-  private final Expression x;
-  private final TokenKind op; // one of 'operators'
-  private final int opOffset;
-  private final Expression y;
-
-  /** operators is the set of valid binary operators. */
-  public static final EnumSet<TokenKind> operators =
-      EnumSet.of(
-          TokenKind.AND,
-          TokenKind.EQUALS_EQUALS,
-          TokenKind.GREATER,
-          TokenKind.GREATER_EQUALS,
-          TokenKind.IN,
-          TokenKind.LESS,
-          TokenKind.LESS_EQUALS,
-          TokenKind.MINUS,
-          TokenKind.NOT_EQUALS,
-          TokenKind.NOT_IN,
-          TokenKind.OR,
-          TokenKind.PERCENT,
-          TokenKind.SLASH,
-          TokenKind.SLASH_SLASH,
-          TokenKind.PLUS,
-          TokenKind.PIPE,
-          TokenKind.STAR);
-
-  BinaryOperatorExpression(
-      FileLocations locs, Expression x, TokenKind op, int opOffset, Expression y) {
-    super(locs);
-    this.x = x;
-    this.op = op;
-    this.opOffset = opOffset;
-    this.y = y;
-  }
-
-  /** Returns the left operand. */
-  public Expression getX() {
-    return x;
-  }
-
-  /** Returns the operator. */
-  public TokenKind getOperator() {
-    return op;
-  }
-
-  public Location getOperatorLocation() {
-    return locs.getLocation(opOffset);
-  }
-
-  /** Returns the right operand. */
-  public Expression getY() {
-    return y;
-  }
-
-  @Override
-  public int getStartOffset() {
-    return x.getStartOffset();
-  }
-
-  @Override
-  public int getEndOffset() {
-    return y.getEndOffset();
-  }
-
-  @Override
-  public String toString() {
-    // This omits the parentheses for brevity, but is not correct in general due to operator
-    // precedence rules.
-    return x + " " + op + " " + y;
-  }
-
-  @Override
-  public void accept(NodeVisitor visitor) {
-    visitor.visit(this);
-  }
-
-  @Override
-  public Kind kind() {
-    return Kind.BINARY_OPERATOR;
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/BuiltinCallable.java b/src/main/java/com/google/devtools/build/lib/syntax/BuiltinCallable.java
deleted file mode 100644
index b5c7581..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/BuiltinCallable.java
+++ /dev/null
@@ -1,372 +0,0 @@
-// Copyright 2018 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.base.Joiner;
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.LinkedHashMap;
-import java.util.List;
-import javax.annotation.Nullable;
-import net.starlark.java.annot.StarlarkMethod;
-import net.starlark.java.spelling.SpellChecker;
-
-/**
- * A BuiltinCallable is a callable Starlark value that reflectively invokes a
- * StarlarkMethod-annotated method of a Java object.
- */
-// TODO(adonovan): make this private. Most users would be content with StarlarkCallable; the rest
-// need only a means of querying the function's parameters.
-public final class BuiltinCallable implements StarlarkCallable {
-
-  private final Object obj;
-  private final String methodName;
-  @Nullable private final MethodDescriptor desc;
-
-  /**
-   * Constructs a BuiltinCallable for a StarlarkCallable-annotated method of the given name (as seen
-   * by Starlark, not Java).
-   */
-  // TODO(adonovan): eliminate calls to this constructor from tests; use getattr instead.
-  BuiltinCallable(Object obj, String methodName) {
-    this(obj, methodName, /*desc=*/ null);
-  }
-
-  /**
-   * Constructs a BuiltinCallable for a StarlarkCallable-annotated method of the given name (as seen
-   * by Starlark, not Java).
-   *
-   * <p>This constructor should be used only for ephemeral BuiltinCallable values created
-   * transiently during a call such as {@code x.f()}, when the caller has already looked up the
-   * MethodDescriptor using the same semantics as the thread that will be used in the call. Use the
-   * other (slower) constructor if there is any possibility that the semantics of the {@code x.f}
-   * operation differ from those of the thread used in the call.
-   */
-  BuiltinCallable(Object obj, String methodName, MethodDescriptor desc) {
-    this.obj = obj;
-    this.methodName = methodName;
-    this.desc = desc;
-  }
-
-  @Override
-  public Object fastcall(StarlarkThread thread, Object[] positional, Object[] named)
-      throws EvalException, InterruptedException {
-    MethodDescriptor desc =
-        this.desc != null ? this.desc : getMethodDescriptor(thread.getSemantics());
-    Preconditions.checkArgument(
-        !desc.isStructField(),
-        "struct field methods should be handled by DotExpression separately");
-    Object[] vector = getArgumentVector(thread, desc, positional, named);
-    return desc.call(
-        obj instanceof String ? StringModule.INSTANCE : obj, vector, thread.mutability());
-  }
-
-  private MethodDescriptor getMethodDescriptor(StarlarkSemantics semantics) {
-    return CallUtils.getAnnotatedMethod(semantics, obj.getClass(), methodName);
-  }
-
-  /**
-   * Returns the StarlarkMethod annotation of this Starlark-callable Java method.
-   *
-   * @deprecated This method is intended only for docgen, and uses the default semantics.
-   */
-  @Deprecated
-  public StarlarkMethod getAnnotation() {
-    return getMethodDescriptor(StarlarkSemantics.DEFAULT).getAnnotation();
-  }
-
-  @Override
-  public String getName() {
-    return methodName;
-  }
-
-  @Override
-  public void repr(Printer printer) {
-    printer.append("<built-in function " + methodName + ">");
-  }
-
-  @Override
-  public String toString() {
-    return methodName;
-  }
-
-  /**
-   * Converts the arguments of a Starlark call into the argument vector for a reflective call to a
-   * StarlarkMethod-annotated Java method.
-   *
-   * @param thread the Starlark thread for the call
-   * @param loc the location of the call expression, or BUILTIN for calls from Java
-   * @param desc descriptor for the StarlarkCallable-annotated method
-   * @param positional a list of positional arguments
-   * @param named a list of named arguments, as alternating Strings/Objects. May contain dups.
-   * @return the array of arguments which may be passed to {@link MethodDescriptor#call}
-   * @throws EvalException if the given set of arguments are invalid for the given method. For
-   *     example, if any arguments are of unexpected type, or not all mandatory parameters are
-   *     specified by the user
-   */
-  private Object[] getArgumentVector(
-      StarlarkThread thread,
-      MethodDescriptor desc, // intentionally shadows this.desc
-      Object[] positional,
-      Object[] named)
-      throws EvalException {
-
-    // Overview of steps:
-    // - allocate vector of actual arguments of correct size.
-    // - process positional arguments, accumulating surplus ones into *args.
-    // - process named arguments, accumulating surplus ones into **kwargs.
-    // - set default values for missing optionals, and report missing mandatory parameters.
-    // - set special parameters.
-    // The static checks ensure that positional parameters appear before named,
-    // and mandatory positionals appear before optional.
-    // No additional memory allocation occurs in the common (success) case.
-    // Flag-disabled parameters are skipped during argument matching, as if they do not exist. They
-    // are instead assigned their flag-disabled values.
-
-    ParamDescriptor[] parameters = desc.getParameters();
-
-    // Allocate argument vector.
-    int n = parameters.length;
-    if (desc.acceptsExtraArgs()) {
-      n++;
-    }
-    if (desc.acceptsExtraKwargs()) {
-      n++;
-    }
-    if (desc.isUseStarlarkThread()) {
-      n++;
-    }
-    Object[] vector = new Object[n];
-
-    // positional arguments
-    int paramIndex = 0;
-    int argIndex = 0;
-    if (obj instanceof String) {
-      // String methods get the string as an extra argument
-      // because their true receiver is StringModule.INSTANCE.
-      vector[paramIndex++] = obj;
-    }
-    for (; argIndex < positional.length && paramIndex < parameters.length; paramIndex++) {
-      ParamDescriptor param = parameters[paramIndex];
-      if (!param.isPositional()) {
-        break;
-      }
-
-      // disabled?
-      if (param.disabledByFlag() != null) {
-        // Skip disabled parameter as if not present at all.
-        // The default value will be filled in below.
-        continue;
-      }
-
-      Object value = positional[argIndex++];
-      checkParamValue(param, value);
-      vector[paramIndex] = value;
-    }
-
-    // *args
-    Tuple<Object> varargs = null;
-    if (desc.acceptsExtraArgs()) {
-      varargs = Tuple.wrap(Arrays.copyOfRange(positional, argIndex, positional.length));
-    } else if (argIndex < positional.length) {
-      if (argIndex == 0) {
-        throw Starlark.errorf("%s() got unexpected positional argument", methodName);
-      } else {
-        throw Starlark.errorf(
-            "%s() accepts no more than %d positional argument%s but got %d",
-            methodName, argIndex, plural(argIndex), positional.length);
-      }
-    }
-
-    // named arguments
-    LinkedHashMap<String, Object> kwargs = desc.acceptsExtraKwargs() ? new LinkedHashMap<>() : null;
-    for (int i = 0; i < named.length; i += 2) {
-      String name = (String) named[i]; // safe
-      Object value = named[i + 1];
-
-      // look up parameter
-      int index = desc.getParameterIndex(name);
-      // unknown parameter?
-      if (index < 0) {
-        // spill to **kwargs
-        if (kwargs == null) {
-          List<String> allNames =
-              Arrays.stream(parameters)
-                  .map(ParamDescriptor::getName)
-                  .collect(ImmutableList.toImmutableList());
-          throw Starlark.errorf(
-              "%s() got unexpected keyword argument '%s'%s",
-              methodName, name, SpellChecker.didYouMean(name, allNames));
-        }
-
-        // duplicate named argument?
-        if (kwargs.put(name, value) != null) {
-          throw Starlark.errorf(
-              "%s() got multiple values for keyword argument '%s'", methodName, name);
-        }
-        continue;
-      }
-      ParamDescriptor param = parameters[index];
-
-      // positional-only param?
-      if (!param.isNamed()) {
-        // spill to **kwargs
-        if (kwargs == null) {
-          throw Starlark.errorf(
-              "%s() got named argument for positional-only parameter '%s'", methodName, name);
-        }
-
-        // duplicate named argument?
-        if (kwargs.put(name, value) != null) {
-          throw Starlark.errorf(
-              "%s() got multiple values for keyword argument '%s'", methodName, name);
-        }
-        continue;
-      }
-
-      // disabled?
-      String flag = param.disabledByFlag();
-      if (flag != null) {
-        // spill to **kwargs
-        if (kwargs == null) {
-          throw Starlark.errorf(
-              "in call to %s(), parameter '%s' is %s",
-              methodName, param.getName(), disabled(flag, thread.getSemantics()));
-        }
-
-        // duplicate named argument?
-        if (kwargs.put(name, value) != null) {
-          throw Starlark.errorf(
-              "%s() got multiple values for keyword argument '%s'", methodName, name);
-        }
-        continue;
-      }
-
-      checkParamValue(param, value);
-
-      // duplicate?
-      if (vector[index] != null) {
-        throw Starlark.errorf("%s() got multiple values for argument '%s'", methodName, name);
-      }
-
-      vector[index] = value;
-    }
-
-    // Set default values for missing parameters,
-    // and report any that are still missing.
-    List<String> missingPositional = null;
-    List<String> missingNamed = null;
-    for (int i = 0; i < parameters.length; i++) {
-      if (vector[i] == null) {
-        ParamDescriptor param = parameters[i];
-        vector[i] = param.getDefaultValue();
-        if (vector[i] == null) {
-          if (param.isPositional()) {
-            if (missingPositional == null) {
-              missingPositional = new ArrayList<>();
-            }
-            missingPositional.add(param.getName());
-          } else {
-            if (missingNamed == null) {
-              missingNamed = new ArrayList<>();
-            }
-            missingNamed.add(param.getName());
-          }
-        }
-      }
-    }
-    if (missingPositional != null) {
-      throw Starlark.errorf(
-          "%s() missing %d required positional argument%s: %s",
-          methodName,
-          missingPositional.size(),
-          plural(missingPositional.size()),
-          Joiner.on(", ").join(missingPositional));
-    }
-    if (missingNamed != null) {
-      throw Starlark.errorf(
-          "%s() missing %d required named argument%s: %s",
-          methodName,
-          missingNamed.size(),
-          plural(missingNamed.size()),
-          Joiner.on(", ").join(missingNamed));
-    }
-
-    // special parameters
-    int i = parameters.length;
-    if (desc.acceptsExtraArgs()) {
-      vector[i++] = varargs;
-    }
-    if (desc.acceptsExtraKwargs()) {
-      vector[i++] = Dict.wrap(thread.mutability(), kwargs);
-    }
-    if (desc.isUseStarlarkThread()) {
-      vector[i++] = thread;
-    }
-
-    return vector;
-  }
-
-  private static String plural(int n) {
-    return n == 1 ? "" : "s";
-  }
-
-  private void checkParamValue(ParamDescriptor param, Object value) throws EvalException {
-    // Value must belong to one of the specified classes.
-    boolean ok = false;
-    for (Class<?> cls : param.getAllowedClasses()) {
-      if (cls.isInstance(value)) {
-        ok = true;
-        break;
-      }
-    }
-    if (!ok) {
-      throw Starlark.errorf(
-          "in call to %s(), parameter '%s' got value of type '%s', want '%s'",
-          methodName, param.getName(), Starlark.type(value), param.getTypeErrorMessage());
-    }
-
-    // None is valid if and only if the parameter is marked noneable,
-    // in which case the above check passes as the list of classes will include NoneType.
-    // The reason for this check is to ensure that merely having type=Object.class
-    // does not allow None as an argument value; I'm not sure why, that but that's the
-    // historical behavior.
-    //
-    // We do this check second because the first check prints a better error
-    // that enumerates the allowed types.
-    if (value == Starlark.NONE && !param.isNoneable()) {
-      throw Starlark.errorf(
-          "in call to %s(), parameter '%s' cannot be None", methodName, param.getName());
-    }
-  }
-
-  // Returns a phrase meaning "disabled" appropriate to the specified flag.
-  private static String disabled(String flag, StarlarkSemantics semantics) {
-    // If the flag is True, it must be a deprecation flag. Otherwise it's an experimental flag.
-    // TODO(adonovan): is that assumption sound?
-    if (semantics.getBool(flag)) {
-      return String.format(
-          "deprecated and will be removed soon. It may be temporarily re-enabled by setting"
-              + " --%s=false",
-          flag.substring(1)); // remove [+-] prefix
-    } else {
-      return String.format(
-          "experimental and thus unavailable with the current flags. It may be enabled by setting"
-              + " --%s",
-          flag.substring(1)); // remove [+-] prefix
-    }
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/CallExpression.java b/src/main/java/com/google/devtools/build/lib/syntax/CallExpression.java
deleted file mode 100644
index 128bd5f..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/CallExpression.java
+++ /dev/null
@@ -1,104 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
-
-/** Syntax node for a function call expression. */
-public final class CallExpression extends Expression {
-
-  private final Expression function;
-  private final Location lparenLocation;
-  private final ImmutableList<Argument> arguments;
-  private final int rparenOffset;
-
-  private final int numPositionalArgs;
-
-  CallExpression(
-      FileLocations locs,
-      Expression function,
-      Location lparenLocation,
-      ImmutableList<Argument> arguments,
-      int rparenOffset) {
-    super(locs);
-    this.function = Preconditions.checkNotNull(function);
-    this.lparenLocation = lparenLocation;
-    this.arguments = arguments;
-    this.rparenOffset = rparenOffset;
-
-    int n = 0;
-    for (Argument arg : arguments) {
-      if (arg instanceof Argument.Positional) {
-        n++;
-      }
-    }
-    this.numPositionalArgs = n;
-  }
-
-  /** Returns the function that is called. */
-  public Expression getFunction() {
-    return this.function;
-  }
-
-  /** Returns the number of arguments of type {@code Argument.Positional}. */
-  public int getNumPositionalArguments() {
-    return numPositionalArgs;
-  }
-
-  /** Returns the function arguments. */
-  public ImmutableList<Argument> getArguments() {
-    return arguments;
-  }
-
-  @Override
-  public int getStartOffset() {
-    return function.getStartOffset();
-  }
-
-  @Override
-  public int getEndOffset() {
-    return rparenOffset + 1;
-  }
-
-  public Location getLparenLocation() {
-    // Unlike all other getXXXLocation methods, this one returns a reference to
-    // a previously materialized Location. getLparenLocation is unique among
-    // locations because the tree-walking evaluator needs it frequently even
-    // in the absence of errors. When we switch to a compiled representation
-    // we can dispense with this optimization.
-    return lparenLocation;
-  }
-
-  @Override
-  public String toString() {
-    StringBuilder buf = new StringBuilder();
-    buf.append(function);
-    buf.append('(');
-    ListExpression.appendNodes(buf, arguments);
-    buf.append(')');
-    return buf.toString();
-  }
-
-  @Override
-  public void accept(NodeVisitor visitor) {
-    visitor.visit(this);
-  }
-
-  @Override
-  public Kind kind() {
-    return Kind.CALL;
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/CallUtils.java b/src/main/java/com/google/devtools/build/lib/syntax/CallUtils.java
deleted file mode 100644
index 4398edf..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/CallUtils.java
+++ /dev/null
@@ -1,212 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import java.lang.reflect.Method;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import javax.annotation.Nullable;
-import net.starlark.java.annot.StarlarkInterfaceUtils;
-import net.starlark.java.annot.StarlarkMethod;
-
-/** Helper functions for StarlarkMethod-annotated fields and methods. */
-final class CallUtils {
-
-  private CallUtils() {} // uninstantiable
-
-  private static CacheValue getCacheValue(Class<?> cls, StarlarkSemantics semantics) {
-    if (cls == String.class) {
-      cls = StringModule.class;
-    }
-    Key key = new Key(cls, semantics);
-
-    // Speculatively call `get` because `computeIfAbsent` is more expensive
-    // even when the map already contains a value (common case).
-    CacheValue cacheValue = cache.get(key);
-    if (cacheValue == null) {
-      cacheValue = cache.computeIfAbsent(key, CallUtils::buildCacheValue);
-    }
-    return cacheValue;
-  }
-
-  // Key is a simple Pair<Class, StarlarkSemantics>.
-  private static final class Key {
-    final Class<?> cls;
-    final StarlarkSemantics semantics;
-
-    Key(Class<?> cls, StarlarkSemantics semantics) {
-      this.cls = cls;
-      this.semantics = semantics;
-    }
-
-    @Override
-    public boolean equals(Object that) {
-      return this == that
-          || (that instanceof Key
-              && this.cls.equals(((Key) that).cls)
-              && this.semantics.equals(((Key) that).semantics));
-    }
-
-    @Override
-    public int hashCode() {
-      return 31 * cls.hashCode() + semantics.hashCode();
-    }
-  }
-
-  // Information derived from a StarlarkMethod-annotated class and a StarlarkSemantics.
-  // methods is a superset of fields.
-  private static class CacheValue {
-    @Nullable MethodDescriptor selfCall;
-    ImmutableMap<String, MethodDescriptor> fields; // sorted by Java method name
-    ImmutableMap<String, MethodDescriptor> methods; // sorted by Java method name
-  }
-
-  // A cache of information derived from a StarlarkMethod-annotated class and a StarlarkSemantics.
-  private static final ConcurrentHashMap<Key, CacheValue> cache = new ConcurrentHashMap<>();
-
-  private static CacheValue buildCacheValue(Key key) {
-    MethodDescriptor selfCall = null;
-    ImmutableMap.Builder<String, MethodDescriptor> methods = ImmutableMap.builder();
-    Map<String, MethodDescriptor> fields = new HashMap<>();
-
-    // Sort methods by Java name, for determinism.
-    Method[] classMethods = key.cls.getMethods();
-    Arrays.sort(classMethods, Comparator.comparing(Method::getName));
-    for (Method method : classMethods) {
-      // Synthetic methods lead to false multiple matches
-      if (method.isSynthetic()) {
-        continue;
-      }
-
-      // annotated?
-      StarlarkMethod callable = StarlarkInterfaceUtils.getStarlarkMethod(method);
-      if (callable == null) {
-        continue;
-      }
-
-      // enabled by semantics?
-      if (!key.semantics.isFeatureEnabledBasedOnTogglingFlags(
-          callable.enableOnlyWithFlag(), callable.disableWithFlag())) {
-        continue;
-      }
-
-      MethodDescriptor descriptor = MethodDescriptor.of(method, callable, key.semantics);
-
-      // self-call method?
-      if (callable.selfCall()) {
-        if (selfCall != null) {
-          throw new IllegalArgumentException(
-              String.format("Class %s has two selfCall methods defined", key.cls.getName()));
-        }
-        selfCall = descriptor;
-        continue;
-      }
-
-      // regular method
-      methods.put(callable.name(), descriptor);
-
-      // field method?
-      if (descriptor.isStructField() && fields.put(callable.name(), descriptor) != null) {
-        // TODO(b/72113542): Validate with annotation processor instead of at runtime.
-        throw new IllegalArgumentException(
-            String.format(
-                "Class %s declares two structField methods named %s",
-                key.cls.getName(), callable.name()));
-      }
-    }
-
-    CacheValue value = new CacheValue();
-    value.selfCall = selfCall;
-    value.methods = methods.build();
-    value.fields = ImmutableMap.copyOf(fields);
-    return value;
-  }
-
-  /**
-   * Returns a map of methods and corresponding StarlarkMethod annotations of the methods of the
-   * objClass class reachable from Starlark. Elements are sorted by Java method name (which is not
-   * necessarily the same as Starlark attribute name).
-   */
-  static ImmutableMap<Method, StarlarkMethod> getAnnotatedMethods(Class<?> objClass) {
-    ImmutableMap.Builder<Method, StarlarkMethod> result = ImmutableMap.builder();
-    for (MethodDescriptor desc :
-        getCacheValue(objClass, StarlarkSemantics.DEFAULT).methods.values()) {
-      result.put(desc.getMethod(), desc.getAnnotation());
-    }
-    return result.build();
-  }
-
-  /**
-   * Returns the value of the Starlark field of {@code x}, implemented by a Java method with a
-   * {@code StarlarkMethod(structField=true)} annotation.
-   */
-  static Object getAnnotatedField(StarlarkSemantics semantics, Object x, String fieldName)
-      throws EvalException, InterruptedException {
-    MethodDescriptor desc = getCacheValue(x.getClass(), semantics).fields.get(fieldName);
-    if (desc == null) {
-      throw Starlark.errorf("value of type %s has no .%s field", Starlark.type(x), fieldName);
-    }
-    return desc.callField(x, semantics, /*mu=*/ null);
-  }
-
-  /** Returns the names of the Starlark fields of {@code x} under the specified semantics. */
-  static ImmutableSet<String> getAnnotatedFieldNames(StarlarkSemantics semantics, Object x) {
-    return getCacheValue(x.getClass(), semantics).fields.keySet();
-  }
-
-  /** Returns the StarlarkMethod-annotated method of objClass with the given name. */
-  static MethodDescriptor getAnnotatedMethod(
-      StarlarkSemantics semantics, Class<?> objClass, String methodName) {
-    return getCacheValue(objClass, semantics).methods.get(methodName);
-  }
-
-  /**
-   * Returns a set of the Starlark name of all Starlark callable methods for object of type {@code
-   * objClass}.
-   */
-  static ImmutableSet<String> getAnnotatedMethodNames(
-      StarlarkSemantics semantics, Class<?> objClass) {
-    return getCacheValue(objClass, semantics).methods.keySet();
-  }
-
-  /**
-   * Returns a {@link MethodDescriptor} object representing a function which calls the selfCall java
-   * method of the given object (the {@link StarlarkMethod} method with {@link
-   * StarlarkMethod#selfCall()} set to true). Returns null if no such method exists.
-   */
-  @Nullable
-  static MethodDescriptor getSelfCallMethodDescriptor(
-      StarlarkSemantics semantics, Class<?> objClass) {
-    return getCacheValue(objClass, semantics).selfCall;
-  }
-
-  /**
-   * Returns a {@code selfCall=true} method for the given class under the given Starlark semantics,
-   * or null if no such method exists.
-   */
-  @Nullable
-  static Method getSelfCallMethod(StarlarkSemantics semantics, Class<?> objClass) {
-    MethodDescriptor descriptor = getCacheValue(objClass, semantics).selfCall;
-    if (descriptor == null) {
-      return null;
-    }
-    return descriptor.getMethod();
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/ClassObject.java b/src/main/java/com/google/devtools/build/lib/syntax/ClassObject.java
deleted file mode 100644
index 8db641f..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/ClassObject.java
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.collect.ImmutableCollection;
-import javax.annotation.Nullable;
-
-/** An interface for Starlark values (such as structs) that have fields. */
-// TODO(adonovan): rename "HasFields".
-public interface ClassObject extends StarlarkValue {
-
-  /**
-   * Returns the value of the field with the given name, or null if the field does not exist. The
-   * interpreter (Starlark code) calls the getValue below, which has access to StarlarkSemantics.
-   *
-   * <p>The set of names for which {@code getValue} returns non-null should match {@code
-   * getFieldNames} if possible.
-   *
-   * @throws EvalException if a user-visible error occurs (other than non-existent field).
-   */
-  // TODO(adonovan): rename "getField".
-  @Nullable
-  Object getValue(String name) throws EvalException;
-
-  /**
-   * Returns the value of the field with the given name, or null if the field does not exist. The
-   * interpreter (Starlark code) calls this getValue, but client code cannot be relied upon to do
-   * so, so any checks done on the semantics are incompletely enforced.
-   *
-   * @param semantics the Starlark semantics, which determine the available fields
-   * @param name the name of the field to retrieve
-   * @throws EvalException if the field exists but could not be retrieved
-   */
-  @Nullable
-  default Object getValue(StarlarkSemantics semantics, String name) throws EvalException {
-    return this.getValue(name);
-  }
-
-  /**
-   * Returns the names of this value's fields, in some undefined but stable order.
-   *
-   * <p>A call to {@code getValue} for each of these names should return non-null, though this is
-   * not enforced.
-   *
-   * <p>The Starlark expression {@code dir(x)} reports the union of {@code getFieldNames()} and any
-   * StarlarkMethod-annotated fields and methods of this value.
-   */
-  ImmutableCollection<String> getFieldNames();
-
-  /**
-   * Returns the error message to print for an attempt to access an undefined field.
-   *
-   * <p>May return null to use a default error message.
-   */
-  @Nullable
-  String getErrorMessageForUnknownField(String field);
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Comment.java b/src/main/java/com/google/devtools/build/lib/syntax/Comment.java
deleted file mode 100644
index 2af98f9..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Comment.java
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.syntax;
-
-
-/** Syntax node for comments. */
-public final class Comment extends Node {
-
-  private final int offset;
-  private final String text;
-
-  Comment(FileLocations locs, int offset, String text) {
-    super(locs);
-    this.offset = offset;
-    this.text = text;
-  }
-
-  /** Returns the text of the comment, including the leading '#' but not the trailing newline. */
-  public String getText() {
-    return text;
-  }
-
-  @Override
-  public int getStartOffset() {
-    return offset;
-  }
-
-  @Override
-  public int getEndOffset() {
-    return offset + text.length();
-  }
-
-  @Override
-  public void accept(NodeVisitor visitor) {
-    visitor.visit(this);
-  }
-
-  @Override
-  public String toString() {
-    return text;
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Comprehension.java b/src/main/java/com/google/devtools/build/lib/syntax/Comprehension.java
deleted file mode 100644
index 3444930..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Comprehension.java
+++ /dev/null
@@ -1,171 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.collect.ImmutableList;
-
-/**
- * Syntax node for list and dict comprehensions.
- *
- * <p>A comprehension contains one or more clauses, e.g. [a+d for a in b if c for d in e] contains
- * three clauses: "for a in b", "if c", "for d in e". For and If clauses can happen in any order,
- * except that the first one has to be a For.
- *
- * <p>The code above can be expanded as:
- *
- * <pre>
- *   for a in b:
- *     if c:
- *       for d in e:
- *         result.append(a+d)
- * </pre>
- *
- * result is initialized to [] (list) or {} (dict) and is the return value of the whole expression.
- */
-public final class Comprehension extends Expression {
-
-  /** For or If */
-  public abstract static class Clause extends Node {
-    Clause(FileLocations locs) {
-      super(locs);
-    }
-  }
-
-  /** A for clause in a comprehension, e.g. "for a in b" in the example above. */
-  public static final class For extends Clause {
-    private final int forOffset;
-    private final Expression vars;
-    private final Expression iterable;
-
-    For(FileLocations locs, int forOffset, Expression vars, Expression iterable) {
-      super(locs);
-      this.forOffset = forOffset;
-      this.vars = vars;
-      this.iterable = iterable;
-    }
-
-    public Expression getVars() {
-      return vars;
-    }
-
-    public Expression getIterable() {
-      return iterable;
-    }
-
-    @Override
-    public int getStartOffset() {
-      return forOffset;
-    }
-
-    @Override
-    public int getEndOffset() {
-      return iterable.getEndOffset();
-    }
-
-    @Override
-    public void accept(NodeVisitor visitor) {
-      visitor.visit(this);
-    }
-  }
-
-  /** A if clause in a comprehension, e.g. "if c" in the example above. */
-  public static final class If extends Clause {
-    private final int ifOffset;
-    private final Expression condition;
-
-    If(FileLocations locs, int ifOffset, Expression condition) {
-      super(locs);
-      this.ifOffset = ifOffset;
-      this.condition = condition;
-    }
-
-    public Expression getCondition() {
-      return condition;
-    }
-
-    @Override
-    public int getStartOffset() {
-      return ifOffset;
-    }
-
-    @Override
-    public int getEndOffset() {
-      return condition.getEndOffset();
-    }
-
-    @Override
-    public void accept(NodeVisitor visitor) {
-      visitor.visit(this);
-    }
-  }
-
-  private final boolean isDict; // {k: v for vars in iterable}
-  private final int lbracketOffset;
-  private final Node body; // Expression or DictExpression.Entry
-  private final ImmutableList<Clause> clauses;
-  private final int rbracketOffset;
-
-  Comprehension(
-      FileLocations locs,
-      boolean isDict,
-      int lbracketOffset,
-      Node body,
-      ImmutableList<Clause> clauses,
-      int rbracketOffset) {
-    super(locs);
-    this.isDict = isDict;
-    this.lbracketOffset = lbracketOffset;
-    this.body = body;
-    this.clauses = clauses;
-    this.rbracketOffset = rbracketOffset;
-  }
-
-  public boolean isDict() {
-    return isDict;
-  }
-
-  /**
-   * Returns the loop body: an expression for a list comprehension, or a DictExpression.Entry for a
-   * dict comprehension.
-   */
-  public Node getBody() {
-    return body;
-  }
-
-  public ImmutableList<Clause> getClauses() {
-    return clauses;
-  }
-
-  @Override
-  public int getStartOffset() {
-    return lbracketOffset;
-  }
-
-  @Override
-  public int getEndOffset() {
-    return rbracketOffset + 1;
-  }
-
-  @Override
-  public void accept(NodeVisitor visitor) {
-    visitor.visit(this);
-  }
-
-  @Override
-  public Kind kind() {
-    return Kind.COMPREHENSION;
-  }
-
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/ConditionalExpression.java b/src/main/java/com/google/devtools/build/lib/syntax/ConditionalExpression.java
deleted file mode 100644
index 973eedc..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/ConditionalExpression.java
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.syntax;
-
-/** Syntax node for an expression of the form {@code t if cond else f}. */
-public final class ConditionalExpression extends Expression {
-
-  private final Expression t;
-  private final Expression cond;
-  private final Expression f;
-
-  public Expression getThenCase() {
-    return t;
-  }
-
-  public Expression getCondition() {
-    return cond;
-  }
-
-  public Expression getElseCase() {
-    return f;
-  }
-
-  /** Constructor for a conditional expression */
-  ConditionalExpression(FileLocations locs, Expression t, Expression cond, Expression f) {
-    super(locs);
-    this.t = t;
-    this.cond = cond;
-    this.f = f;
-  }
-
-  @Override
-  public int getStartOffset() {
-    return t.getStartOffset();
-  }
-
-  @Override
-  public int getEndOffset() {
-    return f.getEndOffset();
-  }
-
-  @Override
-  public void accept(NodeVisitor visitor) {
-    visitor.visit(this);
-  }
-
-  @Override
-  public Kind kind() {
-    return Kind.CONDITIONAL;
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/CpuProfiler.java b/src/main/java/com/google/devtools/build/lib/syntax/CpuProfiler.java
deleted file mode 100644
index be836a4..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/CpuProfiler.java
+++ /dev/null
@@ -1,450 +0,0 @@
-// Copyright 2020 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.collect.ImmutableList;
-import com.google.protobuf.CodedOutputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.FileDescriptor;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.time.Duration;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.zip.GZIPOutputStream;
-import javax.annotation.Nullable;
-
-// Overview
-//
-// A CPU profiler measures CPU cycles consumed by each thread.
-// It does not account for time a thread is blocked in I/O
-// (e.g. within a call to glob), or runnable but not actually
-// running, as happens when there are more runnable threads than cores.
-//
-// CPU profiling requires operating system support.
-// On POSIX systems, the setitimer system call causes
-// the kernel to signal an application periodically.
-// With the ITIMER_PROF option, setitimer delivers a
-// SIGPROF signal to a running thread each time its CPU usage
-// exceeds the specific quantum. A profiler builds a histogram
-// of these these signals, grouped by the current program
-// counter location, or more usefully by the complete stack of
-// program counter locations.
-//
-// This profiler calls a C++ function to install a SIGPROF handler.
-// Like all handlers for asynchronous signals (that is, signals not
-// caused by the execution of program instructions), it is extremely
-// constrained in what it may do. It cannot acquire locks, allocate
-// memory, or interact with the JVM in any way. Our signal handler
-// simply sends a message into a global pipe; the message records
-// the operating system's identifier (tid) for the signalled thread.
-//
-// Reading from the other end of the pipe is a Java thread, the router.
-// Its job is to map each OS tid to a StarlarkThread, if the
-// thread is currently executing Starlark code, and increment
-// a volatile counter in that StarlarkThread. If the thread is
-// not executing Starlark code, the router discards the event.
-// When a Starlark thread enters or leaves a function during profiling,
-// it updates the StarlarkThread-to-OS-thread mapping consulted by the
-// router.
-//
-// If the router does not drain the pipe in a timely manner (on the
-// order of 10s; see signal handler), the signal handler prints a
-// warning and discards the event.
-//
-// The router may induce a delay between the kernel signal and the
-// thread's stack sampling, during which Starlark execution may have
-// moved on to another function. Assuming uniform delay, this is
-// equivalent to shifting the phase but not the frequency of CPU ticks.
-// Nonetheless it may bias the profile because, for example,
-// it would cause a Starlark 'sleep' function to accrue a nonzero
-// number of CPU ticks that properly belong to the preceding computation.
-//
-// When a Starlark thread leaves any function, it reads and clears
-// its counter of CPU ticks. If the counter was nonzero, the thread
-// writes a copy of its stack to the profiler log in pprof form,
-// which is a gzip-compressed stream of protocol messages.
-//
-// The profiler is inherently global to the process,
-// and records the effects of all Starlark threads.
-// It may be started and stopped concurrent with Starlark execution,
-// allowing profiling of a portion of a long-running computation.
-
-/** A CPU profiler for Starlark (POSIX only for now). */
-final class CpuProfiler {
-
-  static {
-    JNI.load();
-  }
-
-  private final PprofWriter pprof;
-
-  private CpuProfiler(OutputStream out, Duration period) {
-    this.pprof = new PprofWriter(out, period);
-  }
-
-  // The active profiler, if any.
-  @Nullable private static volatile CpuProfiler instance;
-
-  /** Returns the active profiler, or null if inactive. */
-  @Nullable
-  static CpuProfiler get() {
-    return instance;
-  }
-
-  // Maps OS thread ID to StarlarkThread.
-  // The StarlarkThread is needed only for its cpuTicks field.
-  private static final Map<Integer, StarlarkThread> threads = new ConcurrentHashMap<>();
-
-  /**
-   * Associates the specified StarlarkThread with the current OS thread. Returns the StarlarkThread
-   * previously associated with it, if any.
-   */
-  @Nullable
-  static StarlarkThread setStarlarkThread(StarlarkThread thread) {
-    if (thread == null) {
-      return threads.remove(gettid());
-    } else {
-      return threads.put(gettid(), thread);
-    }
-  }
-
-  /** Start the profiler. */
-  static void start(OutputStream out, Duration period) {
-    if (!supported()) {
-      throw new UnsupportedOperationException("this platform does not support Starlark profiling");
-    }
-    if (instance != null) {
-      throw new IllegalStateException("profiler started twice without intervening stop");
-    }
-
-    startRouter();
-    if (!startTimer(period.toNanos() / 1000L)) {
-      throw new IllegalStateException("profile signal handler already in use");
-    }
-
-    instance = new CpuProfiler(out, period);
-  }
-
-  /** Stop the profiler and wait for the log to be written. */
-  static void stop() throws IOException {
-    if (instance == null) {
-      throw new IllegalStateException("stop without start");
-    }
-
-    CpuProfiler profiler = instance;
-    instance = null;
-
-    stopTimer();
-
-    // Finish writing the file and fail if there were any I/O errors.
-    profiler.pprof.writeEnd();
-  }
-
-  /** Records a profile event. */
-  void addEvent(int ticks, ImmutableList<Debug.Frame> stack) {
-    pprof.writeEvent(ticks, stack);
-  }
-
-  // ---- signal router ----
-
-  private static FileInputStream pipe;
-
-  // Starts the routing thread if not already started (idempotent).
-  // On return, it is safe to install the signal handler.
-  private static synchronized void startRouter() {
-    if (pipe == null) {
-      pipe = new FileInputStream(createPipe());
-      Thread router = new Thread(CpuProfiler::router, "SIGPROF router");
-      router.setDaemon(true);
-      router.start();
-    }
-  }
-
-  // The Router thread routes SIGPROF events (from the pipe)
-  // to the relevant StarlarkThread. Once started, it runs forever.
-  //
-  // TODO(adonovan): opt: a more efficient implementation of routing would be
-  // to use, instead of a pipe from the signal handler to the routing thread,
-  // a mapping, maintained in C++, from OS thread ID to cpuTicks pointer.
-  // The {add,remove}Thread operations would update this mapping,
-  // and the signal handler would read it. The mapping would have to
-  // be a lock-free hash table so that it can be safely read in an
-  // async signal handler. The pointer would point to the sole element
-  // of direct memory buffer belonging to the StarlarkThread, allocated
-  // by JNI NewDirectByteBuffer.
-  // In this way, the signal handler could update the StarlarkThread directly,
-  // saving 100 write+read calls per second per core.
-  //
-  private static void router() {
-    byte[] buf = new byte[4];
-    while (true) {
-      try {
-        int n = pipe.read(buf);
-        if (n < 0) {
-          throw new IllegalStateException("pipe closed");
-        }
-        if (n != 4) {
-          throw new IllegalStateException("short read");
-        }
-      } catch (IOException ex) {
-        throw new IllegalStateException("unexpected I/O error", ex);
-      }
-
-      int tid = int32be(buf);
-
-      // Record a CPU tick against tid.
-      //
-      // It's not safe to grab the thread's stack here because the thread
-      // may be changing it, so we increment the thread's counter.
-      // When the thread later observes the counter is non-zero,
-      // it gives us the stack by calling addEvent.
-      StarlarkThread thread = threads.get(tid);
-      if (thread != null) {
-        thread.cpuTicks.getAndIncrement();
-      }
-    }
-  }
-
-  // Decodes a signed 32-bit big-endian integer from b[0:4].
-  private static int int32be(byte[] b) {
-    return b[0] << 24 | (b[1] & 0xff) << 16 | (b[2] & 0xff) << 8 | (b[3] & 0xff);
-  }
-
-  // --- native code (see cpu_profiler) ---
-
-  // Reports whether the profiler is supported on this platform.
-  private static native boolean supported();
-
-  // Returns the read end of a pipe from which profile events may be read.
-  // Each event is an operating system thread ID encoded as uint32be.
-  private static native FileDescriptor createPipe();
-
-  // Starts the operating system's interval timer.
-  // The period must be a positive number of microseconds.
-  // Returns false if SIGPROF is already in use.
-  private static native boolean startTimer(long periodMicros);
-
-  // Stops the operating system's interval timer.
-  private static native void stopTimer();
-
-  // Returns the operating system's identifier for the calling thread.
-  private static native int gettid();
-
-  // Encoder for pprof format profiles.
-  // See https://github.com/google/pprof/tree/master/proto
-  // We encode the protocol messages by hand to avoid
-  // adding a dependency on the protocol compiler.
-  private static final class PprofWriter {
-
-    private final Duration period;
-    private final long startNano;
-    private GZIPOutputStream gz;
-    private CodedOutputStream enc;
-    private IOException error; // the first write error, if any; reported during stop()
-
-    PprofWriter(OutputStream out, Duration period) {
-      this.period = period;
-      this.startNano = System.nanoTime();
-
-      try {
-        this.gz = new GZIPOutputStream(out);
-        this.enc = CodedOutputStream.newInstance(gz);
-        getStringID(""); // entry 0 is always ""
-
-        // dimension and unit
-        ByteArrayOutputStream unit = new ByteArrayOutputStream();
-        CodedOutputStream unitEnc = CodedOutputStream.newInstance(unit);
-        unitEnc.writeInt64(VALUETYPE_TYPE, getStringID("CPU"));
-        unitEnc.writeInt64(VALUETYPE_UNIT, getStringID("microseconds"));
-        unitEnc.flush();
-
-        // informational fields of Profile
-        enc.writeByteArray(PROFILE_SAMPLE_TYPE, unit.toByteArray());
-        // magnitude of sampling period:
-        enc.writeInt64(PROFILE_PERIOD, period.toNanos() / 1000L);
-        // dimension and unit of period:
-        enc.writeByteArray(PROFILE_PERIOD_TYPE, unit.toByteArray());
-        // start (real) time of profile:
-        enc.writeInt64(PROFILE_TIME_NANOS, System.currentTimeMillis() * 1000000L);
-      } catch (IOException ex) {
-        this.error = ex;
-      }
-    }
-
-    synchronized void writeEvent(int ticks, ImmutableList<Debug.Frame> stack) {
-      if (this.error == null) {
-        try {
-          ByteArrayOutputStream sample = new ByteArrayOutputStream();
-          CodedOutputStream sampleEnc = CodedOutputStream.newInstance(sample);
-          sampleEnc.writeInt64(SAMPLE_VALUE, ticks * period.toNanos() / 1000L);
-          for (Debug.Frame fr : stack.reverse()) {
-            sampleEnc.writeUInt64(SAMPLE_LOCATION_ID, getLocationID(fr));
-          }
-          sampleEnc.flush();
-          enc.writeByteArray(PROFILE_SAMPLE, sample.toByteArray());
-        } catch (IOException ex) {
-          this.error = ex;
-        }
-      }
-    }
-
-    synchronized void writeEnd() throws IOException {
-      long endNano = System.nanoTime();
-      try {
-        enc.writeInt64(PROFILE_DURATION_NANOS, endNano - startNano);
-        enc.flush();
-        if (this.error != null) {
-          throw this.error; // retained from an earlier error
-        }
-      } finally {
-        gz.close();
-      }
-    }
-
-    // Field numbers from pprof protocol.
-    // See https://github.com/google/pprof/blob/master/proto/profile.proto
-    private static final int PROFILE_SAMPLE_TYPE = 1; // repeated ValueType
-    private static final int PROFILE_SAMPLE = 2; // repeated Sample
-    private static final int PROFILE_MAPPING = 3; // repeated Mapping
-    private static final int PROFILE_LOCATION = 4; // repeated Location
-    private static final int PROFILE_FUNCTION = 5; // repeated Function
-    private static final int PROFILE_STRING_TABLE = 6; // repeated string
-    private static final int PROFILE_TIME_NANOS = 9; // int64
-    private static final int PROFILE_DURATION_NANOS = 10; // int64
-    private static final int PROFILE_PERIOD_TYPE = 11; // ValueType
-    private static final int PROFILE_PERIOD = 12; // int64
-    private static final int VALUETYPE_TYPE = 1; // int64
-    private static final int VALUETYPE_UNIT = 2; // int64
-    private static final int SAMPLE_LOCATION_ID = 1; // repeated uint64
-    private static final int SAMPLE_VALUE = 2; // repeated int64
-    private static final int SAMPLE_LABEL = 3; // repeated Label
-    private static final int LABEL_KEY = 1; // int64
-    private static final int LABEL_STR = 2; // int64
-    private static final int LABEL_NUM = 3; // int64
-    private static final int LABEL_NUM_UNIT = 4; // int64
-    private static final int LOCATION_ID = 1; // uint64
-    private static final int LOCATION_MAPPING_ID = 2; // uint64
-    private static final int LOCATION_ADDRESS = 3; // uint64
-    private static final int LOCATION_LINE = 4; // repeated Line
-    private static final int LINE_FUNCTION_ID = 1; // uint64
-    private static final int LINE_LINE = 2; // int64
-    private static final int FUNCTION_ID = 1; // uint64
-    private static final int FUNCTION_NAME = 2; // int64
-    private static final int FUNCTION_SYSTEM_NAME = 3; // int64
-    private static final int FUNCTION_FILENAME = 4; // int64
-    private static final int FUNCTION_START_LINE = 5; // int64
-
-    // Every string, function, and PC location is emitted once
-    // and thereafter referred to by its identifier, a Long.
-    private final Map<String, Long> stringIDs = new HashMap<>();
-    private final Map<Long, Long> functionIDs = new HashMap<>(); // key is "address" of function
-    private final Map<Long, Long> locationIDs = new HashMap<>(); // key is "address" of PC location
-
-    // Returns the ID of the specified string,
-    // emitting a pprof string record the first time it is encountered.
-    private long getStringID(String s) throws IOException {
-      Long i = stringIDs.putIfAbsent(s, Long.valueOf(stringIDs.size()));
-      if (i == null) {
-        enc.writeString(PROFILE_STRING_TABLE, s);
-        return stringIDs.size() - 1L;
-      }
-      return i;
-    }
-
-    // Returns the ID of a StarlarkCallable for use in Line.FunctionId,
-    // emitting a pprof Function record the first time fn is encountered.
-    // The ID is the same as the function's logical address,
-    // which is supplied by the caller to avoid the need to recompute it.
-    private long getFunctionID(StarlarkCallable fn, long addr) throws IOException {
-      Long id = functionIDs.get(addr);
-      if (id == null) {
-        id = addr;
-
-        Location loc = fn.getLocation();
-        String filename = loc.file(); // TODO(adonovan): make WORKSPACE-relative
-        String name = fn.getName();
-        if (name.equals("<toplevel>")) {
-          name = filename;
-        }
-
-        long nameID = getStringID(name);
-
-        ByteArrayOutputStream fun = new ByteArrayOutputStream();
-        CodedOutputStream funEnc = CodedOutputStream.newInstance(fun);
-        funEnc.writeUInt64(FUNCTION_ID, id);
-        funEnc.writeInt64(FUNCTION_NAME, nameID);
-        funEnc.writeInt64(FUNCTION_SYSTEM_NAME, nameID);
-        funEnc.writeInt64(FUNCTION_FILENAME, getStringID(filename));
-        funEnc.writeInt64(FUNCTION_START_LINE, (long) loc.line());
-        funEnc.flush();
-        enc.writeByteArray(PROFILE_FUNCTION, fun.toByteArray());
-
-        functionIDs.put(addr, id);
-      }
-      return id;
-    }
-
-    // Returns the ID of the location denoted by fr,
-    // emitting a pprof Location record the first time it is encountered.
-    // For Starlark frames, this is the Frame pc.
-    private long getLocationID(Debug.Frame fr) throws IOException {
-      StarlarkCallable fn = fr.getFunction();
-      // fnAddr identifies a function as a whole.
-      int fnAddr = System.identityHashCode(fn); // very imperfect
-
-      // pcAddr identifies the current program point.
-      //
-      // For now, this is the same as fnAddr, because
-      // we don't track the syntax node currently being
-      // evaluated. Statement-level profile information
-      // in the leaf function (displayed by 'pprof list <fn>')
-      // is thus unreliable for now.
-      long pcAddr = fnAddr;
-      if (fn instanceof StarlarkFunction) {
-        // TODO(adonovan): when we use a byte code representation
-        // of function bodies, mix the program counter fr.pc into fnAddr.
-        // TODO(adonovan): even cleaner: treat each function's byte
-        // code segment as its own Profile.Mapping, indexed by pc.
-        //
-        // pcAddr = (pcAddr << 16) ^ fr.pc;
-      }
-
-      Long id = locationIDs.get(pcAddr);
-      if (id == null) {
-        id = pcAddr;
-
-        ByteArrayOutputStream line = new ByteArrayOutputStream();
-        CodedOutputStream lineenc = CodedOutputStream.newInstance(line);
-        lineenc.writeUInt64(LINE_FUNCTION_ID, getFunctionID(fn, fnAddr));
-        lineenc.writeInt64(LINE_LINE, (long) fr.getLocation().line());
-        lineenc.flush();
-
-        ByteArrayOutputStream loc = new ByteArrayOutputStream();
-        CodedOutputStream locenc = CodedOutputStream.newInstance(loc);
-        locenc.writeUInt64(LOCATION_ID, id);
-        locenc.writeUInt64(LOCATION_ADDRESS, pcAddr);
-        locenc.writeByteArray(LOCATION_LINE, line.toByteArray());
-        locenc.flush();
-        enc.writeByteArray(PROFILE_LOCATION, loc.toByteArray());
-
-        locationIDs.put(pcAddr, id);
-      }
-      return id;
-    }
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Debug.java b/src/main/java/com/google/devtools/build/lib/syntax/Debug.java
deleted file mode 100644
index c0c734c..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Debug.java
+++ /dev/null
@@ -1,175 +0,0 @@
-// Copyright 2018 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import java.util.concurrent.atomic.AtomicReference;
-import java.util.function.Predicate;
-import javax.annotation.Nullable;
-
-/** Debugger API. */
-// TODO(adonovan): move Debugger to Debug.Debugger.
-public final class Debug {
-
-  /**
-   * A simple interface for the Starlark interpreter to notify a debugger of events during
-   * execution.
-   */
-  public interface Debugger {
-    /** Notify the debugger that execution is at the point immediately before {@code loc}. */
-    void before(StarlarkThread thread, Location loc);
-
-    /** Notify the debugger that it will no longer receive events from the interpreter. */
-    void close();
-  }
-
-  /** A Starlark value that can expose additional information to a debugger. */
-  public interface ValueWithDebugAttributes extends StarlarkValue {
-    /**
-     * Returns a list of DebugAttribute of this value. For example, it can be the internal fields of
-     * a value that are not accessible from Starlark, or the values inside a collection.
-     */
-    ImmutableList<DebugAttribute> getDebugAttributes();
-  }
-
-  /** A name/value pair used in the return value of getDebugAttributes. */
-  public static final class DebugAttribute {
-    public final String name;
-    public final Object value; // a legal Starlark value
-
-    public DebugAttribute(String name, Object value) {
-      this.name = name;
-      this.value = value;
-    }
-  }
-
-  /** See stepControl */
-  public interface ReadyToPause extends Predicate<StarlarkThread> {}
-
-  /**
-   * Describes the stepping behavior that should occur when execution of a thread is continued.
-   * (Debugger API)
-   */
-  public enum Stepping {
-    /** Continue execution without stepping. */
-    NONE,
-    /**
-     * If the thread is paused on a statement that contains a function call, step into that
-     * function. Otherwise, this is the same as OVER.
-     */
-    INTO,
-    /**
-     * Step over the current statement and any functions that it may call, stopping at the next
-     * statement in the same frame. If no more statements are available in the current frame, same
-     * as OUT.
-     */
-    OVER,
-    /**
-     * Continue execution until the current frame has been exited and then pause. If we are
-     * currently in the outer-most frame, same as NONE.
-     */
-    OUT,
-  }
-
-  private Debug() {} // uninstantiable
-
-  static final AtomicReference<Debugger> debugger = new AtomicReference<>();
-
-  /**
-   * Installs a global hook that causes subsequently executed Starlark threads to notify the
-   * debugger of important events. Closes any previously set debugger. Call {@code
-   * setDebugger(null)} to disable debugging.
-   */
-  public static void setDebugger(Debugger dbg) {
-    Debugger prev = debugger.getAndSet(dbg);
-    if (prev != null) {
-      prev.close();
-    }
-  }
-
-  /**
-   * Returns a copy of the current stack of call frames, outermost call first.
-   *
-   * <p>This function is intended for use only when execution of {@code thread} is stopped, for
-   * example at a breakpoint. The resulting DebugFrames should not be retained after execution of
-   * the thread has resumed. Most clients should instead use {@link StarlarkThread#getCallStack}.
-   */
-  public static ImmutableList<Frame> getCallStack(StarlarkThread thread) {
-    return thread.getDebugCallStack();
-  }
-
-  /**
-   * Given a requested stepping behavior, returns a predicate over the context that tells the
-   * debugger when to pause. (Debugger API)
-   *
-   * <p>The predicate will return true if we are at the next statement where execution should pause,
-   * and it will return false if we are not yet at that statement. No guarantee is made about the
-   * predicate's return value after we have reached the desired statement.
-   *
-   * <p>A null return value indicates that no further pausing should occur.
-   */
-  @Nullable
-  public static Debug.ReadyToPause stepControl(StarlarkThread th, Debug.Stepping stepping) {
-    final int depth = th.getCallStackSize();
-    switch (stepping) {
-      case NONE:
-        return null;
-      case INTO:
-        // pause at the very next statement
-        return thread -> true;
-      case OVER:
-        return thread -> thread.getCallStackSize() <= depth;
-      case OUT:
-        // if we're at the outermost frame, same as NONE
-        return depth == 0 ? null : thread -> thread.getCallStackSize() < depth;
-    }
-    throw new IllegalArgumentException("Unsupported stepping type: " + stepping);
-  }
-
-  /** Debugger interface to the interpreter's internal call frame representation. */
-  public interface Frame {
-
-    /** Returns function called in this frame. */
-    StarlarkCallable getFunction();
-
-    /** Returns the location of the current program counter. */
-    Location getLocation();
-
-    /** Returns the local environment of this frame. */
-    ImmutableMap<String, Object> getLocals();
-  }
-
-  /**
-   * Interface by which debugging tools are notified of a thread entering or leaving its top-level
-   * frame.
-   */
-  public interface ThreadHook {
-    void onPushFirst(StarlarkThread thread);
-
-    void onPopLast(StarlarkThread thread);
-  }
-
-  static ThreadHook threadHook = null;
-
-  /**
-   * Installs a global hook that is notified each time a thread pushes or pops its top-level frame.
-   * This interface is provided to support special tools; ordinary clients should have no need for
-   * it.
-   */
-  public static void setThreadHook(ThreadHook hook) {
-    threadHook = hook;
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/DefStatement.java b/src/main/java/com/google/devtools/build/lib/syntax/DefStatement.java
deleted file mode 100644
index 137bfc7..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/DefStatement.java
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
-import javax.annotation.Nullable;
-
-/** Syntax node for a 'def' statement, which defines a function. */
-public final class DefStatement extends Statement {
-
-  private final int defOffset;
-  private final Identifier identifier;
-  private final ImmutableList<Statement> body; // non-empty if well formed
-  private final ImmutableList<Parameter> parameters;
-
-  // set by resolver
-  @Nullable private Resolver.Function resolved;
-
-  DefStatement(
-      FileLocations locs,
-      int defOffset,
-      Identifier identifier,
-      ImmutableList<Parameter> parameters,
-      ImmutableList<Statement> body) {
-    super(locs);
-    this.defOffset = defOffset;
-    this.identifier = identifier;
-    this.parameters = Preconditions.checkNotNull(parameters);
-    this.body = Preconditions.checkNotNull(body);
-  }
-
-  @Override
-  public String toString() {
-    // "def f(...): \n"
-    StringBuilder buf = new StringBuilder();
-    new NodePrinter(buf).printDefSignature(this);
-    buf.append(" ...\n");
-    return buf.toString();
-  }
-
-  public Identifier getIdentifier() {
-    return identifier;
-  }
-
-  public ImmutableList<Statement> getBody() {
-    return body;
-  }
-
-  public ImmutableList<Parameter> getParameters() {
-    return parameters;
-  }
-
-  void setResolvedFunction(Resolver.Function resolved) {
-    this.resolved = resolved;
-  }
-
-  /** Returns information about the resolved function. Set by the resolver. */
-  @Nullable
-  public Resolver.Function getResolvedFunction() {
-    return resolved;
-  }
-
-  @Override
-  public int getStartOffset() {
-    return defOffset;
-  }
-
-  @Override
-  public int getEndOffset() {
-    return body.isEmpty()
-        ? identifier.getEndOffset() // wrong, but tree is ill formed
-        : body.get(body.size() - 1).getEndOffset();
-  }
-
-  @Override
-  public void accept(NodeVisitor visitor) {
-    visitor.visit(this);
-  }
-
-  @Override
-  public Kind kind() {
-    return Kind.DEF;
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Dict.java b/src/main/java/com/google/devtools/build/lib/syntax/Dict.java
deleted file mode 100644
index 4e696db..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Dict.java
+++ /dev/null
@@ -1,656 +0,0 @@
-// Copyright 2016 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-import static java.lang.Math.max;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.Lists;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import javax.annotation.Nullable;
-import net.starlark.java.annot.Param;
-import net.starlark.java.annot.StarlarkBuiltin;
-import net.starlark.java.annot.StarlarkDocumentationCategory;
-import net.starlark.java.annot.StarlarkMethod;
-
-/**
- * A Dict is a Starlark dictionary (dict), a mapping from keys to values.
- *
- * <p>Dicts are iterable in both Java and Starlark; the iterator yields successive keys.
- *
- * <p>Although this implements the {@link Map} interface, it is not mutable via that interface's
- * methods. Instead, use the mutators that take in a {@link Mutability} object.
- */
-@StarlarkBuiltin(
-    name = "dict",
-    category = StarlarkDocumentationCategory.BUILTIN,
-    doc =
-        "dict is a built-in type representing an associative mapping or <i>dictionary</i>. A"
-            + " dictionary supports indexing using <code>d[k]</code> and key membership testing"
-            + " using <code>k in d</code>; both operations take constant time. Unfrozen"
-            + " dictionaries are mutable, and may be updated by assigning to <code>d[k]</code> or"
-            + " by calling certain methods. Dictionaries are iterable; iteration yields the"
-            + " sequence of keys in insertion order. Iteration order is unaffected by updating the"
-            + " value associated with an existing key, but is affected by removing then"
-            + " reinserting a key.\n"
-            + "<pre>d = {0: 0, 2: 2, 1: 1}\n"
-            + "[k for k in d]  # [0, 2, 1]\n"
-            + "d.pop(2)\n"
-            + "d[0], d[2] = \"a\", \"b\"\n"
-            + "0 in d, \"a\" in d  # (True, False)\n"
-            + "[(k, v) for k, v in d.items()]  # [(0, \"a\"), (1, 1), (2, \"b\")]\n"
-            + "</pre>\n"
-            + "<p>There are three ways to construct a dictionary:\n"
-            + "<ol>\n"
-            + "<li>A dictionary expression <code>{k: v, ...}</code> yields a new dictionary with"
-            + " the specified key/value entries, inserted in the order they appear in the"
-            + " expression. Evaluation fails if any two key expressions yield the same"
-            + " value.\n"
-            + "<li>A dictionary comprehension <code>{k: v for vars in seq}</code> yields a new"
-            + " dictionary into which each key/value pair is inserted in loop iteration order."
-            + " Duplicates are permitted: the first insertion of a given key determines its"
-            + " position in the sequence, and the last determines its associated value.\n"
-            + "<pre class=\"language-python\">\n"
-            + "{k: v for k, v in ((\"a\", 0), (\"b\", 1), (\"a\", 2))}  # {\"a\": 2, \"b\": 1}\n"
-            + "{i: 2*i for i in range(3)}  # {0: 0, 1: 2, 2: 4}\n"
-            + "</pre>\n"
-            + "<li>A call to the built-in <a href=\"globals.html#dict\">dict</a> function returns"
-            + " a dictionary containing the specified entries, which are inserted in argument"
-            + " order, positional arguments before named. As with comprehensions, duplicate keys"
-            + " are permitted.\n"
-            + "</ol>")
-// TODO(b/64208606): eliminate these type parameters as they are wildly unsound.
-// Starlark code may update a Dict in ways incompatible with its Java
-// parameterized type. There is no realistic static or dynamic way to prevent
-// this, as Java parameterized types are not accessible at runtime.
-// Every cast to a parameterized type is a lie.
-// Unchecked warnings should be treated as errors.
-// Ditto Sequence.
-public final class Dict<K, V>
-    implements Map<K, V>,
-        StarlarkValue,
-        Mutability.Freezable,
-        StarlarkIndexable,
-        StarlarkIterable<K> {
-
-  private final LinkedHashMap<K, V> contents;
-  private int iteratorCount; // number of active iterators (unused once frozen)
-
-  /** Final except for {@link #unsafeShallowFreeze}; must not be modified any other way. */
-  private Mutability mutability;
-
-  private Dict(@Nullable Mutability mutability, LinkedHashMap<K, V> contents) {
-    this.mutability = mutability == null ? Mutability.IMMUTABLE : mutability;
-    this.contents = contents;
-  }
-
-  private Dict(@Nullable Mutability mutability) {
-    this(mutability, new LinkedHashMap<>());
-  }
-
-  private Dict(@Nullable Mutability mutability, int initialCapacity) {
-    this(mutability, new LinkedHashMap<>(initialCapacity));
-  }
-
-  /**
-   * Takes ownership of the supplied LinkedHashMap and returns a new Dict that wraps it. The caller
-   * must not subsequently modify the map, but the Dict may do so.
-   */
-  static <K, V> Dict<K, V> wrap(@Nullable Mutability mutability, LinkedHashMap<K, V> contents) {
-    return new Dict<>(mutability, contents);
-  }
-
-  @Override
-  public boolean truth() {
-    return !isEmpty();
-  }
-
-  @Override
-  public boolean isImmutable() {
-    return mutability().isFrozen();
-  }
-
-  @Override
-  public boolean updateIteratorCount(int delta) {
-    if (mutability().isFrozen()) {
-      return false;
-    }
-    if (delta > 0) {
-      iteratorCount++;
-    } else if (delta < 0) {
-      iteratorCount--;
-    }
-    return iteratorCount > 0;
-  }
-
-  @Override
-  public boolean isHashable() {
-    return false; // even a frozen dict is unhashable
-  }
-
-  @Override
-  public int hashCode() {
-    return contents.hashCode(); // not called by Dict.put (because !isHashable)
-  }
-
-  @Override
-  public boolean equals(Object o) {
-    return contents.equals(o); // not called by Dict.put (because !isHashable)
-  }
-
-  @Override
-  public Iterator<K> iterator() {
-    return contents.keySet().iterator();
-  }
-
-  @StarlarkMethod(
-      name = "get",
-      doc =
-          "Returns the value for <code>key</code> if <code>key</code> is in the dictionary, "
-              + "else <code>default</code>. If <code>default</code> is not given, it defaults to "
-              + "<code>None</code>, so that this method never throws an error.",
-      parameters = {
-        @Param(name = "key", noneable = true, doc = "The key to look for."),
-        @Param(
-            name = "default",
-            defaultValue = "None",
-            noneable = true,
-            named = true,
-            doc = "The default value to use (instead of None) if the key is not found.")
-      },
-      allowReturnNones = true,
-      useStarlarkThread = true)
-  // TODO(adonovan): This method is named get2 as a temporary workaround for a bug in
-  // StarlarkInterfaceUtils.getStarlarkMethod. The two 'get' methods cause it to get
-  // confused as to which one has the annotation. Fix it and remove "2" suffix.
-  public Object get2(Object key, Object defaultValue, StarlarkThread thread) throws EvalException {
-    Object v = this.get(key);
-    if (v != null) {
-      return v;
-    }
-
-    // This statement is executed for its effect, which is to throw "unhashable"
-    // if key is unhashable, instead of returning defaultValue.
-    // I think this is a bug: the correct behavior is simply 'return defaultValue'.
-    // See https://github.com/bazelbuild/starlark/issues/65.
-    containsKey(thread.getSemantics(), key);
-
-    return defaultValue;
-  }
-
-  @StarlarkMethod(
-      name = "pop",
-      doc =
-          "Removes a <code>key</code> from the dict, and returns the associated value. "
-              + "If no entry with that key was found, remove nothing and return the specified "
-              + "<code>default</code> value; if no default value was specified, fail instead.",
-      parameters = {
-        @Param(name = "key", type = Object.class, doc = "The key.", noneable = true),
-        @Param(
-            name = "default",
-            type = Object.class,
-            defaultValue = "unbound",
-            named = true,
-            noneable = true,
-            doc = "a default value if the key is absent."),
-      },
-      useStarlarkThread = true)
-  public Object pop(Object key, Object defaultValue, StarlarkThread thread) throws EvalException {
-    Object value = get(key);
-    if (value != null) {
-      remove(key, (Location) null);
-      return value;
-    }
-    if (defaultValue != Starlark.UNBOUND) {
-      return defaultValue;
-    }
-    // TODO(adonovan): improve error; this ain't Python.
-    throw Starlark.errorf("KeyError: %s", Starlark.repr(key));
-  }
-
-  @StarlarkMethod(
-      name = "popitem",
-      doc =
-          "Remove and return an arbitrary <code>(key, value)</code> pair from the dictionary. "
-              + "<code>popitem()</code> is useful to destructively iterate over a dictionary, "
-              + "as often used in set algorithms. "
-              + "If the dictionary is empty, calling <code>popitem()</code> fails. "
-              + "It is deterministic which pair is returned.",
-      useStarlarkThread = true)
-  public Tuple<Object> popitem(StarlarkThread thread) throws EvalException {
-    if (isEmpty()) {
-      throw Starlark.errorf("popitem(): dictionary is empty");
-    }
-    Object key = keySet().iterator().next();
-    Object value = get(key);
-    remove(key, (Location) null);
-    return Tuple.pair(key, value);
-  }
-
-  @StarlarkMethod(
-      name = "setdefault",
-      doc =
-          "If <code>key</code> is in the dictionary, return its value. "
-              + "If not, insert key with a value of <code>default</code> "
-              + "and return <code>default</code>. "
-              + "<code>default</code> defaults to <code>None</code>.",
-      parameters = {
-        @Param(name = "key", type = Object.class, doc = "The key."),
-        @Param(
-            name = "default",
-            type = Object.class,
-            defaultValue = "None",
-            named = true,
-            noneable = true,
-            doc = "a default value if the key is absent."),
-      })
-  @SuppressWarnings("unchecked") // Cast of value to V
-  public Object setdefault(K key, Object defaultValue) throws EvalException {
-    // TODO(adonovan): opt: use putIfAbsent to avoid hashing twice.
-    Object value = get(key);
-    if (value != null) {
-      return value;
-    }
-    put(key, (V) defaultValue, (Location) null);
-    return defaultValue;
-  }
-
-  @StarlarkMethod(
-      name = "update",
-      doc =
-          "Update the dictionary with an optional positional argument <code>[pairs]</code> "
-              + " and an optional set of keyword arguments <code>[, name=value[, ...]</code>\n"
-              + "If the positional argument <code>pairs</code> is present, it must be "
-              + "<code>None</code>, another <code>dict</code>, or some other iterable. "
-              + "If it is another <code>dict</code>, then its key/value pairs are inserted. "
-              + "If it is an iterable, it must provide a sequence of pairs (or other iterables "
-              + "of length 2), each of which is treated as a key/value pair to be inserted.\n"
-              + "For each <code>name=value</code> argument present, the name is converted to a "
-              + "string and used as the key for an insertion into D, with its corresponding "
-              + "value being <code>value</code>.",
-      parameters = {
-        @Param(
-            name = "args",
-            type = Object.class,
-            defaultValue = "[]",
-            doc =
-                "Either a dictionary or a list of entries. Entries must be tuples or lists with "
-                    + "exactly two elements: key, value."),
-      },
-      extraKeywords = @Param(name = "kwargs", doc = "Dictionary of additional entries."),
-      useStarlarkThread = true)
-  @SuppressWarnings("unchecked")
-  public NoneType update(Object args, Dict<String, Object> kwargs, StarlarkThread thread)
-      throws EvalException {
-    // TODO(adonovan): opt: don't materialize dict; call put directly.
-
-    // All these types and casts are lies.
-    Dict<K, V> dict =
-        args instanceof Dict
-            ? (Dict<K, V>) args
-            : getDictFromArgs("update", args, thread.mutability());
-    dict = Dict.plus(dict, (Dict<K, V>) kwargs, thread.mutability());
-    putAll(dict, (Location) null);
-    return Starlark.NONE;
-  }
-
-  @StarlarkMethod(
-      name = "values",
-      doc =
-          "Returns the list of values:"
-              + "<pre class=\"language-python\">"
-              + "{2: \"a\", 4: \"b\", 1: \"c\"}.values() == [\"a\", \"b\", \"c\"]</pre>\n",
-      useStarlarkThread = true)
-  public StarlarkList<?> values0(StarlarkThread thread) throws EvalException {
-    return StarlarkList.copyOf(thread.mutability(), values());
-  }
-
-  @StarlarkMethod(
-      name = "items",
-      doc =
-          "Returns the list of key-value tuples:"
-              + "<pre class=\"language-python\">"
-              + "{2: \"a\", 4: \"b\", 1: \"c\"}.items() == [(2, \"a\"), (4, \"b\"), (1, \"c\")]"
-              + "</pre>\n",
-      useStarlarkThread = true)
-  public StarlarkList<?> items(StarlarkThread thread) throws EvalException {
-    Object[] array = new Object[size()];
-    int i = 0;
-    for (Map.Entry<?, ?> e : entrySet()) {
-      array[i++] = Tuple.pair(e.getKey(), e.getValue());
-    }
-    return StarlarkList.wrap(thread.mutability(), array);
-  }
-
-  @StarlarkMethod(
-      name = "keys",
-      doc =
-          "Returns the list of keys:"
-              + "<pre class=\"language-python\">{2: \"a\", 4: \"b\", 1: \"c\"}.keys() == [2, 4, 1]"
-              + "</pre>\n",
-      useStarlarkThread = true)
-  public StarlarkList<?> keys(StarlarkThread thread) throws EvalException {
-    Object[] array = new Object[size()];
-    int i = 0;
-    for (Map.Entry<?, ?> e : entrySet()) {
-      array[i++] = e.getKey();
-    }
-    return StarlarkList.wrap(thread.mutability(), array);
-  }
-
-  private static final Dict<?, ?> EMPTY = of(Mutability.IMMUTABLE);
-
-  /** Returns an immutable empty dict. */
-  // Safe because the empty singleton is immutable.
-  @SuppressWarnings("unchecked")
-  public static <K, V> Dict<K, V> empty() {
-    return (Dict<K, V>) EMPTY;
-  }
-
-  /** Returns a new empty dict with the specified mutability. */
-  public static <K, V> Dict<K, V> of(@Nullable Mutability mu) {
-    return new Dict<>(mu);
-  }
-
-  /** Returns a new dict with the specified mutability and a single entry. */
-  public static <K, V> Dict<K, V> of(@Nullable Mutability mu, K k, V v) {
-    return new Dict<K, V>(mu).putUnsafe(k, v);
-  }
-
-  /** Returns a new dict with the specified mutability and two entries. */
-  public static <K, V> Dict<K, V> of(@Nullable Mutability mu, K k1, V v1, K k2, V v2) {
-    return new Dict<K, V>(mu).putUnsafe(k1, v1).putUnsafe(k2, v2);
-  }
-
-  /** Returns a new dict with the specified mutability containing the entries of {@code m}. */
-  @SuppressWarnings("unchecked")
-  public static <K, V> Dict<K, V> copyOf(@Nullable Mutability mu, Map<? extends K, ? extends V> m) {
-    // TODO(laurentlb): Move this method out of this file and rename it. It should go with
-    // Starlark.fromJava; its main purpose is to convert a Java value to Starlark.
-    Dict<K, V> dict = new Dict<>(mu);
-    for (Map.Entry<?, ?> e : m.entrySet()) {
-      dict.contents.put((K) e.getKey(), (V) Starlark.fromJava(e.getValue(), mu));
-    }
-    return dict;
-  }
-
-  /** Puts the given entry into the dict, without calling {@link #checkMutable}. */
-  private Dict<K, V> putUnsafe(K k, V v) {
-    contents.put(k, v);
-    return this;
-  }
-
-  @Override
-  public Mutability mutability() {
-    return mutability;
-  }
-
-  @Override
-  public void unsafeShallowFreeze() {
-    Mutability.Freezable.checkUnsafeShallowFreezePrecondition(this);
-    this.mutability = Mutability.IMMUTABLE;
-  }
-
-  /**
-   * Puts an entry into a dict, after validating that mutation is allowed.
-   *
-   * @param key the key of the added entry
-   * @param value the value of the added entry
-   * @param unused a nonce value to select this overload, not Map.put
-   * @throws EvalException if the key is invalid or the dict is frozen
-   */
-  public void put(K key, V value, Location unused) throws EvalException {
-    Starlark.checkMutable(this);
-    EvalUtils.checkHashable(key);
-    contents.put(key, value);
-  }
-
-  /**
-   * Puts all the entries from a given map into the dict, after validating that mutation is allowed.
-   *
-   * @param map the map whose entries are added
-   * @param unused a nonce value to select this overload, not Map.put
-   * @throws EvalException if some key is invalid or the dict is frozen
-   */
-  public <KK extends K, VV extends V> void putAll(Map<KK, VV> map, Location unused)
-      throws EvalException {
-    Starlark.checkMutable(this);
-    for (Map.Entry<KK, VV> e : map.entrySet()) {
-      KK k = e.getKey();
-      EvalUtils.checkHashable(k);
-      contents.put(k, e.getValue());
-    }
-  }
-
-  /**
-   * Deletes the entry associated with the given key.
-   *
-   * @param key the key to delete
-   * @param unused a nonce value to select this overload, not Map.put
-   * @return the value associated to the key, or {@code null} if not present
-   * @throws EvalException if the dict is frozen
-   */
-  V remove(Object key, Location unused) throws EvalException {
-    Starlark.checkMutable(this);
-    return contents.remove(key);
-  }
-
-  @StarlarkMethod(name = "clear", doc = "Remove all items from the dictionary.")
-  public NoneType clearDict() throws EvalException {
-    clear(null);
-    return Starlark.NONE;
-  }
-
-  /**
-   * Clears the dict.
-   *
-   * @param unused a nonce value to select this overload, not Map.put
-   * @throws EvalException if the dict is frozen
-   */
-  private void clear(Location unused) throws EvalException {
-    Starlark.checkMutable(this);
-    contents.clear();
-  }
-
-  @Override
-  public void repr(Printer printer) {
-    printer.printList(entrySet(), "{", ", ", "}");
-  }
-
-  @Override
-  public String toString() {
-    return Starlark.repr(this);
-  }
-
-  /**
-   * Casts a non-null Starlark value {@code x} to a {@code Dict<K, V>} after checking that all keys
-   * and values are instances of {@code keyType} and {@code valueType}, respectively. On error, it
-   * throws an EvalException whose message includes {@code what}, ideally a string literal, as a
-   * description of the role of {@code x}. If x is null, it returns an immutable empty dict.
-   */
-  public static <K, V> Dict<K, V> cast(Object x, Class<K> keyType, Class<V> valueType, String what)
-      throws EvalException {
-    Preconditions.checkNotNull(x);
-    if (!(x instanceof Dict)) {
-      throw Starlark.errorf("got %s for '%s', want dict", Starlark.type(x), what);
-    }
-
-    for (Map.Entry<?, ?> e : ((Map<?, ?>) x).entrySet()) {
-      if (!keyType.isAssignableFrom(e.getKey().getClass())
-          || !valueType.isAssignableFrom(e.getValue().getClass())) {
-        // TODO(adonovan): change message to "found <K2, V2> entry",
-        // without suggesting that the entire dict is <K2, V2>.
-        throw Starlark.errorf(
-            "got dict<%s, %s> for '%s', want dict<%s, %s>",
-            Starlark.type(e.getKey()),
-            Starlark.type(e.getValue()),
-            what,
-            Starlark.classType(keyType),
-            Starlark.classType(valueType));
-      }
-    }
-
-    @SuppressWarnings("unchecked") // safe
-    Dict<K, V> res = (Dict<K, V>) x;
-    return res;
-  }
-
-  /** Like {@link #cast}, but if x is None, returns an empty Dict. */
-  public static <K, V> Dict<K, V> noneableCast(
-      Object x, Class<K> keyType, Class<V> valueType, String what) throws EvalException {
-    return x == Starlark.NONE ? empty() : cast(x, keyType, valueType, what);
-  }
-
-  @Override
-  public Object getIndex(StarlarkSemantics semantics, Object key) throws EvalException {
-    Object v = get(key);
-    if (v == null) {
-      throw Starlark.errorf("key %s not found in dictionary", Starlark.repr(key));
-    }
-    return v;
-  }
-
-  @Override
-  public boolean containsKey(StarlarkSemantics semantics, Object key) throws EvalException {
-    EvalUtils.checkHashable(key);
-    return this.containsKey(key);
-  }
-
-  static <K, V> Dict<K, V> plus(
-      Dict<? extends K, ? extends V> left,
-      Dict<? extends K, ? extends V> right,
-      @Nullable Mutability mu) {
-    Dict<K, V> result = new Dict<>(mu, max(left.size(), right.size()));
-    // Update underlying map contents directly, input dicts already contain valid objects
-    result.contents.putAll(left.contents);
-    result.contents.putAll(right.contents);
-    return result;
-  }
-
-  @SuppressWarnings("unchecked")
-  static <K, V> Dict<K, V> getDictFromArgs(String funcname, Object args, @Nullable Mutability mu)
-      throws EvalException {
-    Iterable<?> seq;
-    try {
-      seq = Starlark.toIterable(args);
-    } catch (EvalException ex) {
-      throw Starlark.errorf("in %s, got %s, want iterable", funcname, Starlark.type(args));
-    }
-    Dict<K, V> result = Dict.of(mu);
-    int pos = 0;
-    for (Object item : seq) {
-      Iterable<?> seq2;
-      try {
-        seq2 = Starlark.toIterable(item);
-      } catch (EvalException ex) {
-        throw Starlark.errorf(
-            "in %s, dictionary update sequence element #%d is not iterable (%s)",
-            funcname, pos, Starlark.type(item));
-      }
-      // TODO(adonovan): opt: avoid unnecessary allocations and copies.
-      // Why is there no operator to compute len(x), following the spec, without iterating??
-      List<Object> pair = Lists.newArrayList(seq2);
-      if (pair.size() != 2) {
-        throw Starlark.errorf(
-            "in %s, item #%d has length %d, but exactly two elements are required",
-            funcname, pos, pair.size());
-      }
-      // These casts are lies
-      result.put((K) pair.get(0), (V) pair.get(1), null);
-      pos++;
-    }
-    return result;
-  }
-
-  // java.util.Map accessors
-
-  @Override
-  public boolean containsKey(Object key) {
-    return contents.containsKey(key);
-  }
-
-  @Override
-  public boolean containsValue(Object value) {
-    return contents.containsValue(value);
-  }
-
-  @Override
-  public Set<Map.Entry<K, V>> entrySet() {
-    return Collections.unmodifiableMap(contents).entrySet();
-  }
-
-  @Override
-  public V get(Object key) {
-    return contents.get(key);
-  }
-
-  @Override
-  public boolean isEmpty() {
-    return contents.isEmpty();
-  }
-
-  @Override
-  public Set<K> keySet() {
-    return Collections.unmodifiableMap(contents).keySet();
-  }
-
-  @Override
-  public int size() {
-    return contents.size();
-  }
-
-  @Override
-  public Collection<V> values() {
-    return Collections.unmodifiableMap(contents).values();
-  }
-
-  // disallowed java.util.Map update operations
-
-  // TODO(adonovan): make mutability exception a subclass of (unchecked)
-  // UnsupportedOperationException, allowing the primary Dict operations
-  // to satisfy the Map operations below in the usual way (like ImmutableMap does).
-  // Add "ForStarlark" suffix to disambiguate StarlarkMethod-annotated methods.
-  // Same for StarlarkList.
-
-  @Deprecated
-  @Override
-  public void clear() {
-    throw new UnsupportedOperationException();
-  }
-
-  @Deprecated
-  @Override
-  public V put(K key, V value) {
-    throw new UnsupportedOperationException();
-  }
-
-  @Deprecated
-  @Override
-  public void putAll(Map<? extends K, ? extends V> map) {
-    throw new UnsupportedOperationException();
-  }
-
-  @Deprecated
-  @Override
-  public V remove(Object key) {
-    throw new UnsupportedOperationException();
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/DictExpression.java b/src/main/java/com/google/devtools/build/lib/syntax/DictExpression.java
deleted file mode 100644
index fdb5346..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/DictExpression.java
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.collect.ImmutableList;
-import java.util.List;
-
-/** Syntax node for dict expressions. */
-public final class DictExpression extends Expression {
-
-  /** A key/value pair in a dict expression or comprehension. */
-  public static final class Entry extends Node {
-
-    private final Expression key;
-    private final int colonOffset;
-    private final Expression value;
-
-    Entry(FileLocations locs, Expression key, int colonOffset, Expression value) {
-      super(locs);
-      this.key = key;
-      this.colonOffset = colonOffset;
-      this.value = value;
-    }
-
-    public Expression getKey() {
-      return key;
-    }
-
-    public Expression getValue() {
-      return value;
-    }
-
-    @Override
-    public int getStartOffset() {
-      return key.getStartOffset();
-    }
-
-    @Override
-    public int getEndOffset() {
-      return value.getEndOffset();
-    }
-
-    public Location getColonLocation() {
-      return locs.getLocation(colonOffset);
-    }
-
-    @Override
-    public void accept(NodeVisitor visitor) {
-      visitor.visit(this);
-    }
-  }
-
-  private final int lbraceOffset;
-  private final ImmutableList<Entry> entries;
-  private final int rbraceOffset;
-
-  DictExpression(FileLocations locs, int lbraceOffset, List<Entry> entries, int rbraceOffset) {
-    super(locs);
-    this.lbraceOffset = lbraceOffset;
-    this.entries = ImmutableList.copyOf(entries);
-    this.rbraceOffset = rbraceOffset;
-  }
-
-  @Override
-  public int getStartOffset() {
-    return lbraceOffset;
-  }
-
-  @Override
-  public int getEndOffset() {
-    return rbraceOffset + 1;
-  }
-
-  @Override
-  public void accept(NodeVisitor visitor) {
-    visitor.visit(this);
-  }
-
-  @Override
-  public Kind kind() {
-    return Kind.DICT_EXPR;
-  }
-
-  public ImmutableList<Entry> getEntries() {
-    return entries;
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/DotExpression.java b/src/main/java/com/google/devtools/build/lib/syntax/DotExpression.java
deleted file mode 100644
index 9e7a541..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/DotExpression.java
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.syntax;
-
-
-/** Syntax node for a dot expression. e.g. obj.field, but not obj.method() */
-public final class DotExpression extends Expression {
-
-  private final Expression object;
-  private final int dotOffset;
-  private final Identifier field;
-
-  DotExpression(FileLocations locs, Expression object, int dotOffset, Identifier field) {
-    super(locs);
-    this.object = object;
-    this.dotOffset = dotOffset;
-    this.field = field;
-  }
-
-  public Expression getObject() {
-    return object;
-  }
-
-  public Identifier getField() {
-    return field;
-  }
-
-  @Override
-  public int getStartOffset() {
-    return object.getStartOffset();
-  }
-
-  @Override
-  public int getEndOffset() {
-    return field.getEndOffset();
-  }
-
-  public Location getDotLocation() {
-    return locs.getLocation(dotOffset);
-  }
-
-  @Override
-  public void accept(NodeVisitor visitor) {
-    visitor.visit(this);
-  }
-
-  @Override
-  public Kind kind() {
-    return Kind.DOT;
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Eval.java b/src/main/java/com/google/devtools/build/lib/syntax/Eval.java
deleted file mode 100644
index d9fd8c0..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Eval.java
+++ /dev/null
@@ -1,791 +0,0 @@
-// Copyright 2017 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import net.starlark.java.spelling.SpellChecker;
-
-/** A syntax-tree-walking evaluator for StarlarkFunction bodies. */
-final class Eval {
-
-  private Eval() {} // uninstantiable
-
-  // ---- entry point ----
-
-  // Called from StarlarkFunction.fastcall.
-  static Object execFunctionBody(StarlarkThread.Frame fr, List<Statement> statements)
-      throws EvalException, InterruptedException {
-    fr.thread.checkInterrupt();
-    execStatements(fr, statements, /*indented=*/ false);
-    return fr.result;
-  }
-
-  private static StarlarkFunction fn(StarlarkThread.Frame fr) {
-    return (StarlarkFunction) fr.fn;
-  }
-
-  private static TokenKind execStatements(
-      StarlarkThread.Frame fr, List<Statement> statements, boolean indented)
-      throws EvalException, InterruptedException {
-    boolean isToplevelFunction = fn(fr).isToplevel();
-
-    // Hot code path, good chance of short lists which don't justify the iterator overhead.
-    for (int i = 0; i < statements.size(); i++) {
-      Statement stmt = statements.get(i);
-      TokenKind flow = exec(fr, stmt);
-      if (flow != TokenKind.PASS) {
-        return flow;
-      }
-
-      // Hack for BzlLoadFunction's "export" semantics.
-      // We enable it only for statements outside any function (isToplevelFunction)
-      // and outside any if- or for- statements (!indented).
-      if (isToplevelFunction && !indented && fr.thread.postAssignHook != null) {
-        if (stmt instanceof AssignmentStatement) {
-          AssignmentStatement assign = (AssignmentStatement) stmt;
-          for (Identifier id : Identifier.boundIdentifiers(assign.getLHS())) {
-            String name = id.getName();
-            Object value = fn(fr).getModule().getGlobal(name);
-            fr.thread.postAssignHook.assign(name, value);
-          }
-        }
-      }
-    }
-    return TokenKind.PASS;
-  }
-
-  private static void execAssignment(StarlarkThread.Frame fr, AssignmentStatement node)
-      throws EvalException, InterruptedException {
-    try {
-      if (node.isAugmented()) {
-        execAugmentedAssignment(fr, node);
-      } else {
-        Object rvalue = eval(fr, node.getRHS());
-        assign(fr, node.getLHS(), rvalue);
-      }
-    } catch (EvalException ex) {
-      fr.setErrorLocation(node.getOperatorLocation());
-      throw ex;
-    }
-  }
-
-  private static TokenKind execFor(StarlarkThread.Frame fr, ForStatement node)
-      throws EvalException, InterruptedException {
-    Object o = eval(fr, node.getCollection());
-    Iterable<?> seq = Starlark.toIterable(o);
-    EvalUtils.addIterator(o);
-    try {
-      for (Object it : seq) {
-        assign(fr, node.getVars(), it);
-
-        switch (execStatements(fr, node.getBody(), /*indented=*/ true)) {
-          case PASS:
-          case CONTINUE:
-            // Stay in loop.
-            fr.thread.checkInterrupt();
-            continue;
-          case BREAK:
-            // Finish loop, execute next statement after loop.
-            return TokenKind.PASS;
-          case RETURN:
-            // Finish loop, return from function.
-            return TokenKind.RETURN;
-          default:
-            throw new IllegalStateException("unreachable");
-        }
-      }
-    } catch (EvalException ex) {
-      fr.setErrorLocation(node.getStartLocation());
-      throw ex;
-    } finally {
-      EvalUtils.removeIterator(o);
-    }
-    return TokenKind.PASS;
-  }
-
-  private static void execDef(StarlarkThread.Frame fr, DefStatement node)
-      throws EvalException, InterruptedException {
-    Resolver.Function rfn = node.getResolvedFunction();
-
-    // Evaluate default value expressions of optional parameters.
-    // We use MANDATORY to indicate a required parameter
-    // (not null, because defaults must be a legal tuple value, as
-    // it will be constructed by the code emitted by the compiler).
-    // As an optimization, we omit the prefix of MANDATORY parameters.
-    Object[] defaults = null;
-    int nparams =
-        rfn.getParameters().size() - (rfn.hasKwargs() ? 1 : 0) - (rfn.hasVarargs() ? 1 : 0);
-    for (int i = 0; i < nparams; i++) {
-      Expression expr = rfn.getParameters().get(i).getDefaultValue();
-      if (expr == null && defaults == null) {
-        continue; // skip prefix of required parameters
-      }
-      if (defaults == null) {
-        defaults = new Object[nparams - i];
-      }
-      defaults[i - (nparams - defaults.length)] =
-          expr == null ? StarlarkFunction.MANDATORY : eval(fr, expr);
-    }
-    if (defaults == null) {
-      defaults = EMPTY;
-    }
-
-    assignIdentifier(
-        fr,
-        node.getIdentifier(),
-        new StarlarkFunction(rfn, Tuple.wrap(defaults), fn(fr).getModule()));
-  }
-
-  private static TokenKind execIf(StarlarkThread.Frame fr, IfStatement node)
-      throws EvalException, InterruptedException {
-    boolean cond = Starlark.truth(eval(fr, node.getCondition()));
-    if (cond) {
-      return execStatements(fr, node.getThenBlock(), /*indented=*/ true);
-    } else if (node.getElseBlock() != null) {
-      return execStatements(fr, node.getElseBlock(), /*indented=*/ true);
-    }
-    return TokenKind.PASS;
-  }
-
-  private static void execLoad(StarlarkThread.Frame fr, LoadStatement node) throws EvalException {
-    // Has the application defined a behavior for load statements in this thread?
-    StarlarkThread.Loader loader = fr.thread.getLoader();
-    if (loader == null) {
-      fr.setErrorLocation(node.getStartLocation());
-      throw Starlark.errorf("load statements may not be executed in this thread");
-    }
-
-    // Load module.
-    String moduleName = node.getImport().getValue();
-    Module module = loader.load(moduleName);
-    if (module == null) {
-      fr.setErrorLocation(node.getStartLocation());
-      throw Starlark.errorf(
-          "file '%s' was not correctly loaded. Make sure the 'load' statement appears in the"
-              + " global scope in your file",
-          moduleName);
-    }
-    Map<String, Object> globals = module.getExportedGlobals();
-
-    for (LoadStatement.Binding binding : node.getBindings()) {
-      // Extract symbol.
-      Identifier orig = binding.getOriginalName();
-      Object value = globals.get(orig.getName());
-      if (value == null) {
-        fr.setErrorLocation(orig.getStartLocation());
-        throw Starlark.errorf(
-            "file '%s' does not contain symbol '%s'%s",
-            moduleName, orig.getName(), SpellChecker.didYouMean(orig.getName(), globals.keySet()));
-      }
-
-      // Define module-local variable.
-      // TODO(adonovan): eventually the default behavior should be that
-      // loads bind file-locally. Either way, the resolver should designate
-      // the proper scope of binding.getLocalName() and this should become
-      // simply assign(binding.getLocalName(), value).
-      // Currently, we update the module but not module.exportedGlobals;
-      // changing it to fr.locals.put breaks a test. TODO(adonovan): find out why.
-      fn(fr).getModule().setGlobal(binding.getLocalName().getName(), value);
-    }
-  }
-
-  private static TokenKind execReturn(StarlarkThread.Frame fr, ReturnStatement node)
-      throws EvalException, InterruptedException {
-    Expression result = node.getResult();
-    if (result != null) {
-      fr.result = eval(fr, result);
-    }
-    return TokenKind.RETURN;
-  }
-
-  private static TokenKind exec(StarlarkThread.Frame fr, Statement st)
-      throws EvalException, InterruptedException {
-    if (fr.dbg != null) {
-      Location loc = st.getStartLocation(); // not very precise
-      fr.setLocation(loc);
-      fr.dbg.before(fr.thread, loc); // location is now redundant since it's in the thread
-    }
-
-    if (++fr.thread.steps >= fr.thread.stepLimit) {
-      throw new EvalException("Starlark computation cancelled: too many steps");
-    }
-
-    switch (st.kind()) {
-      case ASSIGNMENT:
-        execAssignment(fr, (AssignmentStatement) st);
-        return TokenKind.PASS;
-      case EXPRESSION:
-        eval(fr, ((ExpressionStatement) st).getExpression());
-        return TokenKind.PASS;
-      case FLOW:
-        return ((FlowStatement) st).getKind();
-      case FOR:
-        return execFor(fr, (ForStatement) st);
-      case DEF:
-        execDef(fr, (DefStatement) st);
-        return TokenKind.PASS;
-      case IF:
-        return execIf(fr, (IfStatement) st);
-      case LOAD:
-        execLoad(fr, (LoadStatement) st);
-        return TokenKind.PASS;
-      case RETURN:
-        return execReturn(fr, (ReturnStatement) st);
-    }
-    throw new IllegalArgumentException("unexpected statement: " + st.kind());
-  }
-
-  /**
-   * Updates the environment bindings, and possibly mutates objects, so as to assign the given value
-   * to the given expression. Might not set the frame location on error.
-   */
-  private static void assign(StarlarkThread.Frame fr, Expression lhs, Object value)
-      throws EvalException, InterruptedException {
-    if (lhs instanceof Identifier) {
-      // x = ...
-      assignIdentifier(fr, (Identifier) lhs, value);
-
-    } else if (lhs instanceof IndexExpression) {
-      // x[i] = ...
-      Object object = eval(fr, ((IndexExpression) lhs).getObject());
-      Object key = eval(fr, ((IndexExpression) lhs).getKey());
-      EvalUtils.setIndex(object, key, value);
-
-    } else if (lhs instanceof ListExpression) {
-      // a, b, c = ...
-      ListExpression list = (ListExpression) lhs;
-      assignSequence(fr, list.getElements(), value);
-
-    } else {
-      // Not possible for resolved ASTs.
-      throw Starlark.errorf("cannot assign to '%s'", lhs);
-    }
-  }
-
-  private static void assignIdentifier(StarlarkThread.Frame fr, Identifier id, Object value)
-      throws EvalException {
-    Resolver.Binding bind = id.getBinding();
-    // Legacy hack for incomplete identifier resolution.
-    // In a <toplevel> function, assignments to unresolved identifiers
-    // update the module, except for load statements and comprehensions,
-    // which should both be file-local.
-    // Load statements don't yet use assignIdentifier,
-    // so we need consider only comprehensions.
-    // In effect, we do the missing resolution using fr.compcount.
-    Resolver.Scope scope;
-    if (bind == null) {
-      scope =
-          fn(fr).isToplevel() && fr.compcount == 0
-              ? Resolver.Scope.GLOBAL //
-              : Resolver.Scope.LOCAL;
-    } else {
-      scope = bind.getScope();
-    }
-
-    String name = id.getName();
-    switch (scope) {
-      case LOCAL:
-        fr.locals.put(name, value);
-        break;
-      case GLOBAL:
-        // Updates a module binding and sets its 'exported' flag.
-        // (Only load bindings are not exported.
-        // But exportedGlobals does at run time what should be done in the resolver.)
-        Module module = fn(fr).getModule();
-        module.setGlobal(name, value);
-        module.exportedGlobals.add(name);
-        break;
-      default:
-        throw new IllegalStateException(scope.toString());
-    }
-  }
-
-  /**
-   * Recursively assigns an iterable value to a non-empty sequence of assignable expressions. Might
-   * not set frame location on error.
-   */
-  private static void assignSequence(StarlarkThread.Frame fr, List<Expression> lhs, Object x)
-      throws EvalException, InterruptedException {
-    // TODO(adonovan): lock/unlock rhs during iteration so that
-    // assignments fail when the left side aliases the right,
-    // which is a tricky case in Python assignment semantics.
-    int nrhs = Starlark.len(x);
-    if (nrhs < 0) {
-      throw Starlark.errorf("got '%s' in sequence assignment", Starlark.type(x));
-    }
-    Iterable<?> rhs = Starlark.toIterable(x); // fails if x is a string
-    int nlhs = lhs.size();
-    if (nlhs != nrhs) {
-      throw Starlark.errorf(
-          "too %s values to unpack (got %d, want %d)", nrhs < nlhs ? "few" : "many", nrhs, nlhs);
-    }
-    int i = 0;
-    for (Object item : rhs) {
-      assign(fr, lhs.get(i), item);
-      i++;
-    }
-  }
-
-  // Might not set frame location on error.
-  private static void execAugmentedAssignment(StarlarkThread.Frame fr, AssignmentStatement stmt)
-      throws EvalException, InterruptedException {
-    Expression lhs = stmt.getLHS();
-    TokenKind op = stmt.getOperator();
-    Expression rhs = stmt.getRHS();
-
-    if (lhs instanceof Identifier) {
-      Object x = eval(fr, lhs);
-      Object y = eval(fr, rhs);
-      Object z = inplaceBinaryOp(fr, op, x, y);
-      assignIdentifier(fr, (Identifier) lhs, z);
-
-    } else if (lhs instanceof IndexExpression) {
-      // object[index] op= y
-      // The object and key should be evaluated only once, so we don't use lhs.eval().
-      IndexExpression index = (IndexExpression) lhs;
-      Object object = eval(fr, index.getObject());
-      Object key = eval(fr, index.getKey());
-      Object x = EvalUtils.index(fr.thread.mutability(), fr.thread.getSemantics(), object, key);
-      // Evaluate rhs after lhs.
-      Object y = eval(fr, rhs);
-      Object z = inplaceBinaryOp(fr, op, x, y);
-      try {
-        EvalUtils.setIndex(object, key, z);
-      } catch (EvalException ex) {
-        fr.setErrorLocation(stmt.getOperatorLocation());
-        throw ex;
-      }
-
-    } else {
-      // Not possible for resolved ASTs.
-      fr.setErrorLocation(stmt.getOperatorLocation());
-      throw Starlark.errorf("cannot perform augmented assignment on '%s'", lhs);
-    }
-  }
-
-  private static Object inplaceBinaryOp(StarlarkThread.Frame fr, TokenKind op, Object x, Object y)
-      throws EvalException {
-    // list += iterable  behaves like  list.extend(iterable)
-    // TODO(b/141263526): following Python, allow list+=iterable (but not list+iterable).
-    if (op == TokenKind.PLUS && x instanceof StarlarkList && y instanceof StarlarkList) {
-      StarlarkList<?> list = (StarlarkList) x;
-      list.extend(y);
-      return list;
-    }
-    return EvalUtils.binaryOp(op, x, y, fr.thread.getSemantics(), fr.thread.mutability());
-  }
-
-  // ---- expressions ----
-
-  private static Object eval(StarlarkThread.Frame fr, Expression expr)
-      throws EvalException, InterruptedException {
-    if (++fr.thread.steps >= fr.thread.stepLimit) {
-      throw new EvalException("Starlark computation cancelled: too many steps");
-    }
-
-    // The switch cases have been split into separate functions
-    // to reduce the stack usage during recursion, which is
-    // especially important in practice for deeply nested a+...+z
-    // expressions; see b/153764542.
-    switch (expr.kind()) {
-      case BINARY_OPERATOR:
-        return evalBinaryOperator(fr, (BinaryOperatorExpression) expr);
-      case COMPREHENSION:
-        return evalComprehension(fr, (Comprehension) expr);
-      case CONDITIONAL:
-        return evalConditional(fr, (ConditionalExpression) expr);
-      case DICT_EXPR:
-        return evalDict(fr, (DictExpression) expr);
-      case DOT:
-        return evalDot(fr, (DotExpression) expr);
-      case CALL:
-        return evalCall(fr, (CallExpression) expr);
-      case IDENTIFIER:
-        return evalIdentifier(fr, (Identifier) expr);
-      case INDEX:
-        return evalIndex(fr, (IndexExpression) expr);
-      case INTEGER_LITERAL:
-        return ((IntegerLiteral) expr).getValue();
-      case LIST_EXPR:
-        return evalList(fr, (ListExpression) expr);
-      case SLICE:
-        return evalSlice(fr, (SliceExpression) expr);
-      case STRING_LITERAL:
-        return ((StringLiteral) expr).getValue();
-      case UNARY_OPERATOR:
-        return evalUnaryOperator(fr, (UnaryOperatorExpression) expr);
-    }
-    throw new IllegalArgumentException("unexpected expression: " + expr.kind());
-  }
-
-  private static Object evalBinaryOperator(StarlarkThread.Frame fr, BinaryOperatorExpression binop)
-      throws EvalException, InterruptedException {
-    Object x = eval(fr, binop.getX());
-    // AND and OR require short-circuit evaluation.
-    switch (binop.getOperator()) {
-      case AND:
-        return Starlark.truth(x) ? eval(fr, binop.getY()) : x;
-      case OR:
-        return Starlark.truth(x) ? x : eval(fr, binop.getY());
-      default:
-        Object y = eval(fr, binop.getY());
-        try {
-          return EvalUtils.binaryOp(
-              binop.getOperator(), x, y, fr.thread.getSemantics(), fr.thread.mutability());
-        } catch (EvalException ex) {
-          fr.setErrorLocation(binop.getOperatorLocation());
-          throw ex;
-        }
-    }
-  }
-
-  private static Object evalConditional(StarlarkThread.Frame fr, ConditionalExpression cond)
-      throws EvalException, InterruptedException {
-    Object v = eval(fr, cond.getCondition());
-    return eval(fr, Starlark.truth(v) ? cond.getThenCase() : cond.getElseCase());
-  }
-
-  private static Object evalDict(StarlarkThread.Frame fr, DictExpression dictexpr)
-      throws EvalException, InterruptedException {
-    Dict<Object, Object> dict = Dict.of(fr.thread.mutability());
-    for (DictExpression.Entry entry : dictexpr.getEntries()) {
-      Object k = eval(fr, entry.getKey());
-      Object v = eval(fr, entry.getValue());
-      int before = dict.size();
-      try {
-        dict.put(k, v, (Location) null);
-      } catch (EvalException ex) {
-        fr.setErrorLocation(entry.getColonLocation());
-        throw ex;
-      }
-      if (dict.size() == before) {
-        fr.setErrorLocation(entry.getColonLocation());
-        throw Starlark.errorf("Duplicated key %s when creating dictionary", Starlark.repr(k));
-      }
-    }
-    return dict;
-  }
-
-  private static Object evalDot(StarlarkThread.Frame fr, DotExpression dot)
-      throws EvalException, InterruptedException {
-    Object object = eval(fr, dot.getObject());
-    String name = dot.getField().getName();
-    try {
-      return Starlark.getattr(
-          fr.thread.mutability(), fr.thread.getSemantics(), object, name, /*defaultValue=*/ null);
-    } catch (EvalException ex) {
-      fr.setErrorLocation(dot.getDotLocation());
-      throw ex;
-    }
-  }
-
-  private static Object evalCall(StarlarkThread.Frame fr, CallExpression call)
-      throws EvalException, InterruptedException {
-    fr.thread.checkInterrupt();
-
-    Object fn = eval(fr, call.getFunction());
-
-    // Starlark arguments are ordered: positionals < keywords < *args < **kwargs.
-    //
-    // This is stricter than Python2, which doesn't constrain keywords wrt *args,
-    // but this ensures that the effects of evaluation of Starlark arguments occur
-    // in source order.
-    //
-    // Starlark does not support Python3's multiple *args and **kwargs
-    // nor freer ordering, such as f(a, *list, *list, **dict, **dict, b=1).
-    // Supporting it would complicate a compiler, and produce effects out of order.
-    // Also, Python's argument ordering rules are complex and the errors sometimes cryptic.
-
-    // StarStar and Star args are guaranteed to be last, if they occur.
-    ImmutableList<Argument> arguments = call.getArguments();
-    int n = arguments.size();
-    Argument.StarStar starstar = null;
-    if (n > 0 && arguments.get(n - 1) instanceof Argument.StarStar) {
-      starstar = (Argument.StarStar) arguments.get(n - 1);
-      n--;
-    }
-    Argument.Star star = null;
-    if (n > 0 && arguments.get(n - 1) instanceof Argument.Star) {
-      star = (Argument.Star) arguments.get(n - 1);
-      n--;
-    }
-    // Inv: n = |positional| + |named|
-
-    // Allocate assuming no *args/**kwargs.
-    int npos = call.getNumPositionalArguments();
-    int i;
-
-    // f(expr) -- positional args
-    Object[] positional = npos == 0 ? EMPTY : new Object[npos];
-    for (i = 0; i < npos; i++) {
-      Argument arg = arguments.get(i);
-      Object value = eval(fr, arg.getValue());
-      positional[i] = value;
-    }
-
-    // f(id=expr) -- named args
-    Object[] named = n == npos ? EMPTY : new Object[2 * (n - npos)];
-    for (int j = 0; i < n; i++) {
-      Argument.Keyword arg = (Argument.Keyword) arguments.get(i);
-      Object value = eval(fr, arg.getValue());
-      named[j++] = arg.getName();
-      named[j++] = value;
-    }
-
-    // f(*args) -- varargs
-    if (star != null) {
-      Object value = eval(fr, star.getValue());
-      if (!(value instanceof StarlarkIterable)) {
-        fr.setErrorLocation(star.getStartLocation());
-        throw Starlark.errorf("argument after * must be an iterable, not %s", Starlark.type(value));
-      }
-      // TODO(adonovan): opt: if value.size is known, preallocate (and skip if empty).
-      ArrayList<Object> list = new ArrayList<>();
-      Collections.addAll(list, positional);
-      Iterables.addAll(list, ((Iterable<?>) value));
-      positional = list.toArray();
-    }
-
-    // f(**kwargs)
-    if (starstar != null) {
-      Object value = eval(fr, starstar.getValue());
-      if (!(value instanceof Dict)) {
-        fr.setErrorLocation(starstar.getStartLocation());
-        throw Starlark.errorf("argument after ** must be a dict, not %s", Starlark.type(value));
-      }
-      Dict<?, ?> kwargs = (Dict<?, ?>) value;
-      int j = named.length;
-      named = Arrays.copyOf(named, j + 2 * kwargs.size());
-      for (Map.Entry<?, ?> e : kwargs.entrySet()) {
-        if (!(e.getKey() instanceof String)) {
-          fr.setErrorLocation(starstar.getStartLocation());
-          throw Starlark.errorf("keywords must be strings, not %s", Starlark.type(e.getKey()));
-        }
-        named[j++] = e.getKey();
-        named[j++] = e.getValue();
-      }
-    }
-
-    Location loc = call.getLparenLocation(); // (Location is prematerialized)
-    fr.setLocation(loc);
-    try {
-      return Starlark.fastcall(fr.thread, fn, positional, named);
-    } catch (EvalException ex) {
-      fr.setErrorLocation(loc);
-      throw ex;
-    }
-  }
-
-  private static Object evalIdentifier(StarlarkThread.Frame fr, Identifier id)
-      throws EvalException, InterruptedException {
-    String name = id.getName();
-    Resolver.Binding bind = id.getBinding();
-    if (bind == null) {
-      // Legacy behavior, to be removed.
-      Object result = fr.locals.get(name);
-      if (result != null) {
-        return result;
-      }
-      result = fn(fr).getModule().get(name);
-      if (result != null) {
-        return result;
-      }
-
-      // Assuming resolution was successfully applied before execution
-      // (which is not yet true for copybara, but will be soon),
-      // then the identifier must have been resolved but the
-      // resolution was not annotated onto the syntax tree---because
-      // it's a BUILD file that may share trees with the prelude.
-      // So this error does not mean "undefined variable" (morally a
-      // static error), but "variable was (dynamically) referenced
-      // before being bound", as in 'print(x); x=1'.
-      fr.setErrorLocation(id.getStartLocation());
-      throw Starlark.errorf("variable '%s' is referenced before assignment", name);
-    }
-
-    Object result;
-    switch (bind.getScope()) {
-      case LOCAL:
-        result = fr.locals.get(name);
-        break;
-      case GLOBAL:
-        result = fn(fr).getModule().getGlobal(name);
-        break;
-      case PREDECLARED:
-        // TODO(adonovan): call getPredeclared
-        result = fn(fr).getModule().get(name);
-        break;
-      default:
-        throw new IllegalStateException(bind.toString());
-    }
-    if (result == null) {
-      // Since Scope was set, we know that the local/global variable is defined,
-      // but its assignment was not yet executed.
-      fr.setErrorLocation(id.getStartLocation());
-      throw Starlark.errorf(
-          "%s variable '%s' is referenced before assignment.", bind.getScope(), name);
-    }
-    return result;
-  }
-
-  private static Object evalIndex(StarlarkThread.Frame fr, IndexExpression index)
-      throws EvalException, InterruptedException {
-    Object object = eval(fr, index.getObject());
-    Object key = eval(fr, index.getKey());
-    try {
-      return EvalUtils.index(fr.thread.mutability(), fr.thread.getSemantics(), object, key);
-    } catch (EvalException ex) {
-      fr.setErrorLocation(index.getLbracketLocation());
-      throw ex;
-    }
-  }
-
-  private static Object evalList(StarlarkThread.Frame fr, ListExpression expr)
-      throws EvalException, InterruptedException {
-    int n = expr.getElements().size();
-    Object[] array = new Object[n];
-    for (int i = 0; i < n; i++) {
-      array[i] = eval(fr, expr.getElements().get(i));
-    }
-    return expr.isTuple() ? Tuple.wrap(array) : StarlarkList.wrap(fr.thread.mutability(), array);
-  }
-
-  private static Object evalSlice(StarlarkThread.Frame fr, SliceExpression slice)
-      throws EvalException, InterruptedException {
-    Object x = eval(fr, slice.getObject());
-    Object start = slice.getStart() == null ? Starlark.NONE : eval(fr, slice.getStart());
-    Object stop = slice.getStop() == null ? Starlark.NONE : eval(fr, slice.getStop());
-    Object step = slice.getStep() == null ? Starlark.NONE : eval(fr, slice.getStep());
-    try {
-      return Starlark.slice(fr.thread.mutability(), x, start, stop, step);
-    } catch (EvalException ex) {
-      fr.setErrorLocation(slice.getLbracketLocation());
-      throw ex;
-    }
-  }
-
-  private static Object evalUnaryOperator(StarlarkThread.Frame fr, UnaryOperatorExpression unop)
-      throws EvalException, InterruptedException {
-    Object x = eval(fr, unop.getX());
-    try {
-      return EvalUtils.unaryOp(unop.getOperator(), x);
-    } catch (EvalException ex) {
-      fr.setErrorLocation(unop.getStartLocation());
-      throw ex;
-    }
-  }
-
-  private static Object evalComprehension(StarlarkThread.Frame fr, Comprehension comp)
-      throws EvalException, InterruptedException {
-    final Dict<Object, Object> dict = comp.isDict() ? Dict.of(fr.thread.mutability()) : null;
-    final ArrayList<Object> list = comp.isDict() ? null : new ArrayList<>();
-
-    // Save previous value (if any) of local variables bound in a 'for' clause
-    // so we can restore them later.
-    // TODO(adonovan): throw all this away when we implement flat environments.
-    List<Object> saved = new ArrayList<>(); // alternating keys and values
-    for (Comprehension.Clause clause : comp.getClauses()) {
-      if (clause instanceof Comprehension.For) {
-        for (Identifier ident :
-            Identifier.boundIdentifiers(((Comprehension.For) clause).getVars())) {
-          String name = ident.getName();
-          Object value = fr.locals.get(ident.getName()); // may be null
-          saved.add(name);
-          saved.add(value);
-        }
-      }
-    }
-    fr.compcount++;
-
-    // The Lambda class serves as a recursive lambda closure.
-    class Lambda {
-      // execClauses(index) recursively executes the clauses starting at index,
-      // and finally evaluates the body and adds its value to the result.
-      void execClauses(int index) throws EvalException, InterruptedException {
-        fr.thread.checkInterrupt();
-
-        // recursive case: one or more clauses
-        if (index < comp.getClauses().size()) {
-          Comprehension.Clause clause = comp.getClauses().get(index);
-          if (clause instanceof Comprehension.For) {
-            Comprehension.For forClause = (Comprehension.For) clause;
-
-            Object iterable = eval(fr, forClause.getIterable());
-            Iterable<?> listValue = Starlark.toIterable(iterable);
-            EvalUtils.addIterator(iterable);
-            try {
-              for (Object elem : listValue) {
-                assign(fr, forClause.getVars(), elem);
-                execClauses(index + 1);
-              }
-            } catch (EvalException ex) {
-              fr.setErrorLocation(forClause.getStartLocation());
-              throw ex;
-            } finally {
-              EvalUtils.removeIterator(iterable);
-            }
-
-          } else {
-            Comprehension.If ifClause = (Comprehension.If) clause;
-            if (Starlark.truth(eval(fr, ifClause.getCondition()))) {
-              execClauses(index + 1);
-            }
-          }
-          return;
-        }
-
-        // base case: evaluate body and add to result.
-        if (dict != null) {
-          DictExpression.Entry body = (DictExpression.Entry) comp.getBody();
-          Object k = eval(fr, body.getKey());
-          try {
-            EvalUtils.checkHashable(k);
-            Object v = eval(fr, body.getValue());
-            dict.put(k, v, (Location) null);
-          } catch (EvalException ex) {
-            fr.setErrorLocation(body.getColonLocation());
-            throw ex;
-          }
-        } else {
-          list.add(eval(fr, ((Expression) comp.getBody())));
-        }
-      }
-    }
-    new Lambda().execClauses(0);
-    fr.compcount--;
-
-    // Restore outer scope variables.
-    // This loop implicitly undefines comprehension variables.
-    for (int i = 0; i != saved.size(); ) {
-      String name = (String) saved.get(i++);
-      Object value = saved.get(i++);
-      if (value != null) {
-        fr.locals.put(name, value);
-      } else {
-        fr.locals.remove(name);
-      }
-    }
-
-    return comp.isDict() ? dict : StarlarkList.copyOf(fr.thread.mutability(), list);
-  }
-
-  private static final Object[] EMPTY = {};
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/EvalException.java b/src/main/java/com/google/devtools/build/lib/syntax/EvalException.java
deleted file mode 100644
index 2a5405e..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/EvalException.java
+++ /dev/null
@@ -1,267 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-import static java.nio.charset.StandardCharsets.UTF_8;
-
-import com.google.common.base.Preconditions;
-import com.google.common.base.Splitter;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
-import com.google.common.io.Files;
-import java.io.File;
-import java.util.List;
-import java.util.function.Supplier;
-import javax.annotation.Nullable;
-
-/** An EvalException indicates an Starlark evaluation error. */
-public class EvalException extends Exception {
-
-  // The location optionally specified at construction.
-  // TODO(adonovan): doesn't belong; essentially ignored.
-  // Replace by making each caller incorporate
-  // the file name into the error message if necessary.
-  // In the vast majority of cases, it isn't.
-  @Nullable private final Location location;
-
-  // The call stack associated with this error.
-  // It is initially null, but is set by the interpreter to a non-empty
-  // stack when popping a frame. Thus an exception newly created by a
-  // built-in function has no stack until it is thrown out of a function call.
-  //
-  // EvalExceptions are often used to indicate the failure of an operator
-  // such as getattr, or some piece of bazel rule validation machinery,
-  // without reference to Starlark code. Such exceptions have no stack
-  // until they are thrown in the context of a Starlark thread (e.g.
-  // by a built-in function, or by the interpreter itself).
-  @Nullable private ImmutableList<StarlarkThread.CallStackEntry> callstack;
-
-  /** Constructs an EvalException. Use {@link Starlak#errorf} if you want string formatting. */
-  public EvalException(String message) {
-    this((Location) null, message);
-  }
-
-  /**
-   * Constructs an EvalException with a message and optional cause.
-   *
-   * <p>The cause does not affect the error message, so callers should incorporate {@code
-   * cause.getMessage()} into {@code message} if desired, or call {@code EvalException(Throwable)}.
-   */
-  public EvalException(String message, @Nullable Throwable cause) {
-    this((Location) null, message, cause);
-  }
-
-  /** Constructs an EvalException using the same message as the cause exception. */
-  public EvalException(Throwable cause) {
-    this((Location) null, cause);
-  }
-
-  // TODO(adonovan): delete all constructors below. Stop using Location.
-
-  /**
-   * Constructs an EvalException with a message and optional location (deprecated).
-   *
-   * <p>Few clients need this constructor, as the Starlark interpreter automatically fill in the
-   * locations from the call stack. Use {@link Starlark#errorf} instead, unless the exception needs
-   * to appear to originate from a different location.
-   */
-  // TODO(adonovan): eliminate.
-  public EvalException(@Nullable Location location, String message) {
-    super(Preconditions.checkNotNull(message));
-    this.location = location;
-  }
-
-  /**
-   * Constructs an EvalException with a message, optional location (deprecated), and optional cause.
-   *
-   * <p>See notes at {@link #EvalException(Location, String)}. The cause does not affect the error
-   * message, so callers should incorporate {@code cause.getMessage()} into {@code message} if
-   * desired.
-   */
-  // TODO(adonovan): eliminate.
-  public EvalException(@Nullable Location location, String message, @Nullable Throwable cause) {
-    super(Preconditions.checkNotNull(message), cause);
-    this.location = location;
-  }
-
-  /**
-   * Constructs an EvalException with an optional location (deprecated) using the same message as
-   * the cause exception.
-   *
-   * <p>See notes at {@link #EvalException(Location, String)}.
-   */
-  // TODO(adonovan): eliminate.
-  public EvalException(@Nullable Location location, Throwable cause) {
-    super(getCauseMessage(cause), cause);
-    this.location = location;
-  }
-
-  private static String getCauseMessage(Throwable cause) {
-    String msg = cause.getMessage();
-    return msg != null ? msg : cause.toString();
-  }
-
-  /** Returns the error message. Does not include location (deprecated), call stack, or cause. */
-  @Override
-  public final String getMessage() {
-    return super.getMessage();
-  }
-
-  /**
-   * Returns the call stack associated with this error, outermost call first. A newly constructed
-   * exception has an empty stack, but an exception that has been thrown out of a Starlark function
-   * call has its stack populated automatically.
-   */
-  public final ImmutableList<StarlarkThread.CallStackEntry> getCallStack() {
-    return callstack != null ? callstack : ImmutableList.of();
-  }
-
-  /** Returns the error message along with its call stack. May be overridden by subclasses. */
-  @Override
-  public String toString() {
-    return getMessageWithStack();
-  }
-
-  /**
-   * Returns the error message along with its call stack or location (deprecated), if any.
-   * Equivalent to {@code getMessageWithStack(newSourceReader())}.
-   */
-  public final String getMessageWithStack() {
-    return getMessageWithStack(newSourceReader());
-  }
-
-  /**
-   * Returns the error message along with its call stack or location (deprecated), if any. The
-   * source line for each stack frame is obtained from the provided SourceReader.
-   */
-  public final String getMessageWithStack(SourceReader src) {
-    if (callstack != null) {
-      return formatCallStack(callstack, getMessage(), src);
-    }
-
-    // An exception that has not been thrown out of a Starlark call
-    // has no stack. It may have a location (for now). If so, print it.
-    if (location != null && !location.equals(Location.BUILTIN)) {
-      return location + ": " + getMessage();
-    }
-
-    return getMessage();
-  }
-
-  /**
-   * A SourceReader reads the line of source denoted by a Location to be displayed in a formatted a
-   * stack trace.
-   */
-  public interface SourceReader {
-    /** Returns a single line of source code (sans newline), or null if unavailable. */
-    String readline(Location loc);
-  }
-
-  /**
-   * Sets the function used to obtain a SourceReader when subsequently formatting a call stack.
-   *
-   * <p>The default supplier returns SourceReaders that read from the file system, but a
-   * security-conscious client may wish to disable this capability or provide an alternative.
-   */
-  public static synchronized void setSourceReaderSupplier(Supplier<SourceReader> f) {
-    sourceReaderSupplier = f;
-  }
-
-  /** Returns a new SourceReader. See {@link #setSourceReaderSupplier}. */
-  public static synchronized SourceReader newSourceReader() {
-    return sourceReaderSupplier.get();
-  }
-
-  private static Supplier<SourceReader> sourceReaderSupplier =
-      () -> {
-        // TODO(adonovan): opt: cache seen files, as the stack often repeats the same files.
-        return loc -> {
-          try {
-            String content = Files.asCharSource(new File(loc.file()), UTF_8).read();
-            return Iterables.get(Splitter.on("\n").split(content), loc.line() - 1, null);
-          } catch (Throwable unused) {
-            // ignore any failure (e.g. security manager rejecting I/O)
-          }
-          return null;
-        };
-      };
-
-  /**
-   * Formats the given call stack and error message. Provided as a separate function from {@link
-   * #getMessageWithStack} so that clients may modify the stack and/or error before formatting it.
-   * The source line for each stack frame is obtained from the provided SourceReader.
-   */
-  public static String formatCallStack(
-      List<StarlarkThread.CallStackEntry> callstack, String message, SourceReader src) {
-    StringBuilder buf = new StringBuilder();
-    int n = callstack.size(); // n > 0
-    String prefix = "Error: ";
-    // If the topmost frame is a built-in, don't show it.
-    // Instead just prefix the name of the built-in onto the error message.
-    StarlarkThread.CallStackEntry leaf = callstack.get(n - 1);
-    if (leaf.location.equals(Location.BUILTIN)) {
-      prefix = "Error in " + leaf.name + ": ";
-      n--;
-    }
-    if (n > 0) {
-      buf.append("Traceback (most recent call last):\n");
-      for (int i = 0; i < n; i++) {
-        StarlarkThread.CallStackEntry fr = callstack.get(i);
-        // 'File "file.bzl", line 1, column 2, in fn'
-        buf.append(String.format("\tFile \"%s\", ", fr.location.file()));
-        if (fr.location.line() != 0) {
-          buf.append("line ").append(fr.location.line()).append(", ");
-          if (fr.location.column() != 0) {
-            buf.append("column ").append(fr.location.column()).append(", ");
-          }
-        }
-        buf.append("in ").append(fr.name).append('\n');
-
-        // source line
-        String line = src.readline(fr.location);
-        if (line != null) {
-          buf.append("\t\t").append(line.trim()).append('\n');
-        }
-      }
-    }
-    buf.append(prefix).append(message);
-    return buf.toString();
-  }
-
-  /**
-   * Returns the optional location passed to the constructor.
-   *
-   * @deprecated Do not use this feature. Instead, record auxiliary (non-stack) locations in the
-   *     error message itself, or call a dummy wrapper function to introduce a fake frame into the
-   *     call stack.
-   */
-  @Nullable
-  @Deprecated
-  public final Location getDeprecatedLocation() {
-    return location;
-  }
-
-  // Ensures that this exception holds a call stack, taking the current
-  // stack (which must be non-empty) from the thread if not.
-  final EvalException ensureStack(StarlarkThread thread) {
-    if (callstack == null) {
-      this.callstack = thread.getCallStack();
-      if (callstack.isEmpty()) {
-        throw new IllegalStateException("empty callstack");
-      }
-    }
-    return this;
-  }
-}
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
deleted file mode 100644
index 80ffeda..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java
+++ /dev/null
@@ -1,540 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.base.Strings;
-import com.google.common.collect.Ordering;
-import java.util.IllegalFormatException;
-
-/** Internal declarations used by the evaluator. */
-final class EvalUtils {
-
-  private EvalUtils() {}
-
-  /**
-   * The exception that STARLARK_COMPARATOR might throw. This is an unchecked exception because
-   * Comparator doesn't let us declare exceptions. It should normally be caught and wrapped in an
-   * EvalException.
-   */
-  static class ComparisonException extends RuntimeException {
-    ComparisonException(String msg) {
-      super(msg);
-    }
-  }
-
-  /**
-   * Compare two Starlark values.
-   *
-   * <p>It may throw an unchecked exception ComparisonException that should be wrapped in an
-   * EvalException.
-   */
-  // TODO(adonovan): consider what API to expose around comparison and ordering. Java's three-valued
-  // comparator cannot properly handle weakly or partially ordered values such as IEEE754 floats.
-  static final Ordering<Object> STARLARK_COMPARATOR =
-      new Ordering<Object>() {
-        private int compareLists(Sequence<?> o1, Sequence<?> o2) {
-          if (o1 instanceof RangeList || o2 instanceof RangeList) {
-            throw new ComparisonException("Cannot compare range objects");
-          }
-
-          for (int i = 0; i < Math.min(o1.size(), o2.size()); i++) {
-            int cmp = compare(o1.get(i), o2.get(i));
-            if (cmp != 0) {
-              return cmp;
-            }
-          }
-          return Integer.compare(o1.size(), o2.size());
-        }
-
-        @Override
-        @SuppressWarnings("unchecked")
-        public int compare(Object o1, Object o2) {
-
-          // optimize the most common cases
-
-          if (o1 instanceof String && o2 instanceof String) {
-            return ((String) o1).compareTo((String) o2);
-          }
-          if (o1 instanceof Integer && o2 instanceof Integer) {
-            return Integer.compare((Integer) o1, (Integer) o2);
-          }
-
-          o1 = Starlark.fromJava(o1, null);
-          o2 = Starlark.fromJava(o2, null);
-
-          if (o1 instanceof Sequence
-              && o2 instanceof Sequence
-              && o1 instanceof Tuple == o2 instanceof Tuple) {
-            return compareLists((Sequence) o1, (Sequence) o2);
-          }
-
-          if (o1 instanceof ClassObject) {
-            throw new ComparisonException("Cannot compare structs");
-          }
-          try {
-            return ((Comparable<Object>) o1).compareTo(o2);
-          } catch (ClassCastException e) {
-            throw new ComparisonException(
-                "Cannot compare " + Starlark.type(o1) + " with " + Starlark.type(o2));
-          }
-        }
-      };
-
-  /** Throws EvalException if x is not hashable. */
-  static void checkHashable(Object x) throws EvalException {
-    if (!isHashable(x)) {
-      // This results in confusing errors such as "unhashable type: tuple".
-      // TODO(adonovan): ideally the error message would explain which
-      // element of, say, a tuple is unhashable. The only practical way
-      // to implement this is by implementing isHashable as a call to
-      // Object.hashCode within a try/catch, and requiring all
-      // unhashable Starlark values to throw a particular unchecked exception
-      // with a helpful error message.
-      throw Starlark.errorf("unhashable type: '%s'", Starlark.type(x));
-    }
-  }
-
-  /**
-   * Reports whether a legal Starlark value is considered hashable to Starlark, and thus suitable as
-   * a key in a dict.
-   */
-  static boolean isHashable(Object o) {
-    // Bazel makes widespread assumptions that all Starlark values can be hashed
-    // by Java code, so we cannot implement isHashable by having
-    // StarlarkValue.hashCode throw an unchecked exception, which would be more
-    // efficient. Instead, before inserting a value in a dict, we must first ask
-    // it whether it isHashable, and then call its hashCode method only if so.
-    // For structs and tuples, this unfortunately visits the object graph twice.
-    //
-    // One subtlety: the struct.isHashable recursively asks whether its
-    // elements are immutable, not hashable. Consequently, even though a list
-    // may not be used as a dict key (even if frozen), a struct containing
-    // a list is hashable. TODO(adonovan): fix this inconsistency.
-    // Requires an incompatible change flag.
-    if (o instanceof StarlarkValue) {
-      return ((StarlarkValue) o).isHashable();
-    }
-    return Starlark.isImmutable(o);
-  }
-
-  static void addIterator(Object x) {
-    if (x instanceof Mutability.Freezable) {
-      ((Mutability.Freezable) x).updateIteratorCount(+1);
-    }
-  }
-
-  static void removeIterator(Object x) {
-    if (x instanceof Mutability.Freezable) {
-      ((Mutability.Freezable) x).updateIteratorCount(-1);
-    }
-  }
-
-  // The following functions for indexing and slicing match the behavior of Python.
-
-  /**
-   * Resolves a positive or negative index to an index in the range [0, length), or throws
-   * EvalException if it is out of range. If the index is negative, it counts backward from length.
-   */
-  static int getSequenceIndex(int index, int length) throws EvalException {
-    int actualIndex = index;
-    if (actualIndex < 0) {
-      actualIndex += length;
-    }
-    if (actualIndex < 0 || actualIndex >= length) {
-      throw Starlark.errorf(
-          "index out of range (index is %d, but sequence has %d elements)", index, length);
-    }
-    return actualIndex;
-  }
-
-  /**
-   * Returns the effective index denoted by a user-supplied integer. First, if the integer is
-   * negative, the length of the sequence is added to it, so an index of -1 represents the last
-   * element of the sequence. Then, the integer is "clamped" into the inclusive interval [0,
-   * length].
-   */
-  static int toIndex(int index, int length) {
-    if (index < 0) {
-      index += length;
-    }
-
-    if (index < 0) {
-      return 0;
-    } else if (index > length) {
-      return length;
-    } else {
-      return index;
-    }
-  }
-
-  /** Evaluates an eager binary operation, {@code x op y}. (Excludes AND and OR.) */
-  static Object binaryOp(
-      TokenKind op, Object x, Object y, StarlarkSemantics semantics, Mutability mu)
-      throws EvalException {
-    switch (op) {
-      case PLUS:
-        if (x instanceof Integer) {
-          if (y instanceof Integer) {
-            // int + int
-            int xi = (Integer) x;
-            int yi = (Integer) y;
-            int z = xi + yi;
-            // Overflow Detection, §2-13 Hacker's Delight:
-            // "operands have the same sign and the sum
-            // has a sign opposite to that of the operands."
-            if (((xi ^ z) & (yi ^ z)) < 0) {
-              throw Starlark.errorf("integer overflow in addition");
-            }
-            return z;
-          }
-
-        } else if (x instanceof String) {
-          if (y instanceof String) {
-            // string + string
-            return (String) x + (String) y;
-          }
-
-        } else if (x instanceof Tuple) {
-          if (y instanceof Tuple) {
-            // tuple + tuple
-            return Tuple.concat((Tuple<?>) x, (Tuple<?>) y);
-          }
-
-        } else if (x instanceof StarlarkList) {
-          if (y instanceof StarlarkList) {
-            // list + list
-            return StarlarkList.concat((StarlarkList<?>) x, (StarlarkList<?>) y, mu);
-          }
-
-        }
-        break;
-
-      case PIPE:
-        if (x instanceof Integer) {
-          if (y instanceof Integer) {
-            // int | int
-            return ((Integer) x) | (Integer) y;
-          }
-        }
-        break;
-
-      case AMPERSAND:
-        if (x instanceof Integer && y instanceof Integer) {
-          // int & int
-          return (Integer) x & (Integer) y;
-        }
-        break;
-
-      case CARET:
-        if (x instanceof Integer && y instanceof Integer) {
-          // int ^ int
-          return (Integer) x ^ (Integer) y;
-        }
-        break;
-
-      case GREATER_GREATER:
-        if (x instanceof Integer && y instanceof Integer) {
-          // int >> int
-          int xi = (Integer) x;
-          int yi = (Integer) y;
-          if (yi < 0) {
-            throw Starlark.errorf("negative shift count: %d", yi);
-          } else if (yi >= Integer.SIZE) {
-            return xi < 0 ? -1 : 0;
-          }
-          return xi >> yi;
-        }
-        break;
-
-      case LESS_LESS:
-        if (x instanceof Integer && y instanceof Integer) {
-          // int << int
-          int xi = (Integer) x;
-          int yi = (Integer) y;
-          if (yi < 0) {
-            throw Starlark.errorf("negative shift count: %d", yi);
-          }
-          int z = xi << yi; // only uses low 5 bits of yi
-          if ((z >> yi) != xi || yi >= 32) {
-            throw Starlark.errorf("integer overflow in left shift");
-          }
-          return z;
-        }
-        break;
-
-      case MINUS:
-        if (x instanceof Integer && y instanceof Integer) {
-          // int - int
-          int xi = (Integer) x;
-          int yi = (Integer) y;
-          int z = xi - yi;
-          if (((xi ^ yi) & (xi ^ z)) < 0) {
-            throw Starlark.errorf("integer overflow in subtraction");
-          }
-          return z;
-        }
-        break;
-
-      case STAR:
-        if (x instanceof Integer) {
-          int xi = (Integer) x;
-          if (y instanceof Integer) {
-            // int * int
-            long z = (long) xi * (long) (Integer) y;
-            if ((int) z != z) {
-              throw Starlark.errorf("integer overflow in multiplication");
-            }
-            return (int) z;
-          } else if (y instanceof String) {
-            // int * string
-            return repeatString((String) y, xi);
-          } else if (y instanceof Tuple) {
-            //  int * tuple
-            return ((Tuple<?>) y).repeat(xi);
-          } else if (y instanceof StarlarkList) {
-            // int * list
-            return ((StarlarkList<?>) y).repeat(xi, mu);
-          }
-
-        } else if (x instanceof String) {
-          if (y instanceof Integer) {
-            // string * int
-            return repeatString((String) x, (Integer) y);
-          }
-
-        } else if (x instanceof Tuple) {
-          if (y instanceof Integer) {
-            // tuple * int
-            return ((Tuple<?>) x).repeat((Integer) y);
-          }
-
-        } else if (x instanceof StarlarkList) {
-          if (y instanceof Integer) {
-            // list * int
-            return ((StarlarkList<?>) x).repeat((Integer) y, mu);
-          }
-        }
-        break;
-
-      case SLASH:
-        throw Starlark.errorf("The `/` operator is not allowed. For integer division, use `//`.");
-
-      case SLASH_SLASH:
-        if (x instanceof Integer && y instanceof Integer) {
-          // int // int
-          int xi = (Integer) x;
-          int yi = (Integer) y;
-          if (yi == 0) {
-            throw Starlark.errorf("integer division by zero");
-          }
-          // http://python-history.blogspot.com/2010/08/why-pythons-integer-division-floors.html
-          int quo = xi / yi;
-          int rem = xi % yi;
-          if ((xi < 0) != (yi < 0) && rem != 0) {
-            quo--;
-          }
-          if (xi == Integer.MIN_VALUE && yi == -1) { // HD 2-13
-            throw Starlark.errorf("integer overflow in division");
-          }
-          return quo;
-        }
-        break;
-
-      case PERCENT:
-        if (x instanceof Integer) {
-          if (y instanceof Integer) {
-            // int % int
-            int xi = (Integer) x;
-            int yi = (Integer) y;
-            if (yi == 0) {
-              throw Starlark.errorf("integer modulo by zero");
-            }
-            // In Starlark, the sign of the result is the sign of the divisor.
-            int z = xi % yi;
-            if ((xi < 0) != (yi < 0) && z != 0) {
-              z += yi;
-            }
-            return z;
-          }
-
-        } else if (x instanceof String) {
-          // string % any
-          String xs = (String) x;
-          try {
-            if (y instanceof Tuple) {
-              return Starlark.formatWithList(xs, (Tuple) y);
-            } else {
-              return Starlark.format(xs, y);
-            }
-          } catch (IllegalFormatException ex) {
-            throw new EvalException(ex);
-          }
-        }
-        break;
-
-      case EQUALS_EQUALS:
-        return x.equals(y);
-
-      case NOT_EQUALS:
-        return !x.equals(y);
-
-      case LESS:
-        return compare(x, y) < 0;
-
-      case LESS_EQUALS:
-        return compare(x, y) <= 0;
-
-      case GREATER:
-        return compare(x, y) > 0;
-
-      case GREATER_EQUALS:
-        return compare(x, y) >= 0;
-
-      case IN:
-        if (y instanceof StarlarkIndexable) {
-          return ((StarlarkIndexable) y).containsKey(semantics, x);
-        } else if (y instanceof String) {
-          if (!(x instanceof String)) {
-            throw Starlark.errorf(
-                "'in <string>' requires string as left operand, not '%s'", Starlark.type(x));
-          }
-          return ((String) y).contains((String) x);
-        }
-        break;
-
-      case NOT_IN:
-        Object z = binaryOp(TokenKind.IN, x, y, semantics, mu);
-        if (z != null) {
-          return !Starlark.truth(z);
-        }
-        break;
-
-      default:
-        throw new AssertionError("not a binary operator: " + op);
-    }
-
-    // custom binary operator?
-    if (x instanceof HasBinary) {
-      Object z = ((HasBinary) x).binaryOp(op, y, true);
-      if (z != null) {
-        return z;
-      }
-    }
-    if (y instanceof HasBinary) {
-      Object z = ((HasBinary) y).binaryOp(op, x, false);
-      if (z != null) {
-        return z;
-      }
-    }
-
-    throw Starlark.errorf(
-        "unsupported binary operation: %s %s %s", Starlark.type(x), op, Starlark.type(y));
-  }
-
-  /** Implements comparison operators. */
-  private static int compare(Object x, Object y) throws EvalException {
-    try {
-      return STARLARK_COMPARATOR.compare(x, y);
-    } catch (ComparisonException e) {
-      throw new EvalException(e);
-    }
-  }
-
-  private static String repeatString(String s, int n) {
-    return n <= 0 ? "" : Strings.repeat(s, n);
-  }
-
-  /** Evaluates a unary operation. */
-  static Object unaryOp(TokenKind op, Object x) throws EvalException {
-    switch (op) {
-      case NOT:
-        return !Starlark.truth(x);
-
-      case MINUS:
-        if (x instanceof Integer) {
-          int xi = (Integer) x;
-          if (xi == Integer.MIN_VALUE) {
-            throw Starlark.errorf("integer overflow in negation");
-          }
-          return -xi;
-        }
-        break;
-
-      case PLUS:
-        if (x instanceof Integer) {
-          return x;
-        }
-        break;
-
-      case TILDE:
-        if (x instanceof Integer) {
-          return ~((Integer) x);
-        }
-        break;
-
-      default:
-        /* fall through */
-    }
-    throw Starlark.errorf("unsupported unary operation: %s%s", op, Starlark.type(x));
-  }
-
-  /**
-   * Returns the element of sequence or mapping {@code object} indexed by {@code key}.
-   *
-   * @throws EvalException if {@code object} is not a sequence or mapping.
-   */
-  static Object index(Mutability mu, StarlarkSemantics semantics, Object object, Object key)
-      throws EvalException {
-    if (object instanceof StarlarkIndexable) {
-      Object result = ((StarlarkIndexable) object).getIndex(semantics, key);
-      // TODO(bazel-team): We shouldn't have this fromJava call here. If it's needed at all,
-      // it should go in the implementations of StarlarkIndexable#getIndex that produce non-Starlark
-      // values.
-      return result == null ? null : Starlark.fromJava(result, mu);
-    } else if (object instanceof String) {
-      String string = (String) object;
-      int index = Starlark.toInt(key, "string index");
-      index = getSequenceIndex(index, string.length());
-      return string.substring(index, index + 1);
-    } else {
-      throw Starlark.errorf(
-          "type '%s' has no operator [](%s)", Starlark.type(object), Starlark.type(key));
-    }
-  }
-
-  /**
-   * Updates an object as if by the Starlark statement {@code object[key] = value}.
-   *
-   * @throws EvalException if the object is not a list or dict.
-   */
-  static void setIndex(Object object, Object key, Object value) throws EvalException {
-    if (object instanceof Dict) {
-      @SuppressWarnings("unchecked")
-      Dict<Object, Object> dict = (Dict<Object, Object>) object;
-      dict.put(key, value, (Location) null);
-
-    } else if (object instanceof StarlarkList) {
-      @SuppressWarnings("unchecked")
-      StarlarkList<Object> list = (StarlarkList<Object>) object;
-      int index = Starlark.toInt(key, "list index");
-      index = EvalUtils.getSequenceIndex(index, list.size());
-      list.set(index, value, (Location) null);
-
-    } else {
-      throw Starlark.errorf(
-          "can only assign an element in a dictionary or a list, not in a '%s'",
-          Starlark.type(object));
-    }
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Expression.java b/src/main/java/com/google/devtools/build/lib/syntax/Expression.java
deleted file mode 100644
index 2206d79..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Expression.java
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.syntax;
-
-
-/**
- * Base class for all expression nodes in the AST.
- *
- * <p>The only expressions permitted on the left-hand side of an assignment (such as 'lhs=rhs' or
- * 'for lhs in expr') are identifiers, dot expressions (x.y), list expressions ([expr, ...]), tuple
- * expressions ((expr, ...)), or parenthesized variants of those. In particular and unlike Python,
- * slice expressions and starred expressions cannot appear on the LHS. TODO(bazel-team): Add support
- * for assigning to slices (e.g. a[2:6] = [3]).
- */
-public abstract class Expression extends Node {
-
-  /**
-   * Kind of the expression. This is similar to using instanceof, except that it's more efficient
-   * and can be used in a switch/case.
-   */
-  public enum Kind {
-    BINARY_OPERATOR,
-    COMPREHENSION,
-    CONDITIONAL,
-    DICT_EXPR,
-    DOT,
-    CALL,
-    IDENTIFIER,
-    INDEX,
-    INTEGER_LITERAL,
-    LIST_EXPR,
-    SLICE,
-    STRING_LITERAL,
-    UNARY_OPERATOR,
-  }
-
-  Expression(FileLocations locs) {
-    super(locs);
-  }
-
-  /**
-   * Kind of the expression. This is similar to using instanceof, except that it's more efficient
-   * and can be used in a switch/case.
-   */
-  public abstract Kind kind();
-
-  /** Parses an expression with the default options. */
-  public static Expression parse(ParserInput input) throws SyntaxError.Exception {
-    return parse(input, FileOptions.DEFAULT);
-  }
-
-  /** Parses an expression. */
-  public static Expression parse(ParserInput input, FileOptions options)
-      throws SyntaxError.Exception {
-    return Parser.parseExpression(input, options);
-  }
-
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/ExpressionStatement.java b/src/main/java/com/google/devtools/build/lib/syntax/ExpressionStatement.java
deleted file mode 100644
index 32d3b26..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/ExpressionStatement.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-/** Syntax node for a statement consisting of an expression evaluated for effect. */
-public final class ExpressionStatement extends Statement {
-
-  private final Expression expression;
-
-  ExpressionStatement(FileLocations locs, Expression expression) {
-    super(locs);
-    this.expression = expression;
-  }
-
-  public Expression getExpression() {
-    return expression;
-  }
-
-  @Override
-  public void accept(NodeVisitor visitor) {
-    visitor.visit(this);
-  }
-
-  @Override
-  public int getStartOffset() {
-    return expression.getStartOffset();
-  }
-
-  @Override
-  public int getEndOffset() {
-    return expression.getEndOffset();
-  }
-
-  @Override
-  public Kind kind() {
-    return Kind.EXPRESSION;
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/FileLocations.java b/src/main/java/com/google/devtools/build/lib/syntax/FileLocations.java
deleted file mode 100644
index a613d6e..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/FileLocations.java
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-import java.util.Arrays;
-import java.util.Objects;
-import javax.annotation.concurrent.Immutable;
-
-/**
- * FileLocations maps each source offset within a file to a Location. An offset is a (UTF-16) char
- * index such that {@code 0 <= offset <= size}. A Location is a (file, line, column) triple.
- */
-@Immutable
-final class FileLocations {
-
-  private final int[] linestart; // maps line number (line >= 1) to char offset
-  private final String file;
-  private final int size; // size of file in chars
-
-  private FileLocations(int[] linestart, String file, int size) {
-    this.linestart = linestart;
-    this.file = file;
-    this.size = size;
-  }
-
-  static FileLocations create(char[] buffer, String file) {
-    return new FileLocations(computeLinestart(buffer), file, buffer.length);
-  }
-
-  String file() {
-    return file;
-  }
-
-  private int getLineAt(int offset) {
-    if (offset < 0 || offset > size) {
-      throw new IllegalStateException("Illegal position: " + offset);
-    }
-    int lowBoundary = 1;
-    int highBoundary = linestart.length - 1;
-    while (true) {
-      if ((highBoundary - lowBoundary) <= 1) {
-        if (linestart[highBoundary] > offset) {
-          return lowBoundary;
-        } else {
-          return highBoundary;
-        }
-      }
-      int medium = lowBoundary + ((highBoundary - lowBoundary) >> 1);
-      if (linestart[medium] > offset) {
-        highBoundary = medium;
-      } else {
-        lowBoundary = medium;
-      }
-    }
-  }
-
-  Location getLocation(int offset) {
-    int line = getLineAt(offset);
-    int column = offset - linestart[line] + 1;
-    return new Location(file, line, column);
-  }
-
-  int size() {
-    return size;
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(Arrays.hashCode(linestart), file, size);
-  }
-
-  @Override
-  public boolean equals(Object other) {
-    if (!(other instanceof FileLocations)) {
-      return false;
-    }
-    FileLocations that = (FileLocations) other;
-    return this.size == that.size
-        && Arrays.equals(this.linestart, that.linestart)
-        && this.file.equals(that.file);
-  }
-
-  private static int[] computeLinestart(char[] buffer) {
-    // Compute the size.
-    int size = 2;
-    for (int i = 0; i < buffer.length; i++) {
-      if (buffer[i] == '\n') {
-        size++;
-      }
-    }
-    int[] linestart = new int[size];
-
-    int index = 0;
-    linestart[index++] = 0; // The 0th line does not exist - so we fill something in
-    // to make sure the start pos for the 1st line ends up at
-    // linestart[1]. Using 0 is useful for tables that are
-    // completely empty.
-    linestart[index++] = 0; // The first line ("line 1") starts at offset 0.
-
-    // Scan the buffer and record the offset of each line start. Doing this
-    // once upfront is faster than checking each char as it is pulled from
-    // the buffer.
-    for (int i = 0; i < buffer.length; i++) {
-      if (buffer[i] == '\n') {
-        linestart[index++] = i + 1;
-      }
-    }
-    return linestart;
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/FileOptions.java b/src/main/java/com/google/devtools/build/lib/syntax/FileOptions.java
deleted file mode 100644
index 99be932..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/FileOptions.java
+++ /dev/null
@@ -1,116 +0,0 @@
-// Copyright 2020 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-import com.google.auto.value.AutoValue;
-
-/**
- * FileOptions is a set of options that affect the static processing---scanning, parsing, validation
- * (identifier resolution), and compilation---of a single Starlark file. These options affect the
- * language accepted by the frontend (in effect, the dialect), and "code generation", analogous to
- * the command-line options of a typical compiler.
- *
- * <p>Different files within the same application and even executed within the same thread may be
- * subject to different file options. For example, in Bazel, load statements in WORKSPACE files may
- * need to be interleaved with other statements, whereas in .bzl files, load statements must appear
- * all at the top. A single thread may execute a WORKSPACE file and call functions defined in .bzl
- * files.
- *
- * <p>The {@link #DEFAULT} options represent the desired behavior for new uses of Starlark. It is a
- * goal to keep this set of options small and closed. Each represents a language feature, perhaps a
- * deprecated, obscure, or regrettable one. By contrast, {@link StarlarkSemantics} defines a
- * (soon-to-be) open-ended set of options that affect the dynamic behavior of Starlark threads and
- * (mostly application-defined) built-in functions, and particularly attribute selection operations
- * {@code x.f}.
- */
-@AutoValue
-public abstract class FileOptions {
-
-  /** The default options for Starlark static processing. New clients should use these defaults. */
-  public static final FileOptions DEFAULT = builder().build();
-
-  // Options are presented in phase order: scanner, parser, validator, compiler.
-
-  // --- scanner options ---
-
-  /** Disallow ineffective escape sequences such as {@code \a} when scanning string literals. */
-  public abstract boolean restrictStringEscapes();
-
-  // --- validator options ---
-
-  /**
-   * During resolution, permit load statements to access private names such as {@code _x}. <br>
-   * (Required for continued support of Bazel "WORKSPACE.resolved" files.)
-   */
-  public abstract boolean allowLoadPrivateSymbols();
-
-  /**
-   * During resolution, permit multiple bindings of top-level variables. <br>
-   * (Required for continued support of Bazel BUILD files and Copybara files.)
-   */
-  public abstract boolean allowToplevelRebinding();
-
-  // TODO(adonovan): implement this option to support the REPL and prelude.
-  //
-  // /**
-  //  * During resolution, make load statements bind global variables of the module, not file-local
-  //  * variables. (Intended for use in REPLs, and the prelude.)
-  //  */
-  // public abstract boolean loadBindsGlobally();
-
-  /**
-   * During resolution, require load statements to appear before other kinds of statements. <br>
-   * (Required for continued support of Bazel BUILD and especially WORKSPACE files.)
-   */
-  public abstract boolean requireLoadStatementsFirst();
-
-  /**
-   * Record the results of name resolution in the syntax tree by setting {@code Identifer.scope}.
-   * (Disabled for Bazel BUILD files, as its prelude's syntax trees are shared.)
-   */
-  public abstract boolean recordScope();
-
-  public static Builder builder() {
-    // These are the DEFAULT values.
-    return new AutoValue_FileOptions.Builder()
-        .restrictStringEscapes(true)
-        .allowLoadPrivateSymbols(false)
-        .allowToplevelRebinding(false)
-        // .loadBindsGlobally(false)
-        .requireLoadStatementsFirst(true)
-        .recordScope(true);
-  }
-
-  public abstract Builder toBuilder();
-
-  /** This javadoc comment states that FileOptions.Builder is a builder for FileOptions. */
-  @AutoValue.Builder
-  public abstract static class Builder {
-    // AutoValue why u make me say it 3 times?
-    public abstract Builder restrictStringEscapes(boolean value);
-
-    public abstract Builder allowLoadPrivateSymbols(boolean value);
-
-    public abstract Builder allowToplevelRebinding(boolean value);
-
-    // public abstract Builder loadBindsGlobally(boolean value);
-
-    public abstract Builder requireLoadStatementsFirst(boolean value);
-
-    public abstract Builder recordScope(boolean value);
-
-    public abstract FileOptions build();
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/FlagGuardedValue.java b/src/main/java/com/google/devtools/build/lib/syntax/FlagGuardedValue.java
deleted file mode 100644
index 489fd24..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/FlagGuardedValue.java
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright 2018 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-/**
- * Wrapper on a value in the predeclared lexical block that controls its accessibility to Starlark
- * based on the value of a semantic flag.
- *
- * <p>For example, this could control whether symbol "Foo" exists in the Starlark global frame: such
- * a symbol might only be accessible if --experimental_foo is set to true. In order to create this
- * control, an instance of this class should be added to the global frame under "Foo". This flag
- * guard will throw a descriptive {@link EvalException} when "Foo" would be accessed without the
- * proper flag.
- */
-public final class FlagGuardedValue {
-  private final Object obj;
-  private final String flag;
-  private final FlagType flagType;
-
-  private enum FlagType {
-    DEPRECATION,
-    EXPERIMENTAL;
-  }
-
-  private FlagGuardedValue(Object obj, String flag, FlagType flagType) {
-    this.obj = obj;
-    if (flag.charAt(0) != '-' && flag.charAt(0) != '+') {
-      throw new IllegalArgumentException(String.format("flag needs [+-] prefix: %s", flag));
-    }
-    this.flag = flag;
-    this.flagType = flagType;
-  }
-
-  /**
-   * Creates a flag guard which only permits access of the given object when the given boolean flag
-   * is true. If the given flag is false and the object would be accessed, an error is thrown
-   * describing the feature as experimental, and describing that the flag must be set to true.
-   *
-   * <p>The flag identifier must have a + or - prefix; see StarlarkSemantics.
-   */
-  public static FlagGuardedValue onlyWhenExperimentalFlagIsTrue(String flag, Object obj) {
-    return new FlagGuardedValue(obj, flag, FlagType.EXPERIMENTAL);
-  }
-
-  /**
-   * Creates a flag guard which only permits access of the given object when the given boolean flag
-   * is false. If the given flag is true and the object would be accessed, an error is thrown
-   * describing the feature as deprecated, and describing that the flag must be set to false.
-   *
-   * <p>The flag identifier must have a + or - prefix; see StarlarkSemantics.
-   */
-  public static FlagGuardedValue onlyWhenIncompatibleFlagIsFalse(String flag, Object obj) {
-    return new FlagGuardedValue(obj, flag, FlagType.DEPRECATION);
-  }
-
-  /**
-   * Returns an error describing an attempt to access this guard's protected object when it should
-   * be inaccessible in the (contextually implied) semantics.
-   */
-  String getErrorFromAttemptingAccess(String name) {
-    return flagType == FlagType.EXPERIMENTAL
-        ? name
-            + " is experimental and thus unavailable with the current flags. It may be enabled by"
-            + " setting --"
-            + flag.substring(1)
-        : name
-            + " is deprecated and will be removed soon. It may be temporarily re-enabled by"
-            + " setting --"
-            + flag.substring(1)
-            + "=false";
-  }
-
-  /**
-   * Returns this guard's underlying object. This should be called when appropriate validation has
-   * occurred to ensure that the object is accessible with the (implied) semantics.
-   */
-  public Object getObject() {
-    return obj;
-  }
-
-  /** Returns true if this guard's underlying object is accessible under the given semantics. */
-  boolean isObjectAccessibleUsingSemantics(StarlarkSemantics semantics) {
-    if (flagType == FlagType.EXPERIMENTAL) {
-      return semantics.isFeatureEnabledBasedOnTogglingFlags(flag, "");
-    } else {
-      return semantics.isFeatureEnabledBasedOnTogglingFlags("", flag);
-    }
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/FlowStatement.java b/src/main/java/com/google/devtools/build/lib/syntax/FlowStatement.java
deleted file mode 100644
index 4013668..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/FlowStatement.java
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.syntax;
-
-
-/** A class for flow statements (break, continue, and pass) */
-public final class FlowStatement extends Statement {
-
-  private final TokenKind kind; // BREAK | CONTINUE | PASS
-  private final int offset;
-
-  /** @param kind The label of the statement (break, continue, or pass) */
-  FlowStatement(FileLocations locs, TokenKind kind, int offset) {
-    super(locs);
-    this.kind = kind;
-    this.offset = offset;
-  }
-
-  public TokenKind getKind() {
-    return kind;
-  }
-
-  @Override
-  public String toString() {
-    return kind.toString() + "\n";
-  }
-
-  @Override
-  public int getStartOffset() {
-    return offset;
-  }
-
-  @Override
-  public int getEndOffset() {
-    return offset + kind.toString().length();
-  }
-
-  @Override
-  public void accept(NodeVisitor visitor) {
-    visitor.visit(this);
-  }
-
-  @Override
-  public Statement.Kind kind() {
-    return Statement.Kind.FLOW;
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/ForStatement.java b/src/main/java/com/google/devtools/build/lib/syntax/ForStatement.java
deleted file mode 100644
index 8847860..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/ForStatement.java
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
-
-/** Syntax node for a for loop statement. */
-public final class ForStatement extends Statement {
-
-  private final int forOffset;
-  private final Expression vars;
-  private final Expression collection;
-  private final ImmutableList<Statement> body; // non-empty if well formed
-
-  /** Constructs a for loop statement. */
-  ForStatement(
-      FileLocations locs,
-      int forOffset,
-      Expression vars,
-      Expression collection,
-      ImmutableList<Statement> body) {
-    super(locs);
-    this.forOffset = forOffset;
-    this.vars = Preconditions.checkNotNull(vars);
-    this.collection = Preconditions.checkNotNull(collection);
-    this.body = body;
-  }
-
-  public Expression getVars() {
-    return vars;
-  }
-
-  /**
-   * @return The collection we iterate on, e.g. `col` in `for x in col:`
-   */
-  public Expression getCollection() {
-    return collection;
-  }
-
-  public ImmutableList<Statement> getBody() {
-    return body;
-  }
-
-  @Override
-  public int getStartOffset() {
-    return forOffset;
-  }
-
-  @Override
-  public int getEndOffset() {
-    return body.isEmpty()
-        ? collection.getEndOffset() // wrong, but tree is ill formed
-        : body.get(body.size() - 1).getEndOffset();
-  }
-
-  @Override
-  public String toString() {
-    return "for " + vars + " in " + collection + ": ...\n";
-  }
-
-  @Override
-  public void accept(NodeVisitor visitor) {
-    visitor.visit(this);
-  }
-
-  @Override
-  public Kind kind() {
-    return Kind.FOR;
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/FormatParser.java b/src/main/java/com/google/devtools/build/lib/syntax/FormatParser.java
deleted file mode 100644
index 92dd881..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/FormatParser.java
+++ /dev/null
@@ -1,291 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.base.CharMatcher;
-import com.google.common.collect.ImmutableSet;
-import java.util.List;
-import java.util.Map;
-
-/**
- * A helper class that offers a subset of the functionality of Python's string#format.
- *
- * <p>Currently, both manual and automatic positional as well as named replacement fields are
- * supported. However, nested replacement fields are not allowed.
- */
-final class FormatParser {
-
-  /**
-   * Matches strings likely to be a number, faster alternative to relying solely on Integer.parseInt
-   * and NumberFormatException to determine numericness.
-   */
-  private static final CharMatcher LIKELY_NUMERIC_MATCHER =
-      CharMatcher.inRange('0', '9').or(CharMatcher.is('-'));
-
-  private static final ImmutableSet<Character> ILLEGAL_IN_FIELD =
-      ImmutableSet.of('.', '[', ']', ',');
-
-  /**
-   * Formats the given input string by using the given arguments
-   *
-   * <p>This method offers a subset of the functionality of Python's string#format
-   *
-   * @param input The string to be formatted
-   * @param args Positional arguments
-   * @param kwargs Named arguments
-   * @return The formatted string
-   */
-  String format(String input, List<Object> args, Map<String, Object> kwargs) throws EvalException {
-    char[] chars = input.toCharArray();
-    StringBuilder output = new StringBuilder();
-    History history = new History();
-
-    for (int pos = 0; pos < chars.length; ++pos) {
-      char current = chars[pos];
-      int advancePos = 0;
-
-      if (current == '{') {
-        advancePos = processOpeningBrace(chars, pos, args, kwargs, history, output);
-      } else if (current == '}') {
-        advancePos = processClosingBrace(chars, pos, output);
-      } else {
-        output.append(current);
-      }
-
-      pos += advancePos;
-    }
-
-    return output.toString();
-  }
-
-  /**
-   * Processes the expression after an opening brace (possibly a replacement field) and emits the
-   * result to the output StringBuilder
-   *
-   * @param chars The entire string
-   * @param pos The position of the opening brace
-   * @param args List of positional arguments
-   * @param kwargs Map of named arguments
-   * @param history Helper object that tracks information about previously seen positional
-   *     replacement fields
-   * @param output StringBuilder that consumes the result
-   * @return Number of characters that have been consumed by this method
-   */
-  private int processOpeningBrace(
-      char[] chars,
-      int pos,
-      List<Object> args,
-      Map<String, Object> kwargs,
-      History history,
-      StringBuilder output)
-      throws EvalException {
-    Printer printer = new Printer(output);
-    if (has(chars, pos + 1, '{')) {
-      // Escaped brace -> output and move to char after right brace
-      printer.append("{");
-      return 1;
-    }
-
-    // Inside a replacement field
-    String key = getFieldName(chars, pos);
-    Object value = null;
-
-    // Only positional replacement fields will lead to a valid index
-    try {
-      if (key.isEmpty() || LIKELY_NUMERIC_MATCHER.matchesAllOf(key)) {
-        int index = parsePositional(key, history);
-
-        if (index < 0 || index >= args.size()) {
-          throw Starlark.errorf("No replacement found for index %d", index);
-        }
-
-        value = args.get(index);
-      } else {
-        value = getKwarg(kwargs, key);
-      }
-    } catch (NumberFormatException nfe) {
-      // Non-integer index -> Named
-      value = getKwarg(kwargs, key);
-    }
-
-    // Format object for output
-    printer.str(value);
-
-    // Advances the current position to the index of the closing brace of the
-    // replacement field. Due to the definition of the enclosing for() loop,
-    // the next iteration will examine the character right after the brace.
-    return key.length() + 1;
-  }
-
-  private Object getKwarg(Map<String, Object> kwargs, String key) throws EvalException {
-    if (!kwargs.containsKey(key)) {
-      throw Starlark.errorf("Missing argument '%s'", key);
-    }
-
-    return kwargs.get(key);
-  }
-
-  /**
-   * Processes a closing brace and emits the result to the output StringBuilder
-   *
-   * @param chars The entire string
-   * @param pos Position of the closing brace
-   * @param output StringBuilder that consumes the result
-   * @return Number of characters that have been consumed by this method
-   */
-  private int processClosingBrace(char[] chars, int pos, StringBuilder output)
-      throws EvalException {
-    if (!has(chars, pos + 1, '}')) {
-      // Invalid brace outside replacement field
-      throw Starlark.errorf("Found '}' without matching '{'");
-    }
-
-    // Escaped brace -> output and move to char after right brace
-    output.append("}");
-    return 1;
-  }
-
-  /**
-   * Checks whether the given input string has a specific character at the given location
-   *
-   * @param data Input string as character array
-   * @param pos Position to be checked
-   * @param needle Character to be searched for
-   * @return True if string has the specified character at the given location
-   */
-  private static boolean has(char[] data, int pos, char needle) {
-    return pos < data.length && data[pos] == needle;
-  }
-
-  /**
-   * Extracts the name/index of the replacement field that starts at the specified location
-   *
-   * @param chars Input string
-   * @param openingBrace Position of the opening brace of the replacement field
-   * @return Name or index of the current replacement field
-   */
-  private String getFieldName(char[] chars, int openingBrace) throws EvalException {
-    StringBuilder result = new StringBuilder();
-    boolean foundClosingBrace = false;
-
-    for (int pos = openingBrace + 1; pos < chars.length; ++pos) {
-      char current = chars[pos];
-
-      if (current == '}') {
-        foundClosingBrace = true;
-        break;
-      } else {
-        if (current == '{') {
-          throw Starlark.errorf("Nested replacement fields are not supported");
-        } else if (ILLEGAL_IN_FIELD.contains(current)) {
-          throw Starlark.errorf("Invalid character '%s' inside replacement field", current);
-        }
-
-        result.append(current);
-      }
-    }
-
-    if (!foundClosingBrace) {
-      throw Starlark.errorf("Found '{' without matching '}'");
-    }
-
-    return result.toString();
-  }
-
-  /**
-   * Converts the given key into an integer or assigns the next available index, if empty.
-   *
-   * @param key Key to be converted
-   * @param history Helper object that tracks information about previously seen positional
-   *     replacement fields
-   * @return The integer equivalent of the key
-   */
-  private int parsePositional(String key, History history) throws EvalException {
-    int result = -1;
-
-    try {
-      if (key.isEmpty()) {
-        // Automatic positional -> a new index value has to be assigned
-        history.setAutomaticPositional();
-        result = history.getNextPosition();
-      } else {
-        // This will fail if key is a named argument
-        result = Integer.parseInt(key);
-        history.setManualPositional(); // Only register if the conversion succeeds
-      }
-    } catch (MixedTypeException mte) {
-      throw Starlark.errorf("%s", mte.getMessage());
-    }
-
-    return result;
-  }
-
-  /**
-   * Exception for invalid combinations of replacement field types
-   */
-  private static final class MixedTypeException extends Exception {
-    MixedTypeException() {
-      super("Cannot mix manual and automatic numbering of positional fields");
-    }
-  }
-
-  /**
-   * A wrapper to keep track of information about previous replacement fields
-   */
-  private static final class History {
-    /** Different types of positional replacement fields */
-    enum Positional {
-      NONE,
-      MANUAL, // {0}, {1} etc.
-      AUTOMATIC // {}
-    }
-
-    Positional type = Positional.NONE;
-    int position = -1;
-
-    /**
-     * Returns the next available index for an automatic positional replacement field
-     *
-     * @return Next index
-     */
-    int getNextPosition() {
-      ++position;
-      return position;
-    }
-
-    /** Registers a manual positional replacement field */
-    void setManualPositional() throws MixedTypeException {
-      setPositional(Positional.MANUAL);
-    }
-
-    /** Registers an automatic positional replacement field */
-    void setAutomaticPositional() throws MixedTypeException {
-      setPositional(Positional.AUTOMATIC);
-    }
-
-    /**
-     * Indicates that a positional replacement field of the specified type is being processed and
-     * checks whether this conflicts with any previously seen replacement fields
-     *
-     * @param current Type of current replacement field
-     */
-    void setPositional(Positional current) throws MixedTypeException {
-      if (type == Positional.NONE) {
-        type = current;
-      } else if (type != current) {
-        throw new MixedTypeException();
-      }
-    }
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/HasBinary.java b/src/main/java/com/google/devtools/build/lib/syntax/HasBinary.java
deleted file mode 100644
index d5b5566..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/HasBinary.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2020 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-import javax.annotation.Nullable;
-
-/**
- * A Starlark value that supports binary operators such as {@code x+y}.
- *
- * <p>During evaluation of a Starlark binary operation, if none of the built-in cases match, then
- * the left operand is queried; if it implements HasBinary, its {@link #binaryOp} method is called.
- * If the left operand does not implement HasBinary, or declines to implement the particular
- * operation by returning null, then the right operand is queried for HasBinary and its {@link
- * #binaryOp} method is called. If neither operand defines the operator, evaluation fails.
- *
- * <p>Subclasses should strive for appropriate symmetries in their implementations, such as {@code x
- * * y == y * x}.
- */
-// TODO(adonovan): rename BinaryOperand?
-public interface HasBinary extends StarlarkValue {
-
-  /**
-   * Returns {@code this op that}, if thisLeft, or {@code that op this} otherwise. May return null
-   * to indicate that the operation is not supported, or may throw a specific exception.
-   */
-  @Nullable
-  Object binaryOp(TokenKind op, Object that, boolean thisLeft) throws EvalException;
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Identifier.java b/src/main/java/com/google/devtools/build/lib/syntax/Identifier.java
deleted file mode 100644
index ac1ff86..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Identifier.java
+++ /dev/null
@@ -1,138 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableSet;
-import javax.annotation.Nullable;
-
-/** Syntax node for an identifier. */
-public final class Identifier extends Expression {
-
-  private final String name;
-  private final int nameOffset;
-
-  // set by Resolver
-  @Nullable private Resolver.Binding binding;
-
-  Identifier(FileLocations locs, String name, int nameOffset) {
-    super(locs);
-    this.name = name;
-    this.nameOffset = nameOffset;
-  }
-
-  @Override
-  public int getStartOffset() {
-    return nameOffset;
-  }
-
-  @Override
-  public int getEndOffset() {
-    return nameOffset + name.length();
-  }
-
-  /**
-   * Returns the name of the Identifier. If there were parse errors, misparsed regions may be
-   * represented as an Identifier for which {@code !isValid(getName())}.
-   */
-  public String getName() {
-    return name;
-  }
-
-  public boolean isPrivate() {
-    return name.startsWith("_");
-  }
-
-  /** Returns information about the binding that the identifier denotes. Set by the resolver. */
-  @Nullable
-  public Resolver.Binding getBinding() {
-    return binding;
-  }
-
-  void setBinding(Resolver.Binding bind) {
-    Preconditions.checkState(this.binding == null);
-    this.binding = bind;
-  }
-
-  @Override
-  public void accept(NodeVisitor visitor) {
-    visitor.visit(this);
-  }
-
-  @Override
-  public Kind kind() {
-    return Kind.IDENTIFIER;
-  }
-
-  /** Reports whether the string is a valid identifier. */
-  public static boolean isValid(String name) {
-    // Keep consistent with Lexer.scanIdentifier.
-    for (int i = 0; i < name.length(); i++) {
-      char c = name.charAt(i);
-      if (!(('a' <= c && c <= 'z')
-          || ('A' <= c && c <= 'Z')
-          || (i > 0 && '0' <= c && c <= '9')
-          || (c == '_'))) {
-        return false;
-      }
-    }
-    return !name.isEmpty();
-  }
-
-  /**
-   * Returns all names bound by an LHS expression.
-   *
-   * <p>Examples:
-   *
-   * <ul>
-   *   <li><{@code x = ...} binds x.
-   *   <li><{@code x, [y,z] = ..} binds x, y, z.
-   *   <li><{@code x[5] = ..} does not bind any names.
-   * </ul>
-   */
-  // TODO(adonovan): remove this function in due course.
-  // - Resolver makes one pass to discover bindings than another to resolve uses.
-  //   When it works in a single pass, it is more efficient to process bindings in order,
-  //   deferring (rare) forward references until the end of the block.
-  // - Eval calls boundIdentifiers for comprehensions. This can be eliminated when
-  //   recordScope is always enabled and variables are assigned frame slot indices.
-  // - Eval calls boundIdentifiers for the 'export' hack. This can be eliminated
-  //   when we switch to compilation by emitting EXPORT instructions for the necessary
-  //   bindings. (Ideally we would eliminate Bazel's export hack entirely.)
-  public static ImmutableSet<Identifier> boundIdentifiers(Expression expr) {
-    if (expr instanceof Identifier) {
-      // Common case/fast path - skip the builder.
-      return ImmutableSet.of((Identifier) expr);
-    } else {
-      ImmutableSet.Builder<Identifier> result = ImmutableSet.builder();
-      collectBoundIdentifiers(expr, result);
-      return result.build();
-    }
-  }
-
-  private static void collectBoundIdentifiers(
-      Expression lhs, ImmutableSet.Builder<Identifier> result) {
-    if (lhs instanceof Identifier) {
-      result.add((Identifier) lhs);
-      return;
-    }
-    if (lhs instanceof ListExpression) {
-      ListExpression variables = (ListExpression) lhs;
-      for (Expression expression : variables.getElements()) {
-        collectBoundIdentifiers(expression, result);
-      }
-    }
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/IfStatement.java b/src/main/java/com/google/devtools/build/lib/syntax/IfStatement.java
deleted file mode 100644
index 08a0dfd..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/IfStatement.java
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.collect.ImmutableList;
-import java.util.List;
-import javax.annotation.Nullable;
-
-/** Syntax node for an if or elif statement. */
-public final class IfStatement extends Statement {
-
-  private final TokenKind token; // IF or ELIF
-  private final int ifOffset;
-  private final Expression condition;
-  // These blocks may be non-null but empty after a misparse:
-  private final ImmutableList<Statement> thenBlock; // non-empty
-  @Nullable ImmutableList<Statement> elseBlock; // non-empty if non-null; set after construction
-
-  IfStatement(
-      FileLocations locs,
-      TokenKind token,
-      int ifOffset,
-      Expression condition,
-      List<Statement> thenBlock) {
-    super(locs);
-    this.token = token;
-    this.ifOffset = ifOffset;
-    this.condition = condition;
-    this.thenBlock = ImmutableList.copyOf(thenBlock);
-  }
-
-  /**
-   * Reports whether this is an 'elif' statement.
-   *
-   * <p>An elif statement may appear only as the sole statement in the "else" block of another
-   * IfStatement.
-   */
-  public boolean isElif() {
-    return token == TokenKind.ELIF;
-  }
-
-  public Expression getCondition() {
-    return condition;
-  }
-
-  public ImmutableList<Statement> getThenBlock() {
-    return thenBlock;
-  }
-
-  @Nullable
-  public ImmutableList<Statement> getElseBlock() {
-    return elseBlock;
-  }
-
-  void setElseBlock(ImmutableList<Statement> elseBlock) {
-    this.elseBlock = elseBlock;
-  }
-
-  @Override
-  public int getStartOffset() {
-    return ifOffset;
-  }
-
-  @Override
-  public int getEndOffset() {
-    List<Statement> body = elseBlock != null ? elseBlock : thenBlock;
-    return body.isEmpty()
-        ? condition.getEndOffset() // wrong, but tree is ill formed
-        : body.get(body.size() - 1).getEndOffset();
-  }
-
-  @Override
-  public String toString() {
-    return String.format("if %s: ...\n", condition);
-  }
-
-  @Override
-  public void accept(NodeVisitor visitor) {
-    visitor.visit(this);
-  }
-
-  @Override
-  public Kind kind() {
-    return Kind.IF;
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/IndexExpression.java b/src/main/java/com/google/devtools/build/lib/syntax/IndexExpression.java
deleted file mode 100644
index 6baf1b5..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/IndexExpression.java
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.syntax;
-
-
-/**
- * An index expression ({@code obj[field]}). Not to be confused with a slice expression ({@code
- * obj[from:to]}). The object may be either a sequence or an associative mapping (most commonly
- * lists and dictionaries).
- */
-public final class IndexExpression extends Expression {
-
-  private final Expression object;
-  private final int lbracketOffset;
-  private final Expression key;
-  private final int rbracketOffset;
-
-  IndexExpression(
-      FileLocations locs,
-      Expression object,
-      int lbracketOffset,
-      Expression key,
-      int rbracketOffset) {
-    super(locs);
-    this.object = object;
-    this.lbracketOffset = lbracketOffset;
-    this.key = key;
-    this.rbracketOffset = rbracketOffset;
-  }
-
-  public Expression getObject() {
-    return object;
-  }
-
-  public Expression getKey() {
-    return key;
-  }
-
-  @Override
-  public int getStartOffset() {
-    return object.getStartOffset();
-  }
-
-  @Override
-  public int getEndOffset() {
-    return rbracketOffset + 1;
-  }
-
-  public Location getLbracketLocation() {
-    return locs.getLocation(lbracketOffset);
-  }
-
-  @Override
-  public void accept(NodeVisitor visitor) {
-    visitor.visit(this);
-  }
-
-  @Override
-  public Kind kind() {
-    return Kind.INDEX;
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/IntegerLiteral.java b/src/main/java/com/google/devtools/build/lib/syntax/IntegerLiteral.java
deleted file mode 100644
index 415d8d2..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/IntegerLiteral.java
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.syntax;
-
-
-/** Syntax node for an integer literal. */
-public final class IntegerLiteral extends Expression {
-  private final String raw;
-  private final int tokenOffset;
-  private final int value;
-
-  IntegerLiteral(FileLocations locs, String raw, int tokenOffset, int value) {
-    super(locs);
-    this.raw = raw;
-    this.tokenOffset = tokenOffset;
-    this.value = value;
-  }
-
-  public int getValue() {
-    return value;
-  }
-
-  /** Returns the raw source text of the literal. */
-  public String getRaw() {
-    return raw;
-  }
-
-  @Override
-  public int getStartOffset() {
-    return tokenOffset;
-  }
-
-  @Override
-  public int getEndOffset() {
-    return tokenOffset + raw.length();
-  }
-
-  @Override
-  public void accept(NodeVisitor visitor) {
-    visitor.visit(this);
-  }
-
-  @Override
-  public Kind kind() {
-    return Kind.INTEGER_LITERAL;
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/JNI.java b/src/main/java/com/google/devtools/build/lib/syntax/JNI.java
deleted file mode 100644
index b8de3009..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/JNI.java
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2020 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-final class JNI {
-  private JNI() {} // uninstantiable
-
-  static void load() {
-    try {
-      System.loadLibrary("cpu_profiler");
-    } catch (UnsatisfiedLinkError ex) {
-      // Ignore, deferring the error until a C function is called, if ever.
-      // Without this hack //src/test/shell/bazel:bazel_bootstrap_distfile_test
-      // fails with an utterly uninformative error.
-      // TODO(adonovan): remove try/catch once that test is fixed.
-    }
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Lexer.java b/src/main/java/com/google/devtools/build/lib/syntax/Lexer.java
deleted file mode 100644
index 4d066fa..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Lexer.java
+++ /dev/null
@@ -1,867 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableMap;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Stack;
-
-/** A scanner for Starlark. */
-final class Lexer {
-
-  // --- These fields are accessed directly by the parser: ---
-
-  // Mapping from file offsets to Locations.
-  final FileLocations locs;
-
-  // Information about current token. Updated by nextToken.
-  // raw and value are defined only for STRING, INT, IDENTIFIER, and COMMENT.
-  // TODO(adonovan): rename s/xyz/tokenXyz/
-  TokenKind kind;
-  int start; // start offset
-  int end; // end offset
-  String raw; // source text of token
-  Object value; // String or Integer value of token
-
-  // --- end of parser-visible fields ---
-
-  private final List<SyntaxError> errors;
-
-  // Input buffer and position
-  private final char[] buffer;
-  private int pos;
-
-  private final FileOptions options;
-
-  // The stack of enclosing indentation levels in spaces.
-  // The first (outermost) element is always zero.
-  private final Stack<Integer> indentStack = new Stack<>();
-
-  private final List<Comment> comments;
-
-  // The number of unclosed open-parens ("(", '{', '[') at the current point in
-  // the stream. Whitespace is handled differently when this is nonzero.
-  private int openParenStackDepth = 0;
-
-  // True after a NEWLINE token. In other words, we are outside an
-  // expression and we have to check the indentation.
-  private boolean checkIndentation;
-
-  // Number of saved INDENT (>0) or OUTDENT (<0) tokens detected but not yet returned.
-  private int dents;
-
-  // Characters that can come immediately prior to an '=' character to generate
-  // a different token
-  private static final ImmutableMap<Character, TokenKind> EQUAL_TOKENS =
-      ImmutableMap.<Character, TokenKind>builder()
-          .put('=', TokenKind.EQUALS_EQUALS)
-          .put('!', TokenKind.NOT_EQUALS)
-          .put('>', TokenKind.GREATER_EQUALS)
-          .put('<', TokenKind.LESS_EQUALS)
-          .put('+', TokenKind.PLUS_EQUALS)
-          .put('-', TokenKind.MINUS_EQUALS)
-          .put('*', TokenKind.STAR_EQUALS)
-          .put('/', TokenKind.SLASH_EQUALS)
-          .put('%', TokenKind.PERCENT_EQUALS)
-          .put('^', TokenKind.CARET_EQUALS)
-          .put('&', TokenKind.AMPERSAND_EQUALS)
-          .put('|', TokenKind.PIPE_EQUALS)
-          .build();
-
-  // Constructs a lexer which tokenizes the parser input.
-  // Errors are appended to errors.
-  Lexer(ParserInput input, FileOptions options, List<SyntaxError> errors) {
-    this.locs = FileLocations.create(input.getContent(), input.getFile());
-    this.options = options;
-    this.buffer = input.getContent();
-    this.pos = 0;
-    this.errors = errors;
-    this.checkIndentation = true;
-    this.comments = new ArrayList<>();
-    this.dents = 0;
-
-    indentStack.push(0);
-  }
-
-  List<Comment> getComments() {
-    return comments;
-  }
-
-  /**
-   * Reads the next token, updating the Lexer's token fields. It is an error to call nextToken after
-   * an EOF token.
-   */
-  void nextToken() {
-    boolean afterNewline = kind == TokenKind.NEWLINE;
-    tokenize();
-    Preconditions.checkState(kind != null);
-
-    // Like Python, always end with a NEWLINE token, even if no '\n' in input:
-    if (kind == TokenKind.EOF && !afterNewline) {
-      kind = TokenKind.NEWLINE;
-    }
-  }
-
-  private void popParen() {
-    if (openParenStackDepth == 0) {
-      // TODO(adonovan): fix: the input ')' should not report an indentation error.
-      error("indentation error", pos - 1);
-    } else {
-      openParenStackDepth--;
-    }
-  }
-
-  private void error(String message, int pos) {
-    errors.add(new SyntaxError(locs.getLocation(pos), message));
-  }
-
-  private void setToken(TokenKind kind, int start, int end) {
-    this.kind = kind;
-    this.start = start;
-    this.end = end;
-    this.value = null;
-    this.raw = null;
-  }
-
-  // setValue sets the value associated with a STRING, FLOAT, INT,
-  // IDENTIFIER, or COMMENT token, and records the raw text of the token.
-  private void setValue(Object value) {
-    this.value = value;
-    this.raw = bufferSlice(start, end);
-  }
-
-  /**
-   * Parses an end-of-line sequence, handling statement indentation correctly.
-   *
-   * <p>UNIX newlines are assumed (LF). Carriage returns are always ignored.
-   */
-  private void newline() {
-    if (openParenStackDepth > 0) {
-      newlineInsideExpression(); // in an expression: ignore space
-    } else {
-      checkIndentation = true;
-      setToken(TokenKind.NEWLINE, pos - 1, pos);
-    }
-  }
-
-  private void newlineInsideExpression() {
-    while (pos < buffer.length) {
-      switch (buffer[pos]) {
-        case ' ': case '\t': case '\r':
-          pos++;
-          break;
-        default:
-          return;
-      }
-    }
-  }
-
-  /** Computes indentation (updates dent) and advances pos. */
-  private void computeIndentation() {
-    // we're in a stmt: suck up space at beginning of next line
-    int indentLen = 0;
-    while (pos < buffer.length) {
-      char c = buffer[pos];
-      if (c == ' ') {
-        indentLen++;
-        pos++;
-      } else if (c == '\r') {
-        pos++;
-      } else if (c == '\t') {
-        indentLen++;
-        pos++;
-        error("Tab characters are not allowed for indentation. Use spaces instead.", pos);
-      } else if (c == '\n') { // entirely blank line: discard
-        indentLen = 0;
-        pos++;
-      } else if (c == '#') { // line containing only indented comment
-        int oldPos = pos;
-        while (pos < buffer.length && c != '\n') {
-          c = buffer[pos++];
-        }
-        addComment(oldPos, pos - 1);
-        indentLen = 0;
-      } else { // printing character
-        break;
-      }
-    }
-
-    if (pos == buffer.length) {
-      indentLen = 0;
-    } // trailing space on last line
-
-    int peekedIndent = indentStack.peek();
-    if (peekedIndent < indentLen) { // push a level
-      indentStack.push(indentLen);
-      dents++;
-
-    } else if (peekedIndent > indentLen) { // pop one or more levels
-      while (peekedIndent > indentLen) {
-        indentStack.pop();
-        dents--;
-        peekedIndent = indentStack.peek();
-      }
-
-      if (peekedIndent < indentLen) {
-        error("indentation error", pos - 1);
-      }
-    }
-  }
-
-  /**
-   * Returns true if current position is in the middle of a triple quote
-   * delimiter (3 x quot), and advances 'pos' by two if so.
-   */
-  private boolean skipTripleQuote(char quot) {
-    if (lookaheadIs(0, quot) && lookaheadIs(1, quot)) {
-      pos += 2;
-      return true;
-    } else {
-      return false;
-    }
-  }
-
-  /**
-   * Scans a string literal delimited by 'quot', containing escape sequences.
-   *
-   * <p>ON ENTRY: 'pos' is 1 + the index of the first delimiter
-   * ON EXIT: 'pos' is 1 + the index of the last delimiter.
-   */
-  private void escapedStringLiteral(char quot, boolean isRaw) {
-    int literalStartPos = isRaw ? pos - 2 : pos - 1;
-    boolean inTriplequote = skipTripleQuote(quot);
-    // more expensive second choice that expands escaped into a buffer
-    StringBuilder literal = new StringBuilder();
-    while (pos < buffer.length) {
-      char c = buffer[pos];
-      pos++;
-      switch (c) {
-        case '\n':
-          if (inTriplequote) {
-            literal.append(c);
-            break;
-          } else {
-            error("unterminated string literal at eol", literalStartPos);
-            setToken(TokenKind.STRING, literalStartPos, pos);
-            setValue(literal.toString());
-            return;
-          }
-        case '\\':
-          if (pos == buffer.length) {
-            error("unterminated string literal at eof", literalStartPos);
-            setToken(TokenKind.STRING, literalStartPos, pos);
-            setValue(literal.toString());
-            return;
-          }
-          if (isRaw) {
-            // Insert \ and the following character.
-            // As in Python, it means that a raw string can never end with a single \.
-            literal.append('\\');
-            if (lookaheadIs(0, '\r') && lookaheadIs(1, '\n')) {
-              literal.append("\n");
-              pos += 2;
-            } else if (buffer[pos] == '\r' || buffer[pos] == '\n') {
-              literal.append("\n");
-              pos += 1;
-            } else {
-              literal.append(buffer[pos]);
-              pos += 1;
-            }
-            break;
-          }
-          c = buffer[pos];
-          pos++;
-          switch (c) {
-            case '\r':
-              if (lookaheadIs(0, '\n')) {
-                pos += 1;
-                break;
-              } else {
-                break;
-              }
-            case '\n':
-              // ignore end of line character
-              break;
-            case 'n':
-              literal.append('\n');
-              break;
-            case 'r':
-              literal.append('\r');
-              break;
-            case 't':
-              literal.append('\t');
-              break;
-            case '\\':
-              literal.append('\\');
-              break;
-            case '\'':
-              literal.append('\'');
-              break;
-            case '"':
-              literal.append('"');
-              break;
-            case '0':
-            case '1':
-            case '2':
-            case '3':
-            case '4':
-            case '5':
-            case '6':
-            case '7':
-              { // octal escape
-                int octal = c - '0';
-                if (pos < buffer.length) {
-                  c = buffer[pos];
-                  if (c >= '0' && c <= '7') {
-                    pos++;
-                    octal = (octal << 3) | (c - '0');
-                    if (pos < buffer.length) {
-                      c = buffer[pos];
-                      if (c >= '0' && c <= '7') {
-                        pos++;
-                        octal = (octal << 3) | (c - '0');
-                      }
-                    }
-                  }
-                }
-                if (octal > 0xff) {
-                  error("octal escape sequence out of range (maximum is \\377)", pos - 1);
-                }
-                literal.append((char) (octal & 0xff));
-                break;
-              }
-            case 'a':
-            case 'b':
-            case 'f':
-            case 'N':
-            case 'u':
-            case 'U':
-            case 'v':
-            case 'x':
-              // exists in Python but not implemented in Blaze => error
-              error("invalid escape sequence: \\" + c, pos - 1);
-              break;
-            default:
-              // unknown char escape => "\literal"
-              if (options.restrictStringEscapes()) {
-                error(
-                    "invalid escape sequence: \\"
-                        + c
-                        + ". You can enable unknown escape sequences by passing the flag"
-                        + " --incompatible_restrict_string_escapes=false",
-                    pos - 1);
-              }
-              literal.append('\\');
-              literal.append(c);
-              break;
-          }
-          break;
-        case '\'':
-        case '"':
-          if (c != quot || (inTriplequote && !skipTripleQuote(quot))) {
-            // Non-matching quote, treat it like a regular char.
-            literal.append(c);
-          } else {
-            // Matching close-delimiter, all done.
-            setToken(TokenKind.STRING, literalStartPos, pos);
-            setValue(literal.toString());
-            return;
-          }
-          break;
-        default:
-          literal.append(c);
-          break;
-      }
-    }
-    error("unterminated string literal at eof", literalStartPos);
-    setToken(TokenKind.STRING, literalStartPos, pos);
-    setValue(literal.toString());
-  }
-
-  /**
-   * Scans a string literal delimited by 'quot'.
-   *
-   * <ul>
-   * <li> ON ENTRY: 'pos' is 1 + the index of the first delimiter
-   * <li> ON EXIT: 'pos' is 1 + the index of the last delimiter.
-   * </ul>
-   *
-   * @param isRaw if true, do not escape the string.
-   */
-  private void stringLiteral(char quot, boolean isRaw) {
-    int literalStartPos = isRaw ? pos - 2 : pos - 1;
-    int contentStartPos = pos;
-
-    // Don't even attempt to parse triple-quotes here.
-    if (skipTripleQuote(quot)) {
-      pos -= 2;
-      escapedStringLiteral(quot, isRaw);
-      return;
-    }
-
-    // first quick optimistic scan for a simple non-escaped string
-    while (pos < buffer.length) {
-      char c = buffer[pos++];
-      switch (c) {
-        case '\n':
-          error("unterminated string literal at eol", literalStartPos);
-          setToken(TokenKind.STRING, literalStartPos, pos);
-          setValue(bufferSlice(contentStartPos, pos - 1));
-          return;
-        case '\\':
-          if (isRaw) {
-            if (lookaheadIs(0, '\r') && lookaheadIs(1, '\n')) {
-              // There was a CRLF after the newline. No shortcut possible, since it needs to be
-              // transformed into a single LF.
-              pos = contentStartPos;
-              escapedStringLiteral(quot, true);
-              return;
-            } else {
-              pos++;
-              break;
-            }
-          }
-          // oops, hit an escape, need to start over & build a new string buffer
-          pos = contentStartPos;
-          escapedStringLiteral(quot, false);
-          return;
-        case '\'':
-        case '"':
-          if (c == quot) {
-            // close-quote, all done.
-            setToken(TokenKind.STRING, literalStartPos, pos);
-            setValue(bufferSlice(contentStartPos, pos - 1));
-            return;
-          }
-          break;
-        default: // fall out
-      }
-    }
-
-    // If the current position is beyond the end of the file, need to move it backwards
-    // Possible if the file ends with `r"\` (unterminated raw string literal with a backslash)
-    if (pos > buffer.length) {
-      pos = buffer.length;
-    }
-
-    error("unterminated string literal at eof", literalStartPos);
-    setToken(TokenKind.STRING, literalStartPos, pos);
-    setValue(bufferSlice(contentStartPos, pos));
-  }
-
-  private static final Map<String, TokenKind> keywordMap = new HashMap<>();
-
-  static {
-    keywordMap.put("and", TokenKind.AND);
-    keywordMap.put("as", TokenKind.AS);
-    keywordMap.put("assert", TokenKind.ASSERT);
-    keywordMap.put("break", TokenKind.BREAK);
-    keywordMap.put("class", TokenKind.CLASS);
-    keywordMap.put("continue", TokenKind.CONTINUE);
-    keywordMap.put("def", TokenKind.DEF);
-    keywordMap.put("del", TokenKind.DEL);
-    keywordMap.put("elif", TokenKind.ELIF);
-    keywordMap.put("else", TokenKind.ELSE);
-    keywordMap.put("except", TokenKind.EXCEPT);
-    keywordMap.put("finally", TokenKind.FINALLY);
-    keywordMap.put("for", TokenKind.FOR);
-    keywordMap.put("from", TokenKind.FROM);
-    keywordMap.put("global", TokenKind.GLOBAL);
-    keywordMap.put("if", TokenKind.IF);
-    keywordMap.put("import", TokenKind.IMPORT);
-    keywordMap.put("in", TokenKind.IN);
-    keywordMap.put("is", TokenKind.IS);
-    keywordMap.put("lambda", TokenKind.LAMBDA);
-    keywordMap.put("load", TokenKind.LOAD);
-    keywordMap.put("nonlocal", TokenKind.NONLOCAL);
-    keywordMap.put("not", TokenKind.NOT);
-    keywordMap.put("or", TokenKind.OR);
-    keywordMap.put("pass", TokenKind.PASS);
-    keywordMap.put("raise", TokenKind.RAISE);
-    keywordMap.put("return", TokenKind.RETURN);
-    keywordMap.put("try", TokenKind.TRY);
-    keywordMap.put("while", TokenKind.WHILE);
-    keywordMap.put("with", TokenKind.WITH);
-    keywordMap.put("yield", TokenKind.YIELD);
-  }
-
-  /**
-   * Scans an identifier or keyword.
-   *
-   * <p>ON ENTRY: 'pos' is 1 + the index of the first char in the identifier.
-   * ON EXIT: 'pos' is 1 + the index of the last char in the identifier.
-   */
-  private void identifierOrKeyword() {
-    int oldPos = pos - 1;
-    String id = scanIdentifier();
-    TokenKind kind = keywordMap.get(id);
-    if (kind == null) {
-      setToken(TokenKind.IDENTIFIER, oldPos, pos);
-      setValue(id);
-    } else {
-      setToken(kind, oldPos, pos);
-    }
-  }
-
-  private String scanIdentifier() {
-    // Keep consistent with Identifier.isValid.
-    // TODO(laurentlb): Handle Unicode letters.
-    int oldPos = pos - 1;
-    while (pos < buffer.length) {
-      switch (buffer[pos]) {
-        case '_':
-        case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
-        case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
-        case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
-        case 's': case 't': case 'u': case 'v': case 'w': case 'x':
-        case 'y': case 'z':
-        case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
-        case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
-        case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
-        case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
-        case 'Y': case 'Z':
-        case '0': case '1': case '2': case '3': case '4': case '5':
-        case '6': case '7': case '8': case '9':
-          pos++;
-          break;
-       default:
-          return bufferSlice(oldPos, pos);
-      }
-    }
-    return bufferSlice(oldPos, pos);
-  }
-
-  private String scanInteger() {
-    int oldPos = pos - 1;
-    loop:
-    while (pos < buffer.length) {
-      char c = buffer[pos];
-      switch (c) {
-        case 'X': case 'x': // for hexadecimal prefix
-        case 'O': case 'o': // for octal prefix
-        case 'a': case 'A':
-        case 'b': case 'B':
-        case 'c': case 'C':
-        case 'd': case 'D':
-        case 'e': case 'E':
-        case 'f': case 'F':
-          if (buffer[oldPos] != '0') {
-            // A number not starting with zero must be decimal and can only contain decimal digits.
-            break loop;
-          }
-          pos++;
-          break;
-        case '0': case '1':
-        case '2': case '3':
-        case '4': case '5':
-        case '6': case '7':
-        case '8': case '9':
-          pos++;
-          break;
-        default:
-          break loop;
-      }
-    }
-    return bufferSlice(oldPos, pos);
-  }
-
-  /**
-   * Scans an integer literal.
-   *
-   * <p>ON ENTRY: 'pos' is 1 + the index of the first char in the literal.
-   * ON EXIT: 'pos' is 1 + the index of the last char in the literal.
-   */
-  private void integer() {
-    int oldPos = pos - 1;
-    String literal = scanInteger();
-
-    final String substring;
-    final int radix;
-    if (literal.startsWith("0x") || literal.startsWith("0X")) {
-      radix = 16;
-      substring = literal.substring(2);
-    } else if (literal.startsWith("0o") || literal.startsWith("0O")) {
-      radix = 8;
-      substring = literal.substring(2);
-    } else if (literal.startsWith("0") && literal.length() > 1) {
-      radix = 8;
-      substring = literal.substring(1);
-      error("invalid octal value `" + literal + "`, should be: `0o" + substring + "`", oldPos);
-    } else {
-      radix = 10;
-      substring = literal;
-    }
-
-    int value = 0;
-    try {
-      value = Integer.parseInt(substring, radix);
-    } catch (NumberFormatException e) {
-      error("invalid base-" + radix + " integer constant: " + literal, oldPos);
-    }
-
-    setToken(TokenKind.INT, oldPos, pos);
-    setValue(value);
-  }
-
-  /**
-   * Tokenizes a two-char operator.
-   * @return true if it tokenized an operator
-   */
-  private boolean tokenizeTwoChars() {
-    if (pos + 2 >= buffer.length) {
-      return false;
-    }
-    char c1 = buffer[pos];
-    char c2 = buffer[pos + 1];
-    TokenKind tok = null;
-    if (c2 == '=') {
-      tok = EQUAL_TOKENS.get(c1);
-    } else if (c2 == '*' && c1 == '*') {
-      tok = TokenKind.STAR_STAR;
-    }
-    if (tok == null) {
-      return false;
-    } else {
-      setToken(tok, pos, pos + 2);
-      return true;
-    }
-  }
-
-  /** Test if the character at pos+p is c. */
-  private boolean lookaheadIs(int p, char c) {
-    return pos + p < buffer.length && buffer[pos + p] == c;
-  }
-
-  /**
-   * Performs tokenization of the character buffer of file contents provided to the constructor. At
-   * least one token will be added to the tokens queue.
-   */
-  private void tokenize() {
-    if (checkIndentation) {
-      checkIndentation = false;
-      computeIndentation();
-    }
-
-    // Return saved indentation tokens.
-    if (dents != 0) {
-      if (dents < 0) {
-        dents++;
-        setToken(TokenKind.OUTDENT, pos - 1, pos);
-      } else {
-        dents--;
-        setToken(TokenKind.INDENT, pos - 1, pos);
-      }
-      return;
-    }
-
-    // TODO(adonovan): cleanup: replace break after setToken with return,
-    // and eliminate null-check of this.kind.
-    kind = null;
-    while (pos < buffer.length) {
-      if (tokenizeTwoChars()) {
-        pos += 2;
-        return;
-      }
-      char c = buffer[pos];
-      pos++;
-      switch (c) {
-        case '{':
-          setToken(TokenKind.LBRACE, pos - 1, pos);
-          openParenStackDepth++;
-          break;
-        case '}':
-          setToken(TokenKind.RBRACE, pos - 1, pos);
-          popParen();
-          break;
-        case '(':
-          setToken(TokenKind.LPAREN, pos - 1, pos);
-          openParenStackDepth++;
-          break;
-        case ')':
-          setToken(TokenKind.RPAREN, pos - 1, pos);
-          popParen();
-          break;
-        case '[':
-          setToken(TokenKind.LBRACKET, pos - 1, pos);
-          openParenStackDepth++;
-          break;
-        case ']':
-          setToken(TokenKind.RBRACKET, pos - 1, pos);
-          popParen();
-          break;
-        case '>':
-          if (lookaheadIs(0, '>') && lookaheadIs(1, '=')) {
-            setToken(TokenKind.GREATER_GREATER_EQUALS, pos - 1, pos + 2);
-            pos += 2;
-          } else if (lookaheadIs(0, '>')) {
-            setToken(TokenKind.GREATER_GREATER, pos - 1, pos + 1);
-            pos += 1;
-          } else {
-            setToken(TokenKind.GREATER, pos - 1, pos);
-          }
-          break;
-        case '<':
-          if (lookaheadIs(0, '<') && lookaheadIs(1, '=')) {
-            setToken(TokenKind.LESS_LESS_EQUALS, pos - 1, pos + 2);
-            pos += 2;
-          } else if (lookaheadIs(0, '<')) {
-            setToken(TokenKind.LESS_LESS, pos - 1, pos + 1);
-            pos += 1;
-          } else {
-            setToken(TokenKind.LESS, pos - 1, pos);
-          }
-          break;
-        case ':':
-          setToken(TokenKind.COLON, pos - 1, pos);
-          break;
-        case ',':
-          setToken(TokenKind.COMMA, pos - 1, pos);
-          break;
-        case '+':
-          setToken(TokenKind.PLUS, pos - 1, pos);
-          break;
-        case '-':
-          setToken(TokenKind.MINUS, pos - 1, pos);
-          break;
-        case '|':
-          setToken(TokenKind.PIPE, pos - 1, pos);
-          break;
-        case '=':
-          setToken(TokenKind.EQUALS, pos - 1, pos);
-          break;
-        case '%':
-          setToken(TokenKind.PERCENT, pos - 1, pos);
-          break;
-        case '~':
-          setToken(TokenKind.TILDE, pos - 1, pos);
-          break;
-        case '&':
-          setToken(TokenKind.AMPERSAND, pos - 1, pos);
-          break;
-        case '^':
-          setToken(TokenKind.CARET, pos - 1, pos);
-          break;
-        case '/':
-          if (lookaheadIs(0, '/') && lookaheadIs(1, '=')) {
-            setToken(TokenKind.SLASH_SLASH_EQUALS, pos - 1, pos + 2);
-            pos += 2;
-          } else if (lookaheadIs(0, '/')) {
-            setToken(TokenKind.SLASH_SLASH, pos - 1, pos + 1);
-            pos += 1;
-          } else {
-            // /= is handled by tokenizeTwoChars.
-            setToken(TokenKind.SLASH, pos - 1, pos);
-          }
-          break;
-        case ';':
-          setToken(TokenKind.SEMI, pos - 1, pos);
-          break;
-        case '.':
-          setToken(TokenKind.DOT, pos - 1, pos);
-          break;
-        case '*':
-          setToken(TokenKind.STAR, pos - 1, pos);
-          break;
-        case ' ':
-        case '\t':
-        case '\r':
-          /* ignore */
-          break;
-        case '\\':
-          // Backslash character is valid only at the end of a line (or in a string)
-          if (lookaheadIs(0, '\n')) {
-            pos += 1; // skip the end of line character
-          } else if (lookaheadIs(0, '\r') && lookaheadIs(1, '\n')) {
-            pos += 2; // skip the CRLF at the end of line
-          } else {
-            setToken(TokenKind.ILLEGAL, pos - 1, pos);
-            setValue(Character.toString(c));
-          }
-          break;
-        case '\n':
-          newline();
-          break;
-        case '#':
-          int oldPos = pos - 1;
-          while (pos < buffer.length) {
-            c = buffer[pos];
-            if (c == '\n') {
-              break;
-            } else {
-              pos++;
-            }
-          }
-          addComment(oldPos, pos);
-          break;
-        case '\'':
-        case '\"':
-          stringLiteral(c, false);
-          break;
-        default:
-          // detect raw strings, e.g. r"str"
-          if (c == 'r' && pos < buffer.length && (buffer[pos] == '\'' || buffer[pos] == '\"')) {
-            c = buffer[pos];
-            pos++;
-            stringLiteral(c, true);
-            break;
-          }
-
-          if (c >= '0' && c <= '9') {
-            integer();
-          } else if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '_') {
-            identifierOrKeyword();
-          } else {
-            error("invalid character: '" + c + "'", pos - 1);
-          }
-          break;
-      } // switch
-      if (kind != null) { // stop here if we scanned a token
-        return;
-      }
-    } // while
-
-    if (indentStack.size() > 1) { // top of stack is always zero
-      setToken(TokenKind.NEWLINE, pos - 1, pos);
-      while (indentStack.size() > 1) {
-        indentStack.pop();
-        dents--;
-      }
-      return;
-    }
-
-    setToken(TokenKind.EOF, pos, pos);
-  }
-
-  /**
-   * Returns parts of the source buffer based on offsets
-   *
-   * @param start the beginning offset for the slice
-   * @param end the offset immediately following the slice
-   * @return the text at offset start with length end - start
-   */
-  String bufferSlice(int start, int end) {
-    return new String(this.buffer, start, end - start);
-  }
-
-  // TODO(adonovan): don't retain comments unconditionally.
-  private void addComment(int start, int end) {
-    String content = bufferSlice(start, end);
-    comments.add(new Comment(locs, start, content));
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/ListExpression.java b/src/main/java/com/google/devtools/build/lib/syntax/ListExpression.java
deleted file mode 100644
index 5293172..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/ListExpression.java
+++ /dev/null
@@ -1,111 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.base.Preconditions;
-import java.util.List;
-
-/** Syntax node for list and tuple expressions. */
-public final class ListExpression extends Expression {
-
-  // TODO(adonovan): split class into {List,Tuple}Expression, as a tuple may have no parens.
-  // Materialize all source-level expressions as a separate ParenExpression so that we can roundtrip
-  // faithfully.
-
-  private final boolean isTuple;
-  private final int lbracketOffset; // -1 => unparenthesized non-empty tuple
-  private final List<Expression> elements;
-  private final int rbracketOffset; // -1 => unparenthesized non-empty tuple
-
-  ListExpression(
-      FileLocations locs,
-      boolean isTuple,
-      int lbracketOffset,
-      List<Expression> elements,
-      int rbracketOffset) {
-    super(locs);
-    // An unparenthesized tuple must be non-empty.
-    Preconditions.checkArgument(
-        !elements.isEmpty() || (lbracketOffset >= 0 && rbracketOffset >= 0));
-    this.lbracketOffset = lbracketOffset;
-    this.isTuple = isTuple;
-    this.elements = elements;
-    this.rbracketOffset = rbracketOffset;
-  }
-
-  public List<Expression> getElements() {
-    return elements;
-  }
-
-  /** Reports whether this is a tuple expression. */
-  public boolean isTuple() {
-    return isTuple;
-  }
-
-  @Override
-  public int getStartOffset() {
-    return lbracketOffset < 0 ? elements.get(0).getStartOffset() : lbracketOffset;
-  }
-
-  @Override
-  public int getEndOffset() {
-    // Unlike Python, trailing commas are not allowed in unparenthesized tuples.
-    return rbracketOffset < 0
-        ? elements.get(elements.size() - 1).getEndOffset()
-        : rbracketOffset + 1;
-  }
-
-  @Override
-  public String toString() {
-    // Print [a, b, c, ...] up to a maximum of 4 elements or 32 chars.
-    StringBuilder buf = new StringBuilder();
-    buf.append(isTuple() ? '(' : '[');
-    appendNodes(buf, elements);
-    if (isTuple() && elements.size() == 1) {
-      buf.append(',');
-    }
-    buf.append(isTuple() ? ')' : ']');
-    return buf.toString();
-  }
-
-  // Appends elements to buf, comma-separated, abbreviating if they are numerous or long.
-  // (Also used by CallExpression.)
-  static void appendNodes(StringBuilder buf, List<? extends Node> elements) {
-    int n = elements.size();
-    for (int i = 0; i < n; i++) {
-      if (i > 0) {
-        buf.append(", ");
-      }
-      int mark = buf.length();
-      buf.append(elements.get(i));
-      // Abbreviate, dropping this element, if we exceed 32 chars,
-      // or 4 elements (with more elements following).
-      if (buf.length() >= 32 || (i == 4 && i + 1 < n)) {
-        buf.setLength(mark);
-        buf.append(String.format("+%d more", n - i));
-        break;
-      }
-    }
-  }
-
-  @Override
-  public void accept(NodeVisitor visitor) {
-    visitor.visit(this);
-  }
-
-  @Override
-  public Expression.Kind kind() {
-    return Expression.Kind.LIST_EXPR;
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/LoadStatement.java b/src/main/java/com/google/devtools/build/lib/syntax/LoadStatement.java
deleted file mode 100644
index 78e9c2e..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/LoadStatement.java
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.collect.ImmutableList;
-
-/** Syntax node for an import statement. */
-public final class LoadStatement extends Statement {
-
-  /**
-   * Binding represents a binding in a load statement. load("...", local = "orig")
-   *
-   * <p>If there's no alias, a single Identifier can be used for both local and orig.
-   * TODO(adonovan): don't do that; be faithful to source.
-   */
-  public static final class Binding {
-    private final Identifier local;
-    private final Identifier orig;
-
-    public Identifier getLocalName() {
-      return local;
-    }
-
-    public Identifier getOriginalName() {
-      return orig;
-    }
-
-    Binding(Identifier localName, Identifier originalName) {
-      this.local = localName;
-      this.orig = originalName;
-    }
-  }
-
-  private final int loadOffset;
-  private final StringLiteral module;
-  private final ImmutableList<Binding> bindings;
-  private final int rparenOffset;
-
-  LoadStatement(
-      FileLocations locs,
-      int loadOffset,
-      StringLiteral module,
-      ImmutableList<Binding> bindings,
-      int rparenOffset) {
-    super(locs);
-    this.loadOffset = loadOffset;
-    this.module = module;
-    this.bindings = bindings;
-    this.rparenOffset = rparenOffset;
-  }
-
-  public ImmutableList<Binding> getBindings() {
-    return bindings;
-  }
-
-  public StringLiteral getImport() {
-    return module;
-  }
-
-  @Override
-  public int getStartOffset() {
-    return loadOffset;
-  }
-
-  @Override
-  public int getEndOffset() {
-    return rparenOffset + 1;
-  }
-
-  @Override
-  public void accept(NodeVisitor visitor) {
-    visitor.visit(this);
-  }
-
-  @Override
-  public Kind kind() {
-    return Kind.LOAD;
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Location.java b/src/main/java/com/google/devtools/build/lib/syntax/Location.java
deleted file mode 100644
index f152421..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Location.java
+++ /dev/null
@@ -1,116 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.base.Preconditions;
-import java.io.Serializable;
-import javax.annotation.concurrent.Immutable;
-
-/**
- * A Location denotes a position within a Starlark file.
- *
- * <p>A location is a triple {@code (file, line, column)}, where {@code file} is the apparent name
- * of the file, {@code line} is the optional 1-based line number, and {@code column} is the optional
- * 1-based column number measured in UTF-16 code units. If the column is zero it is not displayed.
- * If the line number is also zero, it too is not displayed; in this case, the location denotes the
- * file as a whole.
- */
-@Immutable
-public final class Location implements Serializable, Comparable<Location> {
-
-  private final String file;
-  private final int line;
-  private final int column;
-
-  public Location(String file, int line, int column) {
-    this.file = Preconditions.checkNotNull(file);
-    this.line = line;
-    this.column = column;
-  }
-
-  /** Returns the name of the file containing this location. */
-  public String file() {
-    return file;
-  }
-
-  /** Returns the line number of this location. */
-  public int line() {
-    return line;
-  }
-
-  /** Returns the column number of this location. */
-  public int column() {
-    return column;
-  }
-
-  /**
-   * Returns a Location for the given file, line and column. If {@code column} is non-zero, {@code
-   * line} too must be non-zero.
-   */
-  public static Location fromFileLineColumn(String file, int line, int column) {
-    Preconditions.checkArgument(line != 0 || column == 0, "non-zero column but no line number");
-    return new Location(file, line, column);
-  }
-
-  /** Returns a Location for the file as a whole. */
-  public static Location fromFile(String file) {
-    return new Location(file, 0, 0);
-  }
-
-  /**
-   * Formats the location as {@code "file:line:col"}. If the column is zero, it is omitted. If the
-   * line is also zero, it too is omitted.
-   */
-  @Override
-  public String toString() {
-    StringBuilder buf = new StringBuilder();
-    buf.append(file);
-    if (line != 0) {
-      buf.append(':').append(line);
-      if (column != 0) {
-        buf.append(':').append(column);
-      }
-    }
-    return buf.toString();
-  }
-
-  /** Returns a three-valued lexicographical comparison of two Locations. */
-  @Override
-  public final int compareTo(Location that) {
-    int cmp = this.file().compareTo(that.file());
-    if (cmp != 0) {
-      return cmp;
-    }
-    return Long.compare(
-        ((long) this.line << 32) | this.column, ((long) that.line << 32) | that.column);
-  }
-
-  @Override
-  public int hashCode() {
-    return 97 * file.hashCode() + 37 * line + column;
-  }
-
-  @Override
-  public boolean equals(Object that) {
-    return this == that
-        || (that instanceof Location
-            && this.file.equals(((Location) that).file)
-            && this.line == ((Location) that).line
-            && this.column == ((Location) that).column);
-  }
-
-  /** A location for built-in functions. */
-  public static final Location BUILTIN = fromFile("<builtin>");
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/MethodDescriptor.java b/src/main/java/com/google/devtools/build/lib/syntax/MethodDescriptor.java
deleted file mode 100644
index e564043..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/MethodDescriptor.java
+++ /dev/null
@@ -1,253 +0,0 @@
-// Copyright 2018 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.base.Preconditions;
-import com.google.common.base.Throwables;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.Arrays;
-import javax.annotation.Nullable;
-import net.starlark.java.annot.StarlarkMethod;
-
-/**
- * A value class to store Methods with their corresponding {@link StarlarkMethod} annotation
- * metadata. This is needed because the annotation is sometimes in a superclass.
- *
- * <p>The annotation metadata is duplicated in this class to avoid usage of Java dynamic proxies
- * which are ~7× slower.
- */
-final class MethodDescriptor {
-  private final Method method;
-  private final StarlarkMethod annotation;
-
-  private final String name;
-  private final String doc;
-  private final boolean documented;
-  private final boolean structField;
-  private final ParamDescriptor[] parameters;
-  private final boolean extraPositionals;
-  private final boolean extraKeywords;
-  private final boolean selfCall;
-  private final boolean allowReturnNones;
-  private final boolean useStarlarkThread;
-  private final boolean useStarlarkSemantics;
-
-  private MethodDescriptor(
-      Method method,
-      StarlarkMethod annotation,
-      String name,
-      String doc,
-      boolean documented,
-      boolean structField,
-      ParamDescriptor[] parameters,
-      boolean extraPositionals,
-      boolean extraKeywords,
-      boolean selfCall,
-      boolean allowReturnNones,
-      boolean useStarlarkThread,
-      boolean useStarlarkSemantics) {
-    this.method = method;
-    this.annotation = annotation;
-    this.name = name;
-    this.doc = doc;
-    this.documented = documented;
-    this.structField = structField;
-    this.parameters = parameters;
-    this.extraPositionals = extraPositionals;
-    this.extraKeywords = extraKeywords;
-    this.selfCall = selfCall;
-    this.allowReturnNones = allowReturnNones;
-    this.useStarlarkThread = useStarlarkThread;
-    this.useStarlarkSemantics = useStarlarkSemantics;
-  }
-
-  /** Returns the StarlarkMethod annotation corresponding to this method. */
-  StarlarkMethod getAnnotation() {
-    return annotation;
-  }
-
-  /** @return Starlark method descriptor for provided Java method and signature annotation. */
-  static MethodDescriptor of(
-      Method method, StarlarkMethod annotation, StarlarkSemantics semantics) {
-    // This happens when the interface is public but the implementation classes
-    // have reduced visibility.
-    method.setAccessible(true);
-    return new MethodDescriptor(
-        method,
-        annotation,
-        annotation.name(),
-        annotation.doc(),
-        annotation.documented(),
-        annotation.structField(),
-        Arrays.stream(annotation.parameters())
-            .map(param -> ParamDescriptor.of(param, semantics))
-            .toArray(ParamDescriptor[]::new),
-        !annotation.extraPositionals().name().isEmpty(),
-        !annotation.extraKeywords().name().isEmpty(),
-        annotation.selfCall(),
-        annotation.allowReturnNones(),
-        annotation.useStarlarkThread(),
-        annotation.useStarlarkSemantics());
-  }
-
-  private static final Object[] EMPTY = {};
-
-  /** Calls this method, which must have {@code structField=true}. */
-  Object callField(Object obj, StarlarkSemantics semantics, @Nullable Mutability mu)
-      throws EvalException, InterruptedException {
-    if (!structField) {
-      throw new IllegalStateException("not a struct field: " + name);
-    }
-    Object[] args = useStarlarkSemantics ? new Object[] {semantics} : EMPTY;
-    return call(obj, args, mu);
-  }
-
-  /**
-   * Invokes this method using {@code obj} as a target and {@code args} as Java arguments.
-   *
-   * <p>Methods with {@code void} return type return {@code None} following Python convention.
-   *
-   * <p>The Mutability is used if it is necessary to allocate a Starlark copy of a Java result.
-   */
-  Object call(Object obj, Object[] args, @Nullable Mutability mu)
-      throws EvalException, InterruptedException {
-    Preconditions.checkNotNull(obj);
-    Object result;
-    try {
-      result = method.invoke(obj, args);
-    } catch (IllegalAccessException ex) {
-      // "Can't happen": the annotated processor ensures that annotated methods are accessible.
-      throw new IllegalStateException(ex);
-
-    } catch (IllegalArgumentException ex) {
-      // "Can't happen": unexpected type mismatch.
-      // Show details to aid debugging (see e.g. b/162444744).
-      StringBuilder buf = new StringBuilder();
-      buf.append(
-          String.format(
-              "IllegalArgumentException (%s) in Starlark call of %s, obj=%s (%s), args=[",
-              ex.getMessage(), method, Starlark.repr(obj), Starlark.type(obj)));
-      String sep = "";
-      for (Object arg : args) {
-        buf.append(String.format("%s%s (%s)", sep, Starlark.repr(arg), Starlark.type(arg)));
-        sep = ", ";
-      }
-      buf.append(']');
-      throw new IllegalArgumentException(buf.toString());
-
-    } catch (InvocationTargetException ex) {
-      Throwable e = ex.getCause();
-      if (e == null) {
-        throw new IllegalStateException(e);
-      }
-      // Don't intercept unchecked exceptions.
-      Throwables.throwIfUnchecked(e);
-      if (e instanceof EvalException) {
-        throw (EvalException) e;
-      } else if (e instanceof InterruptedException) {
-        throw (InterruptedException) e;
-      } else {
-        // All other checked exceptions (e.g. LabelSyntaxException) are reported to Starlark.
-        throw new EvalException(e);
-      }
-    }
-    if (method.getReturnType().equals(Void.TYPE)) {
-      return Starlark.NONE;
-    }
-    if (result == null) {
-      // TODO(adonovan): eliminate allowReturnNones. Given that we convert
-      // String/Integer/Boolean/List/Map, it seems obtuse to crash instead
-      // of converting null too.
-      if (isAllowReturnNones()) {
-        return Starlark.NONE;
-      } else {
-        throw new IllegalStateException(
-            "method invocation returned null: " + getName() + Tuple.copyOf(Arrays.asList(args)));
-      }
-    }
-
-    return Starlark.fromJava(result, mu);
-  }
-
-  /** @see StarlarkMethod#name() */
-  String getName() {
-    return name;
-  }
-
-  Method getMethod() {
-    return method;
-  }
-
-  /** @see StarlarkMethod#structField() */
-  boolean isStructField() {
-    return structField;
-  }
-
-  /** @see StarlarkMethod#useStarlarkThread() */
-  boolean isUseStarlarkThread() {
-    return useStarlarkThread;
-  }
-
-  /** @see StarlarkMethod#useStarlarkSemantics() */
-  boolean isUseStarlarkSemantics() {
-    return useStarlarkSemantics;
-  }
-
-  /** @see StarlarkMethod#allowReturnNones() */
-  boolean isAllowReturnNones() {
-    return allowReturnNones;
-  }
-
-  /** @return {@code true} if this method accepts extra arguments ({@code *args}) */
-  boolean acceptsExtraArgs() {
-    return extraPositionals;
-  }
-
-  /** @see StarlarkMethod#extraKeywords() */
-  boolean acceptsExtraKwargs() {
-    return extraKeywords;
-  }
-
-  /** @see StarlarkMethod#parameters() */
-  ParamDescriptor[] getParameters() {
-    return parameters;
-  }
-
-  /** Returns the index of the named parameter or -1 if not found. */
-  int getParameterIndex(String name) {
-    for (int i = 0; i < parameters.length; i++) {
-      if (parameters[i].getName().equals(name)) {
-        return i;
-      }
-    }
-    return -1;
-  }
-
-  /** @see StarlarkMethod#documented() */
-  boolean isDocumented() {
-    return documented;
-  }
-
-  /** @see StarlarkMethod#doc() */
-  String getDoc() {
-    return doc;
-  }
-
-  /** @see StarlarkMethod#selfCall() */
-  boolean isSelfCall() {
-    return selfCall;
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java b/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java
deleted file mode 100644
index 6357337..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java
+++ /dev/null
@@ -1,808 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.base.Ascii;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Ordering;
-import com.google.devtools.build.lib.syntax.EvalUtils.ComparisonException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
-import java.util.NoSuchElementException;
-import javax.annotation.Nullable;
-import net.starlark.java.annot.Param;
-import net.starlark.java.annot.StarlarkBuiltin;
-import net.starlark.java.annot.StarlarkDocumentationCategory;
-import net.starlark.java.annot.StarlarkGlobalLibrary;
-import net.starlark.java.annot.StarlarkMethod;
-
-/** The universal predeclared functions of core Starlark. */
-@StarlarkGlobalLibrary
-class MethodLibrary {
-
-  @StarlarkMethod(
-      name = "min",
-      doc =
-          "Returns the smallest one of all given arguments. "
-              + "If only one argument is provided, it must be a non-empty iterable. "
-              + "It is an error if elements are not comparable (for example int with string). "
-              + "<pre class=\"language-python\">min(2, 5, 4) == 2\n"
-              + "min([5, 6, 3]) == 3</pre>",
-      extraPositionals = @Param(name = "args", doc = "The elements to be checked."))
-  public Object min(Sequence<?> args) throws EvalException {
-    try {
-      return findExtreme(args, EvalUtils.STARLARK_COMPARATOR.reverse());
-    } catch (ComparisonException e) {
-      throw new EvalException(e);
-    }
-  }
-
-  @StarlarkMethod(
-      name = "max",
-      doc =
-          "Returns the largest one of all given arguments. "
-              + "If only one argument is provided, it must be a non-empty iterable."
-              + "It is an error if elements are not comparable (for example int with string). "
-              + "<pre class=\"language-python\">max(2, 5, 4) == 5\n"
-              + "max([5, 6, 3]) == 6</pre>",
-      extraPositionals = @Param(name = "args", doc = "The elements to be checked."))
-  public Object max(Sequence<?> args) throws EvalException {
-    try {
-      return findExtreme(args, EvalUtils.STARLARK_COMPARATOR);
-    } catch (ComparisonException e) {
-      throw new EvalException(e);
-    }
-  }
-
-  /** Returns the maximum element from this list, as determined by maxOrdering. */
-  private static Object findExtreme(Sequence<?> args, Ordering<Object> maxOrdering)
-      throws EvalException {
-    // Args can either be a list of items to compare, or a singleton list whose element is an
-    // iterable of items to compare. In either case, there must be at least one item to compare.
-    try {
-      Iterable<?> items = (args.size() == 1) ? Starlark.toIterable(args.get(0)) : args;
-      return maxOrdering.max(items);
-    } catch (NoSuchElementException ex) {
-      throw new EvalException("expected at least one item", ex);
-    }
-  }
-
-  @StarlarkMethod(
-      name = "all",
-      doc =
-          "Returns true if all elements evaluate to True or if the collection is empty. "
-              + "Elements are converted to boolean using the <a href=\"#bool\">bool</a> function."
-              + "<pre class=\"language-python\">all([\"hello\", 3, True]) == True\n"
-              + "all([-1, 0, 1]) == False</pre>",
-      parameters = {
-        @Param(
-            name = "elements",
-            type = Object.class,
-            noneable = true,
-            doc = "A string or a collection of elements.")
-      })
-  public Boolean all(Object collection) throws EvalException {
-    return !hasElementWithBooleanValue(collection, false);
-  }
-
-  @StarlarkMethod(
-      name = "any",
-      doc =
-          "Returns true if at least one element evaluates to True. "
-              + "Elements are converted to boolean using the <a href=\"#bool\">bool</a> function."
-              + "<pre class=\"language-python\">any([-1, 0, 1]) == True\n"
-              + "any([False, 0, \"\"]) == False</pre>",
-      parameters = {
-        @Param(
-            name = "elements",
-            type = Object.class,
-            noneable = true,
-            doc = "A string or a collection of elements.")
-      })
-  public Boolean any(Object collection) throws EvalException {
-    return hasElementWithBooleanValue(collection, true);
-  }
-
-  private static boolean hasElementWithBooleanValue(Object seq, boolean value)
-      throws EvalException {
-    for (Object x : Starlark.toIterable(seq)) {
-      if (Starlark.truth(x) == value) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  @StarlarkMethod(
-      name = "sorted",
-      doc =
-          "Sort a collection. Elements should all belong to the same orderable type, they are "
-              + "sorted by their value (in ascending order). "
-              + "It is an error if elements are not comparable (for example int with string)."
-              + "<pre class=\"language-python\">sorted([3, 5, 4]) == [3, 4, 5]</pre>",
-      parameters = {
-        @Param(name = "iterable", type = Object.class, doc = "The iterable sequence to sort."),
-        @Param(
-            name = "key",
-            doc = "An optional function applied to each element before comparison.",
-            named = true,
-            defaultValue = "None",
-            positional = false,
-            noneable = true),
-        @Param(
-            name = "reverse",
-            type = Boolean.class,
-            doc = "Return results in descending order.",
-            named = true,
-            defaultValue = "False",
-            positional = false)
-      },
-      useStarlarkThread = true)
-  public StarlarkList<?> sorted(
-      Object iterable, final Object key, Boolean reverse, final StarlarkThread thread)
-      throws EvalException, InterruptedException {
-    Object[] array = Starlark.toArray(iterable);
-    if (key == Starlark.NONE) {
-      try {
-        Arrays.sort(array, EvalUtils.STARLARK_COMPARATOR);
-      } catch (EvalUtils.ComparisonException e) {
-        throw Starlark.errorf("%s", e.getMessage());
-      }
-    } else if (key instanceof StarlarkCallable) {
-      final StarlarkCallable keyfn = (StarlarkCallable) key;
-
-      class KeyComparator implements Comparator<Object> {
-        Exception e;
-
-        @Override
-        public int compare(Object x, Object y) {
-          try {
-            return EvalUtils.STARLARK_COMPARATOR.compare(callKeyFunc(x), callKeyFunc(y));
-          } catch (InterruptedException | EvalException e) {
-            if (this.e == null) {
-              this.e = e;
-            }
-            return 0;
-          }
-        }
-
-        Object callKeyFunc(Object x) throws EvalException, InterruptedException {
-          return Starlark.call(thread, keyfn, Collections.singletonList(x), ImmutableMap.of());
-        }
-      }
-
-      KeyComparator comp = new KeyComparator();
-      try {
-        Arrays.sort(array, comp);
-      } catch (EvalUtils.ComparisonException e) {
-        throw Starlark.errorf("%s", e.getMessage());
-      }
-
-      if (comp.e != null) {
-        if (comp.e instanceof InterruptedException) {
-          throw (InterruptedException) comp.e;
-        }
-        throw (EvalException) comp.e;
-      }
-    } else {
-      throw Starlark.errorf("%s object is not callable", Starlark.repr(Starlark.type(key)));
-    }
-
-    if (reverse) {
-      reverse(array);
-    }
-    return StarlarkList.wrap(thread.mutability(), array);
-  }
-
-  private static void reverse(Object[] array) {
-    for (int i = 0, j = array.length - 1; i < j; i++, j--) {
-      Object tmp = array[i];
-      array[i] = array[j];
-      array[j] = tmp;
-    }
-  }
-
-  @StarlarkMethod(
-      name = "reversed",
-      doc =
-          "Returns a list that contains the elements of the original sequence in reversed order."
-              + "<pre class=\"language-python\">reversed([3, 5, 4]) == [4, 5, 3]</pre>",
-      parameters = {
-        @Param(
-            name = "sequence",
-            type = Sequence.class,
-            doc = "The sequence (list or tuple) to be reversed."),
-      },
-      useStarlarkThread = true)
-  public StarlarkList<?> reversed(Sequence<?> sequence, StarlarkThread thread)
-      throws EvalException {
-    Object[] array = Starlark.toArray(sequence);
-    reverse(array);
-    return StarlarkList.wrap(thread.mutability(), array);
-  }
-
-  @StarlarkMethod(
-      name = "tuple",
-      doc =
-          "Returns a tuple with the same elements as the given iterable value."
-              + "<pre class=\"language-python\">tuple([1, 2]) == (1, 2)\n"
-              + "tuple((2, 3, 2)) == (2, 3, 2)\n"
-              + "tuple({5: \"a\", 2: \"b\", 4: \"c\"}) == (5, 2, 4)</pre>",
-      parameters = {@Param(name = "x", defaultValue = "()", doc = "The object to convert.")})
-  public Tuple<?> tuple(Object x) throws EvalException {
-    if (x instanceof Tuple) {
-      return (Tuple<?>) x;
-    }
-    return Tuple.wrap(Starlark.toArray(x));
-  }
-
-  @StarlarkMethod(
-      name = "list",
-      doc =
-          "Returns a new list with the same elements as the given iterable value."
-              + "<pre class=\"language-python\">list([1, 2]) == [1, 2]\n"
-              + "list((2, 3, 2)) == [2, 3, 2]\n"
-              + "list({5: \"a\", 2: \"b\", 4: \"c\"}) == [5, 2, 4]</pre>",
-      parameters = {@Param(name = "x", defaultValue = "[]", doc = "The object to convert.")},
-      useStarlarkThread = true)
-  public StarlarkList<?> list(Object x, StarlarkThread thread) throws EvalException {
-    return StarlarkList.wrap(thread.mutability(), Starlark.toArray(x));
-  }
-
-  @StarlarkMethod(
-      name = "len",
-      doc =
-          "Returns the length of a string, sequence (such as a list or tuple), dict, or other"
-              + " iterable.",
-      parameters = {@Param(name = "x", doc = "The value whose length to report.")},
-      useStarlarkThread = true)
-  public Integer len(Object x, StarlarkThread thread) throws EvalException {
-    int len = Starlark.len(x);
-    if (len < 0) {
-      throw Starlark.errorf("%s is not iterable", Starlark.type(x));
-    }
-    return len;
-  }
-
-  @StarlarkMethod(
-      name = "str",
-      doc =
-          "Converts any object to string. This is useful for debugging."
-              + "<pre class=\"language-python\">str(\"ab\") == \"ab\"\n"
-              + "str(8) == \"8\"</pre>",
-      parameters = {@Param(name = "x", doc = "The object to convert.", noneable = true)})
-  public String str(Object x) throws EvalException {
-    return Starlark.str(x);
-  }
-
-  @StarlarkMethod(
-      name = "repr",
-      doc =
-          "Converts any object to a string representation. This is useful for debugging.<br>"
-              + "<pre class=\"language-python\">repr(\"ab\") == '\"ab\"'</pre>",
-      parameters = {@Param(name = "x", doc = "The object to convert.", noneable = true)})
-  public String repr(Object x) {
-    return Starlark.repr(x);
-  }
-
-  @StarlarkMethod(
-      name = "bool",
-      doc =
-          "Constructor for the bool type. "
-              + "It returns <code>False</code> if the object is <code>None</code>, <code>False"
-              + "</code>, an empty string (<code>\"\"</code>), the number <code>0</code>, or an "
-              + "empty collection (e.g. <code>()</code>, <code>[]</code>). "
-              + "Otherwise, it returns <code>True</code>.",
-      parameters = {
-        @Param(
-            name = "x",
-            defaultValue = "False",
-            doc = "The variable to convert.",
-            noneable = true)
-      })
-  public Boolean bool(Object x) throws EvalException {
-    return Starlark.truth(x);
-  }
-
-  private final ImmutableMap<String, Integer> intPrefixes =
-      ImmutableMap.of("0b", 2, "0o", 8, "0x", 16);
-
-  @StarlarkMethod(
-      name = "int",
-      doc =
-          "Returns x as an int value."
-              + "<ul>"
-              + "<li>If <code>x</code> is already an int, it is returned as-is."
-              + "<li>If <code>x</code> is a boolean, a true value returns 1 and a false value "
-              + "    returns 0."
-              + "<li>If <code>x</code> is a string, it must have the format "
-              + "    <code>&lt;sign&gt;&lt;prefix&gt;&lt;digits&gt;</code>. "
-              + "    <code>&lt;sign&gt;</code> is either <code>\"+\"</code>, <code>\"-\"</code>, "
-              + "    or empty (interpreted as positive). <code>&lt;digits&gt;</code> are a "
-              + "    sequence of digits from 0 up to <code>base</code> - 1, where the letters a-z "
-              + "    (or equivalently, A-Z) are used as digits for 10-35. In the case where "
-              + "    <code>base</code> is 2/8/16, <code>&lt;prefix&gt;</code> is optional and may "
-              + "    be 0b/0o/0x (or equivalently, 0B/0O/0X) respectively; if the "
-              + "    <code>base</code> is any other value besides these bases or the special value "
-              + "    0, the prefix must be empty. In the case where <code>base</code> is 0, the "
-              + "    string is interpreted as an integer literal, in the sense that one of the "
-              + "    bases 2/8/10/16 is chosen depending on which prefix if any is used. If "
-              + "    <code>base</code> is 0, no prefix is used, and there is more than one digit, "
-              + "    the leading digit cannot be 0; this is to avoid confusion between octal and "
-              + "    decimal. The magnitude of the number represented by the string must be within "
-              + "    the allowed range for the int type."
-              + "</ul>"
-              + "This function fails if <code>x</code> is any other type, or if the value is a "
-              + "string not satisfying the above format. Unlike Python's <code>int()</code> "
-              + "function, this function does not allow zero arguments, and does not allow "
-              + "extraneous whitespace for string arguments."
-              + "<p>Examples:"
-              + "<pre class=\"language-python\">"
-              + "int(\"123\") == 123\n"
-              + "int(\"-123\") == -123\n"
-              + "int(\"+123\") == 123\n"
-              + "int(\"FF\", 16) == 255\n"
-              + "int(\"0xFF\", 16) == 255\n"
-              + "int(\"10\", 0) == 10\n"
-              + "int(\"-0x10\", 0) == -16"
-              + "</pre>",
-      parameters = {
-        @Param(name = "x", type = Object.class, doc = "The string to convert."),
-        @Param(
-            name = "base",
-            type = Object.class,
-            defaultValue = "unbound",
-            doc =
-                "The base used to interpret a string value; defaults to 10. Must be between 2 "
-                    + "and 36 (inclusive), or 0 to detect the base as if <code>x</code> were an "
-                    + "integer literal. This parameter must not be supplied if the value is not a "
-                    + "string.",
-            named = true)
-      })
-  public Integer convertToInt(Object x, Object base) throws EvalException {
-    if (x instanceof String) {
-      if (base == Starlark.UNBOUND) {
-        base = 10;
-      } else if (!(base instanceof Integer)) {
-        throw Starlark.errorf("base must be an integer (got '%s')", Starlark.type(base));
-      }
-      return fromString((String) x, (Integer) base);
-    } else {
-      if (base != Starlark.UNBOUND) {
-        throw Starlark.errorf("int() can't convert non-string with explicit base");
-      }
-      if (x instanceof Boolean) {
-        return ((Boolean) x).booleanValue() ? 1 : 0;
-      } else if (x instanceof Integer) {
-        return (Integer) x;
-      }
-      throw Starlark.errorf("%s is not of type string or int or bool", Starlark.repr(x));
-    }
-  }
-
-  private int fromString(String string, int base) throws EvalException {
-    String stringForErrors = string;
-
-    boolean isNegative = false;
-    if (string.isEmpty()) {
-      throw Starlark.errorf("string argument to int() cannot be empty");
-    }
-    char c = string.charAt(0);
-    if (c == '+') {
-      string = string.substring(1);
-    } else if (c == '-') {
-      string = string.substring(1);
-      isNegative = true;
-    }
-
-    String prefix = getIntegerPrefix(string);
-    String digits;
-    if (prefix == null) {
-      // Nothing to strip. Infer base 10 if autodetection was requested (base == 0).
-      digits = string;
-      if (base == 0) {
-        if (string.length() > 1 && string.startsWith("0")) {
-          // We don't infer the base when input starts with '0' (due
-          // to confusion between octal and decimal).
-          throw Starlark.errorf(
-              "cannot infer base for int() when value begins with a 0: %s",
-              Starlark.repr(stringForErrors));
-        }
-        base = 10;
-      }
-    } else {
-      // Strip prefix. Infer base from prefix if unknown (base == 0), or else verify its
-      // consistency.
-      digits = string.substring(prefix.length());
-      int expectedBase = intPrefixes.get(prefix);
-      if (base == 0) {
-        base = expectedBase;
-      } else if (base != expectedBase) {
-        throw Starlark.errorf(
-            "invalid literal for int() with base %d: %s", base, Starlark.repr(stringForErrors));
-      }
-    }
-
-    if (base < 2 || base > 36) {
-      throw Starlark.errorf("int() base must be >= 2 and <= 36");
-    }
-    try {
-      // Negate by prepending a negative symbol, rather than by using arithmetic on the
-      // result, to handle the edge case of -2^31 correctly.
-      String parseable = isNegative ? "-" + digits : digits;
-      return Integer.parseInt(parseable, base);
-    } catch (NumberFormatException | ArithmeticException e) {
-      throw Starlark.errorf(
-          "invalid literal for int() with base %d: %s", base, Starlark.repr(stringForErrors));
-    }
-  }
-
-  @Nullable
-  private String getIntegerPrefix(String value) {
-    value = Ascii.toLowerCase(value);
-    for (String prefix : intPrefixes.keySet()) {
-      if (value.startsWith(prefix)) {
-        return prefix;
-      }
-    }
-    return null;
-  }
-
-  @StarlarkMethod(
-      name = "dict",
-      doc =
-          "Creates a <a href=\"dict.html\">dictionary</a> from an optional positional "
-              + "argument and an optional set of keyword arguments. In the case where the same key "
-              + "is given multiple times, the last value will be used. Entries supplied via "
-              + "keyword arguments are considered to come after entries supplied via the "
-              + "positional argument.",
-      parameters = {
-        @Param(
-            name = "args",
-            type = Object.class,
-            defaultValue = "[]",
-            doc =
-                "Either a dictionary or a list of entries. Entries must be tuples or lists with "
-                    + "exactly two elements: key, value."),
-      },
-      extraKeywords = @Param(name = "kwargs", doc = "Dictionary of additional entries."),
-      useStarlarkThread = true)
-  public Dict<?, ?> dict(Object args, Dict<String, Object> kwargs, StarlarkThread thread)
-      throws EvalException {
-    Dict<?, ?> dict =
-        args instanceof Dict
-            ? (Dict) args
-            : Dict.getDictFromArgs("dict", args, thread.mutability());
-    return Dict.plus(dict, kwargs, thread.mutability());
-  }
-
-  @StarlarkMethod(
-      name = "enumerate",
-      doc =
-          "Returns a list of pairs (two-element tuples), with the index (int) and the item from"
-              + " the input sequence.\n<pre class=\"language-python\">"
-              + "enumerate([24, 21, 84]) == [(0, 24), (1, 21), (2, 84)]</pre>\n",
-      parameters = {
-        // Note Python uses 'sequence' keyword instead of 'list'. We may want to change tihs
-        // some day.
-        @Param(name = "list", type = Object.class, doc = "input sequence.", named = true),
-        @Param(
-            name = "start",
-            type = Integer.class,
-            doc = "start index.",
-            defaultValue = "0",
-            named = true)
-      },
-      useStarlarkThread = true)
-  public StarlarkList<?> enumerate(Object input, Integer start, StarlarkThread thread)
-      throws EvalException {
-    Object[] array = Starlark.toArray(input);
-    for (int i = 0; i < array.length; i++) {
-      array[i] = Tuple.pair(i + start, array[i]); // update in place
-    }
-    return StarlarkList.wrap(thread.mutability(), array);
-  }
-
-  @StarlarkMethod(
-      name = "hash",
-      doc =
-          "Return a hash value for a string. This is computed deterministically using the same "
-              + "algorithm as Java's <code>String.hashCode()</code>, namely: "
-              + "<pre class=\"language-python\">s[0] * (31^(n-1)) + s[1] * (31^(n-2)) + ... + "
-              + "s[n-1]</pre> Hashing of values besides strings is not currently supported.",
-      // Deterministic hashing is important for the consistency of builds, hence why we
-      // promise a specific algorithm. This is in contrast to Java (Object.hashCode()) and
-      // Python, which promise stable hashing only within a given execution of the program.
-      parameters = {@Param(name = "value", type = String.class, doc = "String value to hash.")})
-  public Integer hash(String value) throws EvalException {
-    return value.hashCode();
-  }
-
-  @StarlarkMethod(
-      name = "range",
-      doc =
-          "Creates a list where items go from <code>start</code> to <code>stop</code>, using a "
-              + "<code>step</code> increment. If a single argument is provided, items will "
-              + "range from 0 to that element."
-              + "<pre class=\"language-python\">range(4) == [0, 1, 2, 3]\n"
-              + "range(3, 9, 2) == [3, 5, 7]\n"
-              + "range(3, 0, -1) == [3, 2, 1]</pre>",
-      parameters = {
-        @Param(
-            name = "start_or_stop",
-            type = Integer.class,
-            doc =
-                "Value of the start element if stop is provided, "
-                    + "otherwise value of stop and the actual start is 0"),
-        @Param(
-            name = "stop_or_none",
-            type = Integer.class,
-            noneable = true,
-            defaultValue = "None",
-            doc =
-                "optional index of the first item <i>not</i> to be included in the resulting "
-                    + "list; generation of the list stops before <code>stop</code> is reached."),
-        @Param(
-            name = "step",
-            type = Integer.class,
-            defaultValue = "1",
-            doc = "The increment (default is 1). It may be negative.")
-      },
-      useStarlarkThread = true)
-  public Sequence<Integer> range(
-      Integer startOrStop, Object stopOrNone, Integer step, StarlarkThread thread)
-      throws EvalException {
-    int start;
-    int stop;
-    if (stopOrNone == Starlark.NONE) {
-      start = 0;
-      stop = startOrStop;
-    } else if (stopOrNone instanceof Integer) {
-      start = startOrStop;
-      stop = (Integer) stopOrNone;
-    } else {
-      throw Starlark.errorf("want int, got %s", Starlark.type(stopOrNone));
-    }
-    if (step == 0) {
-      throw Starlark.errorf("step cannot be 0");
-    }
-    return new RangeList(start, stop, step);
-  }
-
-  /** Returns true if the object has a field of the given name, otherwise false. */
-  @StarlarkMethod(
-      name = "hasattr",
-      doc =
-          "Returns True if the object <code>x</code> has an attribute or method of the given "
-              + "<code>name</code>, otherwise False. Example:<br>"
-              + "<pre class=\"language-python\">hasattr(ctx.attr, \"myattr\")</pre>",
-      parameters = {
-        @Param(name = "x", doc = "The object to check.", noneable = true),
-        @Param(name = "name", type = String.class, doc = "The name of the attribute.")
-      },
-      useStarlarkThread = true)
-  public Boolean hasattr(Object obj, String name, StarlarkThread thread) throws EvalException {
-    return Starlark.hasattr(thread.getSemantics(), obj, name);
-  }
-
-  @StarlarkMethod(
-      name = "getattr",
-      doc =
-          "Returns the struct's field of the given name if it exists. If not, it either returns "
-              + "<code>default</code> (if specified) or raises an error. "
-              + "<code>getattr(x, \"foobar\")</code> is equivalent to <code>x.foobar</code>."
-              + "<pre class=\"language-python\">getattr(ctx.attr, \"myattr\")\n"
-              + "getattr(ctx.attr, \"myattr\", \"mydefault\")</pre>",
-      parameters = {
-        @Param(name = "x", doc = "The struct whose attribute is accessed.", noneable = true),
-        @Param(name = "name", doc = "The name of the struct attribute."),
-        @Param(
-            name = "default",
-            defaultValue = "unbound",
-            doc =
-                "The default value to return in case the struct "
-                    + "doesn't have an attribute of the given name.",
-            noneable = true)
-      },
-      useStarlarkThread = true)
-  public Object getattr(Object obj, String name, Object defaultValue, StarlarkThread thread)
-      throws EvalException, InterruptedException {
-    return Starlark.getattr(
-        thread.mutability(),
-        thread.getSemantics(),
-        obj,
-        name,
-        defaultValue == Starlark.UNBOUND ? null : defaultValue);
-  }
-
-  @StarlarkMethod(
-      name = "dir",
-      doc =
-          "Returns a list of strings: the names of the attributes and "
-              + "methods of the parameter object.",
-      parameters = {@Param(name = "x", doc = "The object to check.", noneable = true)},
-      useStarlarkThread = true)
-  public StarlarkList<?> dir(Object object, StarlarkThread thread) throws EvalException {
-    return Starlark.dir(thread.mutability(), thread.getSemantics(), object);
-  }
-
-  @StarlarkMethod(
-      name = "fail",
-      doc =
-          "Raises an error that cannot be intercepted. It can be used anywhere, "
-              + "both in the loading phase and in the analysis phase.",
-      parameters = {
-        @Param(
-            name = "msg",
-            type = Object.class,
-            doc = "Error to display for the user. The object is converted to a string.",
-            defaultValue = "None",
-            named = true,
-            noneable = true),
-        @Param(
-            name = "attr",
-            type = String.class,
-            noneable = true,
-            defaultValue = "None",
-            doc =
-                "The name of the attribute that caused the error. This is used only for "
-                    + "error reporting.",
-            named = true)
-      })
-  public NoneType fail(Object msg, Object attr) throws EvalException {
-    String str = Starlark.str(msg);
-    if (attr != Starlark.NONE) {
-      str = Starlark.format("attribute %s: %s", attr, str);
-    }
-    throw Starlark.errorf("%s", str);
-  }
-
-  @StarlarkMethod(
-      name = "print",
-      doc =
-          "Prints <code>args</code> as debug output. It will be prefixed with the string <code>"
-              + "\"DEBUG\"</code> and the location (file and line number) of this call. The "
-              + "exact way in which the arguments are converted to strings is unspecified and may "
-              + "change at any time. In particular, it may be different from (and more detailed "
-              + "than) the formatting done by <a href='#str'><code>str()</code></a> and <a "
-              + "href='#repr'><code>repr()</code></a>."
-              + "<p>Using <code>print</code> in production code is discouraged due to the spam it "
-              + "creates for users. For deprecations, prefer a hard error using <a href=\"#fail\">"
-              + "<code>fail()</code></a> whenever possible.",
-      parameters = {
-        @Param(
-            name = "sep",
-            type = String.class,
-            defaultValue = "\" \"",
-            named = true,
-            positional = false,
-            doc = "The separator string between the objects, default is space (\" \").")
-      },
-      // NB: as compared to Python3, we're missing optional named-only arguments 'end' and 'file'
-      extraPositionals = @Param(name = "args", doc = "The objects to print."),
-      useStarlarkThread = true)
-  public NoneType print(String sep, Sequence<?> args, StarlarkThread thread) throws EvalException {
-    Printer p = new Printer();
-    String separator = "";
-    for (Object x : args) {
-      p.append(separator);
-      p.debugPrint(x);
-      separator = sep;
-    }
-    // The PRINT_TEST_MARKER key is used in tests to verify the effects of command-line options.
-    // See starlark_flag_test.sh, which runs bazel with --internal_starlark_flag_test_canary.
-    if (thread.getSemantics().getBool(StarlarkSemantics.PRINT_TEST_MARKER)) {
-      p.append("<== Starlark flag test ==>");
-    }
-
-    thread.getPrintHandler().print(thread, p.toString());
-    return Starlark.NONE;
-  }
-
-  @StarlarkMethod(
-      name = "type",
-      doc =
-          "Returns the type name of its argument. This is useful for debugging and "
-              + "type-checking. Examples:"
-              + "<pre class=\"language-python\">"
-              + "type(2) == \"int\"\n"
-              + "type([1]) == \"list\"\n"
-              + "type(struct(a = 2)) == \"struct\""
-              + "</pre>"
-              + "This function might change in the future. To write Python-compatible code and "
-              + "be future-proof, use it only to compare return values: "
-              + "<pre class=\"language-python\">"
-              + "if type(x) == type([]):  # if x is a list"
-              + "</pre>",
-      parameters = {@Param(name = "x", doc = "The object to check type of.", noneable = true)})
-  public String type(Object object) {
-    // There is no 'type' type in Starlark, so we return a string with the type name.
-    return Starlark.type(object);
-  }
-
-  @StarlarkMethod(
-      name = "zip",
-      doc =
-          "Returns a <code>list</code> of <code>tuple</code>s, where the i-th tuple contains "
-              + "the i-th element from each of the argument sequences or iterables. The list has "
-              + "the size of the shortest input. With a single iterable argument, it returns a "
-              + "list of 1-tuples. With no arguments, it returns an empty list. Examples:"
-              + "<pre class=\"language-python\">"
-              + "zip()  # == []\n"
-              + "zip([1, 2])  # == [(1,), (2,)]\n"
-              + "zip([1, 2], [3, 4])  # == [(1, 3), (2, 4)]\n"
-              + "zip([1, 2], [3, 4, 5])  # == [(1, 3), (2, 4)]</pre>",
-      extraPositionals = @Param(name = "args", doc = "lists to zip."),
-      useStarlarkThread = true)
-  public StarlarkList<?> zip(Sequence<?> args, StarlarkThread thread) throws EvalException {
-    Iterator<?>[] iterators = new Iterator<?>[args.size()];
-    for (int i = 0; i < args.size(); i++) {
-      iterators[i] = Starlark.toIterable(args.get(i)).iterator();
-    }
-    ArrayList<Tuple<?>> result = new ArrayList<>();
-    boolean allHasNext;
-    do {
-      allHasNext = !args.isEmpty();
-      List<Object> elem = Lists.newArrayListWithExpectedSize(args.size());
-      for (Iterator<?> iterator : iterators) {
-        if (iterator.hasNext()) {
-          elem.add(iterator.next());
-        } else {
-          allHasNext = false;
-        }
-      }
-      if (allHasNext) {
-        result.add(Tuple.copyOf(elem));
-      }
-    } while (allHasNext);
-    return StarlarkList.copyOf(thread.mutability(), result);
-  }
-
-  /** Starlark int type. */
-  @StarlarkBuiltin(
-      name = "int",
-      category = StarlarkDocumentationCategory.BUILTIN,
-      doc =
-          "A type to represent integers. It can represent any number between -2147483648 and "
-              + "2147483647 (included). "
-              + "Examples of int values:<br>"
-              + "<pre class=\"language-python\">"
-              + "153\n"
-              + "0x2A  # hexadecimal literal\n"
-              + "0o54  # octal literal\n"
-              + "23 * 2 + 5\n"
-              + "100 / -7\n"
-              + "100 % -7  # -5 (unlike in some other languages)\n"
-              + "int(\"18\")\n"
-              + "</pre>")
-  static final class IntModule implements StarlarkValue {} // (documentation only)
-
-  /** Starlark bool type. */
-  @StarlarkBuiltin(
-      name = "bool",
-      category = StarlarkDocumentationCategory.BUILTIN,
-      doc =
-          "A type to represent booleans. There are only two possible values: "
-              + "<a href=\"globals.html#True\">True</a> and "
-              + "<a href=\"globals.html#False\">False</a>. "
-              + "Any value can be converted to a boolean using the "
-              + "<a href=\"globals.html#bool\">bool</a> function.")
-  static final class BoolModule implements StarlarkValue {} // (documentation only)
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Module.java b/src/main/java/com/google/devtools/build/lib/syntax/Module.java
deleted file mode 100644
index 1aec2f7..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Module.java
+++ /dev/null
@@ -1,259 +0,0 @@
-// Copyright 2019 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableMap;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Set;
-import javax.annotation.Nullable;
-
-/**
- * A {@link Module} represents a Starlark module, a container of global variables populated by
- * executing a Starlark file. Each top-level assignment updates a global variable in the module.
- *
- * <p>Each module references its "predeclared" environment, which is often shared among many
- * modules. These are the names that are defined even at the start of execution. For example, in
- * Bazel, the predeclared environment of the module for a BUILD or .bzl file defines name values
- * such as cc_binary and glob.
- *
- * <p>The predeclared environment implicitly includes the "universal" names present in every
- * Starlark thread in every dialect, such as None, len, and str; see {@link Starlark#UNIVERSE}.
- *
- * <p>Global bindings in a Module may shadow bindings inherited from the predeclared block.
- *
- * <p>A module may carry an arbitrary piece of client data. In Bazel, for example, the client data
- * records the module's build label (such as "//dir:file.bzl").
- *
- * <p>Use {@link #create} to create a {@link Module} with no predeclared bindings other than the
- * universal ones. Use {@link #withPredeclared(StarlarkSemantics, Map)} to create a module with the
- * predeclared environment specified by the map, using the semantics to determine whether any
- * FlagGuardedValues in the map are enabled or disabled.
- */
-public final class Module implements Resolver.Module {
-
-  // The module's predeclared environment. Excludes UNIVERSE bindings.
-  private ImmutableMap<String, Object> predeclared;
-
-  // The module's global bindings, in order of creation.
-  private final LinkedHashMap<String, Object> globals = new LinkedHashMap<>();
-
-  // Names of globals that are exported and can be loaded from other modules.
-  // TODO(adonovan): eliminate this field when the resolver does its job properly.
-  final HashSet<String> exportedGlobals = new HashSet<>();
-
-  // An optional piece of metadata associated with the module/file.
-  // May be set after construction (too obscure to burden the constructors).
-  // Its toString appears to Starlark in str(function): "<function f from ...>".
-  @Nullable private Object clientData;
-
-  private Module(ImmutableMap<String, Object> predeclared) {
-    this.predeclared = predeclared;
-  }
-
-  /**
-   * Constructs a Module with the specified predeclared bindings, filtered by the semantics, in
-   * addition to the standard environment, {@link Starlark#UNIVERSE}.
-   */
-  public static Module withPredeclared(
-      StarlarkSemantics semantics, Map<String, Object> predeclared) {
-    return new Module(filter(predeclared, semantics));
-  }
-
-  /**
-   * Creates a module with no predeclared bindings other than the standard environment, {@link
-   * Starlark#UNIVERSE}.
-   */
-  public static Module create() {
-    return new Module(/*predeclared=*/ ImmutableMap.of());
-  }
-
-  /**
-   * Returns the module (file) of the innermost enclosing Starlark function on the call stack, or
-   * null if none of the active calls are functions defined in Starlark.
-   *
-   * <p>The name of this function is intentionally horrible to make you feel bad for using it.
-   */
-  @Nullable
-  public static Module ofInnermostEnclosingStarlarkFunction(StarlarkThread thread) {
-    for (Debug.Frame fr : thread.getDebugCallStack().reverse()) {
-      if (fr.getFunction() instanceof StarlarkFunction) {
-        return ((StarlarkFunction) fr.getFunction()).getModule();
-      }
-    }
-    return null;
-  }
-
-  /**
-   * Returns a map in which each semantics-enabled FlagGuardedValue has been replaced by the value
-   * it guards. Disabled FlagGuardedValues are left in place, and should be treated as unavailable.
-   * The iteration order is unchanged.
-   */
-  private static ImmutableMap<String, Object> filter(
-      Map<String, Object> predeclared, StarlarkSemantics semantics) {
-    ImmutableMap.Builder<String, Object> filtered = ImmutableMap.builder();
-    for (Map.Entry<String, Object> bind : predeclared.entrySet()) {
-      Object v = bind.getValue();
-      if (v instanceof FlagGuardedValue) {
-        FlagGuardedValue fv = (FlagGuardedValue) bind.getValue();
-        if (fv.isObjectAccessibleUsingSemantics(semantics)) {
-          v = fv.getObject();
-        }
-      }
-      filtered.put(bind.getKey(), v);
-    }
-    return filtered.build();
-  }
-
-  /**
-   * Sets the client data (an arbitrary application-specific value) associated with the module. It
-   * may be retrieved using {@link #getClientData}. Its {@code toString} form appears in the result
-   * of {@code str(fn)} where {@code fn} is a StarlarkFunction: "<function f from ...>".
-   */
-  public void setClientData(@Nullable Object clientData) {
-    this.clientData = clientData;
-  }
-
-  /**
-   * Returns the client data associated with this module by a prior call to {@link #setClientData}.
-   */
-  @Nullable
-  public Object getClientData() {
-    return clientData;
-  }
-
-  /** Returns the value of a predeclared (or universal) binding in this module. */
-  Object getPredeclared(String name) {
-    Object v = predeclared.get(name);
-    if (v != null) {
-      return v;
-    }
-    return Starlark.UNIVERSE.get(name);
-  }
-
-  /**
-   * Returns this module's additional predeclared bindings. (Excludes {@link Starlark#UNIVERSE}.)
-   *
-   * <p>The map reflects any semantics-based filtering of FlagGuardedValues done by {@link
-   * #withPredeclared}: enabled FlagGuardedValues are replaced by their underlying value.
-   */
-  public ImmutableMap<String, Object> getPredeclaredBindings() {
-    return predeclared;
-  }
-
-  /**
-   * Returns a read-only view of this module's global bindings.
-   *
-   * <p>The bindings are returned in a deterministic order (for a given sequence of initial values
-   * and updates).
-   */
-  public Map<String, Object> getGlobals() {
-    return Collections.unmodifiableMap(globals);
-  }
-
-  /**
-   * Returns a map of bindings that are exported (i.e. symbols declared using `=` and `def`, but not
-   * `load`).
-   */
-  // TODO(adonovan): whether bindings are exported should be decided by the resolver;
-  //  non-exported bindings should never be added to the module.  Delete this.
-  public ImmutableMap<String, Object> getExportedGlobals() {
-    ImmutableMap.Builder<String, Object> result = new ImmutableMap.Builder<>();
-    for (Map.Entry<String, Object> entry : globals.entrySet()) {
-      if (exportedGlobals.contains(entry.getKey())) {
-        result.put(entry);
-      }
-    }
-    return result.build();
-  }
-
-  /** Implements the resolver's module interface. */
-  @Override
-  public Set<String> getNames() {
-    // TODO(adonovan): for now, the resolver treats all predeclared/universe
-    //  and global names as one bucket (Scope.PREDECLARED). Fix that.
-    // TODO(adonovan): opt: change the resolver to request names on
-    //  demand to avoid all this set copying.
-    HashSet<String> names = new HashSet<>();
-    for (Map.Entry<String, Object> bind : getTransitiveBindings().entrySet()) {
-      if (bind.getValue() instanceof FlagGuardedValue) {
-        continue; // disabled
-      }
-      names.add(bind.getKey());
-    }
-    return names;
-  }
-
-  @Override
-  @Nullable
-  public String getUndeclaredNameError(String name) {
-    Object v = getPredeclared(name);
-    return v instanceof FlagGuardedValue
-        ? ((FlagGuardedValue) v).getErrorFromAttemptingAccess(name)
-        : null;
-  }
-
-  /**
-   * Returns a new map containing the predeclared (including universal) and global bindings of this
-   * module.
-   */
-  // TODO(adonovan): eliminate; clients should explicitly choose getPredeclared or getGlobals.
-  public Map<String, Object> getTransitiveBindings() {
-    // Can't use ImmutableMap.Builder because it doesn't allow duplicates.
-    LinkedHashMap<String, Object> env = new LinkedHashMap<>();
-    env.putAll(Starlark.UNIVERSE);
-    env.putAll(predeclared);
-    env.putAll(globals);
-    return env;
-  }
-
-  /**
-   * Returns the value of the specified global variable, or null if not bound. Does not look in the
-   * predeclared environment.
-   */
-  public Object getGlobal(String name) {
-    return globals.get(name);
-  }
-
-  /**
-   * Returns the value of the named variable in the module global environment (as if by {@link
-   * #getGlobal}), or if not bound there, in the predeclared environment (as if by {@link
-   * #getPredeclared}, or if not bound there, null.
-   */
-  public Object get(String name) {
-    // TODO(adonovan): delete this whole function, and getTransitiveBindings.
-    // With proper resolution, the interpreter will know whether
-    // to look in the module or the predeclared/universal environment.
-    Object v = getGlobal(name);
-    if (v != null) {
-      return v;
-    }
-    return getPredeclared(name);
-  }
-
-  /** Updates a global binding in the module environment. */
-  public void setGlobal(String name, Object value) {
-    Preconditions.checkNotNull(value, "Module.setGlobal(%s, null)", name);
-    globals.put(name, value);
-  }
-
-  @Override
-  public String toString() {
-    return String.format("<module %s>", clientData == null ? "?" : clientData);
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Mutability.java b/src/main/java/com/google/devtools/build/lib/syntax/Mutability.java
deleted file mode 100644
index dd9e8c1..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Mutability.java
+++ /dev/null
@@ -1,280 +0,0 @@
-// Copyright 2015 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.base.Joiner;
-import java.util.IdentityHashMap;
-
-/**
- * An object that manages the capability to mutate Starlark objects and their {@link
- * StarlarkThread}s. Collectively, the managed objects are called {@link Freezable}s.
- *
- * <p>Each {@code StarlarkThread}, and each of the mutable Starlark values (i.e., {@link
- * StarlarkMutable}s) that are created in that {@code StarlarkThread}, holds a pointer to the same
- * {@code Mutability} instance. Once the {@code StarlarkThread} is done evaluating, its {@code
- * Mutability} is irreversibly closed ("frozen"). At that point, it is no longer possible to change
- * either the bindings in that {@code StarlarkThread} or the state of its objects. This protects
- * each {@code StarlarkThread} from unintentional and unsafe modification.
- *
- * <p>{@code Mutability}s enforce isolation between {@code StarlarkThread}s; it is illegal for an
- * evaluation in one {@code StarlarkThread} to affect the bindings or values of another. In
- * particular, the {@code StarlarkThread} for any Starlark module is frozen before its symbols can
- * be imported for use by another module. Each individual {@code StarlarkThread}'s evaluation is
- * single-threaded, so this isolation also translates to thread safety. Any number of threads may
- * simultaneously access frozen data. (The {@code Mutability} itself is also thread-safe if and only
- * if it is frozen.}
- *
- * <p>Although the mutability pointer of a {@code Freezable} contains some debugging information
- * about its context, this should not affect the {@code Freezable}'s semantics. From a behavioral
- * point of view, the only thing that matters is whether the {@code Mutability} is frozen, not what
- * particular {@code Mutability} object is pointed to.
- *
- * <p>When a Starlark program iterates over a mutable sequence value in a for-loop or comprehension,
- * the sequence value becomes temporarily immutable for the duration of the loop. Conceptually, the
- * value maintains a counter of active iterations, and the interpreter notifies the {@code
- * Freezable} value before and after the loop so that it can alter its counter by calling its {@code
- * updateIteratorCount} method. While the counter value is nonzero, the value should cause all
- * attempts to mutate it to fail. The temporary immutability applies only to the sequence itself,
- * not to its elements. Once a mutable sequence becomes frozen, there is no need to count active
- * iterators (and doing so would be racy as frozen objects may be published to other Starlark
- * threads). The default implementation of {@code updateIteratorCount} uses a set of counters in the
- * Mutability, but a Freezable object may define a more efficient intrusive counter implementation.
- *
- * <p>We follow two disciplines to ensure safety. First, all mutation methods of a Freezable value
- * must confirm that the value's Mutability is not yet frozen, nor is the value temporarily
- * immutable due to active iterators.
- *
- * <p>Second, {@code Mutability}s are created using the try-with-resource style:
- *
- * <pre>{@code
- * try (Mutability mutability = Mutability.create(name, ...)) { ... }
- * }</pre>
- *
- * The general pattern is to create a {@code Mutability}, build an {@code StarlarkThread}, mutate
- * that {@code StarlarkThread} and its objects, and possibly return the result from within the
- * {@code try} block, relying on the try-with-resource construct to ensure that everything gets
- * frozen before the result is used. The only code that should create a {@code Mutability} without
- * using try-with-resource is test code that is not part of the Bazel jar.
- *
- * <p>We keep some (unchecked) invariants regarding where {@code Mutability} objects may appear
- * within a compound value.
- *
- * <ol>
- *   <li>A compound value can never contain an unfrozen {@code Mutability} for any {@code
- *       StarlarkThread} except the one currently being evaluated.
- *   <li>If a value has the special {@link #IMMUTABLE} {@code Mutability}, all of its contents are
- *       themselves deeply immutable too (i.e. have frozen {@code Mutability}s).
- * </ol>
- *
- * It follows that, if these invariants hold, an unfrozen value cannot appear as the child of a
- * value whose {@code Mutability} is already frozen. This knowledge is used by {@link
- * StarlarkMutable#isImmutable} to prune traversals of a compound value.
- *
- * <p>There is a special API for freezing individual values rather than whole {@code
- * StarlarkThread}s. Because this API makes it easier to violate the above invariants, you should
- * avoid using it if at all possible; at the moment it is only used for serialization. Under this
- * API, you may call {@link Freezable#unsafeShallowFreeze} to reset a value's {@code Mutability}
- * pointer to be {@link #IMMUTABLE}. This operation has no effect on the {@code Mutability} itself.
- * It is up to the caller to preserve or restore the above invariants by ensuring that any deeply
- * contained values are also frozen. For safety and explicitness, this operation is disallowed
- * unless the {@code Mutability}'s {@link #allowsUnsafeShallowFreeze} method returns true.
- */
-public final class Mutability implements AutoCloseable {
-
-  // Maps each temporarily frozen Freezable value to the (positive) count of active iterators over
-  // the value. This field is set to null when the Mutability becomes permanently frozen, at which
-  // point there is no need to track iterators. This map does not contain Freezable values that
-  // define their own implementation of updateIteratorCount.
-  private IdentityHashMap<Freezable, Integer> iteratorCount =
-      new IdentityHashMap<>(10); // 10 nested for-loops seems plenty
-
-  // An optional list of values that are formatted with toString and joined with spaces to yield the
-  // "annotation", an internal name describing the purpose of this Mutability.
-  private final Object[] annotation;
-
-  /** Controls access to {@link Freezable#unsafeShallowFreeze}. */
-  private final boolean allowsUnsafeShallowFreeze;
-
-  private Mutability(Object[] annotation, boolean allowsUnsafeShallowFreeze) {
-    this.annotation = annotation;
-    this.allowsUnsafeShallowFreeze = allowsUnsafeShallowFreeze;
-  }
-
-  /**
-   * Creates a {@code Mutability}.
-   *
-   * @param annotation a list of objects whose toString representations are joined with spaces to
-   *     yield the annotation, an internal name describing the purpose of this Mutability.
-   */
-  public static Mutability create(Object... annotation) {
-    return new Mutability(annotation, /*allowsUnsafeShallowFreeze=*/ false);
-  }
-
-  /**
-   * Creates a {@code Mutability} whose objects can be individually frozen; see docstrings for
-   * {@link Mutability} and {@link Freezable#unsafeShallowFreeze}.
-   */
-  public static Mutability createAllowingShallowFreeze(Object... annotation) {
-    return new Mutability(annotation, /*allowsUnsafeShallowFreeze=*/ true);
-  }
-
-  /** Returns the Mutability's "annotation", an internal name describing its purpose. */
-  public String getAnnotation() {
-    // The annotation string is computed when needed, typically never,
-    // to avoid the performance penalty of materializing it eagerly.
-    return Joiner.on(" ").join(annotation);
-  }
-
-  @Override
-  public String toString() {
-    return (isFrozen() ? "(" : "[") + getAnnotation() + (isFrozen() ? ")" : "]");
-  }
-
-  public boolean isFrozen() {
-    return this.iteratorCount == null;
-  }
-
-  // Defines the default behavior of mutable Freezable sequence values,
-  // which become temporarily immutable while there are active iterators.
-  private boolean updateIteratorCount(Freezable x, int delta) {
-    if (isFrozen()) {
-      return false;
-    }
-    int i = this.iteratorCount.getOrDefault(x, 0);
-    if (delta > 0) {
-      i++;
-      this.iteratorCount.put(x, i);
-    } else if (delta < 0) {
-      i--;
-      if (i == 0) {
-        this.iteratorCount.remove(x);
-      } else if (i > 0) {
-        this.iteratorCount.put(x, i);
-      } else {
-        throw new IllegalStateException("zero value in this.iteratorCount");
-      }
-    }
-    return i > 0;
-  }
-
-  /**
-   * Freezes this {@code Mutability}, rendering all {@link Freezable} objects that refer to it
-   * immutable.
-   *
-   * Note that freezing does not directly touch all the {@code Freezables}, so this operation is
-   * constant-time.
-   *
-   * @return this object, in the fluent style
-   */
-  public Mutability freeze() {
-    this.iteratorCount = null;
-    return this;
-  }
-
-  @Override
-  public void close() {
-    freeze();
-  }
-
-  /**
-   * Returns whether {@link Freezable}s having this {@code Mutability} allow the {@link
-   * #unsafeShallowFreeze} operation.
-   */
-  public boolean allowsUnsafeShallowFreeze() {
-    return allowsUnsafeShallowFreeze;
-  }
-
-  /**
-   * An object that refers to a {@link Mutability} to decide whether to allow mutation. All {@link
-   * Freezable} Starlark objects created within a given {@link StarlarkThread} will share the same
-   * {@code Mutability} as that {@code StarlarkThread}.
-   */
-  public interface Freezable {
-    /**
-     * Returns the {@link Mutability} associated with this {@code Freezable}. This should not change
-     * over the lifetime of the object, except by calling {@link #shallowFreeze} if applicable.
-     */
-    Mutability mutability();
-
-    /**
-     * Registers a change to this Freezable's iterator count and reports whether it is temporarily
-     * immutable.
-     *
-     * <p>If the value is permanently frozen ({@code mutability().isFrozen()), this function is a
-     * no-op that returns false.
-     *
-     * <p>Otherwise, if delta is positive, this increments the count of active iterators over the
-     * value, causing it to appear temporarily frozen (if it wasn't already). If delta is negative,
-     * the counter is decremented, and if delta is zero the counter is unchanged. It is illegal to
-     * decrement the counter if it was already zero. The return value is true if the count is
-     * positive after the change, and false otherwise.
-     *
-     * <p>The default implementation stores the counter of iterators in a hash table in the
-     * Mutability, but a subclass of Freezable may define a more efficient implementation such as an
-     * integer field in the freezable value itself.
-     *
-     * <p>Call this function with a positive value when starting an iteration and with a negative
-     * value when ending it.
-     */
-    default boolean updateIteratorCount(int delta) {
-      return mutability().updateIteratorCount(this, delta);
-    }
-
-    /**
-     * Freezes this object (and not its contents). Use with care.
-     *
-     * <p>This method is optional (i.e. may throw {@link NotImplementedException}).
-     *
-     * <p>If this object's {@link Mutability} is 1) not frozen, and 2) has {@link
-     * #allowUnsafeShallowFreeze} return true, then the object's {@code Mutability} reference is
-     * updated to point to {@link #IMMUTABLE}. Otherwise, this method throws {@link
-     * IllegalArgumentException}.
-     *
-     * <p>It is up to the caller to ensure that any contents of this {@code Freezable} are also
-     * frozen in order to preserve/restore the invariant that an immutable value cannot contain a
-     * mutable one. Note that {@link StarlarkMutable#isImmutable} correctness and thread-safety are
-     * not guaranteed otherwise.
-     */
-    default void unsafeShallowFreeze() {
-      throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Throws {@link IllegalArgumentException} if the precondition for {@link #unsafeShallowFreeze}
-     * is violated. To be used by implementors of {@link #unsafeShallowFreeze}.
-     */
-    static void checkUnsafeShallowFreezePrecondition(
-        Freezable freezable) {
-      Mutability mutability = freezable.mutability();
-      if (mutability.isFrozen()) {
-        // It's not safe to rewrite the Mutability pointer if this is already frozen, because we
-        // could be accessed by multiple threads.
-        throw new IllegalArgumentException(
-            "cannot call unsafeShallowFreeze() on an object whose Mutability is already frozen");
-      }
-      if (!mutability.allowsUnsafeShallowFreeze()) {
-        throw new IllegalArgumentException(
-            "cannot call unsafeShallowFreeze() on a mutable object whose Mutability's "
-                + "allowsUnsafeShallowFreeze() == false");
-      }
-    }
-  }
-
-  /**
-   * A {@code Mutability} indicating that a value is deeply immutable.
-   *
-   * <p>It is not associated with any particular {@link StarlarkThread}.
-   */
-  public static final Mutability IMMUTABLE = create("IMMUTABLE").freeze();
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Node.java b/src/main/java/com/google/devtools/build/lib/syntax/Node.java
deleted file mode 100644
index e89bc1a..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Node.java
+++ /dev/null
@@ -1,128 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.base.Preconditions;
-
-/**
- * A Node is a node in a Starlark syntax tree.
- *
- * <p>Nodes may be constructed only by the parser.
- *
- * <p>The syntax tree records the offsets within the file of all salient tokens, such as brackets
- * that mark the beginning or end of an expression, or operators whose position may be needed in a
- * run-time error message. The start and end offsets of each Node are computed inductively from
- * their tokens and subexpressions. Offsets are converted to Locations on demand in methods such as
- * {@link #getStartLocation}.
- */
-public abstract class Node {
-
-  // Use these typical node distributions in Bazel files
-  // as a rough guide for optimization decisions.
-  // BUILD files are much more numerous than .bzl files,
-  // and typically larger.
-  //
-  // Large BUILD file:
-  //   49  % StringLiteral
-  //   17  % Identifier
-  //   12  % Argument.Keyword
-  //    9  % ListExpression
-  //    4  % CallExpression
-  //    3.5% ExpressionStatement
-  //    3.1% Comment
-  //    1.2% Argument.Positional
-  //    1.8% all others
-  //
-  // Large .bzl logic file:
-  //   42 % Identifier
-  //   12 % DotExpression
-  //   7.1% StringLiteral
-  //   6.7% Argument.Keyword
-  //   6.7% CallExpression
-  //   4.6% Argument.Positional
-  //   3.1% Comment
-  //   2.4% ListExpression
-  //   2.4% ExpressionStatement
-  //   2.2% AssignmentStatement
-  //   1.9% DictExpression.Entry
-  //   1.9% BinaryOperatorExpression
-  //   1.0% Comprehension
-  //   6  % all others
-
-  // The FileLocations table holds the file name and a compressed
-  // mapping from token char offsets to Locations.
-  // It is shared by all nodes from the same file.
-  final FileLocations locs;
-
-  Node(FileLocations locs) {
-    this.locs = Preconditions.checkNotNull(locs);
-  }
-
-  /**
-   * Returns the node's start offset, as a char index (zero-based count of UTF-16 codes) from the
-   * start of the file.
-   */
-  public abstract int getStartOffset();
-
-  /** Returns the location of the start of this syntax node. */
-  public final Location getStartLocation() {
-    return locs.getLocation(getStartOffset());
-  }
-
-  /** Returns the char offset of the source position immediately after this syntax node. */
-  public abstract int getEndOffset();
-
-  /** Returns the location of the source position immediately after this syntax node. */
-  public final Location getEndLocation() {
-    return locs.getLocation(getEndOffset());
-  }
-
-  /**
-   * Returns a pretty-printed representation of this syntax tree.
-   *
-   * <p>This function returns the canonical source code corresponding to a syntax tree. Generally,
-   * the output can be round-tripped: pretty-printing a syntax tree then parsing the result should
-   * yield an equivalent syntax tree.
-   *
-   * <p>The pretty-printed form of a syntax tree may be used as a proxy for equality in tests.
-   * However, different trees may have the same printed form. In particular, {@link StarlarkFile}
-   * includes comments that are not reflected in the string.
-   */
-  public final String prettyPrint() {
-    StringBuilder buf = new StringBuilder();
-    new NodePrinter(buf).printNode(this);
-    return buf.toString();
-  }
-
-  /**
-   * Print the syntax node in a form useful for debugging.
-   *
-   * <p>The output is not precisely specified; use {@link #prettyPrint()} if you need more stable
-   * and complete information. For instance, this function may omit child statements of compound
-   * statements, or parentheses around some expressions. It may also abbreviate large list literals.
-   */
-  @Override
-  public String toString() {
-    return prettyPrint(); // default behavior, overridden in several subclasses
-  }
-
-  /**
-   * Implements the double dispatch by calling into the node specific <code>visit</code> method of
-   * the {@link NodeVisitor}
-   *
-   * @param visitor the {@link NodeVisitor} instance to dispatch to.
-   */
-  public abstract void accept(NodeVisitor visitor);
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/NodePrinter.java b/src/main/java/com/google/devtools/build/lib/syntax/NodePrinter.java
deleted file mode 100644
index b9532fa..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/NodePrinter.java
+++ /dev/null
@@ -1,464 +0,0 @@
-// Copyright 2019 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.syntax;
-
-import java.util.List;
-
-/** A pretty-printer for Starlark syntax trees. */
-final class NodePrinter {
-
-  private final StringBuilder buf;
-  private int indent;
-
-  NodePrinter(StringBuilder buf) {
-    this.buf = buf;
-  }
-
-  // Constructor exposed to legacy tests.
-  // TODO(adonovan): rewrite the tests not to care about the indent parameter.
-  NodePrinter(StringBuilder buf, int indent) {
-    this.buf = buf;
-    this.indent = indent;
-  }
-
-  // Main entry point for an arbitrary node.
-  // Called by Node.prettyPrint.
-  void printNode(Node n) {
-    if (n instanceof Expression) {
-      printExpr((Expression) n);
-
-    } else if (n instanceof Statement) {
-      printStmt((Statement) n);
-
-    } else if (n instanceof StarlarkFile) {
-      StarlarkFile file = (StarlarkFile) n;
-      // Only statements are printed, not comments.
-      for (Statement stmt : file.getStatements()) {
-        printStmt(stmt);
-      }
-
-    } else if (n instanceof Comment) {
-      Comment comment = (Comment) n;
-      // We can't really print comments in the right place anyway,
-      // due to how their relative order is lost in the representation
-      // of StarlarkFile. So don't bother word-wrapping and just print
-      // it on a single line.
-      printIndent();
-      buf.append(comment.getText());
-
-    } else if (n instanceof Argument) {
-      printArgument((Argument) n);
-
-    } else if (n instanceof Parameter) {
-      printParameter((Parameter) n);
-
-    } else if (n instanceof DictExpression.Entry) {
-      printDictEntry((DictExpression.Entry) n);
-
-    } else {
-      throw new IllegalArgumentException("unexpected: " + n.getClass());
-    }
-  }
-
-  private void printSuite(List<Statement> statements) {
-    // A suite is non-empty; pass statements are explicit.
-    indent++;
-    for (Statement stmt : statements) {
-      printStmt(stmt);
-    }
-    indent--;
-  }
-
-  private void printIndent() {
-    for (int i = 0; i < indent; i++) {
-      buf.append("  ");
-    }
-  }
-
-  private void printArgument(Argument arg) {
-    if (arg instanceof Argument.Positional) {
-      // nop
-    } else if (arg instanceof Argument.Keyword) {
-      buf.append(((Argument.Keyword) arg).getIdentifier().getName());
-      buf.append(" = ");
-    } else if (arg instanceof Argument.Star) {
-      buf.append('*');
-    } else if (arg instanceof Argument.StarStar) {
-      buf.append("**");
-    }
-    printExpr(arg.getValue());
-  }
-
-  private void printParameter(Parameter param) {
-    if (param instanceof Parameter.Mandatory) {
-      buf.append(param.getName());
-    } else if (param instanceof Parameter.Optional) {
-      buf.append(param.getName());
-      buf.append('=');
-      printExpr(param.getDefaultValue());
-    } else if (param instanceof Parameter.Star) {
-      buf.append('*');
-      if (param.getName() != null) {
-        buf.append(param.getName());
-      }
-    } else if (param instanceof Parameter.StarStar) {
-      buf.append("**");
-      buf.append(param.getName());
-    }
-  }
-
-  private void printDictEntry(DictExpression.Entry e) {
-    printExpr(e.getKey());
-    buf.append(": ");
-    printExpr(e.getValue());
-  }
-
-  // Appends "def f(a, ..., z):" to the buf.
-  // Also used by DefStatement.toString.
-  void printDefSignature(DefStatement def) {
-    buf.append("def ");
-    printExpr(def.getIdentifier());
-    buf.append('(');
-    String sep = "";
-    for (Parameter param : def.getParameters()) {
-      buf.append(sep);
-      printParameter(param);
-      sep = ", ";
-    }
-    buf.append("):");
-  }
-
-  private void printStmt(Statement s) {
-    printIndent();
-
-    switch (s.kind()) {
-      case ASSIGNMENT:
-        {
-          AssignmentStatement stmt = (AssignmentStatement) s;
-          printExpr(stmt.getLHS());
-          buf.append(' ');
-          if (stmt.isAugmented()) {
-            buf.append(stmt.getOperator());
-          }
-          buf.append("= ");
-          printExpr(stmt.getRHS());
-          buf.append('\n');
-          break;
-        }
-
-      case EXPRESSION:
-        {
-          ExpressionStatement stmt = (ExpressionStatement) s;
-          printExpr(stmt.getExpression());
-          buf.append('\n');
-          break;
-        }
-
-      case FLOW:
-        {
-          FlowStatement stmt = (FlowStatement) s;
-          buf.append(stmt.getKind()).append('\n');
-          break;
-        }
-
-      case FOR:
-        {
-          ForStatement stmt = (ForStatement) s;
-          buf.append("for ");
-          printExpr(stmt.getVars());
-          buf.append(" in ");
-          printExpr(stmt.getCollection());
-          buf.append(":\n");
-          printSuite(stmt.getBody());
-          break;
-        }
-
-      case DEF:
-        {
-          DefStatement stmt = (DefStatement) s;
-          printDefSignature(stmt);
-          buf.append('\n');
-          printSuite(stmt.getBody());
-          break;
-        }
-
-      case IF:
-        {
-          IfStatement stmt = (IfStatement) s;
-          buf.append(stmt.isElif() ? "elif " : "if ");
-          printExpr(stmt.getCondition());
-          buf.append(":\n");
-          printSuite(stmt.getThenBlock());
-          List<Statement> elseBlock = stmt.getElseBlock();
-          if (elseBlock != null) {
-            if (elseBlock.size() == 1
-                && elseBlock.get(0) instanceof IfStatement
-                && ((IfStatement) elseBlock.get(0)).isElif()) {
-              printStmt(elseBlock.get(0));
-            } else {
-              printIndent();
-              buf.append("else:\n");
-              printSuite(elseBlock);
-            }
-          }
-          break;
-        }
-
-      case LOAD:
-        {
-          LoadStatement stmt = (LoadStatement) s;
-          buf.append("load(");
-          printExpr(stmt.getImport());
-          for (LoadStatement.Binding binding : stmt.getBindings()) {
-            buf.append(", ");
-            Identifier local = binding.getLocalName();
-            String origName = binding.getOriginalName().getName();
-            if (origName.equals(local.getName())) {
-              buf.append('"');
-              printExpr(local);
-              buf.append('"');
-            } else {
-              printExpr(local);
-              buf.append("=\"");
-              buf.append(origName);
-              buf.append('"');
-            }
-          }
-          buf.append(")\n");
-          break;
-        }
-
-      case RETURN:
-        {
-          ReturnStatement stmt = (ReturnStatement) s;
-          buf.append("return");
-          if (stmt.getResult() != null) {
-            buf.append(' ');
-            printExpr(stmt.getResult());
-          }
-          buf.append('\n');
-          break;
-        }
-    }
-  }
-
-  private void printExpr(Expression expr) {
-    switch (expr.kind()) {
-      case BINARY_OPERATOR:
-        {
-          BinaryOperatorExpression binop = (BinaryOperatorExpression) expr;
-          // TODO(bazel-team): retain parentheses in the syntax tree so we needn't
-          // conservatively emit them here.
-          buf.append('(');
-          printExpr(binop.getX());
-          buf.append(' ');
-          buf.append(binop.getOperator());
-          buf.append(' ');
-          printExpr(binop.getY());
-          buf.append(')');
-          break;
-        }
-
-      case COMPREHENSION:
-        {
-          Comprehension comp = (Comprehension) expr;
-          buf.append(comp.isDict() ? '{' : '[');
-          printNode(comp.getBody()); // Expression or DictExpression.Entry
-          for (Comprehension.Clause clause : comp.getClauses()) {
-            buf.append(' ');
-            if (clause instanceof Comprehension.For) {
-              Comprehension.For forClause = (Comprehension.For) clause;
-              buf.append("for ");
-              printExpr(forClause.getVars());
-              buf.append(" in ");
-              printExpr(forClause.getIterable());
-            } else {
-              Comprehension.If ifClause = (Comprehension.If) clause;
-              buf.append("if ");
-              printExpr(ifClause.getCondition());
-            }
-          }
-          buf.append(comp.isDict() ? '}' : ']');
-          break;
-        }
-
-      case CONDITIONAL:
-        {
-          ConditionalExpression cond = (ConditionalExpression) expr;
-          printExpr(cond.getThenCase());
-          buf.append(" if ");
-          printExpr(cond.getCondition());
-          buf.append(" else ");
-          printExpr(cond.getElseCase());
-          break;
-        }
-
-      case DICT_EXPR:
-        {
-          DictExpression dictexpr = (DictExpression) expr;
-          buf.append("{");
-          String sep = "";
-          for (DictExpression.Entry entry : dictexpr.getEntries()) {
-            buf.append(sep);
-            printDictEntry(entry);
-            sep = ", ";
-          }
-          buf.append("}");
-          break;
-        }
-
-      case DOT:
-        {
-          DotExpression dot = (DotExpression) expr;
-          printExpr(dot.getObject());
-          buf.append('.');
-          printExpr(dot.getField());
-          break;
-        }
-
-      case CALL:
-        {
-          CallExpression call = (CallExpression) expr;
-          printExpr(call.getFunction());
-          buf.append('(');
-          String sep = "";
-          for (Argument arg : call.getArguments()) {
-            buf.append(sep);
-            printArgument(arg);
-            sep = ", ";
-          }
-          buf.append(')');
-          break;
-        }
-
-      case IDENTIFIER:
-        buf.append(((Identifier) expr).getName());
-        break;
-
-      case INDEX:
-        {
-          IndexExpression index = (IndexExpression) expr;
-          printExpr(index.getObject());
-          buf.append('[');
-          printExpr(index.getKey());
-          buf.append(']');
-          break;
-        }
-
-      case INTEGER_LITERAL:
-        {
-          buf.append(((IntegerLiteral) expr).getValue());
-          break;
-        }
-
-      case LIST_EXPR:
-        {
-          ListExpression list = (ListExpression) expr;
-          buf.append(list.isTuple() ? '(' : '[');
-          String sep = "";
-          for (Expression e : list.getElements()) {
-            buf.append(sep);
-            printExpr(e);
-            sep = ", ";
-          }
-          if (list.isTuple() && list.getElements().size() == 1) {
-            buf.append(',');
-          }
-          buf.append(list.isTuple() ? ')' : ']');
-          break;
-        }
-
-      case SLICE:
-        {
-          SliceExpression slice = (SliceExpression) expr;
-          printExpr(slice.getObject());
-          buf.append('[');
-          // The first separator colon is unconditional.
-          // The second separator appears only if step is printed.
-          if (slice.getStart() != null) {
-            printExpr(slice.getStart());
-          }
-          buf.append(':');
-          if (slice.getStop() != null) {
-            printExpr(slice.getStop());
-          }
-          if (slice.getStep() != null) {
-            buf.append(':');
-            printExpr(slice.getStep());
-          }
-          buf.append(']');
-          break;
-        }
-
-      case STRING_LITERAL:
-        {
-          StringLiteral literal = (StringLiteral) expr;
-          String value = literal.getValue();
-
-          // TODO(adonovan): record the raw text of string (and integer) literals
-          // so that we can use the syntax tree for source modification tools.
-          // However, that may come with a memory cost until we start compiling
-          // (at which point the cost is only transient).
-          // For now, just simulate the behavior of repr(str).
-          buf.append('"');
-          for (int i = 0; i < value.length(); i++) {
-            char c = value.charAt(i);
-            switch (c) {
-              case '"':
-                buf.append("\\\"");
-                break;
-              case '\\':
-                buf.append("\\\\");
-                break;
-              case '\r':
-                buf.append("\\r");
-                break;
-              case '\n':
-                buf.append("\\n");
-                break;
-              case '\t':
-                buf.append("\\t");
-                break;
-              default:
-                // The Starlark spec (and lexer) are far from complete here,
-                // and it's hard to come up with a clean semantics for
-                // string escapes that serves Java (UTF-16) and Go (UTF-8).
-                // Clearly string literals should not contain non-printable
-                // characters. For now we'll continue to pretend that all
-                // non-printables are < 32, but this obviously false.
-                if (c < 32) {
-                  buf.append(String.format("\\x%02x", (int) c));
-                } else {
-                  buf.append(c);
-                }
-            }
-          }
-          buf.append('"');
-          break;
-        }
-
-      case UNARY_OPERATOR:
-        {
-          UnaryOperatorExpression unop = (UnaryOperatorExpression) expr;
-          // TODO(bazel-team): retain parentheses in the syntax tree so we needn't
-          // conservatively emit them here.
-          buf.append(unop.getOperator() == TokenKind.NOT ? "not " : unop.getOperator().toString());
-          buf.append('(');
-          printExpr(unop.getX());
-          buf.append(')');
-          break;
-        }
-    }
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/NodeVisitor.java b/src/main/java/com/google/devtools/build/lib/syntax/NodeVisitor.java
deleted file mode 100644
index 303d538..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/NodeVisitor.java
+++ /dev/null
@@ -1,193 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.syntax;
-
-import java.util.List;
-
-/** A visitor for visiting the nodes of a syntax tree in lexical order. */
-public class NodeVisitor {
-
-  public void visit(Node node) {
-    // dispatch to the node specific method
-    node.accept(this);
-  }
-
-  // methods dealing with sequences of nodes
-  public void visitAll(List<? extends Node> nodes) {
-    for (Node node : nodes) {
-      visit(node);
-    }
-  }
-
-  /**
-   * Visit a sequence ("block") of statements (e.g. an if branch, for block, function block etc.)
-   *
-   * This method allows subclasses to handle statement blocks more easily, like doing an action
-   * after every statement in a block without having to override visit(...) for all statements.
-   *
-   * @param statements list of statements in the block
-   */
-  public void visitBlock(List<Statement> statements) {
-    visitAll(statements);
-  }
-
-  // node-specific visit methods
-
-  // All four subclasses of Argument are handled together.
-  public void visit(Argument node) {
-    visit(node.getValue());
-  }
-
-  // All four subclasses of Parameter are handled together.
-  public void visit(Parameter node) {
-    visit(node.getIdentifier());
-    if (node.getDefaultValue() != null) {
-      visit(node.getDefaultValue());
-    }
-  }
-
-  public void visit(StarlarkFile node) {
-    visitBlock(node.getStatements());
-    visitAll(node.getComments());
-  }
-
-  public void visit(BinaryOperatorExpression node) {
-    visit(node.getX());
-    visit(node.getY());
-  }
-
-  public void visit(CallExpression node) {
-    visit(node.getFunction());
-    visitAll(node.getArguments());
-  }
-
-  public void visit(Identifier node) {}
-
-  public void visit(Comprehension node) {
-    for (Comprehension.Clause clause : node.getClauses()) {
-      if (clause instanceof Comprehension.For) {
-        visit((Comprehension.For) clause);
-      } else {
-        visit((Comprehension.If) clause);
-      }
-    }
-    visit(node.getBody());
-  }
-
-  public void visit(Comprehension.For node) {
-    visit(node.getVars());
-    visit(node.getIterable());
-  }
-
-  public void visit(Comprehension.If node) {
-    visit(node.getCondition());
-  }
-
-  public void visit(ForStatement node) {
-    visit(node.getCollection());
-    visit(node.getVars());
-    visitBlock(node.getBody());
-  }
-
-  public void visit(LoadStatement node) {
-    for (LoadStatement.Binding binding : node.getBindings()) {
-      visit(binding.getLocalName());
-    }
-  }
-
-  public void visit(ListExpression node) {
-    visitAll(node.getElements());
-  }
-
-  public void visit(@SuppressWarnings("unused") IntegerLiteral node) {}
-
-  public void visit(@SuppressWarnings("unused") StringLiteral node) {}
-
-  public void visit(AssignmentStatement node) {
-    visit(node.getRHS());
-    visit(node.getLHS());
-  }
-
-  public void visit(ExpressionStatement node) {
-    visit(node.getExpression());
-  }
-
-  public void visit(IfStatement node) {
-    visit(node.getCondition());
-    visitBlock(node.getThenBlock());
-    if (node.getElseBlock() != null) {
-      visitBlock(node.getElseBlock());
-    }
-  }
-
-  public void visit(DefStatement node) {
-    visit(node.getIdentifier());
-    visitAll(node.getParameters());
-    visitBlock(node.getBody());
-  }
-
-  public void visit(ReturnStatement node) {
-    if (node.getResult() != null) {
-      visit(node.getResult());
-    }
-  }
-
-  public void visit(FlowStatement node) {}
-
-  public void visit(DictExpression node) {
-    visitAll(node.getEntries());
-  }
-
-  public void visit(DictExpression.Entry node) {
-    visit(node.getKey());
-    visit(node.getValue());
-  }
-
-  public void visit(UnaryOperatorExpression node) {
-    visit(node.getX());
-  }
-
-  public void visit(DotExpression node) {
-    visit(node.getObject());
-    visit(node.getField());
-  }
-
-  public void visit(IndexExpression node) {
-    visit(node.getObject());
-    visit(node.getKey());
-  }
-
-  public void visit(SliceExpression node) {
-    visit(node.getObject());
-    if (node.getStart() != null) {
-      visit(node.getStart());
-    }
-    if (node.getStop() != null) {
-      visit(node.getStop());
-    }
-    if (node.getStep() != null) {
-      visit(node.getStep());
-    }
-  }
-
-  public void visit(@SuppressWarnings("unused") Comment node) {}
-
-  public void visit(ConditionalExpression node) {
-    visit(node.getCondition());
-    visit(node.getThenCase());
-    if (node.getElseCase() != null) {
-      visit(node.getElseCase());
-    }
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/NoneType.java b/src/main/java/com/google/devtools/build/lib/syntax/NoneType.java
deleted file mode 100644
index 9a543c9..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/NoneType.java
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2019 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-import javax.annotation.concurrent.Immutable;
-import net.starlark.java.annot.StarlarkBuiltin;
-
-/** The type of the Starlark None value. */
-@StarlarkBuiltin(
-    name = "NoneType",
-    documented = false,
-    doc = "The type of the Starlark None value.")
-@Immutable
-public final class NoneType implements StarlarkValue {
-
-  static final NoneType NONE = new NoneType();
-
-  private NoneType() {}
-
-  @Override
-  public String toString() {
-    return "None";
-  }
-
-  @Override
-  public boolean isImmutable() {
-    return true;
-  }
-
-  @Override
-  public boolean truth() {
-    return false;
-  }
-
-  @Override
-  public void repr(Printer printer) {
-    printer.append("None");
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/ParamDescriptor.java b/src/main/java/com/google/devtools/build/lib/syntax/ParamDescriptor.java
deleted file mode 100644
index a364382..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/ParamDescriptor.java
+++ /dev/null
@@ -1,227 +0,0 @@
-// Copyright 2018 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.base.Preconditions;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.stream.Collectors;
-import javax.annotation.Nullable;
-import net.starlark.java.annot.Param;
-import net.starlark.java.annot.ParamType;
-
-/** A value class for storing {@link Param} metadata to avoid using Java proxies. */
-final class ParamDescriptor {
-
-  private final String name;
-  @Nullable private final Object defaultValue;
-  private final boolean noneable;
-  private final boolean named;
-  private final boolean positional;
-  private final List<Class<?>> allowedClasses; // non-empty
-  // The semantics flag responsible for disabling this parameter, or null if enabled.
-  // It is an error for Starlark code to supply a value to a disabled parameter.
-  @Nullable private final String disabledByFlag;
-
-  private ParamDescriptor(
-      String name,
-      String defaultExpr,
-      boolean noneable,
-      boolean named,
-      boolean positional,
-      List<Class<?>> allowedClasses,
-      @Nullable String disabledByFlag) {
-    this.name = name;
-    this.defaultValue = defaultExpr.isEmpty() ? null : evalDefault(name, defaultExpr);
-    this.noneable = noneable;
-    this.named = named;
-    this.positional = positional;
-    this.allowedClasses = allowedClasses;
-    this.disabledByFlag = disabledByFlag;
-  }
-
-  /**
-   * Returns a {@link ParamDescriptor} representing the given raw {@link Param} annotation and the
-   * given semantics.
-   */
-  static ParamDescriptor of(Param param, StarlarkSemantics starlarkSemantics) {
-    String defaultExpr = param.defaultValue();
-    String disabledByFlag = null;
-    if (!starlarkSemantics.isFeatureEnabledBasedOnTogglingFlags(
-        param.enableOnlyWithFlag(), param.disableWithFlag())) {
-      defaultExpr = param.valueWhenDisabled();
-      disabledByFlag =
-          !param.enableOnlyWithFlag().isEmpty()
-              ? param.enableOnlyWithFlag()
-              : param.disableWithFlag();
-      Preconditions.checkState(!disabledByFlag.isEmpty());
-    }
-
-    // Compute set of allowed classes.
-    ParamType[] allowedTypes = param.allowedTypes();
-    List<Class<?>> allowedClasses = new ArrayList<>();
-    if (allowedTypes.length > 0) {
-      for (ParamType pt : allowedTypes) {
-        allowedClasses.add(pt.type());
-      }
-    } else {
-      allowedClasses.add(param.type());
-    }
-    if (param.noneable()) {
-      // A few annotations redundantly declare NoneType.
-      if (!allowedClasses.contains(NoneType.class)) {
-        allowedClasses.add(NoneType.class);
-      }
-    }
-
-    return new ParamDescriptor(
-        param.name(),
-        defaultExpr,
-        param.noneable(),
-        param.named(),
-        param.positional(),
-        allowedClasses,
-        disabledByFlag);
-  }
-
-  /** @see Param#name() */
-  String getName() {
-    return name;
-  }
-
-  /** Returns a description of allowed argument types suitable for an error message. */
-  String getTypeErrorMessage() {
-    return allowedClasses.stream().map(Starlark::classType).collect(Collectors.joining(" or "));
-  }
-
-  List<Class<?>> getAllowedClasses() {
-    return allowedClasses;
-  }
-
-  /** @see Param#noneable() */
-  boolean isNoneable() {
-    return noneable;
-  }
-
-  /** @see Param#positional() */
-  boolean isPositional() {
-    return positional;
-  }
-
-  /** @see Param#named() */
-  boolean isNamed() {
-    return named;
-  }
-
-  /** Returns the effective default value of this parameter, or null if mandatory. */
-  @Nullable
-  Object getDefaultValue() {
-    return defaultValue;
-  }
-
-  /** Returns the flag responsible for disabling this parameter, or null if it is enabled. */
-  @Nullable
-  String disabledByFlag() {
-    return disabledByFlag;
-  }
-
-  // A memoization of evalDefault, keyed by expression.
-  // This cache is manually maintained (instead of using LoadingCache),
-  // as default values may sometimes be recursively requested.
-  private static final ConcurrentHashMap<String, Object> defaultValueCache =
-      new ConcurrentHashMap<>();
-
-  // Evaluates the default value expression for a parameter.
-  private static Object evalDefault(String name, String expr) {
-    // Values required by defaults of functions in UNIVERSE must
-    // be handled without depending on the evaluator, or even
-    // on defaultValueCache, because JVM global variable initialization
-    // is such a mess. (Specifically, it's completely dynamic,
-    // so if two or more variables are mutually dependent, like
-    // defaultValueCache and UNIVERSE would be, you have to write
-    // code that works in all possible dynamic initialization orders.)
-    // Better not to go there.
-    if (expr.equals("None")) {
-      return Starlark.NONE;
-    } else if (expr.equals("True")) {
-      return true;
-    } else if (expr.equals("False")) {
-      return false;
-    } else if (expr.equals("unbound")) {
-      return Starlark.UNBOUND;
-    } else if (expr.equals("0")) {
-      return 0;
-    } else if (expr.equals("1")) {
-      return 1;
-    } else if (expr.equals("[]")) {
-      return StarlarkList.empty();
-    } else if (expr.equals("()")) {
-      return Tuple.empty();
-    } else if (expr.equals("\" \"")) {
-      return " ";
-    }
-
-    Object x = defaultValueCache.get(expr);
-    if (x != null) {
-      return x;
-    }
-
-    // We can't evaluate Starlark code until UNIVERSE is bootstrapped.
-    if (Starlark.UNIVERSE == null) {
-      throw new IllegalStateException("no bootstrap value for " + name + "=" + expr);
-    }
-
-    Module module = Module.create();
-    try (Mutability mu = Mutability.create("Builtin param default init")) {
-      // Note that this Starlark thread ignores command line flags.
-      StarlarkThread thread = new StarlarkThread(mu, StarlarkSemantics.DEFAULT);
-
-      // Disable polling of the java.lang.Thread.interrupt flag during
-      // Starlark evaluation. Assuming the expression does not call a
-      // built-in that throws InterruptedException, this allows us to
-      // assert that InterruptedException "can't happen".
-      //
-      // Bazel Java threads are routinely interrupted during Starlark execution,
-      // and the Starlark interpreter may be in a call to LoadingCache (in CallUtils).
-      // LoadingCache computes the cache entry in the same thread that first
-      // requested the entry, propagating undesirable thread state (which Einstein
-      // called "spooky action at a distance") from an arbitrary application thread
-      // to here, which is logically one-time initialization code.
-      //
-      // A simpler non-solution would be to use a "clean" pool thread
-      // to compute each cache entry; we could safely assume such a thread
-      // is never interrupted. However, this runs afoul of JVM class initialization:
-      // the initialization of Starlark.UNIVERSE depends on Starlark.UNBOUND
-      // because of the reference above. That's fine if they are initialized by
-      // the same thread, as JVM class initialization locks are reentrant,
-      // but the reference deadlocks if made from another thread.
-      // See https://docs.oracle.com/javase/specs/jls/se12/html/jls-12.html#jls-12.4
-      thread.ignoreThreadInterrupts();
-
-      x = Starlark.eval(ParserInput.fromLines(expr), FileOptions.DEFAULT, module, thread);
-    } catch (InterruptedException ex) {
-      throw new IllegalStateException(ex); // can't happen
-    } catch (SyntaxError.Exception | EvalException ex) {
-      throw new IllegalArgumentException(
-          String.format(
-              "failed to evaluate default value '%s' of parameter '%s': %s",
-              expr, name, ex.getMessage()),
-          ex);
-    }
-    defaultValueCache.put(expr, x);
-    return x;
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Parameter.java b/src/main/java/com/google/devtools/build/lib/syntax/Parameter.java
deleted file mode 100644
index 2c4cbae..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Parameter.java
+++ /dev/null
@@ -1,147 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.syntax;
-
-import javax.annotation.Nullable;
-
-/**
- * Syntax node for a parameter in a function definition.
- *
- * <p>Parameters may be of four forms, as in {@code def f(a, b=c, *args, **kwargs)}. They are
- * represented by the subclasses Mandatory, Optional, Star, and StarStar.
- */
-public abstract class Parameter extends Node {
-
-  @Nullable private final Identifier id;
-
-  private Parameter(FileLocations locs, @Nullable Identifier id) {
-    super(locs);
-    this.id = id;
-  }
-
-  @Nullable
-  public String getName() {
-    return id != null ? id.getName() : null;
-  }
-
-  @Nullable
-  public Identifier getIdentifier() {
-    return id;
-  }
-
-  @Nullable
-  public Expression getDefaultValue() {
-    return null;
-  }
-
-  /**
-   * Syntax node for a mandatory parameter, {@code f(id)}. It may be positional or keyword-only
-   * depending on its position.
-   */
-  public static final class Mandatory extends Parameter {
-    Mandatory(FileLocations locs, Identifier id) {
-      super(locs, id);
-    }
-
-    @Override
-    public int getStartOffset() {
-      return getIdentifier().getStartOffset();
-    }
-
-    @Override
-    public int getEndOffset() {
-      return getIdentifier().getEndOffset();
-    }
-  }
-
-  /**
-   * Syntax node for an optional parameter, {@code f(id=expr).}. It may be positional or
-   * keyword-only depending on its position.
-   */
-  public static final class Optional extends Parameter {
-
-    public final Expression defaultValue;
-
-    Optional(FileLocations locs, Identifier id, @Nullable Expression defaultValue) {
-      super(locs, id);
-      this.defaultValue = defaultValue;
-    }
-
-    @Override
-    @Nullable
-    public Expression getDefaultValue() {
-      return defaultValue;
-    }
-
-    @Override
-    public int getStartOffset() {
-      return getIdentifier().getStartOffset();
-    }
-
-    @Override
-    public int getEndOffset() {
-      return getDefaultValue().getEndOffset();
-    }
-
-    @Override
-    public String toString() {
-      return getName() + "=" + defaultValue;
-    }
-  }
-
-  /** Syntax node for a star parameter, {@code f(*id)} or or {@code f(..., *, ...)}. */
-  public static final class Star extends Parameter {
-    private final int starOffset;
-
-    Star(FileLocations locs, int starOffset, @Nullable Identifier id) {
-      super(locs, id);
-      this.starOffset = starOffset;
-    }
-
-    @Override
-    public int getStartOffset() {
-      return starOffset;
-    }
-
-    @Override
-    public int getEndOffset() {
-      return getIdentifier().getEndOffset();
-    }
-  }
-
-  /** Syntax node for a parameter of the form {@code f(**id)}. */
-  public static final class StarStar extends Parameter {
-    private final int starStarOffset;
-
-    StarStar(FileLocations locs, int starStarOffset, Identifier id) {
-      super(locs, id);
-      this.starStarOffset = starStarOffset;
-    }
-
-    @Override
-    public int getStartOffset() {
-      return starStarOffset;
-    }
-
-    @Override
-    public int getEndOffset() {
-      return getIdentifier().getEndOffset();
-    }
-  }
-
-  @Override
-  public void accept(NodeVisitor visitor) {
-    visitor.visit(this);
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Parser.java b/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
deleted file mode 100644
index 2117b84..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
+++ /dev/null
@@ -1,1217 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.base.Preconditions;
-import com.google.common.base.Throwables;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.errorprone.annotations.FormatMethod;
-import java.util.ArrayList;
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import javax.annotation.Nullable;
-
-/** Parser is a recursive-descent parser for Starlark. */
-final class Parser {
-
-  /** Combines the parser result into a single value object. */
-  static final class ParseResult {
-    // Maps char offsets in the file to Locations.
-    final FileLocations locs;
-
-    /** The top-level statements of the parsed file. */
-    final ImmutableList<Statement> statements;
-
-    /** The comments from the parsed file. */
-    final List<Comment> comments;
-
-    // Errors encountered during scanning or parsing.
-    // These lists are ultimately owned by StarlarkFile.
-    final List<SyntaxError> errors;
-
-    private ParseResult(
-        FileLocations locs,
-        ImmutableList<Statement> statements,
-        List<Comment> comments,
-        List<SyntaxError> errors) {
-      this.locs = locs;
-      // No need to copy here; when the object is created, the parser instance is just about to go
-      // out of scope and be garbage collected.
-      this.statements = Preconditions.checkNotNull(statements);
-      this.comments = Preconditions.checkNotNull(comments);
-      this.errors = errors;
-    }
-  }
-
-  private static final EnumSet<TokenKind> STATEMENT_TERMINATOR_SET =
-      EnumSet.of(TokenKind.EOF, TokenKind.NEWLINE, TokenKind.SEMI);
-
-  private static final EnumSet<TokenKind> LIST_TERMINATOR_SET =
-      EnumSet.of(TokenKind.EOF, TokenKind.RBRACKET, TokenKind.SEMI);
-
-  private static final EnumSet<TokenKind> DICT_TERMINATOR_SET =
-      EnumSet.of(TokenKind.EOF, TokenKind.RBRACE, TokenKind.SEMI);
-
-  private static final EnumSet<TokenKind> EXPR_LIST_TERMINATOR_SET =
-      EnumSet.of(
-          TokenKind.EOF,
-          TokenKind.NEWLINE,
-          TokenKind.EQUALS,
-          TokenKind.RBRACE,
-          TokenKind.RBRACKET,
-          TokenKind.RPAREN,
-          TokenKind.SEMI);
-
-  private static final EnumSet<TokenKind> EXPR_TERMINATOR_SET =
-      EnumSet.of(
-          TokenKind.COLON,
-          TokenKind.COMMA,
-          TokenKind.EOF,
-          TokenKind.FOR,
-          TokenKind.MINUS,
-          TokenKind.PERCENT,
-          TokenKind.PLUS,
-          TokenKind.RBRACKET,
-          TokenKind.RPAREN,
-          TokenKind.SLASH);
-
-  /** Current lookahead token. May be mutated by the parser. */
-  private final Lexer token; // token.kind is a prettier alias for lexer.kind
-
-  private static final boolean DEBUGGING = false;
-
-  private final Lexer lexer;
-  private final FileLocations locs;
-  private final List<SyntaxError> errors;
-
-  // TODO(adonovan): opt: compute this by subtraction.
-  private static final Map<TokenKind, TokenKind> augmentedAssignments =
-      new ImmutableMap.Builder<TokenKind, TokenKind>()
-          .put(TokenKind.PLUS_EQUALS, TokenKind.PLUS)
-          .put(TokenKind.MINUS_EQUALS, TokenKind.MINUS)
-          .put(TokenKind.STAR_EQUALS, TokenKind.STAR)
-          .put(TokenKind.SLASH_EQUALS, TokenKind.SLASH)
-          .put(TokenKind.SLASH_SLASH_EQUALS, TokenKind.SLASH_SLASH)
-          .put(TokenKind.PERCENT_EQUALS, TokenKind.PERCENT)
-          .put(TokenKind.AMPERSAND_EQUALS, TokenKind.AMPERSAND)
-          .put(TokenKind.CARET_EQUALS, TokenKind.CARET)
-          .put(TokenKind.PIPE_EQUALS, TokenKind.PIPE)
-          .put(TokenKind.GREATER_GREATER_EQUALS, TokenKind.GREATER_GREATER)
-          .put(TokenKind.LESS_LESS_EQUALS, TokenKind.LESS_LESS)
-          .build();
-
-  /**
-   * Highest precedence goes last. Based on:
-   * http://docs.python.org/2/reference/expressions.html#operator-precedence
-   */
-  private static final List<EnumSet<TokenKind>> operatorPrecedence =
-      ImmutableList.of(
-          EnumSet.of(TokenKind.OR),
-          EnumSet.of(TokenKind.AND),
-          EnumSet.of(TokenKind.NOT),
-          EnumSet.of(
-              TokenKind.EQUALS_EQUALS,
-              TokenKind.NOT_EQUALS,
-              TokenKind.LESS,
-              TokenKind.LESS_EQUALS,
-              TokenKind.GREATER,
-              TokenKind.GREATER_EQUALS,
-              TokenKind.IN,
-              TokenKind.NOT_IN),
-          EnumSet.of(TokenKind.PIPE),
-          EnumSet.of(TokenKind.CARET),
-          EnumSet.of(TokenKind.AMPERSAND),
-          EnumSet.of(TokenKind.GREATER_GREATER, TokenKind.LESS_LESS),
-          EnumSet.of(TokenKind.MINUS, TokenKind.PLUS),
-          EnumSet.of(TokenKind.SLASH, TokenKind.SLASH_SLASH, TokenKind.STAR, TokenKind.PERCENT));
-
-  private int errorsCount;
-  private boolean recoveryMode;  // stop reporting errors until next statement
-
-  // Intern string literals, as some files contain many literals for the same string.
-  private final Map<String, String> stringInterner = new HashMap<>();
-
-  private Parser(Lexer lexer, List<SyntaxError> errors) {
-    this.lexer = lexer;
-    this.locs = lexer.locs;
-    this.errors = errors;
-    this.token = lexer;
-    nextToken();
-  }
-
-  private String intern(String s) {
-    String prev = stringInterner.putIfAbsent(s, s);
-    return prev != null ? prev : s;
-  }
-
-  // Returns a token's string form as used in error messages.
-  private static String tokenString(TokenKind kind, @Nullable Object value) {
-    return kind == TokenKind.STRING
-        ? "\"" + value + "\"" // TODO(adonovan): do proper quotation
-        : value == null ? kind.toString() : value.toString();
-  }
-
-  // Main entry point for parsing a file.
-  static ParseResult parseFile(ParserInput input, FileOptions options) {
-    List<SyntaxError> errors = new ArrayList<>();
-    Lexer lexer = new Lexer(input, options, errors);
-    Parser parser = new Parser(lexer, errors);
-
-    StarlarkFile.ParseProfiler profiler = Parser.profiler;
-    Object span = profiler != null ? profiler.start(input.getFile()) : null;
-    try {
-      ImmutableList<Statement> statements = parser.parseFileInput();
-      return new ParseResult(lexer.locs, statements, lexer.getComments(), errors);
-    } finally {
-      if (profiler != null) {
-        profiler.end(span);
-      }
-    }
-  }
-
-  @Nullable static StarlarkFile.ParseProfiler profiler;
-
-  // stmt = simple_stmt
-  //      | def_stmt
-  //      | for_stmt
-  //      | if_stmt
-  private void parseStatement(ImmutableList.Builder<Statement> list) {
-    if (token.kind == TokenKind.DEF) {
-      list.add(parseDefStatement());
-    } else if (token.kind == TokenKind.IF) {
-      list.add(parseIfStatement());
-    } else if (token.kind == TokenKind.FOR) {
-      list.add(parseForStatement());
-    } else {
-      parseSimpleStatement(list);
-    }
-  }
-
-  /** Parses an expression, possibly followed by newline tokens. */
-  static Expression parseExpression(ParserInput input, FileOptions options)
-      throws SyntaxError.Exception {
-    List<SyntaxError> errors = new ArrayList<>();
-    Lexer lexer = new Lexer(input, options, errors);
-    Parser parser = new Parser(lexer, errors);
-    Expression result = null;
-    try {
-      result = parser.parseExpression();
-      while (parser.token.kind == TokenKind.NEWLINE) {
-        parser.nextToken();
-      }
-      parser.expect(TokenKind.EOF);
-    } catch (StackOverflowError ex) {
-      // See rationale at parseFile.
-      parser.reportError(
-          lexer.end,
-          "internal error: stack overflow while parsing Starlark expression <<%s>>. Please report"
-              + " the bug.\n"
-              + "%s",
-          new String(input.getContent()),
-          Throwables.getStackTraceAsString(ex));
-    }
-    if (!errors.isEmpty()) {
-      throw new SyntaxError.Exception(errors);
-    }
-    return result;
-  }
-
-  // Equivalent to 'testlist' rule in Python grammar. It can parse every kind of
-  // expression. In many cases, we need to use parseTest to avoid ambiguity:
-  //   e.g. fct(x, y)  vs  fct((x, y))
-  //
-  // A trailing comma is disallowed in an unparenthesized tuple.
-  // This prevents bugs where a one-element tuple is surprisingly created:
-  //   e.g. foo = f(x),
-  private Expression parseExpression() {
-    Expression e = parseTest();
-    if (token.kind != TokenKind.COMMA) {
-      return e;
-    }
-
-    // unparenthesized tuple
-    List<Expression> elems = new ArrayList<>();
-    elems.add(e);
-    parseExprList(elems, /*trailingCommaAllowed=*/ false);
-    return new ListExpression(locs, /*isTuple=*/ true, -1, elems, -1);
-  }
-
-  @FormatMethod
-  private void reportError(int offset, String format, Object... args) {
-    errorsCount++;
-    // Limit the number of reported errors to avoid spamming output.
-    if (errorsCount <= 5) {
-      Location location = locs.getLocation(offset);
-      errors.add(new SyntaxError(location, String.format(format, args)));
-    }
-  }
-
-  private void syntaxError(String message) {
-    if (!recoveryMode) {
-      if (token.kind == TokenKind.INDENT) {
-        reportError(token.start, "indentation error");
-      } else {
-        reportError(
-            token.start, "syntax error at '%s': %s", tokenString(token.kind, token.value), message);
-      }
-      recoveryMode = true;
-    }
-  }
-
-  // Consumes the current token and returns its position, like nextToken.
-  // Reports a syntax error if the new token is not of the expected kind.
-  private int expect(TokenKind kind) {
-    if (token.kind != kind) {
-      syntaxError("expected " + kind);
-    }
-    return nextToken();
-  }
-
-  // Like expect, but stops recovery mode if the token was expected.
-  private int expectAndRecover(TokenKind kind) {
-    if (token.kind != kind) {
-      syntaxError("expected " + kind);
-    } else {
-      recoveryMode = false;
-    }
-    return nextToken();
-  }
-
-  // Consumes tokens past the first token belonging to terminatingTokens.
-  // It returns the end offset of the terminating token.
-  // TODO(adonovan): always used with makeErrorExpression. Combine and simplify.
-  private int syncPast(EnumSet<TokenKind> terminatingTokens) {
-    Preconditions.checkState(terminatingTokens.contains(TokenKind.EOF));
-    while (!terminatingTokens.contains(token.kind)) {
-      nextToken();
-    }
-    int end = token.end;
-    // read past the synchronization token
-    nextToken();
-    return end;
-  }
-
-  /**
-   * Consume tokens until we reach the first token that has a kind that is in
-   * the set of terminatingTokens.
-   * @param terminatingTokens
-   * @return the end offset of the terminating token.
-   */
-  private int syncTo(EnumSet<TokenKind> terminatingTokens) {
-    // EOF must be in the set to prevent an infinite loop
-    Preconditions.checkState(terminatingTokens.contains(TokenKind.EOF));
-    // read past the problematic token
-    int previous = token.end;
-    nextToken();
-    int current = previous;
-    while (!terminatingTokens.contains(token.kind)) {
-      nextToken();
-      previous = current;
-      current = token.end;
-    }
-    return previous;
-  }
-
-  // Keywords that exist in Python and that we don't parse.
-  private static final EnumSet<TokenKind> FORBIDDEN_KEYWORDS =
-      EnumSet.of(
-          TokenKind.AS,
-          TokenKind.ASSERT,
-          TokenKind.CLASS,
-          TokenKind.DEL,
-          TokenKind.EXCEPT,
-          TokenKind.FINALLY,
-          TokenKind.FROM,
-          TokenKind.GLOBAL,
-          TokenKind.IMPORT,
-          TokenKind.IS,
-          TokenKind.LAMBDA,
-          TokenKind.NONLOCAL,
-          TokenKind.RAISE,
-          TokenKind.TRY,
-          TokenKind.WITH,
-          TokenKind.WHILE,
-          TokenKind.YIELD);
-
-  private void checkForbiddenKeywords() {
-    if (!FORBIDDEN_KEYWORDS.contains(token.kind)) {
-      return;
-    }
-    String error;
-    switch (token.kind) {
-      case ASSERT: error = "'assert' not supported, use 'fail' instead"; break;
-      case DEL:
-        error = "'del' not supported, use '.pop()' to delete an item from a dictionary or a list";
-        break;
-      case IMPORT: error = "'import' not supported, use 'load' instead"; break;
-      case IS: error = "'is' not supported, use '==' instead"; break;
-      case LAMBDA: error = "'lambda' not supported, declare a function instead"; break;
-      case RAISE: error = "'raise' not supported, use 'fail' instead"; break;
-      case TRY: error = "'try' not supported, all exceptions are fatal"; break;
-      case WHILE: error = "'while' not supported, use 'for' instead"; break;
-      default:
-        error = "keyword '" + token.kind + "' not supported";
-        break;
-    }
-    reportError(token.start, "%s", error);
-  }
-
-  private int nextToken() {
-    int prev = token.start;
-    if (token.kind != TokenKind.EOF) {
-      lexer.nextToken();
-    }
-    checkForbiddenKeywords();
-    // TODO(adonovan): move this to lexer so we see the first token too.
-    if (DEBUGGING) {
-      System.err.print(tokenString(token.kind, token.value));
-    }
-    return prev;
-  }
-
-  // Returns an "Identifier" whose content is the input from start to end.
-  private Identifier makeErrorExpression(int start, int end) {
-    // It's tempting to define a dedicated BadExpression type,
-    // but it is convenient for parseIdent to return an Identifier
-    // even when it fails.
-    return new Identifier(locs, lexer.bufferSlice(start, end), start);
-  }
-
-
-  // arg = IDENTIFIER '=' test
-  //     | expr
-  //     | *args
-  //     | **kwargs
-  private Argument parseArgument() {
-    Expression expr;
-
-    // parse **expr
-    if (token.kind == TokenKind.STAR_STAR) {
-      int starStarOffset = nextToken();
-      expr = parseTest();
-      return new Argument.StarStar(locs, starStarOffset, expr);
-    }
-
-    // parse *expr
-    if (token.kind == TokenKind.STAR) {
-      int starOffset = nextToken();
-      expr = parseTest();
-      return new Argument.Star(locs, starOffset, expr);
-    }
-
-    // IDENTIFIER  or  IDENTIFIER = test
-    expr = parseTest();
-    if (expr instanceof Identifier) {
-      Identifier id = (Identifier) expr;
-      // parse a named argument
-      if (token.kind == TokenKind.EQUALS) {
-        nextToken();
-        Expression arg = parseTest();
-        return new Argument.Keyword(locs, id, arg);
-      }
-    }
-
-    // parse a positional argument
-    return new Argument.Positional(locs, expr);
-  }
-
-  // arg = IDENTIFIER '=' test
-  //     | IDENTIFIER
-  private Parameter parseFunctionParameter() {
-    // **kwargs
-    if (token.kind == TokenKind.STAR_STAR) {
-      int starStarOffset = nextToken();
-      Identifier id = parseIdent();
-      return new Parameter.StarStar(locs, starStarOffset, id);
-    }
-
-    // * or *args
-    if (token.kind == TokenKind.STAR) {
-      int starOffset = nextToken();
-      if (token.kind == TokenKind.IDENTIFIER) {
-        Identifier id = parseIdent();
-        return new Parameter.Star(locs, starOffset, id);
-      }
-      return new Parameter.Star(locs, starOffset, null);
-    }
-
-    // name=default
-    Identifier id = parseIdent();
-    if (token.kind == TokenKind.EQUALS) {
-      nextToken(); // TODO: save token pos?
-      Expression expr = parseTest();
-      return new Parameter.Optional(locs, id, expr);
-    }
-
-    // name
-    return new Parameter.Mandatory(locs, id);
-  }
-
-  // call_suffix = '(' arg_list? ')'
-  private Expression parseCallSuffix(Expression fn) {
-    ImmutableList<Argument> args = ImmutableList.of();
-    int lparenOffset = expect(TokenKind.LPAREN);
-    if (token.kind != TokenKind.RPAREN) {
-      args = parseArguments(); // (includes optional trailing comma)
-    }
-    int rparenOffset = expect(TokenKind.RPAREN);
-    return new CallExpression(locs, fn, locs.getLocation(lparenOffset), args, rparenOffset);
-  }
-
-  // Parse a list of call arguments.
-  //
-  // arg_list = ( (arg ',')* arg ','? )?
-  private ImmutableList<Argument> parseArguments() {
-    boolean seenArg = false;
-    ImmutableList.Builder<Argument> list = ImmutableList.builder();
-    while (token.kind != TokenKind.RPAREN && token.kind != TokenKind.EOF) {
-      if (seenArg) {
-        expect(TokenKind.COMMA);
-        // If nonempty, the list may end with a comma.
-        if (token.kind == TokenKind.RPAREN) {
-          break;
-        }
-      }
-      list.add(parseArgument());
-      seenArg = true;
-    }
-    return list.build();
-  }
-
-  // selector_suffix = '.' IDENTIFIER
-  private Expression parseSelectorSuffix(Expression e) {
-    int dotOffset = expect(TokenKind.DOT);
-    if (token.kind == TokenKind.IDENTIFIER) {
-      Identifier id = parseIdent();
-      return new DotExpression(locs, e, dotOffset, id);
-    }
-
-    syntaxError("expected identifier after dot");
-    syncTo(EXPR_TERMINATOR_SET);
-    return e;
-  }
-
-  // expr_list parses a comma-separated list of expression. It assumes that the
-  // first expression was already parsed, so it starts with a comma.
-  // It is used to parse tuples and list elements.
-  //
-  // expr_list = ( ',' expr )* ','?
-  private void parseExprList(List<Expression> list, boolean trailingCommaAllowed) {
-    //  terminating tokens for an expression list
-    while (token.kind == TokenKind.COMMA) {
-      expect(TokenKind.COMMA);
-      if (EXPR_LIST_TERMINATOR_SET.contains(token.kind)) {
-        if (!trailingCommaAllowed) {
-          reportError(token.start, "Trailing comma is allowed only in parenthesized tuples.");
-        }
-        break;
-      }
-      list.add(parseTest());
-    }
-  }
-
-  // dict_entry_list = ( (dict_entry ',')* dict_entry ','? )?
-  private List<DictExpression.Entry> parseDictEntryList() {
-    List<DictExpression.Entry> list = new ArrayList<>();
-    // the terminating token for a dict entry list
-    while (token.kind != TokenKind.RBRACE) {
-      list.add(parseDictEntry());
-      if (token.kind == TokenKind.COMMA) {
-        nextToken();
-      } else {
-        break;
-      }
-    }
-    return list;
-  }
-
-  // dict_entry = test ':' test
-  private DictExpression.Entry parseDictEntry() {
-    Expression key = parseTest();
-    int colonOffset = expect(TokenKind.COLON);
-    Expression value = parseTest();
-    return new DictExpression.Entry(locs, key, colonOffset, value);
-  }
-
-  // expr = STRING
-  private StringLiteral parseStringLiteral() {
-    Preconditions.checkState(token.kind == TokenKind.STRING);
-    StringLiteral literal =
-        new StringLiteral(locs, token.start, intern((String) token.value), token.end);
-    nextToken();
-    if (token.kind == TokenKind.STRING) {
-      reportError(token.start, "Implicit string concatenation is forbidden, use the + operator");
-    }
-    return literal;
-  }
-
-  //  primary = INTEGER
-  //          | STRING
-  //          | IDENTIFIER
-  //          | list_expression
-  //          | '(' ')'                    // a tuple with zero elements
-  //          | '(' expr ')'               // a parenthesized expression
-  //          | dict_expression
-  //          | '-' primary_with_suffix
-  private Expression parsePrimary() {
-    switch (token.kind) {
-      case INT:
-        {
-          IntegerLiteral literal =
-              new IntegerLiteral(locs, token.raw, token.start, (Integer) token.value);
-          nextToken();
-          return literal;
-        }
-
-      case STRING:
-        return parseStringLiteral();
-
-      case IDENTIFIER:
-        return parseIdent();
-
-      case LBRACKET: // [...]
-        return parseListMaker();
-
-      case LBRACE: // {...}
-        return parseDictExpression();
-
-      case LPAREN:
-        {
-          int lparenOffset = nextToken();
-
-          // empty tuple: ()
-          if (token.kind == TokenKind.RPAREN) {
-            int rparen = nextToken();
-            return new ListExpression(
-                locs, /*isTuple=*/ true, lparenOffset, ImmutableList.of(), rparen);
-          }
-
-          Expression e = parseTest();
-
-          // parenthesized expression: (e)
-          // TODO(adonovan): materialize paren expressions (for fidelity).
-          if (token.kind == TokenKind.RPAREN) {
-            nextToken();
-            return e;
-          }
-
-          // non-empty tuple: (e,) or (e, ..., e)
-          if (token.kind == TokenKind.COMMA) {
-            List<Expression> elems = new ArrayList<>();
-            elems.add(e);
-            parseExprList(elems, /*trailingCommaAllowed=*/ true);
-            int rparenOffset = expect(TokenKind.RPAREN);
-            return new ListExpression(locs, /*isTuple=*/ true, lparenOffset, elems, rparenOffset);
-          }
-
-          expect(TokenKind.RPAREN);
-          int end = syncTo(EXPR_TERMINATOR_SET);
-          return makeErrorExpression(lparenOffset, end);
-        }
-
-      case MINUS:
-      case PLUS:
-      case TILDE:
-        {
-          TokenKind op = token.kind;
-          int offset = nextToken();
-          Expression x = parsePrimaryWithSuffix();
-          return new UnaryOperatorExpression(locs, op, offset, x);
-        }
-
-      default:
-        {
-          int start = token.start;
-          syntaxError("expected expression");
-          int end = syncTo(EXPR_TERMINATOR_SET);
-          return makeErrorExpression(start, end);
-        }
-    }
-  }
-
-  // primary_with_suffix = primary (selector_suffix | slice_suffix | call_suffix)*
-  private Expression parsePrimaryWithSuffix() {
-    Expression e = parsePrimary();
-    while (true) {
-      if (token.kind == TokenKind.DOT) {
-        e = parseSelectorSuffix(e);
-      } else if (token.kind == TokenKind.LBRACKET) {
-        e = parseSliceSuffix(e);
-      } else if (token.kind == TokenKind.LPAREN) {
-        e = parseCallSuffix(e);
-      } else {
-        return e;
-      }
-    }
-  }
-
-  // slice_suffix = '[' expr? ':' expr?  ':' expr? ']'
-  //              | '[' expr? ':' expr? ']'
-  //              | '[' expr ']'
-  private Expression parseSliceSuffix(Expression e) {
-    int lbracketOffset = expect(TokenKind.LBRACKET);
-    Expression start = null;
-    Expression end = null;
-    Expression step = null;
-
-    if (token.kind != TokenKind.COLON) {
-      start = parseExpression();
-
-      // index x[i]
-      if (token.kind == TokenKind.RBRACKET) {
-        int rbracketOffset = expect(TokenKind.RBRACKET);
-        return new IndexExpression(locs, e, lbracketOffset, start, rbracketOffset);
-      }
-    }
-
-    // slice or substring x[i:j] or x[i:j:k]
-    expect(TokenKind.COLON);
-    if (token.kind != TokenKind.COLON && token.kind != TokenKind.RBRACKET) {
-      end = parseTest();
-    }
-    if (token.kind == TokenKind.COLON) {
-      expect(TokenKind.COLON);
-      if (token.kind != TokenKind.RBRACKET) {
-        step = parseTest();
-      }
-    }
-    int rbracketOffset = expect(TokenKind.RBRACKET);
-    return new SliceExpression(locs, e, lbracketOffset, start, end, step, rbracketOffset);
-  }
-
-  // Equivalent to 'exprlist' rule in Python grammar.
-  // loop_variables = primary_with_suffix ( ',' primary_with_suffix )* ','?
-  private Expression parseForLoopVariables() {
-    // We cannot reuse parseExpression because it would parse the 'in' operator.
-    // e.g.  "for i in e: pass"  -> we want to parse only "i" here.
-    Expression e1 = parsePrimaryWithSuffix();
-    if (token.kind != TokenKind.COMMA) {
-      return e1;
-    }
-
-    // unparenthesized tuple
-    List<Expression> elems = new ArrayList<>();
-    elems.add(e1);
-    while (token.kind == TokenKind.COMMA) {
-      expect(TokenKind.COMMA);
-      if (EXPR_LIST_TERMINATOR_SET.contains(token.kind)) {
-        break;
-      }
-      elems.add(parsePrimaryWithSuffix());
-    }
-    return new ListExpression(locs, /*isTuple=*/ true, -1, elems, -1);
-  }
-
-  // comprehension_suffix = 'FOR' loop_variables 'IN' expr comprehension_suffix
-  //                      | 'IF' expr comprehension_suffix
-  //                      | ']' | '}'
-  private Expression parseComprehensionSuffix(int loffset, Node body, TokenKind closingBracket) {
-    ImmutableList.Builder<Comprehension.Clause> clauses = ImmutableList.builder();
-    while (true) {
-      if (token.kind == TokenKind.FOR) {
-        int forOffset = nextToken();
-        Expression vars = parseForLoopVariables();
-        expect(TokenKind.IN);
-        // The expression cannot be a ternary expression ('x if y else z') due to
-        // conflicts in Python grammar ('if' is used by the comprehension).
-        Expression seq = parseTest(0);
-        clauses.add(new Comprehension.For(locs, forOffset, vars, seq));
-      } else if (token.kind == TokenKind.IF) {
-        int ifOffset = nextToken();
-        // [x for x in li if 1, 2]  # parse error
-        // [x for x in li if (1, 2)]  # ok
-        Expression cond = parseTest(0);
-        clauses.add(new Comprehension.If(locs, ifOffset, cond));
-      } else if (token.kind == closingBracket) {
-        break;
-      } else {
-        syntaxError("expected '" + closingBracket + "', 'for' or 'if'");
-        int end = syncPast(LIST_TERMINATOR_SET);
-        return makeErrorExpression(loffset, end);
-      }
-    }
-
-    boolean isDict = closingBracket == TokenKind.RBRACE;
-    int roffset = expect(closingBracket);
-    return new Comprehension(locs, isDict, loffset, body, clauses.build(), roffset);
-  }
-
-  // list_maker = '[' ']'
-  //            | '[' expr ']'
-  //            | '[' expr expr_list ']'
-  //            | '[' expr comprehension_suffix ']'
-  private Expression parseListMaker() {
-    int lbracketOffset = expect(TokenKind.LBRACKET);
-    if (token.kind == TokenKind.RBRACKET) { // empty List
-      int rbracketOffset = nextToken();
-      return new ListExpression(
-          locs, /*isTuple=*/ false, lbracketOffset, ImmutableList.of(), rbracketOffset);
-    }
-
-    Expression expression = parseTest();
-    switch (token.kind) {
-      case RBRACKET:
-        // [e], singleton list
-        {
-          int rbracketOffset = nextToken();
-          return new ListExpression(
-              locs,
-              /*isTuple=*/ false,
-              lbracketOffset,
-              ImmutableList.of(expression),
-              rbracketOffset);
-        }
-
-      case FOR:
-        // [e for x in y], list comprehension
-        return parseComprehensionSuffix(lbracketOffset, expression, TokenKind.RBRACKET);
-
-      case COMMA:
-        // [e, ...], list expression
-        {
-          List<Expression> elems = new ArrayList<>();
-          elems.add(expression);
-          parseExprList(elems, /*trailingCommaAllowed=*/ true);
-          if (token.kind == TokenKind.RBRACKET) {
-            int rbracketOffset = nextToken();
-            return new ListExpression(
-                locs, /*isTuple=*/ false, lbracketOffset, elems, rbracketOffset);
-          }
-
-          expect(TokenKind.RBRACKET);
-          int end = syncPast(LIST_TERMINATOR_SET);
-          return makeErrorExpression(lbracketOffset, end);
-        }
-
-      default:
-        {
-          syntaxError("expected ',', 'for' or ']'");
-          int end = syncPast(LIST_TERMINATOR_SET);
-          return makeErrorExpression(lbracketOffset, end);
-        }
-    }
-  }
-
-  // dict_expression = '{' '}'
-  //                 | '{' dict_entry_list '}'
-  //                 | '{' dict_entry comprehension_suffix '}'
-  private Expression parseDictExpression() {
-    int lbraceOffset = expect(TokenKind.LBRACE);
-    if (token.kind == TokenKind.RBRACE) { // empty Dict
-      int rbraceOffset = nextToken();
-      return new DictExpression(locs, lbraceOffset, ImmutableList.of(), rbraceOffset);
-    }
-
-    DictExpression.Entry entry = parseDictEntry();
-    if (token.kind == TokenKind.FOR) {
-      // Dict comprehension
-      return parseComprehensionSuffix(lbraceOffset, entry, TokenKind.RBRACE);
-    }
-
-    List<DictExpression.Entry> entries = new ArrayList<>();
-    entries.add(entry);
-    if (token.kind == TokenKind.COMMA) {
-      expect(TokenKind.COMMA);
-      entries.addAll(parseDictEntryList());
-    }
-    if (token.kind == TokenKind.RBRACE) {
-      int rbraceOffset = nextToken();
-      return new DictExpression(locs, lbraceOffset, entries, rbraceOffset);
-    }
-
-    expect(TokenKind.RBRACE);
-    int end = syncPast(DICT_TERMINATOR_SET);
-    return makeErrorExpression(lbraceOffset, end);
-  }
-
-  private Identifier parseIdent() {
-    if (token.kind != TokenKind.IDENTIFIER) {
-      int start = token.start;
-      int end = expect(TokenKind.IDENTIFIER);
-      return makeErrorExpression(start, end);
-    }
-
-    String name = (String) token.value;
-    int offset = nextToken();
-    return new Identifier(locs, name, offset);
-  }
-
-  // binop_expression = binop_expression OP binop_expression
-  //                  | parsePrimaryWithSuffix
-  // This function takes care of precedence between operators (see operatorPrecedence for
-  // the order), and it assumes left-to-right associativity.
-  private Expression parseBinOpExpression(int prec) {
-    Expression x = parseTest(prec + 1);
-    // The loop is not strictly needed, but it prevents risks of stack overflow. Depth is
-    // limited to number of different precedence levels (operatorPrecedence.size()).
-    TokenKind lastOp = null;
-    for (;;) {
-      if (token.kind == TokenKind.NOT) {
-        // If NOT appears when we expect a binary operator, it must be followed by IN.
-        // Since the code expects every operator to be a single token, we push a NOT_IN token.
-        expect(TokenKind.NOT);
-        if (token.kind != TokenKind.IN) {
-          syntaxError("expected 'in'");
-        }
-        token.kind = TokenKind.NOT_IN;
-      }
-
-      TokenKind op = token.kind;
-      if (!operatorPrecedence.get(prec).contains(op)) {
-        return x;
-      }
-
-      // Operator '==' and other operators of the same precedence (e.g. '<', 'in')
-      // are not associative.
-      if (lastOp != null && operatorPrecedence.get(prec).contains(TokenKind.EQUALS_EQUALS)) {
-        reportError(
-            token.start,
-            "Operator '%s' is not associative with operator '%s'. Use parens.",
-            lastOp,
-            op);
-      }
-
-      int opOffset = nextToken();
-      Expression y = parseTest(prec + 1);
-      x = optimizeBinOpExpression(x, op, opOffset, y);
-      lastOp = op;
-    }
-  }
-
-  // Optimize binary expressions.
-  // string literal + string literal can be concatenated into one string literal
-  // so we don't have to do the expensive string concatenation at runtime.
-  private Expression optimizeBinOpExpression(
-      Expression x, TokenKind op, int opOffset, Expression y) {
-    if (op == TokenKind.PLUS && x instanceof StringLiteral && y instanceof StringLiteral) {
-      return new StringLiteral(
-          locs,
-          x.getStartOffset(),
-          intern(((StringLiteral) x).getValue() + ((StringLiteral) y).getValue()),
-          y.getEndOffset());
-    }
-    return new BinaryOperatorExpression(locs, x, op, opOffset, y);
-  }
-
-  // Parses a non-tuple expression ("test" in Python terminology).
-  private Expression parseTest() {
-    int start = token.start;
-    Expression expr = parseTest(0);
-    if (token.kind == TokenKind.IF) {
-      nextToken();
-      Expression condition = parseTest(0);
-      if (token.kind == TokenKind.ELSE) {
-        nextToken();
-        Expression elseClause = parseTest();
-        return new ConditionalExpression(locs, expr, condition, elseClause);
-      } else {
-        reportError(start, "missing else clause in conditional expression or semicolon before if");
-        return expr; // Try to recover from error: drop the if and the expression after it. Ouch.
-      }
-    }
-    return expr;
-  }
-
-  private Expression parseTest(int prec) {
-    if (prec >= operatorPrecedence.size()) {
-      return parsePrimaryWithSuffix();
-    }
-    if (token.kind == TokenKind.NOT && operatorPrecedence.get(prec).contains(TokenKind.NOT)) {
-      return parseNotExpression(prec);
-    }
-    return parseBinOpExpression(prec);
-  }
-
-  // not_expr = 'not' expr
-  private Expression parseNotExpression(int prec) {
-    int notOffset = expect(TokenKind.NOT);
-    Expression x = parseTest(prec);
-    return new UnaryOperatorExpression(locs, TokenKind.NOT, notOffset, x);
-  }
-
-  // file_input = ('\n' | stmt)* EOF
-  private ImmutableList<Statement> parseFileInput() {
-    ImmutableList.Builder<Statement> list = ImmutableList.builder();
-    try {
-      while (token.kind != TokenKind.EOF) {
-        if (token.kind == TokenKind.NEWLINE) {
-          expectAndRecover(TokenKind.NEWLINE);
-        } else if (recoveryMode) {
-          // If there was a parse error, we want to recover here
-          // before starting a new top-level statement.
-          syncTo(STATEMENT_TERMINATOR_SET);
-          recoveryMode = false;
-        } else {
-          parseStatement(list);
-        }
-      }
-    } catch (StackOverflowError ex) {
-      // JVM threads have very limited stack, and deeply nested inputs can
-      // easily cause the parser to consume all available stack. It is hard
-      // to anticipate all the possible recursions in the parser, especially
-      // when considering error recovery. Consider a long list of dicts:
-      // even if the intended parse tree has a depth of only two,
-      // if each dict contains a syntax error, the parser will go into recovery
-      // and may discard each dict's closing '}', turning a shallow tree
-      // into a deep one (see b/157470754).
-      //
-      // So, for robustness, the parser treats StackOverflowError as a parse
-      // error, exhorting the user to report a bug.
-      reportError(
-          token.end,
-          "internal error: stack overflow in Starlark parser. Please report the bug and include"
-              + " the text of %s.\n"
-              + "%s",
-          locs.file(),
-          Throwables.getStackTraceAsString(ex));
-    }
-    return list.build();
-  }
-
-  // load '(' STRING (COMMA [IDENTIFIER EQUALS] STRING)+ COMMA? ')'
-  private Statement parseLoadStatement() {
-    int loadOffset = expect(TokenKind.LOAD);
-    expect(TokenKind.LPAREN);
-    if (token.kind != TokenKind.STRING) {
-      // error: module is not a string literal.
-      StringLiteral module = new StringLiteral(locs, token.start, "", token.end);
-      expect(TokenKind.STRING);
-      return new LoadStatement(locs, loadOffset, module, ImmutableList.of(), token.end);
-    }
-
-    StringLiteral module = parseStringLiteral();
-    if (token.kind == TokenKind.RPAREN) {
-      syntaxError("expected at least one symbol to load");
-      return new LoadStatement(locs, loadOffset, module, ImmutableList.of(), token.end);
-    }
-    expect(TokenKind.COMMA);
-
-    ImmutableList.Builder<LoadStatement.Binding> bindings = ImmutableList.builder();
-    // At least one symbol is required.
-    parseLoadSymbol(bindings);
-    while (token.kind != TokenKind.RPAREN && token.kind != TokenKind.EOF) {
-      // A trailing comma is permitted after the last symbol.
-      expect(TokenKind.COMMA);
-      if (token.kind == TokenKind.RPAREN) {
-        break;
-      }
-      parseLoadSymbol(bindings);
-    }
-
-    int rparen = expect(TokenKind.RPAREN);
-    return new LoadStatement(locs, loadOffset, module, bindings.build(), rparen);
-  }
-
-  /**
-   * Parses the next symbol argument of a load statement and puts it into the output map.
-   *
-   * <p>The symbol is either "name" (STRING) or name = "declared" (IDENTIFIER EQUALS STRING). If no
-   * alias is used, "name" and "declared" will be identical. "Declared" refers to the original name
-   * in the Bazel file that should be loaded, while "name" will be the key of the entry in the map.
-   */
-  private void parseLoadSymbol(ImmutableList.Builder<LoadStatement.Binding> symbols) {
-    if (token.kind != TokenKind.STRING && token.kind != TokenKind.IDENTIFIER) {
-      syntaxError("expected either a literal string or an identifier");
-      return;
-    }
-
-    String name = (String) token.value;
-    int nameOffset = token.start + (token.kind == TokenKind.STRING ? 1 : 0);
-    Identifier local = new Identifier(locs, name, nameOffset);
-
-    Identifier original;
-    if (token.kind == TokenKind.STRING) {
-      // load(..., "name")
-      original = local;
-    } else {
-      // load(..., local = "orig")
-      // The name "orig" is morally an identifier but, for legacy reasons (specifically,
-      // a partial implementation of Starlark embedded in a Python interpreter used by
-      // tests of Blaze), it must be a quoted string literal.
-      expect(TokenKind.IDENTIFIER);
-      expect(TokenKind.EQUALS);
-      if (token.kind != TokenKind.STRING) {
-        syntaxError("expected string");
-        return;
-      }
-      original = new Identifier(locs, (String) token.value, token.start + 1);
-    }
-    nextToken();
-    symbols.add(new LoadStatement.Binding(local, original));
-  }
-
-  // simple_stmt = small_stmt (';' small_stmt)* ';'? NEWLINE
-  private void parseSimpleStatement(ImmutableList.Builder<Statement> list) {
-    list.add(parseSmallStatement());
-
-    while (token.kind == TokenKind.SEMI) {
-      nextToken();
-      if (token.kind == TokenKind.NEWLINE) {
-        break;
-      }
-      list.add(parseSmallStatement());
-    }
-    expectAndRecover(TokenKind.NEWLINE);
-  }
-
-  //     small_stmt = assign_stmt
-  //                | expr
-  //                | load_stmt
-  //                | return_stmt
-  //                | BREAK | CONTINUE | PASS
-  //
-  //     assign_stmt = expr ('=' | augassign) expr
-  //
-  //     augassign = '+=' | '-=' | '*=' | '/=' | '%=' | '//=' | '&=' | '|=' | '^=' |'<<=' | '>>='
-  private Statement parseSmallStatement() {
-    // return
-    if (token.kind == TokenKind.RETURN) {
-      return parseReturnStatement();
-    }
-
-    // control flow
-    if (token.kind == TokenKind.BREAK
-        || token.kind == TokenKind.CONTINUE
-        || token.kind == TokenKind.PASS) {
-      TokenKind kind = token.kind;
-      int offset = nextToken();
-      return new FlowStatement(locs, kind, offset);
-    }
-
-    // load
-    if (token.kind == TokenKind.LOAD) {
-      return parseLoadStatement();
-    }
-
-    Expression lhs = parseExpression();
-
-    // lhs = rhs  or  lhs += rhs
-    TokenKind op = augmentedAssignments.get(token.kind);
-    if (token.kind == TokenKind.EQUALS || op != null) {
-      int opOffset = nextToken();
-      Expression rhs = parseExpression();
-      // op == null for ordinary assignment. TODO(adonovan): represent as EQUALS.
-      return new AssignmentStatement(locs, lhs, op, opOffset, rhs);
-    } else {
-      return new ExpressionStatement(locs, lhs);
-    }
-  }
-
-  // if_stmt = IF expr ':' suite [ELIF expr ':' suite]* [ELSE ':' suite]?
-  private IfStatement parseIfStatement() {
-    int ifOffset = expect(TokenKind.IF);
-    Expression cond = parseTest();
-    expect(TokenKind.COLON);
-    ImmutableList<Statement> body = parseSuite();
-    IfStatement ifStmt = new IfStatement(locs, TokenKind.IF, ifOffset, cond, body);
-    IfStatement tail = ifStmt;
-    while (token.kind == TokenKind.ELIF) {
-      int elifOffset = expect(TokenKind.ELIF);
-      cond = parseTest();
-      expect(TokenKind.COLON);
-      body = parseSuite();
-      IfStatement elif = new IfStatement(locs, TokenKind.ELIF, elifOffset, cond, body);
-      tail.setElseBlock(ImmutableList.of(elif));
-      tail = elif;
-    }
-    if (token.kind == TokenKind.ELSE) {
-      expect(TokenKind.ELSE);
-      expect(TokenKind.COLON);
-      body = parseSuite();
-      tail.setElseBlock(body);
-    }
-    return ifStmt;
-  }
-
-  // for_stmt = FOR IDENTIFIER IN expr ':' suite
-  private ForStatement parseForStatement() {
-    int forOffset = expect(TokenKind.FOR);
-    Expression vars = parseForLoopVariables();
-    expect(TokenKind.IN);
-    Expression collection = parseExpression();
-    expect(TokenKind.COLON);
-    ImmutableList<Statement> body = parseSuite();
-    return new ForStatement(locs, forOffset, vars, collection, body);
-  }
-
-  // def_stmt = DEF IDENTIFIER '(' arguments ')' ':' suite
-  private DefStatement parseDefStatement() {
-    int defOffset = expect(TokenKind.DEF);
-    Identifier ident = parseIdent();
-    expect(TokenKind.LPAREN);
-    ImmutableList<Parameter> params = parseParameters();
-    expect(TokenKind.RPAREN);
-    expect(TokenKind.COLON);
-    ImmutableList<Statement> block = parseSuite();
-    return new DefStatement(locs, defOffset, ident, params, block);
-  }
-
-  // Parse a list of function parameters.
-  // Validation of parameter ordering and uniqueness is the job of the Resolver.
-  private ImmutableList<Parameter> parseParameters() {
-    boolean hasParam = false;
-    ImmutableList.Builder<Parameter> list = ImmutableList.builder();
-
-    while (token.kind != TokenKind.RPAREN && token.kind != TokenKind.EOF) {
-      if (hasParam) {
-        expect(TokenKind.COMMA);
-        // The list may end with a comma.
-        if (token.kind == TokenKind.RPAREN) {
-          break;
-        }
-      }
-      Parameter param = parseFunctionParameter();
-      hasParam = true;
-      list.add(param);
-    }
-    return list.build();
-  }
-
-  // suite is typically what follows a colon (e.g. after def or for).
-  // suite = simple_stmt
-  //       | NEWLINE INDENT stmt+ OUTDENT
-  private ImmutableList<Statement> parseSuite() {
-    ImmutableList.Builder<Statement> list = ImmutableList.builder();
-    if (token.kind == TokenKind.NEWLINE) {
-      expect(TokenKind.NEWLINE);
-      if (token.kind != TokenKind.INDENT) {
-        reportError(token.start, "expected an indented block");
-        return list.build();
-      }
-      expect(TokenKind.INDENT);
-      while (token.kind != TokenKind.OUTDENT && token.kind != TokenKind.EOF) {
-        parseStatement(list);
-      }
-      expectAndRecover(TokenKind.OUTDENT);
-    } else {
-      parseSimpleStatement(list);
-    }
-    return list.build();
-  }
-
-  // return_stmt = RETURN [expr]
-  private ReturnStatement parseReturnStatement() {
-    int returnOffset = expect(TokenKind.RETURN);
-
-    Expression result = null;
-    if (!STATEMENT_TERMINATOR_SET.contains(token.kind)) {
-      result = parseExpression();
-    }
-    return new ReturnStatement(locs, returnOffset, result);
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/ParserInput.java b/src/main/java/com/google/devtools/build/lib/syntax/ParserInput.java
deleted file mode 100644
index c8da69c..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/ParserInput.java
+++ /dev/null
@@ -1,109 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.syntax;
-
-import static java.nio.charset.StandardCharsets.UTF_8;
-
-import com.google.common.base.Joiner;
-import com.google.common.base.Preconditions;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-
-/**
- * The apparent name and contents of a source file, for consumption by the parser. The file name
- * appears in the location information in the syntax tree, and in error messages, but the Starlark
- * interpreter will not attempt to open the file. However, the default behavior of {@link
- * EvalException#getMessageWithStack} attempts to read the specified file when formatting a stack
- * trace.
- *
- * <p>The parser consumes a stream of chars (UTF-16 codes), and the syntax positions reported by
- * {@link Node#getStartOffset} and {@link Location.column} are effectively indices into a char
- * array.
- */
-public final class ParserInput {
-
-  private final String file;
-  private final char[] content;
-
-  private ParserInput(char[] content, String file) {
-    this.content = content;
-    this.file = Preconditions.checkNotNull(file);
-  }
-
-  /** Returns the content of the input source. Callers must not modify the result. */
-  char[] getContent() {
-    return content;
-  }
-
-  /** Returns the apparent file name of the input source. */
-  public String getFile() {
-    return file;
-  }
-
-  /**
-   * Returns an input source that uses the name and content of the specified UTF-8-encoded text
-   * file.
-   */
-  public static ParserInput readFile(String file) throws IOException {
-    byte[] utf8 = Files.readAllBytes(Paths.get(file));
-    return fromUTF8(utf8, file);
-  }
-
-  /** Returns an unnamed input source that reads from a list of strings, joined by newlines. */
-  public static ParserInput fromLines(String... lines) {
-    return fromString(Joiner.on("\n").join(lines), "");
-  }
-
-  /**
-   * Returns an input source that reads from a UTF-8-encoded byte array. The caller is free to
-   * subsequently mutate the array.
-   */
-  public static ParserInput fromUTF8(byte[] bytes, String file) {
-    CharBuffer cb = UTF_8.decode(ByteBuffer.wrap(bytes));
-    char[] utf16 = new char[cb.length()];
-    cb.get(utf16);
-    return fromCharArray(utf16, file);
-  }
-
-  /**
-   * Returns an input source that reads from a Latin1-encoded byte array. The caller is free to
-   * subsequently mutate the array.
-   *
-   * <p>This function exists to support legacy uses of Latin1 in Bazel. Do not use Latin1 in new
-   * applications. (Consider this deprecated, without the fussy warnings.)
-   */
-  public static ParserInput fromLatin1(byte[] bytes, String file) {
-    char[] chars = new char[bytes.length];
-    for (int i = 0; i < bytes.length; i++) {
-      chars[i] = (char) (0xff & bytes[i]);
-    }
-    return new ParserInput(chars, file);
-  }
-
-  /** Returns an input source that reads from the given string. */
-  public static ParserInput fromString(String content, String file) {
-    return fromCharArray(content.toCharArray(), file);
-  }
-
-  /**
-   * Returns an input source that reads from the given char array. The caller must not subsequently
-   * modify the array.
-   */
-  public static ParserInput fromCharArray(char[] content, String file) {
-    return new ParserInput(content, file);
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Printer.java b/src/main/java/com/google/devtools/build/lib/syntax/Printer.java
deleted file mode 100644
index 0d1766a..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Printer.java
+++ /dev/null
@@ -1,359 +0,0 @@
-// Copyright 2015 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.syntax;
-
-import java.util.Arrays;
-import java.util.IllegalFormatException;
-import java.util.List;
-import java.util.Map;
-import java.util.MissingFormatWidthException;
-
-/**
- * A printer of Starlark values.
- *
- * <p>Subclasses may override methods such as {@link #repr} and {@link #printList} to alter the
- * formatting behavior.
- */
-// TODO(adonovan): disallow printing of objects that are not Starlark values.
-public class Printer {
-
-  private final StringBuilder buffer;
-
-  // Stack of values in the middle of being printed.
-  // Each renders as "..." if recursively encountered,
-  // indicating a cycle.
-  private Object[] stack;
-  private int depth;
-
-  /** Creates a printer that writes to the given buffer. */
-  public Printer(StringBuilder buffer) {
-    this.buffer = buffer;
-  }
-
-  /** Creates a printer that uses a fresh buffer. */
-  public Printer() {
-    this(new StringBuilder());
-  }
-
-  /** Appends a char to the printer's buffer */
-  public final Printer append(char c) {
-    buffer.append(c);
-    return this;
-  }
-
-  /** Appends a char sequence to the printer's buffer */
-  public final Printer append(CharSequence s) {
-    buffer.append(s);
-    return this;
-  }
-
-  /** Appends a char subsequence to the printer's buffer */
-  public final Printer append(CharSequence s, int start, int end) {
-    buffer.append(s, start, end);
-    return this;
-  }
-
-  /**
-   * Appends a list to the printer's buffer. List elements are rendered with {@code repr}.
-   *
-   * <p>May be overridden by subclasses.
-   *
-   * @param list the list of objects to repr (each as with repr)
-   * @param before a string to print before the list items, e.g. an opening bracket
-   * @param separator a separator to print between items
-   * @param after a string to print after the list items, e.g. a closing bracket
-   */
-  public Printer printList(Iterable<?> list, String before, String separator, String after) {
-    this.append(before);
-    String sep = "";
-    for (Object elem : list) {
-      this.append(sep);
-      sep = separator;
-      this.repr(elem);
-    }
-    return this.append(after);
-  }
-
-  @Override
-  public final String toString() {
-    return buffer.toString();
-  }
-
-  /**
-   * Appends the {@code StarlarkValue.debugPrint} representation of a value (as used by the Starlark
-   * {@code print} statement) to the printer's buffer.
-   *
-   * <p>Implementations of StarlarkValue may define their own behavior of {@code debugPrint}.
-   */
-  public Printer debugPrint(Object o) {
-    if (o instanceof StarlarkValue) {
-      ((StarlarkValue) o).debugPrint(this);
-      return this;
-    }
-
-    return this.str(o);
-  }
-
-  /**
-   * Appends the {@code StarlarkValue.str} representation of a value to the printer's buffer. Unlike
-   * {@code repr(x)}, it does not quote strings at top level, though strings and other values
-   * appearing as elements of other structures are quoted as if by {@code repr}.
-   *
-   * <p>Implementations of StarlarkValue may define their own behavior of {@code str}.
-   */
-  public Printer str(Object o) {
-    if (o instanceof String) {
-      return this.append((String) o);
-
-    } else if (o instanceof StarlarkValue) {
-      ((StarlarkValue) o).str(this);
-      return this;
-
-    } else {
-      return this.repr(o);
-    }
-  }
-
-  /**
-   * Appends the {@code StarlarkValue.repr} (quoted) representation of a value to the printer's
-   * buffer. The quoted form is often a Starlark expression that evaluates to the value.
-   *
-   * <p>Implementations of StarlarkValue may define their own behavior of {@code repr}.
-   *
-   * <p>Cyclic values are rendered as {@code ...} if they are recursively encountered by the same
-   * printer. (Implementations of {@link StarlarkValue#repr} should avoid calling {@code
-   * Starlark#repr}, as it creates another printer, which hide cycles from the cycle detector.)
-   *
-   * <p>In addition to Starlark values, {@code repr} also prints instances of classes Map, List,
-   * Map.Entry, or Class. All other values are formatted using their {@code toString} method.
-   * TODO(adonovan): disallow that.
-   */
-  public Printer repr(Object o) {
-    // atomic values
-    if (o == null) {
-      // Java null is not a valid Starlark value, but sometimes printers are used on non-Starlark
-      // values such as Locations or Nodes.
-      return this.append("null");
-
-    } else if (o instanceof String) {
-      appendQuoted((String) o);
-      return this;
-
-    } else if (o instanceof Integer) {
-      this.buffer.append((int) o);
-      return this;
-
-    } else if (o instanceof Boolean) {
-      this.append(((boolean) o) ? "True" : "False");
-      return this;
-
-    } else if (o instanceof Class) { // (a non-Starlark value)
-      this.append(Starlark.classType((Class<?>) o));
-      return this;
-    }
-
-    // compound values
-
-    if (!push(o)) {
-      return this.append("..."); // elided cycle
-    }
-    try {
-      if (o instanceof StarlarkValue) {
-        ((StarlarkValue) o).repr(this);
-
-        // -- non-Starlark values --
-
-      } else if (o instanceof Map) {
-        Map<?, ?> dict = (Map<?, ?>) o;
-        this.printList(dict.entrySet(), "{", ", ", "}");
-
-      } else if (o instanceof List) {
-        this.printList((List) o, "[", ", ", "]");
-
-      } else if (o instanceof Map.Entry) {
-        Map.Entry<?, ?> entry = (Map.Entry<?, ?>) o;
-        this.repr(entry.getKey());
-        this.append(": ");
-        this.repr(entry.getValue());
-
-      } else {
-        // All other non-Starlark Java values (e.g. Node, Location).
-        // Starlark code cannot access values of o that would reach here,
-        // and native code is already trusted to be deterministic.
-        this.append(o.toString());
-      }
-    } finally {
-      pop();
-    }
-
-    return this;
-  }
-
-  private Printer appendQuoted(String s) {
-    this.append('"');
-    int len = s.length();
-    for (int i = 0; i < len; i++) {
-      char c = s.charAt(i);
-      escapeCharacter(c);
-    }
-    return this.append('"');
-  }
-
-  private Printer backslashChar(char c) {
-    return this.append('\\').append(c);
-  }
-
-  private Printer escapeCharacter(char c) {
-    if (c == '"') {
-      return backslashChar(c);
-    }
-    switch (c) {
-      case '\\':
-        return backslashChar('\\');
-      case '\r':
-        return backslashChar('r');
-      case '\n':
-        return backslashChar('n');
-      case '\t':
-        return backslashChar('t');
-      default:
-        if (c < 32) {
-          // TODO(bazel-team): support \x escapes
-          return this.append(String.format("\\x%02x", (int) c));
-        }
-        return this.append(c); // no need to support UTF-8
-    }
-  }
-
-  // Reports whether x is already present on the visitation stack, pushing it if not.
-  private boolean push(Object x) {
-    // cyclic?
-    for (int i = 0; i < depth; i++) {
-      if (x == stack[i]) {
-        return false;
-      }
-    }
-
-    if (stack == null) {
-      this.stack = new Object[4];
-    } else if (depth == stack.length) {
-      this.stack = Arrays.copyOf(stack, 2 * stack.length);
-    }
-    this.stack[depth++] = x;
-    return true;
-  }
-
-  private void pop() {
-    this.stack[--depth] = null;
-  }
-
-  /**
-   * Appends a string, formatted as if by Starlark's {@code str % tuple} operator, to the printer's
-   * buffer.
-   *
-   * <p>Supported conversions:
-   *
-   * <ul>
-   *   <li>{@code %s} (convert as if by {@code str()})
-   *   <li>{@code %r} (convert as if by {@code repr()})
-   *   <li>{@code %d} (convert an integer to its decimal representation)
-   * </ul>
-   *
-   * To encode a literal percent character, escape it as {@code %%}. It is an error to have a
-   * non-escaped {@code %} at the end of the string or followed by any character not listed above.
-   *
-   * @param format the format string
-   * @param arguments an array containing arguments to substitute into the format operators in order
-   * @throws IllegalFormatException if the format string is invalid or the arguments do not match it
-   */
-  public static void format(Printer printer, String format, Object... arguments) {
-    formatWithList(printer, format, Arrays.asList(arguments));
-  }
-
-  /** Same as {@link #format}, but with a list instead of variadic args. */
-  public static void formatWithList(Printer printer, String pattern, List<?> arguments) {
-    // N.B. MissingFormatWidthException is the only kind of IllegalFormatException
-    // whose constructor can take and display arbitrary error message, hence its use below.
-    // TODO(adonovan): this suggests we're using the wrong exception. Throw IAE?
-
-    int length = pattern.length();
-    int argLength = arguments.size();
-    int i = 0; // index of next character in pattern
-    int a = 0; // index of next argument in arguments
-
-    while (i < length) {
-      int p = pattern.indexOf('%', i);
-      if (p == -1) {
-        printer.append(pattern, i, length);
-        break;
-      }
-      if (p > i) {
-        printer.append(pattern, i, p);
-      }
-      if (p == length - 1) {
-        throw new MissingFormatWidthException(
-            "incomplete format pattern ends with %: " + Starlark.repr(pattern));
-      }
-      char directive = pattern.charAt(p + 1);
-      i = p + 2;
-      switch (directive) {
-        case '%':
-          printer.append('%');
-          continue;
-        case 'd':
-        case 'r':
-        case 's':
-          if (a >= argLength) {
-            throw new MissingFormatWidthException(
-                "not enough arguments for format pattern "
-                    + Starlark.repr(pattern)
-                    + ": "
-                    + Starlark.repr(Tuple.copyOf(arguments)));
-          }
-          Object argument = arguments.get(a++);
-          switch (directive) {
-            case 'd':
-              if (!(argument instanceof Integer)) {
-                throw new MissingFormatWidthException(
-                    "invalid argument " + Starlark.repr(argument) + " for format pattern %d");
-              }
-              printer.append(argument.toString());
-              continue;
-
-            case 'r':
-              printer.repr(argument);
-              continue;
-
-            case 's':
-              printer.str(argument);
-              continue;
-
-            default:
-              // no-op
-          }
-          // fall through
-        default:
-          throw new MissingFormatWidthException(
-              // The call to Starlark.repr doesn't cause an infinite recursion because it's
-              // only used to format a string properly
-              String.format(
-                  "unsupported format character \"%s\" at index %s in %s",
-                  String.valueOf(directive), p + 1, Starlark.repr(pattern)));
-      }
-    }
-    if (a < argLength) {
-      throw new MissingFormatWidthException("not all arguments converted during string formatting");
-    }
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Program.java b/src/main/java/com/google/devtools/build/lib/syntax/Program.java
deleted file mode 100644
index 576b60a..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Program.java
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright 2020 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
-
-/**
- * An opaque, executable representation of a valid Starlark program. Programs may
- * [eventually---TODO(adonovan)] be efficiently serialized and deserialized without parsing and
- * recompiling.
- */
-public final class Program {
-
-  private final Resolver.Function body;
-  private final ImmutableList<String> loads;
-
-  private Program(Resolver.Function body, ImmutableList<String> loads) {
-    // TODO(adonovan): compile here.
-    this.body = body;
-    this.loads = loads;
-  }
-
-  // TODO(adonovan): eliminate once Eval no longer needs access to syntax.
-  public Resolver.Function getResolvedFunction() {
-    return body;
-  }
-
-  /** Returns the file name of this compiled program. */
-  public String getFilename() {
-    return body.getLocation().file();
-  }
-
-  /** Returns the list of load strings of this compiled program, in source order. */
-  public ImmutableList<String> getLoads() {
-    return loads;
-  }
-
-  /**
-   * Resolves a file syntax tree in the specified environment and compiles it to a Program. This
-   * operation mutates the syntax tree, both by resolving identifiers and recording local variables,
-   * and in case of error, by appending to {@code file.errors()}.
-   *
-   * @throws SyntaxError.Exception in case of resolution error, or if the syntax tree already
-   *     contained syntax scan/parse errors. Resolution errors are added to {@code file.errors()}.
-   */
-  public static Program compileFile(StarlarkFile file, Resolver.Module env)
-      throws SyntaxError.Exception {
-    Resolver.resolveFile(file, env);
-    if (!file.ok()) {
-      throw new SyntaxError.Exception(file.errors());
-    }
-    return compileResolvedFile(file);
-  }
-
-  /** Variant of {@link #compileFile} for an already-resolved file syntax tree. */
-  // TODO(adonovan): eliminate. This is a stop-gap because Bazel's Skyframe functions
-  // are currently split as parse/resolve + compile/run, not parse/resolve/compile + run.
-  public static Program compileResolvedFile(StarlarkFile file) {
-    Preconditions.checkState(file.ok());
-
-    // Extract load statements.
-    ImmutableList.Builder<String> loads = ImmutableList.builder();
-    for (Statement stmt : file.getStatements()) {
-      if (stmt instanceof LoadStatement) {
-        LoadStatement load = (LoadStatement) stmt;
-        String module = load.getImport().getValue();
-        loads.add(module);
-      }
-    }
-
-    return new Program(file.getResolvedFunction(), loads.build());
-  }
-
-  /**
-   * Resolves an expression syntax tree in the specified environment and compiles it to a Program.
-   * This operation mutates the syntax tree. The {@code options} must match those used when parsing
-   * expression.
-   *
-   * @throws SyntaxError.Exception in case of resolution error.
-   */
-  public static Program compileExpr(Expression expr, Resolver.Module module, FileOptions options)
-      throws SyntaxError.Exception {
-    Resolver.Function body = Resolver.resolveExpr(expr, module, options);
-    return new Program(body, /*loads=*/ ImmutableList.of());
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/RangeList.java b/src/main/java/com/google/devtools/build/lib/syntax/RangeList.java
deleted file mode 100644
index 789f201..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/RangeList.java
+++ /dev/null
@@ -1,179 +0,0 @@
-// Copyright 2018 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.UnmodifiableIterator;
-import java.util.AbstractList;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import javax.annotation.concurrent.Immutable;
-import net.starlark.java.annot.StarlarkBuiltin;
-import net.starlark.java.annot.StarlarkDocumentationCategory;
-
-/**
- * A sequence returned by the {@code range} function invocation.
- *
- * <p>Instead of eagerly allocating an array with all elements of the sequence, this class uses
- * simple math to compute a value at each index. This is particularly useful when range is huge or
- * only a few elements from it are used.
- *
- * <p>Eventually {@code range} function should produce an instance of the {@code range} type as is
- * the case in Python 3, but for now to preserve backwards compatibility with Python 2, {@code list}
- * is returned.
- */
-@StarlarkBuiltin(
-    name = "range",
-    category = StarlarkDocumentationCategory.BUILTIN,
-    doc =
-        "A language built-in type to support ranges. Example of range literal:<br>"
-            + "<pre class=language-python>x = range(1, 10, 3)</pre>"
-            + "Accessing elements is possible using indexing (starts from <code>0</code>):<br>"
-            + "<pre class=language-python>e = x[1]   # e == 2</pre>"
-            + "Ranges do not support the <code>+</code> operator for concatenation."
-            + "Similar to strings, ranges support slice operations:"
-            + "<pre class=language-python>range(10)[1:3]   # range(1, 3)\n"
-            + "range(10)[::2]  # range(0, 10, 2)\n"
-            + "range(10)[3:0:-1]  # range(3, 0, -1)</pre>"
-            + "Ranges are immutable, as in Python 3.")
-@Immutable
-final class RangeList extends AbstractList<Integer> implements Sequence<Integer> {
-
-  private final int start;
-  private final int stop;
-  private final int step;
-  private final int size; // (derived)
-
-  RangeList(int start, int stop, int step) {
-    Preconditions.checkArgument(step != 0);
-
-    this.start = start;
-    this.stop = stop;
-    this.step = step;
-
-    // compute size.
-    // Python version:
-    // https://github.com/python/cpython/blob/09bb918a61031377d720f1a0fa1fe53c962791b6/Objects/rangeobject.c#L144
-    int low; // [low,high) is a half-open interval
-    int high;
-    if (step > 0) {
-      low = start;
-      high = stop;
-    } else {
-      low = stop;
-      high = start;
-      step = -step;
-    }
-    if (low >= high) {
-      this.size = 0;
-    } else {
-      int diff = high - low - 1;
-      this.size = diff / step + 1;
-    }
-  }
-
-  @Override
-  public boolean contains(Object x) {
-    if (!(x instanceof Integer)) {
-      return false;
-    }
-    int i = (Integer) x;
-    // constant-time implementation
-    if (step > 0) {
-      return start <= i && i < stop && (i - start) % step == 0;
-    } else {
-      return stop < i && i <= start && (i - start) % step == 0;
-    }
-  }
-
-  @Override
-  public Integer get(int index) {
-    if (index < 0 || index >= size()) {
-      throw new ArrayIndexOutOfBoundsException(index + ":" + this);
-    }
-    return at(index);
-  }
-
-  @Override
-  public int size() {
-    return size;
-  }
-
-  @Override
-  public int hashCode() {
-    return 7873 ^ (5557 * start) ^ (3251 * step) ^ (1091 * size);
-  }
-
-  @Override
-  public boolean equals(Object other) {
-    if (!(other instanceof RangeList)) {
-      return false;
-    }
-    RangeList that = (RangeList) other;
-
-    // Two RangeLists compare equal if they denote the same sequence.
-    if (this.size != that.size) {
-      return false; // sequences differ in length
-    }
-    if (this.size == 0) {
-      return true; // both sequences are empty
-    }
-    if (this.start != that.start) {
-      return false; // first element differs
-    }
-    return this.size == 1 || this.step == that.step;
-  }
-
-  @Override
-  public Iterator<Integer> iterator() {
-    return new UnmodifiableIterator<Integer>() {
-      int cursor = start;
-
-      @Override
-      public boolean hasNext() {
-        return (step > 0) ? (cursor < stop) : (cursor > stop);
-      }
-
-      @Override
-      public Integer next() {
-        if (!hasNext()) {
-          throw new NoSuchElementException();
-        }
-        int current = cursor;
-        cursor += step;
-        return current;
-      }
-    };
-  }
-
-  @Override
-  public Sequence<Integer> getSlice(Mutability mu, int start, int stop, int step) {
-    return new RangeList(at(start), at(stop), step * this.step);
-  }
-
-  // Like get, but without bounds check or Integer allocation.
-  int at(int i) {
-    return start + step * i;
-  }
-
-  @Override
-  public void repr(Printer printer) {
-    if (step == 1) {
-      Printer.format(printer, "range(%d, %d)", start, stop);
-    } else {
-      Printer.format(printer, "range(%d, %d, %d)", start, stop, step);
-    }
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Resolver.java b/src/main/java/com/google/devtools/build/lib/syntax/Resolver.java
deleted file mode 100644
index ad56e3b..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Resolver.java
+++ /dev/null
@@ -1,839 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
-import com.google.errorprone.annotations.FormatMethod;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import javax.annotation.Nullable;
-import net.starlark.java.spelling.SpellChecker;
-
-/**
- * The Resolver resolves each identifier in a syntax tree to its binding, and performs other
- * validity checks.
- *
- * <p>When a variable is defined, it is visible in the entire block. For example, a global variable
- * is visible in the entire file; a variable in a function is visible in the entire function block
- * (even on the lines before its first assignment).
- *
- * <p>Resolution is a mutation of the syntax tree, as it attaches binding information to Identifier
- * nodes. (In the future, it will attach additional information to functions to support lexical
- * scope, and even compilation of the trees to bytecode.) Resolution errors are reported in the
- * analogous manner to scan/parse errors: for a StarlarkFile, they are appended to {@code
- * StarlarkFile.errors}; for an expression they are reported by an SyntaxError.Exception exception.
- * It is legal to resolve a file that already contains scan/parse errors, though it may lead to
- * secondary errors.
- */
-public final class Resolver extends NodeVisitor {
-
-  // TODO(adonovan): use "keyword" (not "named") and "required" (not "mandatory") terminology
-  // everywhere, including the spec.
-
-  /** Scope discriminates the scope of a binding: global, local, etc. */
-  public enum Scope {
-    // TODO(adonovan): Add UNIVERSAL, FREE, CELL.
-    // (PREDECLARED vs UNIVERSAL allows us to represent the app-dependent and fixed parts of the
-    // predeclared environment separately, reducing the amount of copying.)
-
-    /** Binding is local to a function, comprehension, or file (e.g. load). */
-    LOCAL,
-    /** Binding occurs outside any function or comprehension. */
-    GLOBAL,
-    /** Binding is predeclared by the core or application. */
-    PREDECLARED;
-
-    @Override
-    public String toString() {
-      return super.toString().toLowerCase();
-    }
-  }
-
-  /**
-   * A Binding is a static abstraction of a variable. The Resolver maps each Identifier to a
-   * Binding.
-   */
-  public static final class Binding {
-
-    private final Scope scope;
-    @Nullable private final Identifier first; // first binding use, if syntactic
-    private final int index; // within its block (currently unused)
-
-    private Binding(Scope scope, @Nullable Identifier first, int index) {
-      this.scope = scope;
-      this.first = first;
-      this.index = index;
-    }
-
-    /** Returns the scope of the binding. */
-    public Scope getScope() {
-      return scope;
-    }
-
-    @Override
-    public String toString() {
-      return first == null
-          ? scope.toString()
-          : String.format(
-              "%s[%d] %s @ %s", scope, index, first.getName(), first.getStartLocation());
-    }
-  }
-
-  /** A Resolver.Function records information about a resolved function. */
-  public static final class Function {
-
-    private final String name;
-    private final Location location;
-    private final ImmutableList<Parameter> params;
-    private final ImmutableList<Statement> body;
-    private final boolean hasVarargs;
-    private final boolean hasKwargs;
-    private final int numKeywordOnlyParams;
-    private final ImmutableList<String> parameterNames;
-    private final boolean isToplevel;
-
-    private Function(
-        String name,
-        Location loc,
-        ImmutableList<Parameter> params,
-        ImmutableList<Statement> body,
-        boolean hasVarargs,
-        boolean hasKwargs,
-        int numKeywordOnlyParams) {
-      this.name = name;
-      this.location = loc;
-      this.params = params;
-      this.body = body;
-      this.hasVarargs = hasVarargs;
-      this.hasKwargs = hasKwargs;
-      this.numKeywordOnlyParams = numKeywordOnlyParams;
-
-      ImmutableList.Builder<String> names = ImmutableList.builderWithExpectedSize(params.size());
-      for (Parameter p : params) {
-        names.add(p.getName());
-      }
-      this.parameterNames = names.build();
-
-      this.isToplevel = name.equals("<toplevel>");
-    }
-
-    /**
-     * Returns the name of the function. It may be "<toplevel>" for the implicit function that holds
-     * the top-level statements of a file, or "<expr>" for the implicit function that evaluates a
-     * single expression.
-     */
-    public String getName() {
-      return name;
-    }
-
-    /** Returns the location of the function's identifier. */
-    public Location getLocation() {
-      return location;
-    }
-
-    /**
-     * Returns the function's parameters, in "run-time order": non-keyword-only parameters,
-     * keyword-only parameters, {@code *args}, and finally {@code **kwargs}. A bare {@code *}
-     * parameter is dropped.
-     */
-    public ImmutableList<Parameter> getParameters() {
-      return params;
-    }
-
-    /**
-     * Returns the effective statements of the function's body. (For the implicit function created
-     * to evaluate a single standalone expression, this may contain a synthesized Return statement.)
-     */
-    // TODO(adonovan): eliminate when we switch to compiler.
-    public ImmutableList<Statement> getBody() {
-      return body;
-    }
-
-    /** Reports whether the function has an {@code *args} parameter. */
-    public boolean hasVarargs() {
-      return hasVarargs;
-    }
-
-    /** Reports whether the function has a {@code **kwargs} parameter. */
-    public boolean hasKwargs() {
-      return hasKwargs;
-    }
-
-    /**
-     * Returns the number of the function's keyword-only parameters, such as {@code c} in {@code def
-     * f(a, *b, c, **d)} or {@code def f(a, *, c, **d)}.
-     */
-    public int numKeywordOnlyParams() {
-      return numKeywordOnlyParams;
-    }
-
-    /** Returns the names of the parameters. Order is as for {@link #getParameters}. */
-    public ImmutableList<String> getParameterNames() {
-      return parameterNames;
-    }
-
-    /**
-     * isToplevel indicates that this is the <toplevel> function containing top-level statements of
-     * a file. It causes assignments to unresolved identifiers to update the module, not the lexical
-     * frame.
-     */
-    // TODO(adonovan): remove this hack when identifier resolution is accurate.
-    public boolean isToplevel() {
-      return isToplevel;
-    }
-  }
-
-  /**
-   * Module is a static abstraction of a Starlark module. It describes the set of variable names for
-   * use during name resolution.
-   */
-  public interface Module {
-
-    // TODO(adonovan): opt: for efficiency, turn this into a predicate, not an enumerable set,
-    // and look up bindings as they are needed, not preemptively.
-    // Otherwise we must do work proportional to the number of bindings in the
-    // environment, not the number of free variables of the file/expression.
-    //
-    // A single method will then suffice:
-    //   Scope resolve(String name) throws Undeclared
-
-    /** Returns the set of names defined by this module. The caller must not modify the set. */
-    Set<String> getNames();
-
-    /**
-     * Returns (optionally) a more specific error for an undeclared name than the generic message.
-     * This hook allows the module to implement flag-enabled names without any knowledge in this
-     * file.
-     */
-    @Nullable
-    default String getUndeclaredNameError(String name) {
-      return null;
-    }
-  }
-
-  private static class Block {
-    private final Map<String, Binding> bindings = new HashMap<>();
-    private final Scope scope;
-    @Nullable private final Block parent;
-
-    Block(Scope scope, @Nullable Block parent) {
-      this.scope = scope;
-      this.parent = parent;
-    }
-  }
-
-  private final List<SyntaxError> errors;
-  private final FileOptions options;
-  private final Module module;
-  private Block block;
-  private int loopCount;
-
-  // Shared binding for all predeclared names.
-  private static final Binding PREDECLARED = new Binding(Scope.PREDECLARED, null, 0);
-
-  private Resolver(List<SyntaxError> errors, Module module, FileOptions options) {
-    this.errors = errors;
-    this.module = module;
-    this.options = options;
-
-    this.block = new Block(Scope.PREDECLARED, null);
-    for (String name : module.getNames()) {
-      block.bindings.put(name, PREDECLARED);
-    }
-  }
-
-  // Formats and reports an error at the start of the specified node.
-  @FormatMethod
-  private void errorf(Node node, String format, Object... args) {
-    errorf(node.getStartLocation(), format, args);
-  }
-
-  // Formats and reports an error at the specified location.
-  @FormatMethod
-  private void errorf(Location loc, String format, Object... args) {
-    errors.add(new SyntaxError(loc, String.format(format, args)));
-  }
-
-  /**
-   * First pass: add bindings for all variables to the current block. This is done because symbols
-   * are sometimes used before their definition point (e.g. functions are not necessarily declared
-   * in order).
-   */
-  // TODO(adonovan): eliminate this first pass by using go.starlark.net one-pass approach.
-  private void createBindings(Iterable<Statement> stmts) {
-    for (Statement stmt : stmts) {
-      createBindings(stmt);
-    }
-  }
-
-  private void createBindings(Statement stmt) {
-    switch (stmt.kind()) {
-      case ASSIGNMENT:
-        createBindings(((AssignmentStatement) stmt).getLHS());
-        break;
-      case IF:
-        IfStatement ifStmt = (IfStatement) stmt;
-        createBindings(ifStmt.getThenBlock());
-        if (ifStmt.getElseBlock() != null) {
-          createBindings(ifStmt.getElseBlock());
-        }
-        break;
-      case FOR:
-        ForStatement forStmt = (ForStatement) stmt;
-        createBindings(forStmt.getVars());
-        createBindings(forStmt.getBody());
-        break;
-      case DEF:
-        DefStatement def = (DefStatement) stmt;
-        bind(def.getIdentifier());
-        break;
-      case LOAD:
-        LoadStatement load = (LoadStatement) stmt;
-        Set<String> names = new HashSet<>();
-        for (LoadStatement.Binding b : load.getBindings()) {
-          // Reject load('...', '_private').
-          Identifier orig = b.getOriginalName();
-          if (orig.isPrivate() && !options.allowLoadPrivateSymbols()) {
-            errorf(orig, "symbol '%s' is private and cannot be imported", orig.getName());
-          }
-
-          // The allowToplevelRebinding check is not applied to all files
-          // but we apply it to each load statement as a special case,
-          // and emit a better error message than the generic check.
-          if (!names.add(b.getLocalName().getName())) {
-            errorf(
-                b.getLocalName(),
-                "load statement defines '%s' more than once",
-                b.getLocalName().getName());
-          }
-        }
-
-        // TODO(adonovan): support options.loadBindsGlobally().
-        // Requires that we open a LOCAL block for each file,
-        // as well as its Module block, and select which block
-        // to declare it in. See go.starlark.net implementation.
-
-        for (LoadStatement.Binding b : load.getBindings()) {
-          bind(b.getLocalName());
-        }
-        break;
-      case EXPRESSION:
-      case FLOW:
-      case RETURN:
-        // nothing to declare
-    }
-  }
-
-  private void createBindings(Expression lhs) {
-    for (Identifier id : Identifier.boundIdentifiers(lhs)) {
-      bind(id);
-    }
-  }
-
-  private void assign(Expression lhs) {
-    if (lhs instanceof Identifier) {
-      Identifier id = (Identifier) lhs;
-      // Bindings are created by the first pass (createBindings),
-      // so there's nothing to do here.
-      Preconditions.checkNotNull(block.bindings.get(id.getName()));
-    } else if (lhs instanceof IndexExpression) {
-      visit(lhs);
-    } else if (lhs instanceof ListExpression) {
-      for (Expression elem : ((ListExpression) lhs).getElements()) {
-        assign(elem);
-      }
-    } else {
-      // TODO(adonovan): support x.f = y.
-      errorf(lhs, "cannot assign to '%s'", lhs);
-    }
-  }
-
-  @Override
-  public void visit(Identifier id) {
-    for (Block b = block; b != null; b = b.parent) {
-      Binding bind = b.bindings.get(id.getName());
-      if (bind != null) {
-        if (options.recordScope()) {
-          id.setBinding(bind);
-        }
-        return;
-      }
-    }
-
-    // The identifier might not exist because it was restricted (hidden) by flags.
-    // If this is the case, output a more helpful error message than 'not found'.
-    String error = module.getUndeclaredNameError(id.getName());
-    if (error == null) {
-      // generic error
-      error = createInvalidIdentifierException(id.getName(), getAllSymbols());
-    }
-    errorf(id, "%s", error);
-  }
-
-  private static String createInvalidIdentifierException(String name, Set<String> candidates) {
-    if (!Identifier.isValid(name)) {
-      // Identifier was created by Parser.makeErrorExpression and contains misparsed text.
-      return "contains syntax errors";
-    }
-
-    String suggestion = SpellChecker.didYouMean(name, candidates);
-    return "name '" + name + "' is not defined" + suggestion;
-  }
-
-  @Override
-  public void visit(ReturnStatement node) {
-    if (block.scope != Scope.LOCAL) {
-      errorf(node, "return statements must be inside a function");
-    }
-    super.visit(node);
-  }
-
-  @Override
-  public void visit(CallExpression node) {
-    // validate call arguments
-    boolean seenVarargs = false;
-    boolean seenKwargs = false;
-    Set<String> keywords = null;
-    for (Argument arg : node.getArguments()) {
-      if (arg instanceof Argument.Positional) {
-        if (seenVarargs) {
-          errorf(arg, "positional argument may not follow *args");
-        } else if (seenKwargs) {
-          errorf(arg, "positional argument may not follow **kwargs");
-        } else if (keywords != null) {
-          errorf(arg, "positional argument may not follow keyword argument");
-        }
-
-      } else if (arg instanceof Argument.Keyword) {
-        String keyword = ((Argument.Keyword) arg).getName();
-        if (seenVarargs) {
-          errorf(arg, "keyword argument %s may not follow *args", keyword);
-        } else if (seenKwargs) {
-          errorf(arg, "keyword argument %s may not follow **kwargs", keyword);
-        }
-        if (keywords == null) {
-          keywords = new HashSet<>();
-        }
-        if (!keywords.add(keyword)) {
-          errorf(arg, "duplicate keyword argument: %s", keyword);
-        }
-
-      } else if (arg instanceof Argument.Star) {
-        if (seenKwargs) {
-          errorf(arg, "*args may not follow **kwargs");
-        } else if (seenVarargs) {
-          errorf(arg, "multiple *args not allowed");
-        }
-        seenVarargs = true;
-
-      } else if (arg instanceof Argument.StarStar) {
-        if (seenKwargs) {
-          errorf(arg, "multiple **kwargs not allowed");
-        }
-        seenKwargs = true;
-      }
-    }
-
-    super.visit(node);
-  }
-
-  @Override
-  public void visit(ForStatement node) {
-    if (block.scope != Scope.LOCAL) {
-      errorf(
-          node,
-          "for loops are not allowed at the top level. You may move it inside a function "
-              + "or use a comprehension, [f(x) for x in sequence]");
-    }
-    loopCount++;
-    visit(node.getCollection());
-    assign(node.getVars());
-    visitBlock(node.getBody());
-    Preconditions.checkState(loopCount > 0);
-    loopCount--;
-  }
-
-  @Override
-  public void visit(LoadStatement node) {
-    if (block.scope == Scope.LOCAL) {
-      errorf(node, "load statement not at top level");
-    }
-    // Skip super.visit: don't revisit local Identifier as a use.
-  }
-
-  @Override
-  public void visit(FlowStatement node) {
-    if (node.getKind() != TokenKind.PASS && loopCount <= 0) {
-      errorf(node, "%s statement must be inside a for loop", node.getKind());
-    }
-    super.visit(node);
-  }
-
-  @Override
-  public void visit(DotExpression node) {
-    visit(node.getObject());
-    // Do not visit the field.
-  }
-
-  @Override
-  public void visit(Comprehension node) {
-    ImmutableList<Comprehension.Clause> clauses = node.getClauses();
-
-    // Following Python3, the first for clause is resolved
-    // outside the comprehension block. All the other loops
-    // are resolved in the scope of their own bindings,
-    // permitting forward references.
-    Comprehension.For for0 = (Comprehension.For) clauses.get(0);
-    visit(for0.getIterable());
-
-    openBlock(Scope.LOCAL);
-    for (Comprehension.Clause clause : clauses) {
-      if (clause instanceof Comprehension.For) {
-        Comprehension.For forClause = (Comprehension.For) clause;
-        createBindings(forClause.getVars());
-      }
-    }
-    for (int i = 0; i < clauses.size(); i++) {
-      Comprehension.Clause clause = clauses.get(i);
-      if (clause instanceof Comprehension.For) {
-        Comprehension.For forClause = (Comprehension.For) clause;
-        if (i > 0) {
-          visit(forClause.getIterable());
-        }
-        assign(forClause.getVars());
-      } else {
-        Comprehension.If ifClause = (Comprehension.If) clause;
-        visit(ifClause.getCondition());
-      }
-    }
-    visit(node.getBody());
-    closeBlock();
-  }
-
-  @Override
-  public void visit(DefStatement node) {
-    if (block.scope == Scope.LOCAL) {
-      errorf(node, "nested functions are not allowed. Move the function to the top level.");
-    }
-    node.setResolvedFunction(
-        resolveFunction(
-            node.getIdentifier().getName(),
-            node.getIdentifier().getStartLocation(),
-            node.getParameters(),
-            node.getBody()));
-  }
-
-  private Function resolveFunction(
-      String name,
-      Location loc,
-      ImmutableList<Parameter> parameters,
-      ImmutableList<Statement> body) {
-
-    // Resolve defaults in enclosing environment.
-    for (Parameter param : parameters) {
-      if (param instanceof Parameter.Optional) {
-        visit(param.getDefaultValue());
-      }
-    }
-
-    // Enter function block.
-    openBlock(Scope.LOCAL);
-
-    // Check parameter order and convert to run-time order:
-    // positionals, keyword-only, *args, **kwargs.
-    Parameter.Star star = null;
-    Parameter.StarStar starStar = null;
-    boolean seenOptional = false;
-    int numKeywordOnlyParams = 0;
-    // TODO(adonovan): opt: when all Identifiers are resolved to bindings accumulated
-    // in the function, params can be a prefix of the function's array of bindings.
-    ImmutableList.Builder<Parameter> params =
-        ImmutableList.builderWithExpectedSize(parameters.size());
-    for (Parameter param : parameters) {
-      if (param instanceof Parameter.Mandatory) {
-        // e.g. id
-        if (starStar != null) {
-          errorf(
-              param,
-              "required parameter %s may not follow **%s",
-              param.getName(),
-              starStar.getName());
-        } else if (star != null) {
-          numKeywordOnlyParams++;
-        } else if (seenOptional) {
-          errorf(
-              param,
-              "required positional parameter %s may not follow an optional parameter",
-              param.getName());
-        }
-        bindParam(params, param);
-
-      } else if (param instanceof Parameter.Optional) {
-        // e.g. id = default
-        seenOptional = true;
-        if (starStar != null) {
-          errorf(param, "optional parameter may not follow **%s", starStar.getName());
-        } else if (star != null) {
-          numKeywordOnlyParams++;
-        }
-        bindParam(params, param);
-
-      } else if (param instanceof Parameter.Star) {
-        // * or *args
-        if (starStar != null) {
-          errorf(param, "* parameter may not follow **%s", starStar.getName());
-        } else if (star != null) {
-          errorf(param, "multiple * parameters not allowed");
-        } else {
-          star = (Parameter.Star) param;
-        }
-
-      } else {
-        // **kwargs
-        if (starStar != null) {
-          errorf(param, "multiple ** parameters not allowed");
-        }
-        starStar = (Parameter.StarStar) param;
-      }
-    }
-
-    // * or *args
-    if (star != null) {
-      if (star.getIdentifier() != null) {
-        bindParam(params, star);
-      } else if (numKeywordOnlyParams == 0) {
-        errorf(star, "bare * must be followed by keyword-only parameters");
-      }
-    }
-
-    // **kwargs
-    if (starStar != null) {
-      bindParam(params, starStar);
-    }
-
-    createBindings(body);
-    visitAll(body);
-    closeBlock();
-
-    return new Function(
-        name,
-        loc,
-        params.build(),
-        body,
-        star != null && star.getIdentifier() != null,
-        starStar != null,
-        numKeywordOnlyParams);
-  }
-
-  private void bindParam(ImmutableList.Builder<Parameter> params, Parameter param) {
-    if (bind(param.getIdentifier())) {
-      errorf(param, "duplicate parameter: %s", param.getName());
-    }
-    params.add(param);
-  }
-
-  @Override
-  public void visit(IfStatement node) {
-    if (block.scope != Scope.LOCAL) {
-      errorf(
-          node,
-          "if statements are not allowed at the top level. You may move it inside a function "
-              + "or use an if expression (x if condition else y).");
-    }
-    super.visit(node);
-  }
-
-  @Override
-  public void visit(AssignmentStatement node) {
-    visit(node.getRHS());
-
-    // Disallow: [e, ...] += rhs
-    // Other bad cases are handled in assign.
-    if (node.isAugmented() && node.getLHS() instanceof ListExpression) {
-      errorf(
-          node.getOperatorLocation(),
-          "cannot perform augmented assignment on a list or tuple expression");
-    }
-
-    assign(node.getLHS());
-  }
-
-  /**
-   * Process a binding use of a name by adding a binding to the current block if not already bound,
-   * and associate the identifier with it. Reports whether the name was already bound in this block.
-   */
-  private boolean bind(Identifier id) {
-    Binding bind = block.bindings.get(id.getName());
-
-    // Already bound in this block?
-    if (bind != null) {
-      // Symbols defined in the module block cannot be reassigned.
-      if (block.scope == Scope.GLOBAL && !options.allowToplevelRebinding()) {
-        errorf(
-            id,
-            "cannot reassign global '%s' (read more at"
-                + " https://bazel.build/versions/master/docs/skylark/errors/read-only-variable.html)",
-            id.getName());
-        if (bind.first != null) {
-          errorf(bind.first, "'%s' previously declared here", id.getName());
-        }
-      }
-
-      if (options.recordScope()) {
-        id.setBinding(bind);
-      }
-      return true;
-    }
-
-    // new binding
-    // TODO(adonovan): accumulate locals in the enclosing function/file block.
-    bind = new Binding(block.scope, id, block.bindings.size());
-    block.bindings.put(id.getName(), bind);
-    if (options.recordScope()) {
-      id.setBinding(bind);
-    }
-    return false;
-  }
-
-  /** Returns the set of all accessible symbols (both local and global) */
-  private Set<String> getAllSymbols() {
-    Set<String> all = new HashSet<>();
-    for (Block b = block; b != null; b = b.parent) {
-      all.addAll(b.bindings.keySet());
-    }
-    return all;
-  }
-
-  // Report an error if a load statement appears after another kind of statement.
-  private void checkLoadAfterStatement(List<Statement> statements) {
-    Statement firstStatement = null;
-
-    for (Statement statement : statements) {
-      // Ignore string literals (e.g. docstrings).
-      if (statement instanceof ExpressionStatement
-          && ((ExpressionStatement) statement).getExpression() instanceof StringLiteral) {
-        continue;
-      }
-
-      if (statement instanceof LoadStatement) {
-        if (firstStatement == null) {
-          continue;
-        }
-        errorf(statement, "load statements must appear before any other statement");
-        errorf(firstStatement, "\tfirst non-load statement appears here");
-      }
-
-      if (firstStatement == null) {
-        firstStatement = statement;
-      }
-    }
-  }
-
-  private void resolveToplevelStatements(List<Statement> statements) {
-    // Check that load() statements are on top.
-    if (options.requireLoadStatementsFirst()) {
-      checkLoadAfterStatement(statements);
-    }
-
-    openBlock(Scope.GLOBAL);
-
-    // Add a binding for each variable defined by statements, not including definitions that appear
-    // in sub-scopes of the given statements (function bodies and comprehensions).
-    createBindings(statements);
-
-    // Second pass: ensure that all symbols have been defined.
-    visitAll(statements);
-    closeBlock();
-  }
-
-  /**
-   * Performs static checks, including resolution of identifiers in {@code file} in the environment
-   * defined by {@code module}. The StarlarkFile is mutated. Errors are appended to {@link
-   * StarlarkFile#errors}.
-   */
-  public static void resolveFile(StarlarkFile file, Module module) {
-    ImmutableList<Statement> stmts = file.getStatements();
-
-    Resolver r = new Resolver(file.errors, module, file.getOptions());
-    r.resolveToplevelStatements(stmts);
-    // Check that no closeBlock was forgotten.
-    Preconditions.checkState(r.block.parent == null);
-
-    // If the final statement is an expression, synthesize a return statement.
-    int n = stmts.size();
-    if (n > 0 && stmts.get(n - 1) instanceof ExpressionStatement) {
-      Expression expr = ((ExpressionStatement) stmts.get(n - 1)).getExpression();
-      stmts =
-          ImmutableList.<Statement>builder()
-              .addAll(stmts.subList(0, n - 1))
-              .add(ReturnStatement.make(expr))
-              .build();
-    }
-
-    // Annotate with resolved information about the toplevel function.
-    file.setResolvedFunction(
-        new Function(
-            "<toplevel>",
-            file.getStartLocation(),
-            /*params=*/ ImmutableList.of(),
-            /*body=*/ stmts,
-            /*hasVarargs=*/ false,
-            /*hasKwargs=*/ false,
-            /*numKeywordOnlyParams=*/ 0));
-  }
-
-  /**
-   * Performs static checks, including resolution of identifiers in {@code expr} in the environment
-   * defined by {@code module}. This operation mutates the Expression. Syntax must be resolved
-   * before it is evaluated.
-   */
-  public static Function resolveExpr(Expression expr, Module module, FileOptions options)
-      throws SyntaxError.Exception {
-    List<SyntaxError> errors = new ArrayList<>();
-    Resolver r = new Resolver(errors, module, options);
-
-    r.visit(expr);
-
-    if (!errors.isEmpty()) {
-      throw new SyntaxError.Exception(errors);
-    }
-
-    // Return no-arg function that computes the expression.
-    return new Function(
-        "<expr>",
-        expr.getStartLocation(),
-        /*params=*/ ImmutableList.of(),
-        ImmutableList.of(ReturnStatement.make(expr)),
-        /*hasVarargs=*/ false,
-        /*hasKwargs=*/ false,
-        /*numKeywordOnlyParams=*/ 0);
-  }
-
-  /** Open a new lexical block that will contain the future declarations. */
-  private void openBlock(Scope scope) {
-    block = new Block(scope, block);
-  }
-
-  /** Close a lexical block (and lose all declarations it contained). */
-  private void closeBlock() {
-    block = Preconditions.checkNotNull(block.parent);
-  }
-
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/ReturnStatement.java b/src/main/java/com/google/devtools/build/lib/syntax/ReturnStatement.java
deleted file mode 100644
index 52b1f79..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/ReturnStatement.java
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.syntax;
-
-import javax.annotation.Nullable;
-
-/** A syntax node for return statements. */
-public final class ReturnStatement extends Statement {
-
-  private final int returnOffset;
-  @Nullable private final Expression result;
-
-  ReturnStatement(FileLocations locs, int returnOffset, @Nullable Expression result) {
-    super(locs);
-    this.returnOffset = returnOffset;
-    this.result = result;
-  }
-
-  /**
-   * Returns a new return statement that returns expr. It is provided only for use by the evaluator,
-   * and will be removed when it switches to a compiled representation.
-   */
-  static ReturnStatement make(Expression expr) {
-    return new ReturnStatement(expr.locs, expr.getStartOffset(), expr);
-  }
-
-  @Nullable
-  public Expression getResult() {
-    return result;
-  }
-
-  @Override
-  public int getStartOffset() {
-    return returnOffset;
-  }
-
-  @Override
-  public int getEndOffset() {
-    return result != null ? result.getEndOffset() : returnOffset + "return".length();
-  }
-
-  @Override
-  public void accept(NodeVisitor visitor) {
-    visitor.visit(this);
-  }
-
-  @Override
-  public Kind kind() {
-    return Kind.RETURN;
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Sequence.java b/src/main/java/com/google/devtools/build/lib/syntax/Sequence.java
deleted file mode 100644
index edd81c2..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Sequence.java
+++ /dev/null
@@ -1,103 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
-import java.util.List;
-import java.util.RandomAccess;
-import net.starlark.java.annot.StarlarkBuiltin;
-import net.starlark.java.annot.StarlarkDocumentationCategory;
-
-/**
- * A Sequence is a finite iterable sequence of Starlark values, such as a list or tuple.
- *
- * <p>Sequences implement the read-only operations of the {@link List} interface, but not its update
- * operations, similar to {@code ImmutableList}. The specification of {@code List} governs how such
- * methods behave and in particular how they report errors. Subclasses of sequence may define ad-hoc
- * mutator methods, such as {@link StarlarkList#extend}, exposed to Starlark, or Java, or both.
- *
- * <p>In principle, subclasses of Sequence could also define the standard update operations of List,
- * but there appears to be little demand, and doing so carries some risk of obscuring unintended
- * mutations to Starlark values that would currently cause the program to crash.
- */
-@StarlarkBuiltin(
-    name = "sequence",
-    documented = false,
-    category = StarlarkDocumentationCategory.BUILTIN,
-    doc = "common type of lists and tuples.")
-public interface Sequence<E>
-    extends StarlarkValue, List<E>, RandomAccess, StarlarkIndexable, StarlarkIterable<E> {
-
-  @Override
-  default boolean truth() {
-    return !isEmpty();
-  }
-
-  /** Returns an ImmutableList object with the current underlying contents of this Sequence. */
-  default ImmutableList<E> getImmutableList() {
-    return ImmutableList.copyOf(this);
-  }
-
-  /** Retrieves an entry from a Sequence. */
-  @Override
-  default E getIndex(StarlarkSemantics semantics, Object key) throws EvalException {
-    int index = Starlark.toInt(key, "sequence index");
-    return get(EvalUtils.getSequenceIndex(index, size()));
-  }
-
-  @Override
-  default boolean containsKey(StarlarkSemantics semantics, Object key) throws EvalException {
-    return contains(key);
-  }
-
-  /**
-   * Returns the slice of this sequence, {@code this[start:stop:step]}. <br>
-   * For positive strides ({@code step > 0}), {@code 0 <= start <= stop <= size()}. <br>
-   * For negative strides ({@code step < 0}), {@code -1 <= stop <= start < size()}. <br>
-   * The caller must ensure that the start and stop indices are valid and that step is non-zero.
-   */
-  Sequence<E> getSlice(Mutability mu, int start, int stop, int step);
-
-  /**
-   * Casts a non-null Starlark value {@code x} to a {@code Sequence<T>}, after checking that each
-   * element is an instance of {@code elemType}. On error, it throws an EvalException whose message
-   * includes {@code what}, ideally a string literal, as a description of the role of {@code x}.
-   */
-  public static <T> Sequence<T> cast(Object x, Class<T> elemType, String what)
-      throws EvalException {
-    Preconditions.checkNotNull(x);
-    if (!(x instanceof Sequence)) {
-      throw Starlark.errorf("for %s, got %s, want sequence", what, Starlark.type(x));
-    }
-    int i = 0;
-    for (Object elem : (Sequence) x) {
-      if (!elemType.isAssignableFrom(elem.getClass())) {
-        throw Starlark.errorf(
-            "at index %d of %s, got element of type %s, want %s",
-            i, what, Starlark.type(elem), Starlark.classType(elemType));
-      }
-    }
-    @SuppressWarnings("unchecked") // safe
-    Sequence<T> result = (Sequence) x;
-    return result;
-  }
-
-  /** Like {@link #cast}, but if x is None, returns an immutable empty list. */
-  public static <T> Sequence<T> noneableCast(Object x, Class<T> type, String what)
-      throws EvalException {
-    return x == Starlark.NONE ? StarlarkList.empty() : cast(x, type, what);
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SliceExpression.java b/src/main/java/com/google/devtools/build/lib/syntax/SliceExpression.java
deleted file mode 100644
index 29f6d70..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/SliceExpression.java
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.syntax;
-
-import javax.annotation.Nullable;
-
-/** Syntax node for a slice expression, {@code object[start:stop:step]}. */
-public final class SliceExpression extends Expression {
-
-  private final Expression object;
-  private final int lbracketOffset;
-  @Nullable private final Expression start;
-  @Nullable private final Expression stop;
-  @Nullable private final Expression step;
-  private final int rbracketOffset;
-
-  SliceExpression(
-      FileLocations locs,
-      Expression object,
-      int lbracketOffset,
-      Expression start,
-      Expression stop,
-      Expression step,
-      int rbracketOffset) {
-    super(locs);
-    this.object = object;
-    this.lbracketOffset = lbracketOffset;
-    this.start = start;
-    this.stop = stop;
-    this.step = step;
-    this.rbracketOffset = rbracketOffset;
-  }
-
-  public Expression getObject() {
-    return object;
-  }
-
-  @Nullable
-  public Expression getStart() {
-    return start;
-  }
-
-  @Nullable
-  public Expression getStop() {
-    return stop;
-  }
-
-  @Nullable
-  public Expression getStep() {
-    return step;
-  }
-
-  @Override
-  public int getStartOffset() {
-    return object.getStartOffset();
-  }
-
-  @Override
-  public int getEndOffset() {
-    return rbracketOffset + 1;
-  }
-
-  public Location getLbracketLocation() {
-    return locs.getLocation(lbracketOffset);
-  }
-
-  @Override
-  public void accept(NodeVisitor visitor) {
-    visitor.visit(this);
-  }
-
-  @Override
-  public Kind kind() {
-    return Kind.SLICE;
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Starlark.java b/src/main/java/com/google/devtools/build/lib/syntax/Starlark.java
deleted file mode 100644
index 9036dee..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Starlark.java
+++ /dev/null
@@ -1,805 +0,0 @@
-// Copyright 2019 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Iterables;
-import com.google.errorprone.annotations.CheckReturnValue;
-import com.google.errorprone.annotations.FormatMethod;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.lang.reflect.Method;
-import java.time.Duration;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-import javax.annotation.Nullable;
-import javax.annotation.concurrent.Immutable;
-import net.starlark.java.annot.StarlarkBuiltin;
-import net.starlark.java.annot.StarlarkInterfaceUtils;
-import net.starlark.java.annot.StarlarkMethod;
-import net.starlark.java.spelling.SpellChecker;
-
-/**
- * The Starlark class defines the most important entry points, constants, and functions needed by
- * all clients of the Starlark interpreter.
- */
-public final class Starlark {
-
-  private Starlark() {} // uninstantiable
-
-  /** The Starlark None value. */
-  public static final NoneType NONE = NoneType.NONE;
-
-  /**
-   * A sentinel value passed to optional parameters of StarlarkMethod-annotated methods to indicate
-   * that no argument value was supplied.
-   */
-  public static final Object UNBOUND = new UnboundMarker();
-
-  @Immutable
-  private static final class UnboundMarker implements StarlarkValue {
-    private UnboundMarker() {}
-
-    @Override
-    public String toString() {
-      return "<unbound>";
-    }
-
-    @Override
-    public boolean isImmutable() {
-      return true;
-    }
-
-    @Override
-    public void repr(Printer printer) {
-      printer.append("<unbound>");
-    }
-  }
-
-  /**
-   * The universal bindings predeclared in every Starlark file, such as None, True, len, and range.
-   */
-  public static final ImmutableMap<String, Object> UNIVERSE = makeUniverse();
-
-  private static ImmutableMap<String, Object> makeUniverse() {
-    ImmutableMap.Builder<String, Object> env = ImmutableMap.builder();
-    env //
-        .put("False", false)
-        .put("True", true)
-        .put("None", NONE);
-    addMethods(env, new MethodLibrary());
-    return env.build();
-  }
-
-  /**
-   * Reports whether the argument is a legal Starlark value: a string, boolean, integer, or
-   * StarlarkValue.
-   */
-  public static boolean valid(Object x) {
-    return x instanceof StarlarkValue
-        || x instanceof String
-        || x instanceof Boolean
-        || x instanceof Integer;
-  }
-
-  /**
-   * Returns {@code x} if it is a {@link #valid} Starlark value, otherwise throws
-   * IllegalArgumentException.
-   */
-  public static <T> T checkValid(T x) {
-    if (!valid(x)) {
-      throw new IllegalArgumentException("invalid Starlark value: " + x.getClass());
-    }
-    return x;
-  }
-
-  /** Reports whether {@code x} is Java null or Starlark None. */
-  public static boolean isNullOrNone(Object x) {
-    return x == null || x == NONE;
-  }
-
-  /** Reports whether a Starlark value is assumed to be deeply immutable. */
-  // TODO(adonovan): eliminate the concept of querying for immutability. It is currently used for
-  // only one purpose, the precondition for adding an element to a Depset, but Depsets should check
-  // hashability, like Dicts. (Similarly, querying for hashability should go: just attempt to hash a
-  // value, and be prepared for it to fail.) In practice, a value may be immutable, either
-  // inherently (e.g. string) or because it has become frozen, but we don't need to query for it.
-  // Just attempt a mutation and be prepared for it to fail.
-  // It is inefficient and potentially inconsistent to ask before doing.
-  //
-  // The main obstacle is that although depsets disallow (say) lists as keys even when frozen,
-  // they permit a tuple of lists, or a struct containing lists, and many users exploit this.
-  public static boolean isImmutable(Object x) {
-    // NB: This is used as the basis for accepting objects in Depsets,
-    // as well as for accepting objects as keys for Starlark dicts.
-
-    if (x instanceof String || x instanceof Integer || x instanceof Boolean) {
-      return true;
-    } else if (x instanceof StarlarkValue) {
-      return ((StarlarkValue) x).isImmutable();
-    } else {
-      throw new IllegalArgumentException("invalid Starlark value: " + x.getClass());
-    }
-  }
-
-  /**
-   * Converts a Java value {@code x} to a Starlark one, if x is not already a valid Starlark value.
-   * A Java List or Map is converted to a Starlark list or dict, respectively, and null becomes
-   * {@link #NONE}. Any other non-Starlark value causes the function to throw
-   * IllegalArgumentException.
-   *
-   * <p>This function is applied to the results of StarlarkMethod-annotated Java methods.
-   */
-  public static Object fromJava(Object x, @Nullable Mutability mutability) {
-    if (x == null) {
-      return NONE;
-    } else if (valid(x)) {
-      return x;
-    } else if (x instanceof List) {
-      return StarlarkList.copyOf(mutability, (List<?>) x);
-    } else if (x instanceof Map) {
-      return Dict.copyOf(mutability, (Map<?, ?>) x);
-    } else {
-      throw new IllegalArgumentException(
-          "cannot expose internal type to Starlark: " + x.getClass());
-    }
-  }
-
-  /**
-   * Returns the truth value of a valid Starlark value, as if by the Starlark expression {@code
-   * bool(x)}.
-   */
-  public static boolean truth(Object x) {
-    if (x instanceof Boolean) {
-      return (Boolean) x;
-    } else if (x instanceof StarlarkValue) {
-      return ((StarlarkValue) x).truth();
-    } else if (x instanceof String) {
-      return !((String) x).isEmpty();
-    } else if (x instanceof Integer) {
-      return (Integer) x != 0;
-    } else {
-      throw new IllegalArgumentException("invalid Starlark value: " + x.getClass());
-    }
-  }
-
-  /**
-   * Checks whether the Freezable Starlark value is frozen or temporarily immutable due to active
-   * iterators.
-   *
-   * @throws EvalException if the value is not mutable.
-   */
-  public static void checkMutable(Mutability.Freezable x) throws EvalException {
-    if (x.mutability().isFrozen()) {
-      throw errorf("trying to mutate a frozen %s value", type(x));
-    }
-    if (x.updateIteratorCount(0)) {
-      throw errorf("%s value is temporarily immutable due to active for-loop iteration", type(x));
-    }
-  }
-
-  /**
-   * Returns an iterable view of {@code x} if it is an iterable Starlark value; throws EvalException
-   * otherwise.
-   *
-   * <p>Whereas the interpreter temporarily freezes the iterable value by bracketing {@code for}
-   * loops and comprehensions in calls to {@link Freezable#updateIteratorCount}, iteration using
-   * this method does not freeze the value. Callers should exercise care not to mutate the
-   * underlying object during iteration.
-   */
-  public static Iterable<?> toIterable(Object x) throws EvalException {
-    if (x instanceof StarlarkIterable) {
-      return (Iterable<?>) x;
-    }
-    throw errorf("type '%s' is not iterable", type(x));
-  }
-
-  /**
-   * Returns a new array containing the elements of Starlark iterable value {@code x}. A Starlark
-   * value is iterable if it implements {@link StarlarkIterable}.
-   */
-  public static Object[] toArray(Object x) throws EvalException {
-    // Specialize Sequence and Dict to avoid allocation and/or indirection.
-    if (x instanceof Sequence) {
-      return ((Sequence<?>) x).toArray();
-    } else if (x instanceof Dict) {
-      return ((Dict<?, ?>) x).keySet().toArray();
-    } else {
-      return Iterables.toArray(toIterable(x), Object.class);
-    }
-  }
-
-  /**
-   * Returns the length of a Starlark string, sequence (such as a list or tuple), dict, or other
-   * iterable, as if by the Starlark expression {@code len(x)}, or -1 if the value is valid but has
-   * no length.
-   */
-  public static int len(Object x) {
-    if (x instanceof String) {
-      return ((String) x).length();
-    } else if (x instanceof Sequence) {
-      return ((Sequence) x).size();
-    } else if (x instanceof Dict) {
-      return ((Dict) x).size();
-    } else if (x instanceof StarlarkIterable) {
-      // Iterables.size runs in constant time if x implements Collection.
-      return Iterables.size((Iterable<?>) x);
-    } else {
-      checkValid(x);
-      return -1; // valid but not a sequence
-    }
-  }
-
-  /** Returns the name of the type of a value as if by the Starlark expression {@code type(x)}. */
-  public static String type(Object x) {
-    return classType(x.getClass());
-  }
-
-  /**
-   * Returns the name of the type of instances of class c.
-   *
-   * <p>This function accepts any class, not just those of legal Starlark values, and may be used
-   * for reporting error messages involving arbitrary Java classes, for example at the interface
-   * between Starlark and Java.
-   */
-  // TODO(adonovan): reconsider allowing any classes other than String, Integer, Boolean, and
-  // subclasses of StarlarkValue, with a special exception for Object.class meaning "any Starlark
-  // value" (not: any Java object). Ditto for Depset.ElementType.
-  public static String classType(Class<?> c) {
-    // Check for "direct hits" first to avoid needing to scan for annotations.
-    if (c.equals(String.class)) {
-      return "string";
-    } else if (c.equals(Integer.class)) {
-      return "int";
-    } else if (c.equals(Boolean.class)) {
-      return "bool";
-    }
-
-    // Shortcut for the most common types.
-    // These cases can be handled by `getStarlarkBuiltin`
-    // but `getStarlarkBuiltin` is quite expensive.
-    if (c.equals(StarlarkList.class)) {
-      return "list";
-    } else if (c.equals(Tuple.class)) {
-      return "tuple";
-    } else if (c.equals(Dict.class)) {
-      return "dict";
-    } else if (c.equals(NoneType.class)) {
-      return "NoneType";
-    } else if (c.equals(StarlarkFunction.class)) {
-      return "function";
-    } else if (c.equals(RangeList.class)) {
-      return "range";
-    }
-
-    StarlarkBuiltin module = StarlarkInterfaceUtils.getStarlarkBuiltin(c);
-    if (module != null) {
-      return module.name();
-
-    } else if (StarlarkCallable.class.isAssignableFrom(c)) {
-      // All callable values have historically been lumped together as "function".
-      // TODO(adonovan): built-in types that don't use StarlarkModule should report
-      // their own type string, but this is a breaking change as users often
-      // use type(x)=="function" for Starlark and built-in functions.
-      return "function";
-
-    } else if (c.equals(Object.class)) {
-      // "Unknown" is another unfortunate choice.
-      // Object.class does mean "unknown" when talking about the type parameter
-      // of a collection (List<Object>), but it also means "any" when used
-      // as an argument to Sequence.cast, and more generally it means "value".
-      return "unknown";
-
-    } else if (List.class.isAssignableFrom(c)) {
-      // Any class of java.util.List that isn't a Sequence.
-      return "List";
-
-    } else if (Map.class.isAssignableFrom(c)) {
-      // Any class of java.util.Map that isn't a Dict.
-      return "Map";
-
-    } else {
-      String simpleName = c.getSimpleName();
-      return simpleName.isEmpty() ? c.getName() : simpleName;
-    }
-  }
-
-  /** Returns the string form of a value as if by the Starlark expression {@code str(x)}. */
-  public static String str(Object x) {
-    return new Printer().str(x).toString();
-  }
-
-  /** Returns the string form of a value as if by the Starlark expression {@code repr(x)}. */
-  public static String repr(Object x) {
-    return new Printer().repr(x).toString();
-  }
-
-  /** Returns a string formatted as if by the Starlark expression {@code pattern % arguments}. */
-  public static String format(String pattern, Object... arguments) {
-    Printer pr = new Printer();
-    Printer.format(pr, pattern, arguments);
-    return pr.toString();
-  }
-
-  /** Returns a string formatted as if by the Starlark expression {@code pattern % arguments}. */
-  public static String formatWithList(String pattern, List<?> arguments) {
-    Printer pr = new Printer();
-    Printer.formatWithList(pr, pattern, arguments);
-    return pr.toString();
-  }
-
-  /** Returns a slice of a sequence as if by the Starlark operation {@code x[start:stop:step]}. */
-  public static Object slice(
-      Mutability mu, Object x, Object startObj, Object stopObj, Object stepObj)
-      throws EvalException {
-    int n;
-    if (x instanceof String) {
-      n = ((String) x).length();
-    } else if (x instanceof Sequence) {
-      n = ((Sequence) x).size();
-    } else {
-      throw errorf("invalid slice operand: %s", type(x));
-    }
-
-    int start;
-    int stop;
-    int step;
-
-    // step
-    if (stepObj == NONE) {
-      step = 1;
-    } else {
-      step = toInt(stepObj, "slice step");
-      if (step == 0) {
-        throw errorf("slice step cannot be zero");
-      }
-    }
-
-    // start, stop
-    if (step > 0) {
-      // positive stride: default indices are [0:n].
-      if (startObj == NONE) {
-        start = 0;
-      } else {
-        start = EvalUtils.toIndex(toInt(startObj, "start index"), n);
-      }
-
-      if (stopObj == NONE) {
-        stop = n;
-      } else {
-        stop = EvalUtils.toIndex(toInt(stopObj, "stop index"), n);
-      }
-
-      if (stop < start) {
-        stop = start; // => empty result
-      }
-
-    } else {
-      // negative stride: default indices are effectively [n-1:-1],
-      // though to get this effect using explicit indices requires
-      // [n-1:-1-n:-1] because of the treatment of negative values.
-      if (startObj == NONE) {
-        start = n - 1;
-      } else {
-        start = toInt(startObj, "start index");
-        if (start < 0) {
-          start += n;
-        }
-        if (start >= n) {
-          start = n - 1;
-        }
-      }
-
-      if (stopObj == NONE) {
-        stop = -1;
-      } else {
-        stop = toInt(stopObj, "stop index");
-        if (stop < 0) {
-          stop += n;
-        }
-        if (stop < -1) {
-          stop = -1;
-        }
-      }
-
-      if (start < stop) {
-        start = stop; // => empty result
-      }
-    }
-
-    // slice operation
-    if (x instanceof String) {
-      return StringModule.slice((String) x, start, stop, step);
-    } else {
-      return ((Sequence<?>) x).getSlice(mu, start, stop, step);
-    }
-  }
-
-  static int toInt(Object x, String name) throws EvalException {
-    if (x instanceof Integer) {
-      return (Integer) x;
-    }
-    throw errorf("got %s for %s, want int", type(x), name);
-  }
-
-  /**
-   * Calls the function-like value {@code fn} in the specified thread, passing it the given
-   * positional and named arguments, as if by the Starlark expression {@code fn(*args, **kwargs)}.
-   *
-   * <p>See also {@link #fastcall}.
-   */
-  public static Object call(
-      StarlarkThread thread, Object fn, List<Object> args, Map<String, Object> kwargs)
-      throws EvalException, InterruptedException {
-    Object[] named = new Object[2 * kwargs.size()];
-    int i = 0;
-    for (Map.Entry<String, Object> e : kwargs.entrySet()) {
-      named[i++] = e.getKey();
-      named[i++] = e.getValue();
-    }
-    return fastcall(thread, fn, args.toArray(), named);
-  }
-
-  /**
-   * Calls the function-like value {@code fn} in the specified thread, passing it the given
-   * positional and named arguments in the "fastcall" array representation.
-   *
-   * <p>The caller must not subsequently modify or even inspect the two arrays.
-   *
-   * <p>If the call throws a StackOverflowError or any instance of RuntimeException (other than
-   * UncheckedEvalException), regardless of whether it originates in a user-defined built-in
-   * function or a bug in the interpreter itself, the exception is wrapped by an
-   * UncheckedEvalException whose message includes the Starlark stack. The original exception may be
-   * retrieved using {@code getCause}.
-   */
-  public static Object fastcall(
-      StarlarkThread thread, Object fn, Object[] positional, Object[] named)
-      throws EvalException, InterruptedException {
-    StarlarkCallable callable;
-    if (fn instanceof StarlarkCallable) {
-      callable = (StarlarkCallable) fn;
-    } else {
-      // @StarlarkMethod(selfCall)?
-      MethodDescriptor desc =
-          CallUtils.getSelfCallMethodDescriptor(thread.getSemantics(), fn.getClass());
-      if (desc == null) {
-        throw errorf("'%s' object is not callable", type(fn));
-      }
-      callable = new BuiltinCallable(fn, desc.getName(), desc);
-    }
-
-    thread.push(callable);
-    try {
-      return callable.fastcall(thread, positional, named);
-    } catch (UncheckedEvalException ex) {
-      throw ex; // already wrapped
-    } catch (RuntimeException | StackOverflowError ex) {
-      throw new UncheckedEvalException(ex, thread.getCallStack());
-    } catch (EvalException ex) {
-      // If this exception was newly thrown, set its stack.
-      throw ex.ensureStack(thread);
-    } finally {
-      thread.pop();
-    }
-  }
-
-  /**
-   * An UncheckedEvalException decorates an unchecked exception with its Starlark stack, to help
-   * maintainers locate problematic source expressions. The original exception can be retrieved
-   * using {@code getCause}.
-   */
-  public static final class UncheckedEvalException extends RuntimeException {
-    private final ImmutableList<StarlarkThread.CallStackEntry> stack;
-
-    private UncheckedEvalException(
-        Throwable cause, ImmutableList<StarlarkThread.CallStackEntry> stack) {
-      super(cause);
-      this.stack = stack;
-    }
-
-    /** Returns the stack of Starlark calls active at the moment of the error. */
-    public ImmutableList<StarlarkThread.CallStackEntry> getCallStack() {
-      return stack;
-    }
-
-    @Override
-    public String getMessage() {
-      return String.format("%s (Starlark stack: %s)", super.getMessage(), stack);
-    }
-  }
-
-  /**
-   * Returns a new EvalException with no location and an error message produced by Java-style string
-   * formatting ({@code String.format(format, args)}). Use {@code errorf("%s", msg)} to produce an
-   * error message from a non-constant expression {@code msg}.
-   */
-  @FormatMethod
-  @CheckReturnValue // don't forget to throw it
-  public static EvalException errorf(String format, Object... args) {
-    return new EvalException(String.format(format, args));
-  }
-
-  // --- methods related to attributes (fields and methods) ---
-
-  /**
-   * Reports whether the value {@code x} has a field or method of the given name, as if by the
-   * Starlark expression {@code hasattr(x, name)}.
-   */
-  public static boolean hasattr(StarlarkSemantics semantics, Object x, String name)
-      throws EvalException {
-    return (x instanceof ClassObject && ((ClassObject) x).getValue(name) != null)
-        || CallUtils.getAnnotatedMethodNames(semantics, x.getClass()).contains(name);
-  }
-
-  /**
-   * Returns the named field or method of value {@code x}, as if by the Starlark expression {@code
-   * getattr(x, name, defaultValue)}. If the value has no such attribute, getattr returns {@code
-   * defaultValue} if non-null, or throws an EvalException otherwise.
-   */
-  public static Object getattr(
-      Mutability mu,
-      StarlarkSemantics semantics,
-      Object x,
-      String name,
-      @Nullable Object defaultValue)
-      throws EvalException, InterruptedException {
-    // StarlarkMethod-annotated field or method?
-    MethodDescriptor method = CallUtils.getAnnotatedMethod(semantics, x.getClass(), name);
-    if (method != null) {
-      if (method.isStructField()) {
-        return method.callField(x, semantics, mu);
-      } else {
-        return new BuiltinCallable(x, name, method);
-      }
-    }
-
-    // user-defined field?
-    if (x instanceof ClassObject) {
-      ClassObject obj = (ClassObject) x;
-      Object field = obj.getValue(semantics, name);
-      if (field != null) {
-        return Starlark.checkValid(field);
-      }
-
-      if (defaultValue != null) {
-        return defaultValue;
-      }
-
-      String error = obj.getErrorMessageForUnknownField(name);
-      if (error != null) {
-        throw Starlark.errorf("%s", error);
-      }
-
-    } else if (defaultValue != null) {
-      return defaultValue;
-    }
-
-    throw Starlark.errorf(
-        "'%s' value has no field or method '%s'%s",
-        Starlark.type(x), name, SpellChecker.didYouMean(name, dir(mu, semantics, x)));
-  }
-
-  /**
-   * Returns a new sorted list containing the names of the Starlark-accessible fields and methods of
-   * the specified value, as if by the Starlark expression {@code dir(x)}.
-   */
-  public static StarlarkList<String> dir(Mutability mu, StarlarkSemantics semantics, Object x) {
-    // Order the fields alphabetically.
-    Set<String> fields = new TreeSet<>();
-    if (x instanceof ClassObject) {
-      fields.addAll(((ClassObject) x).getFieldNames());
-    }
-    fields.addAll(CallUtils.getAnnotatedMethodNames(semantics, x.getClass()));
-    return StarlarkList.copyOf(mu, fields);
-  }
-
-  // --- methods related to StarlarkMethod-annotated classes ---
-
-  /**
-   * Returns the value of the named field of Starlark value {@code x}, as defined by a Java method
-   * with a {@code StarlarkMethod(structField=true)} annotation.
-   *
-   * <p>Most callers should use {@link #getattr} instead.
-   */
-  public static Object getAnnotatedField(StarlarkSemantics semantics, Object x, String name)
-      throws EvalException, InterruptedException {
-    return CallUtils.getAnnotatedField(semantics, x, name);
-  }
-
-  /**
-   * Returns the names of the fields of Starlark value {@code x}, as defined by Java methods with
-   * {@code StarlarkMethod(structField=true)} annotations under the specified semantics.
-   *
-   * <p>Most callers should use {@link #dir} instead.
-   */
-  public static ImmutableSet<String> getAnnotatedFieldNames(StarlarkSemantics semantics, Object x) {
-    return CallUtils.getAnnotatedFieldNames(semantics, x);
-  }
-
-  /**
-   * Returns a map from annotated methods of the specified class to their corresponding {@link
-   * StarlarkMethod} annotations. Elements are ordered by Java method name, which is not necessarily
-   * the same as the Starlark attribute name.
-   *
-   * <p>Most callers should use {@link #dir} and {@link #getattr} instead.
-   */
-  public static ImmutableMap<Method, StarlarkMethod> getAnnotatedMethods(Class<?> clazz) {
-    return CallUtils.getAnnotatedMethods(clazz);
-  }
-
-  /**
-   * Returns the {@code StarlarkMethod(selfCall=true)}-annotated Java method of the specified Java
-   * class that is called when Starlark calls an instance of that class like a function. It returns
-   * null if no such method exists.
-   */
-  @Nullable
-  public static Method getSelfCallMethod(StarlarkSemantics semantics, Class<?> clazz) {
-    return CallUtils.getSelfCallMethod(semantics, clazz);
-  }
-
-  /** Equivalent to {@code addMethods(env, v, StarlarkSemantics.DEFAULT)}. */
-  public static void addMethods(ImmutableMap.Builder<String, Object> env, Object v) {
-    addMethods(env, v, StarlarkSemantics.DEFAULT);
-  }
-
-  /**
-   * Adds to the environment {@code env} all {@code StarlarkCallable}-annotated fields and methods
-   * of value {@code v}, filtered by the given semantics. The class of {@code v} must have or
-   * inherit a {@link StarlarkBuiltin} or {@code StarlarkGlobalLibrary} annotation.
-   */
-  public static void addMethods(
-      ImmutableMap.Builder<String, Object> env, Object v, StarlarkSemantics semantics) {
-    Class<?> cls = v.getClass();
-    if (!StarlarkInterfaceUtils.hasStarlarkGlobalLibrary(cls)
-        && StarlarkInterfaceUtils.getStarlarkBuiltin(cls) == null) {
-      throw new IllegalArgumentException(
-          cls.getName() + " is annotated with neither @StarlarkGlobalLibrary nor @StarlarkBuiltin");
-    }
-    for (String name : CallUtils.getAnnotatedMethodNames(semantics, v.getClass())) {
-      // We use the 2-arg (desc=null) BuiltinCallable constructor instead of passing
-      // the descriptor that CallUtils.getAnnotatedMethod would return,
-      // because most calls to addMethods pass StarlarkSemantics.DEFAULT,
-      // which is probably incorrect for the call.
-      // The effect is that the default semantics determine which methods appear in
-      // env, but the thread's semantics determine which method calls succeed.
-      env.put(name, new BuiltinCallable(v, name));
-    }
-  }
-
-  /**
-   * Adds to the environment {@code env} the value {@code v}, under its annotated name. The class of
-   * {@code v} must have or inherit a {@link StarlarkBuiltin} annotation.
-   */
-  public static void addModule(ImmutableMap.Builder<String, Object> env, Object v) {
-    Class<?> cls = v.getClass();
-    StarlarkBuiltin annot = StarlarkInterfaceUtils.getStarlarkBuiltin(cls);
-    if (annot == null) {
-      throw new IllegalArgumentException(cls.getName() + " is not annotated with @StarlarkBuiltin");
-    }
-    env.put(annot.name(), v);
-  }
-
-  /**
-   * Parses the input as a file, resolves it in the specified module environment, compiles it, and
-   * executes it in the specified thread. On success it returns None, unless the file's final
-   * statement is an expression, in which case its value is returned.
-   *
-   * @throws SyntaxError.Exception if there were (static) scanner, parser, or resolver errors.
-   * @throws EvalException if there was a (dynamic) evaluation error.
-   * @throws InterruptedException if the Java thread was interrupted during evaluation.
-   */
-  public static Object execFile(
-      ParserInput input, FileOptions options, Module module, StarlarkThread thread)
-      throws SyntaxError.Exception, EvalException, InterruptedException {
-    StarlarkFile file = StarlarkFile.parse(input, options);
-    Program prog = Program.compileFile(file, module);
-    return execFileProgram(prog, module, thread);
-  }
-
-  /** Variant of {@link #execFile} that creates a module for the given predeclared environment. */
-  // TODO(adonovan): is this needed?
-  public static Object execFile(
-      ParserInput input,
-      FileOptions options,
-      Map<String, Object> predeclared,
-      StarlarkThread thread)
-      throws SyntaxError.Exception, EvalException, InterruptedException {
-    Module module = Module.withPredeclared(thread.getSemantics(), predeclared);
-    return execFile(input, options, module, thread);
-  }
-
-  /**
-   * Executes a compiled Starlark file (as obtained from {@link Program#compileFile}) in the given
-   * StarlarkThread. On success it returns None, unless the file's final statement is an expression,
-   * in which case its value is returned.
-   *
-   * @throws EvalException if there was a (dynamic) evaluation error.
-   * @throws InterruptedException if the Java thread was interrupted during evaluation.
-   */
-  public static Object execFileProgram(Program prog, Module module, StarlarkThread thread)
-      throws EvalException, InterruptedException {
-    Tuple<Object> defaultValues = Tuple.empty();
-    StarlarkFunction toplevel =
-        new StarlarkFunction(prog.getResolvedFunction(), defaultValues, module);
-    return Starlark.fastcall(thread, toplevel, NOARGS, NOARGS);
-  }
-
-  private static final Object[] NOARGS = {};
-
-  /**
-   * Parses the input as an expression, resolves it in the specified module environment, compiles
-   * it, evaluates it, and returns its value.
-   *
-   * @throws SyntaxError.Exception if there were (static) scanner, parser, or resolver errors.
-   * @throws EvalException if there was a (dynamic) evaluation error.
-   * @throws InterruptedException if the Java thread was interrupted during evaluation.
-   */
-  public static Object eval(
-      ParserInput input, FileOptions options, Module module, StarlarkThread thread)
-      throws SyntaxError.Exception, EvalException, InterruptedException {
-    StarlarkFunction fn = newExprFunction(input, options, module);
-    return Starlark.fastcall(thread, fn, NOARGS, NOARGS);
-  }
-
-  /** Variant of {@link #eval} that creates a module for the given predeclared environment. */
-  // TODO(adonovan): is this needed?
-  public static Object eval(
-      ParserInput input,
-      FileOptions options,
-      Map<String, Object> predeclared,
-      StarlarkThread thread)
-      throws SyntaxError.Exception, EvalException, InterruptedException {
-    Module module = Module.withPredeclared(thread.getSemantics(), predeclared);
-    return eval(input, options, module, thread);
-  }
-
-  /**
-   * Parses the input as an expression, resolves it in the specified module environment, and returns
-   * a callable no-argument Starlark function value that computes and returns the value of the
-   * expression.
-   *
-   * @throws SyntaxError.Exception if there were scanner, parser, or resolver errors.
-   */
-  public static StarlarkFunction newExprFunction(
-      ParserInput input, FileOptions options, Module module) throws SyntaxError.Exception {
-    Expression expr = Expression.parse(input, options);
-    Program prog = Program.compileExpr(expr, module, options);
-    Tuple<Object> defaultValues = Tuple.empty();
-    return new StarlarkFunction(prog.getResolvedFunction(), defaultValues, module);
-  }
-
-  /**
-   * Starts the CPU profiler with the specified sampling period, writing a pprof profile to {@code
-   * out}. All running Starlark threads are profiled. May be called concurrent with Starlark
-   * execution.
-   *
-   * @throws IllegalStateException exception if the Starlark profiler is already running or if the
-   *     operating system's profiling resources for this process are already in use.
-   */
-  public static void startCpuProfile(OutputStream out, Duration period) {
-    CpuProfiler.start(out, period);
-  }
-
-  /**
-   * Stops the profiler and waits for the log to be written. Throws an unchecked exception if the
-   * profiler was not already started by a prior call to {@link #startCpuProfile}.
-   */
-  public static void stopCpuProfile() throws IOException {
-    CpuProfiler.stop();
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkCallable.java b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkCallable.java
deleted file mode 100644
index 85723db..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkCallable.java
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright 2018 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.collect.Maps;
-import java.util.LinkedHashMap;
-
-/**
- * The StarlarkCallable interface is implemented by all Starlark values that may be called from
- * Starlark like a function, including built-in functions and methods, Starlark functions, and
- * application-defined objects (such as rules, aspects, and providers in Bazel).
- *
- * <p>It defines two methods: {@code fastcall}, for performance, or {@code call} for convenience. By
- * default, {@code fastcall} delegates to {@code call}, and call throws an exception, so an
- * implementer may override either one.
- */
-public interface StarlarkCallable extends StarlarkValue {
-
-  /**
-   * Defines the "convenient" implementation of function calling for a callable value.
-   *
-   * <p>Do not call this function directly. Use the {@link Starlark#call} function to make a call,
-   * as it handles necessary book-keeping such as maintenance of the call stack, exception handling,
-   * and so on.
-   *
-   * <p>The default implementation throws an EvalException.
-   *
-   * <p>See {@link Starlark#fastcall} for basic information about function calls.
-   *
-   * @param thread the StarlarkThread in which the function is called
-   * @param args a tuple of the arguments passed by position
-   * @param kwargs a new, mutable dict of the arguments passed by keyword. Iteration order is
-   *     determined by keyword order in the call expression.
-   */
-  default Object call(StarlarkThread thread, Tuple<Object> args, Dict<String, Object> kwargs)
-      throws EvalException, InterruptedException {
-    throw Starlark.errorf("function %s not implemented", getName());
-  }
-
-  /**
-   * Defines the "fast" implementation of function calling for a callable value.
-   *
-   * <p>Do not call this function directly. Use the {@link Starlark#call} or {@link
-   * Starlark#fastcall} function to make a call, as it handles necessary book-keeping such as
-   * maintenance of the call stack, exception handling, and so on.
-   *
-   * <p>The fastcall implementation takes ownership of the two arrays, and may retain them
-   * indefinitely or modify them. The caller must not modify or even access the two arrays after
-   * making the call.
-   *
-   * <p>This method defines the low-level or "fast" calling convention. A more convenient interface
-   * is provided by the {@link #call} method, which provides a signature analogous to {@code def
-   * f(*args, **kwargs)}, or possibly the "self-call" feature of the {@link StarlarkMethod#selfCall}
-   * annotation mechanism.
-   *
-   * <p>The default implementation forwards the call to {@code call}, after rejecting any duplicate
-   * named arguments. Other implementations of this method should similarly reject duplicates.
-   *
-   * <p>See {@link Starlark#fastcall} for basic information about function calls.
-   *
-   * @param thread the StarlarkThread in which the function is called
-   * @param positional a list of positional arguments
-   * @param named a list of named arguments, as alternating Strings/Objects. May contain dups.
-   */
-  default Object fastcall(StarlarkThread thread, Object[] positional, Object[] named)
-      throws EvalException, InterruptedException {
-    LinkedHashMap<String, Object> kwargs = Maps.newLinkedHashMapWithExpectedSize(named.length >> 1);
-    for (int i = 0; i < named.length; i += 2) {
-      if (kwargs.put((String) named[i], named[i + 1]) != null) {
-        throw Starlark.errorf("%s got multiple values for parameter '%s'", this, named[i]);
-      }
-    }
-    return call(thread, Tuple.of(positional), Dict.wrap(thread.mutability(), kwargs));
-  }
-
-  /** Returns the form this callable value should take in a stack trace. */
-  String getName();
-
-  /**
-   * Returns the location of the definition of this callable value, or BUILTIN if it was not defined
-   * in Starlark code.
-   */
-  default Location getLocation() {
-    return Location.BUILTIN;
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkFile.java b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkFile.java
deleted file mode 100644
index e601938..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkFile.java
+++ /dev/null
@@ -1,186 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.collect.ImmutableList;
-import java.util.Collections;
-import java.util.List;
-import javax.annotation.Nullable;
-
-/**
- * Syntax tree for a Starlark file, such as a Bazel BUILD or .bzl file.
- *
- * <p>Call {@link #parse} to parse a file. Parser errors are recorded in the syntax tree (see {@link
- * #errors}), which may be incomplete.
- */
-public final class StarlarkFile extends Node {
-
-  private final ImmutableList<Statement> statements;
-  private final FileOptions options;
-  private final ImmutableList<Comment> comments;
-  final List<SyntaxError> errors; // appended to by Resolver
-
-  // set by resolver
-  @Nullable private Resolver.Function resolved;
-
-  @Override
-  public int getStartOffset() {
-    return 0;
-  }
-
-  @Override
-  public int getEndOffset() {
-    return locs.size();
-  }
-
-  private StarlarkFile(
-      FileLocations locs,
-      ImmutableList<Statement> statements,
-      FileOptions options,
-      ImmutableList<Comment> comments,
-      List<SyntaxError> errors) {
-    super(locs);
-    this.statements = statements;
-    this.options = options;
-    this.comments = comments;
-    this.errors = errors;
-  }
-
-  // Creates a StarlarkFile from the given effective list of statements,
-  // which may include the prelude.
-  private static StarlarkFile create(
-      FileLocations locs,
-      ImmutableList<Statement> statements,
-      FileOptions options,
-      Parser.ParseResult result) {
-    return new StarlarkFile(
-        locs, statements, options, ImmutableList.copyOf(result.comments), result.errors);
-  }
-
-  /** Extract a subtree containing only statements from i (included) to j (excluded). */
-  public StarlarkFile subTree(int i, int j) {
-    return new StarlarkFile(
-        this.locs,
-        this.statements.subList(i, j),
-        this.options,
-        /*comments=*/ ImmutableList.of(),
-        errors);
-  }
-  /**
-   * Returns an unmodifiable view of the list of scanner, parser, and (perhaps) resolver errors
-   * accumulated in this Starlark file.
-   */
-  public List<SyntaxError> errors() {
-    return Collections.unmodifiableList(errors);
-  }
-
-  /** Returns errors().isEmpty(). */
-  public boolean ok() {
-    return errors.isEmpty();
-  }
-
-  /** Returns an (immutable, ordered) list of statements in this BUILD file. */
-  public ImmutableList<Statement> getStatements() {
-    return statements;
-  }
-
-  /** Returns an (immutable, ordered) list of comments in this BUILD file. */
-  public ImmutableList<Comment> getComments() {
-    return comments;
-  }
-
-  @Override
-  public String toString() {
-    return "<StarlarkFile with " + statements.size() + " statements>";
-  }
-
-  @Override
-  public void accept(NodeVisitor visitor) {
-    visitor.visit(this);
-  }
-
-  void setResolvedFunction(Resolver.Function resolved) {
-    this.resolved = resolved;
-  }
-
-  /**
-   * Returns information about the implicit function containing the top-level statements of the
-   * file. Set by the resolver.
-   */
-  @Nullable
-  public Resolver.Function getResolvedFunction() {
-    return resolved;
-  }
-
-  /**
-   * Parse the specified file, returning its syntax tree with the prelude statements inserted at the
-   * front of its statement list.
-   */
-  public static StarlarkFile parseWithPrelude(
-      ParserInput input, List<Statement> prelude, FileOptions options) {
-    Parser.ParseResult result = Parser.parseFile(input, options);
-
-    ImmutableList.Builder<Statement> stmts = ImmutableList.builder();
-    stmts.addAll(prelude);
-    stmts.addAll(result.statements);
-
-    return create(result.locs, stmts.build(), options, result);
-  }
-
-  /**
-   * Parse a Starlark file.
-   *
-   * <p>A syntax tree is always returned, even in case of error. Errors are recorded in the tree.
-   * Example usage:
-   *
-   * <pre>
-   * StarlarkFile file = StarlarkFile.parse(input, options);
-   * if (!file.ok()) {
-   *    Event.replayEventsOn(handler, file.errors());
-   *    ...
-   * }
-   * </pre>
-   */
-  public static StarlarkFile parse(ParserInput input, FileOptions options) {
-    Parser.ParseResult result = Parser.parseFile(input, options);
-    return create(result.locs, ImmutableList.copyOf(result.statements), options, result);
-  }
-
-  /** Parse a Starlark file with default options. */
-  public static StarlarkFile parse(ParserInput input) {
-    return parse(input, FileOptions.DEFAULT);
-  }
-
-  /** Returns the options specified when parsing this file. */
-  public FileOptions getOptions() {
-    return options;
-  }
-
-  /** Returns the name of this file, as specified to the parser. */
-  public String getName() {
-    return locs.file();
-  }
-
-  /** A ParseProfiler records the start and end times of parse operations. */
-  public interface ParseProfiler {
-    Object start(String filename);
-
-    void end(Object span);
-  }
-
-  /** Installs a global hook that will be notified of parse operations. */
-  public static void setParseProfiler(@Nullable ParseProfiler p) {
-    Parser.profiler = p;
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkFunction.java b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkFunction.java
deleted file mode 100644
index f2cfe9f..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkFunction.java
+++ /dev/null
@@ -1,363 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.base.Joiner;
-import com.google.common.collect.ImmutableList;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import javax.annotation.Nullable;
-import net.starlark.java.spelling.SpellChecker;
-
-/** A StarlarkFunction is a function value created by a Starlark {@code def} statement. */
-public final class StarlarkFunction implements StarlarkCallable {
-
-  private final Resolver.Function rfn;
-  private final Module module; // a function closes over its defining module
-  private final Tuple<Object> defaultValues;
-
-  StarlarkFunction(Resolver.Function rfn, Tuple<Object> defaultValues, Module module) {
-    this.rfn = rfn;
-    this.module = module;
-    this.defaultValues = defaultValues;
-  }
-
-  boolean isToplevel() {
-    return rfn.isToplevel();
-  }
-
-  // TODO(adonovan): many functions would be simpler if
-  // parameterNames excluded the *args and **kwargs parameters,
-  // (whose names are immaterial to the callee anyway). Do that.
-  // Also, reject getDefaultValue for varargs and kwargs.
-
-  /**
-   * Returns the default value of the ith parameter ({@code 0 <= i < getParameterNames().size()}),
-   * or null if the parameter is required. Residual parameters, if any, are always last, and have no
-   * default value.
-   */
-  @Nullable
-  public Object getDefaultValue(int i) {
-    if (i < 0 || i >= rfn.getParameters().size()) {
-      throw new IndexOutOfBoundsException();
-    }
-    int nparams =
-        rfn.getParameters().size() - (rfn.hasKwargs() ? 1 : 0) - (rfn.hasVarargs() ? 1 : 0);
-    int prefix = nparams - defaultValues.size();
-    if (i < prefix) {
-      return null; // implicit prefix of mandatory parameters
-    }
-    if (i < nparams) {
-      Object v = defaultValues.get(i - prefix);
-      return v == MANDATORY ? null : v;
-    }
-    return null; // *args or *kwargs
-  }
-
-  /**
-   * Returns the names of this function's parameters. The residual {@code *args} and {@code
-   * **kwargs} parameters, if any, are always last.
-   */
-  public ImmutableList<String> getParameterNames() {
-    return rfn.getParameterNames();
-  }
-
-  /**
-   * Reports whether this function has a residual positional arguments parameter, {@code def
-   * f(*args)}.
-   */
-  public boolean hasVarargs() {
-    return rfn.hasVarargs();
-  }
-
-  /**
-   * Reports whether this function has a residual keyword arguments parameter, {@code def
-   * f(**kwargs)}.
-   */
-  public boolean hasKwargs() {
-    return rfn.hasKwargs();
-  }
-
-  /** Returns the location of the function's defining identifier. */
-  @Override
-  public Location getLocation() {
-    return rfn.getLocation();
-  }
-
-  /**
-   * Returns the name of the function. Implicit functions (those not created by a def statement),
-   * may have names such as "<toplevel>" or "<expr>".
-   */
-  @Override
-  public String getName() {
-    return rfn.getName();
-  }
-
-  /** Returns the value denoted by the function's doc string literal, or null if absent. */
-  @Nullable
-  public String getDocumentation() {
-    if (rfn.getBody().isEmpty()) {
-      return null;
-    }
-    Statement first = rfn.getBody().get(0);
-    if (!(first instanceof ExpressionStatement)) {
-      return null;
-    }
-    Expression expr = ((ExpressionStatement) first).getExpression();
-    if (!(expr instanceof StringLiteral)) {
-      return null;
-    }
-    return ((StringLiteral) expr).getValue();
-  }
-
-  public Module getModule() {
-    return module;
-  }
-
-  @Override
-  public Object fastcall(StarlarkThread thread, Object[] positional, Object[] named)
-      throws EvalException, InterruptedException {
-    if (thread.mutability().isFrozen()) {
-      throw Starlark.errorf("Trying to call in frozen environment");
-    }
-    if (thread.isRecursiveCall(this)) {
-      throw Starlark.errorf("function '%s' called recursively", getName());
-    }
-
-    // Compute the effective parameter values
-    // and update the corresponding variables.
-    Object[] arguments = processArgs(thread.mutability(), positional, named);
-
-    StarlarkThread.Frame fr = thread.frame(0);
-    ImmutableList<String> names = rfn.getParameterNames();
-    for (int i = 0; i < names.size(); ++i) {
-      fr.locals.put(names.get(i), arguments[i]);
-    }
-
-    return Eval.execFunctionBody(fr, rfn.getBody());
-  }
-
-  @Override
-  public void repr(Printer printer) {
-    // TODO(adonovan): use the file name instead. But that's a breaking Bazel change.
-    Object clientData = module.getClientData();
-
-    printer.append("<function " + getName());
-    if (clientData != null) {
-      printer.append(" from " + clientData);
-    }
-    printer.append(">");
-  }
-
-  // Checks the positional and named arguments to ensure they match the signature. It returns a new
-  // array of effective parameter values corresponding to the parameters of the signature. Newly
-  // allocated values (e.g. a **kwargs dict) use the Mutability mu.
-  //
-  // If the function has optional parameters, their default values are supplied by getDefaultValue.
-  private Object[] processArgs(Mutability mu, Object[] positional, Object[] named)
-      throws EvalException {
-
-    // This is the general schema of a function:
-    //
-    //   def f(p1, p2=dp2, p3=dp3, *args, k1, k2=dk2, k3, **kwargs)
-    //
-    // The p parameters are non-kwonly, and may be specified positionally.
-    // The k parameters are kwonly, and must be specified by name.
-    // The defaults tuple is (dp2, dp3, MANDATORY, dk2, MANDATORY).
-    // The missing prefix (p1) is assumed to be all MANDATORY.
-    //
-    // Arguments are processed as follows:
-    // - positional arguments are bound to a prefix of [p1, p2, p3].
-    // - surplus positional arguments are bound to *args.
-    // - keyword arguments are bound to any of {p1, p2, p3, k1, k2, k3};
-    //   duplicate bindings are rejected.
-    // - surplus keyword arguments are bound to **kwargs.
-    // - defaults are bound to each parameter from p2 to k3 if no value was set.
-    //   default values come from the tuple above.
-    //   It is an error if the defaults tuple entry for an unset parameter is MANDATORY.
-
-    ImmutableList<String> names = rfn.getParameterNames();
-
-    // TODO(adonovan): when we have flat frames, pass in the locals array here instead of
-    // allocating.
-    Object[] arguments = new Object[names.size()];
-
-    // nparams is the number of ordinary parameters.
-    int nparams =
-        rfn.getParameters().size() - (rfn.hasKwargs() ? 1 : 0) - (rfn.hasVarargs() ? 1 : 0);
-
-    // numPositionalParams is the number of non-kwonly parameters.
-    int numPositionalParams = nparams - rfn.numKeywordOnlyParams();
-
-    // Too many positional args?
-    int n = positional.length;
-    if (n > numPositionalParams) {
-      if (!rfn.hasVarargs()) {
-        if (numPositionalParams > 0) {
-          throw Starlark.errorf(
-              "%s() accepts no more than %d positional argument%s but got %d",
-              getName(), numPositionalParams, plural(numPositionalParams), n);
-        } else {
-          throw Starlark.errorf(
-              "%s() does not accept positional arguments, but got %d", getName(), n);
-        }
-      }
-      n = numPositionalParams;
-    }
-    // Inv: n is number of positional arguments that are not surplus.
-
-    // Bind positional arguments to non-kwonly parameters.
-    for (int i = 0; i < n; i++) {
-      arguments[i] = positional[i];
-    }
-
-    // Bind surplus positional arguments to *args parameter.
-    if (rfn.hasVarargs()) {
-      arguments[nparams] = Tuple.wrap(Arrays.copyOfRange(positional, n, positional.length));
-    }
-
-    List<String> unexpected = null;
-
-    // named arguments
-    Dict<String, Object> kwargs = null;
-    if (rfn.hasKwargs()) {
-      kwargs = Dict.of(mu);
-      arguments[rfn.getParameters().size() - 1] = kwargs;
-    }
-    for (int i = 0; i < named.length; i += 2) {
-      String keyword = (String) named[i]; // safe
-      Object value = named[i + 1];
-      int pos = names.indexOf(keyword); // the list should be short, so linear scan is OK.
-      if (0 <= pos && pos < nparams) {
-        // keyword is the name of a named parameter
-        if (arguments[pos] != null) {
-          throw Starlark.errorf("%s() got multiple values for parameter '%s'", getName(), keyword);
-        }
-        arguments[pos] = value;
-
-      } else if (kwargs != null) {
-        // residual keyword argument
-        int sz = kwargs.size();
-        kwargs.put(keyword, value, null);
-        if (kwargs.size() == sz) {
-          throw Starlark.errorf(
-              "%s() got multiple values for keyword argument '%s'", getName(), keyword);
-        }
-
-      } else {
-        // unexpected keyword argument
-        if (unexpected == null) {
-          unexpected = new ArrayList<>();
-        }
-        unexpected.add(keyword);
-      }
-    }
-    if (unexpected != null) {
-      // Give a spelling hint if there is exactly one.
-      // More than that suggests the wrong function was called.
-      throw Starlark.errorf(
-          "%s() got unexpected keyword argument%s: %s%s",
-          getName(),
-          plural(unexpected.size()),
-          Joiner.on(", ").join(unexpected),
-          unexpected.size() == 1
-              ? SpellChecker.didYouMean(unexpected.get(0), names.subList(0, nparams))
-              : "");
-    }
-
-    // Apply defaults and report errors for missing required arguments.
-    int m = nparams - defaultValues.size(); // first default
-    List<String> missingPositional = null;
-    List<String> missingKwonly = null;
-    for (int i = n; i < nparams; i++) {
-      // provided?
-      if (arguments[i] != null) {
-        continue;
-      }
-
-      // optional?
-      if (i >= m) {
-        Object dflt = defaultValues.get(i - m);
-        if (dflt != MANDATORY) {
-          arguments[i] = dflt;
-          continue;
-        }
-      }
-
-      // missing
-      if (i < numPositionalParams) {
-        if (missingPositional == null) {
-          missingPositional = new ArrayList<>();
-        }
-        missingPositional.add(names.get(i));
-      } else {
-        if (missingKwonly == null) {
-          missingKwonly = new ArrayList<>();
-        }
-        missingKwonly.add(names.get(i));
-      }
-    }
-    if (missingPositional != null) {
-      throw Starlark.errorf(
-          "%s() missing %d required positional argument%s: %s",
-          getName(),
-          missingPositional.size(),
-          plural(missingPositional.size()),
-          Joiner.on(", ").join(missingPositional));
-    }
-    if (missingKwonly != null) {
-      throw Starlark.errorf(
-          "%s() missing %d required keyword-only argument%s: %s",
-          getName(),
-          missingKwonly.size(),
-          plural(missingKwonly.size()),
-          Joiner.on(", ").join(missingKwonly));
-    }
-
-    return arguments;
-  }
-
-  private static String plural(int n) {
-    return n == 1 ? "" : "s";
-  }
-
-  @Override
-  public String toString() {
-    StringBuilder out = new StringBuilder();
-    out.append(getName());
-    out.append('(');
-    String sep = "";
-    // TODO(adonovan): include *, ** tokens.
-    for (String param : getParameterNames()) {
-      out.append(sep).append(param);
-      sep = ", ";
-    }
-    out.append(')');
-    return out.toString();
-  }
-
-  @Override
-  public boolean isImmutable() {
-    // Only correct because closures are not yet supported.
-    return true;
-  }
-
-  // The MANDATORY sentinel indicates a slot in the defaultValues
-  // tuple corresponding to a required parameter. It is not visible
-  // to Java or Starlark code.
-  static final Object MANDATORY = new Mandatory();
-
-  private static class Mandatory implements StarlarkValue {}
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkIndexable.java b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkIndexable.java
deleted file mode 100644
index 07717cd..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkIndexable.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2015 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-/**
- * A Starlark value that support indexed access ({@code object[key]}) and membership tests ({@code
- * key in object}).
- */
-public interface StarlarkIndexable extends StarlarkValue {
-
-  /** Returns the value associated with the given key. */
-  Object getIndex(StarlarkSemantics semantics, Object key) throws EvalException;
-
-  /**
-   * Returns whether the key is in the object. New types should try to follow the semantics of dict:
-   * 'x in y' should return True when 'y[x]' is valid; otherwise, it should either be False or a
-   * failure. Note however that the builtin types string, list, and tuple do not follow this
-   * convention.
-   */
-  boolean containsKey(StarlarkSemantics semantics, Object key) throws EvalException;
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkIterable.java b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkIterable.java
deleted file mode 100644
index 1db623f..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkIterable.java
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2019 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-/**
- * A StarlarkIterable value may be iterated by Starlark language constructs such as {@code for}
- * loops, list and dict comprehensions, and {@code f(*args)}.
- *
- * <p>Functionally this interface is equivalent to {@code java.lang.Iterable}, but it additionally
- * affirms that the iterability of a Java class should be exposed to Starlark programs.
- */
-public interface StarlarkIterable<T> extends StarlarkValue, Iterable<T> {}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkList.java b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkList.java
deleted file mode 100644
index a438d06..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkList.java
+++ /dev/null
@@ -1,476 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
-import java.util.AbstractList;
-import java.util.Arrays;
-import java.util.Collection;
-import javax.annotation.Nullable;
-import net.starlark.java.annot.Param;
-import net.starlark.java.annot.StarlarkBuiltin;
-import net.starlark.java.annot.StarlarkDocumentationCategory;
-import net.starlark.java.annot.StarlarkMethod;
-
-/** A StarlarkList is a mutable finite sequence of values. */
-@StarlarkBuiltin(
-    name = "list",
-    category = StarlarkDocumentationCategory.BUILTIN,
-    doc =
-        "The built-in list type. Example list expressions:<br>"
-            + "<pre class=language-python>x = [1, 2, 3]</pre>"
-            + "Accessing elements is possible using indexing (starts from <code>0</code>):<br>"
-            + "<pre class=language-python>e = x[1]   # e == 2</pre>"
-            + "Lists support the <code>+</code> operator to concatenate two lists. Example:<br>"
-            + "<pre class=language-python>x = [1, 2] + [3, 4]   # x == [1, 2, 3, 4]\n"
-            + "x = [\"a\", \"b\"]\n"
-            + "x += [\"c\"]            # x == [\"a\", \"b\", \"c\"]</pre>"
-            + "Similar to strings, lists support slice operations:"
-            + "<pre class=language-python>['a', 'b', 'c', 'd'][1:3]   # ['b', 'c']\n"
-            + "['a', 'b', 'c', 'd'][::2]  # ['a', 'c']\n"
-            + "['a', 'b', 'c', 'd'][3:0:-1]  # ['d', 'c', 'b']</pre>"
-            + "Lists are mutable, as in Python.")
-public final class StarlarkList<E> extends AbstractList<E>
-    implements Sequence<E>, StarlarkValue, Mutability.Freezable {
-
-  // The implementation strategy is similar to ArrayList,
-  // but without the extra indirection of using ArrayList.
-
-  private int size;
-  private int iteratorCount; // number of active iterators (unused once frozen)
-  private Object[] elems = EMPTY_ARRAY; // elems[i] == null  iff  i >= size
-
-  /** Final except for {@link #unsafeShallowFreeze}; must not be modified any other way. */
-  private Mutability mutability;
-
-  private static final Object[] EMPTY_ARRAY = {};
-
-  private StarlarkList(@Nullable Mutability mutability, Object[] elems) {
-    this.elems = elems;
-    this.size = elems.length;
-    this.mutability = mutability == null ? Mutability.IMMUTABLE : mutability;
-  }
-
-  /**
-   * Takes ownership of the supplied array and returns a new StarlarkList instance that initially
-   * wraps the array. The caller must not subsequently modify the array, but the StarlarkList
-   * instance may do so.
-   */
-  static <T> StarlarkList<T> wrap(@Nullable Mutability mutability, Object[] elems) {
-    return new StarlarkList<>(mutability, elems);
-  }
-
-  @Override
-  public boolean isImmutable() {
-    return mutability().isFrozen();
-  }
-
-  @Override
-  public boolean isHashable() {
-    return false; // even a frozen list is unhashable in Starlark
-  }
-
-  @Override
-  public boolean updateIteratorCount(int delta) {
-    if (mutability().isFrozen()) {
-      return false;
-    }
-    if (delta > 0) {
-      iteratorCount++;
-    } else if (delta < 0) {
-      iteratorCount--;
-    }
-    return iteratorCount > 0;
-  }
-
-  /**
-   * A shared instance for the empty list with immutable mutability.
-   *
-   * <p>Other immutable empty list objects can exist, e.g. lists that were once mutable but whose
-   * environments were then frozen. This instance is for empty lists that were always frozen from
-   * the beginning.
-   */
-  private static final StarlarkList<?> EMPTY = wrap(Mutability.IMMUTABLE, EMPTY_ARRAY);
-
-  /** Returns an empty frozen list of the desired type. */
-  @SuppressWarnings("unchecked")
-  public static <T> StarlarkList<T> empty() {
-    return (StarlarkList<T>) EMPTY;
-  }
-
-  /** Returns a new, empty list with the specified Mutability. */
-  public static <T> StarlarkList<T> newList(Mutability mutability) {
-    return wrap(mutability, EMPTY_ARRAY);
-  }
-
-  /**
-   * Returns a {@code StarlarkList} whose items are given by an iterable and which has the given
-   * {@link Mutability}. If {@code mutability} is null, the list is immutable.
-   */
-  public static <T> StarlarkList<T> copyOf(
-      @Nullable Mutability mutability, Iterable<? extends T> elems) {
-    return wrap(mutability, Iterables.toArray(elems, Object.class));
-  }
-
-  /**
-   * Returns an immutable list with the given elements. Equivalent to {@code copyOf(null, elems)}.
-   */
-  public static <T> StarlarkList<T> immutableCopyOf(Iterable<? extends T> elems) {
-    return copyOf(null, elems);
-  }
-
-  /**
-   * Returns a {@code StarlarkList} with the given items and the {@link Mutability}. If {@code
-   * mutability} is null, the list is immutable.
-   */
-  public static <T> StarlarkList<T> of(@Nullable Mutability mutability, T... elems) {
-    return wrap(mutability, Arrays.copyOf(elems, elems.length));
-  }
-
-  @Override
-  public Mutability mutability() {
-    return mutability;
-  }
-
-  @Override
-  public void unsafeShallowFreeze() {
-    Mutability.Freezable.checkUnsafeShallowFreezePrecondition(this);
-    this.mutability = Mutability.IMMUTABLE;
-  }
-
-  @Override
-  public ImmutableList<E> getImmutableList() {
-    // Optimization: a frozen array needn't be copied.
-    // If the entire array is full, we can wrap it directly.
-    if (elems.length == size && mutability().isFrozen()) {
-      return Tuple.wrapImmutable(elems);
-    }
-
-    return ImmutableList.copyOf(this);
-  }
-
-  /**
-   * Returns a new {@code StarlarkList} that is the concatenation of two {@code StarlarkList}s. The
-   * new list will have the given {@link Mutability}.
-   */
-  public static <T> StarlarkList<T> concat(
-      StarlarkList<? extends T> x, StarlarkList<? extends T> y, Mutability mutability) {
-    Object[] res = new Object[x.size + y.size];
-    System.arraycopy(x.elems, 0, res, 0, x.size);
-    System.arraycopy(y.elems, 0, res, x.size, y.size);
-    return wrap(mutability, res);
-  }
-
-  @Override
-  public boolean equals(Object that) {
-    // This slightly violates the java.util.List equivalence contract
-    // because it considers the class, not just the elements.
-    return this == that || (that instanceof StarlarkList && sameElems(this, ((StarlarkList) that)));
-  }
-
-  private static boolean sameElems(StarlarkList<?> x, StarlarkList<?> y) {
-    if (x.size != y.size) {
-      return false;
-    }
-    for (int i = 0; i < x.size; i++) {
-      if (!x.elems[i].equals(y.elems[i])) {
-        return false;
-      }
-    }
-    return true;
-  }
-
-  @Override
-  public int hashCode() {
-    // Roll our own hash code to avoid iterating through null part of elems.
-    int result = 1;
-    for (int i = 0; i < size; i++) {
-      result = 31 * result + elems[i].hashCode();
-    }
-    return 6047 + 4673 * result;
-  }
-
-  @Override
-  public void repr(Printer printer) {
-    printer.printList(this, "[", ", ", "]");
-  }
-
-  // TODO(adonovan): StarlarkValue has 3 String methods yet still we need this fourth. Why?
-  @Override
-  public String toString() {
-    return Starlark.repr(this);
-  }
-
-  /** Returns a new StarlarkList containing n consecutive repeats of this tuple. */
-  public StarlarkList<E> repeat(int n, Mutability mutability) {
-    if (n <= 0) {
-      return wrap(mutability, EMPTY_ARRAY);
-    }
-
-    // TODO(adonovan): reject unreasonably large n.
-    Object[] res = new Object[n * size];
-    for (int i = 0; i < n; i++) {
-      System.arraycopy(elems, 0, res, i * size, size);
-    }
-    return wrap(mutability, res);
-  }
-
-  @Override
-  @SuppressWarnings("unchecked")
-  public E get(int i) {
-    return (E) elems[i]; // unchecked
-  }
-
-  @Override
-  public int size() {
-    return size;
-  }
-
-  @Override
-  public StarlarkList<E> getSlice(Mutability mu, int start, int stop, int step) {
-    RangeList indices = new RangeList(start, stop, step);
-    int n = indices.size();
-    Object[] res = new Object[n];
-    if (step == 1) { // common case
-      System.arraycopy(elems, indices.at(0), res, 0, n);
-    } else {
-      for (int i = 0; i < n; ++i) {
-        res[i] = elems[indices.at(i)];
-      }
-    }
-    return wrap(mu, res);
-  }
-
-  // Postcondition: elems.length >= mincap.
-  private void grow(int mincap) {
-    int oldcap = elems.length;
-    if (oldcap < mincap) {
-      int newcap = oldcap + (oldcap >> 1); // grow by at least 50%
-      if (newcap < mincap) {
-        newcap = mincap;
-      }
-      elems = Arrays.copyOf(elems, newcap);
-    }
-  }
-
-  /**
-   * Appends an element to the end of the list, after validating that mutation is allowed.
-   *
-   * @param element the element to add
-   * @param unused a nonce value to select this overload, not List.add
-   */
-  public void add(E element, Location unused) throws EvalException {
-    Starlark.checkMutable(this);
-    grow(size + 1);
-    elems[size++] = element;
-  }
-
-  /**
-   * Inserts an element at a given position to the list.
-   *
-   * @param index the new element's index
-   * @param element the element to add
-   * @param unused a nonce value to select this overload, not List.add
-   */
-  public void add(int index, E element, Location unused) throws EvalException {
-    Starlark.checkMutable(this);
-    grow(size + 1);
-    System.arraycopy(elems, index, elems, index + 1, size - index);
-    elems[index] = element;
-    size++;
-  }
-
-  /**
-   * Appends all the elements to the end of the list.
-   *
-   * @param elements the elements to add
-   * @param unused a nonce value to select this overload, not List.addAll
-   */
-  public void addAll(Iterable<? extends E> elements, Location unused) throws EvalException {
-    Starlark.checkMutable(this);
-    if (elements instanceof StarlarkList) {
-      StarlarkList<?> that = (StarlarkList) elements;
-      // (safe even if this == that)
-      grow(this.size + that.size);
-      System.arraycopy(that.elems, 0, this.elems, this.size, that.size);
-      this.size += that.size;
-    } else if (elements instanceof Collection) {
-      // collection of known size
-      Collection<?> that = (Collection) elements;
-      grow(size + that.size());
-      for (Object x : that) {
-        elems[size++] = x;
-      }
-    } else {
-      // iterable
-      for (Object x : elements) {
-        grow(size + 1);
-        elems[size++] = x;
-      }
-    }
-  }
-
-  /**
-   * Removes the element at a given index. The index must already have been validated to be in
-   * range.
-   *
-   * @param index the index of the element to remove
-   * @param unused a nonce value to select this overload, not List.remove
-   */
-  public void remove(int index, Location unused) throws EvalException {
-    Starlark.checkMutable(this);
-    int n = size - index - 1;
-    if (n > 0) {
-      System.arraycopy(elems, index + 1, elems, index, n);
-    }
-    elems[--size] = null; // aid GC
-  }
-
-  @StarlarkMethod(
-      name = "remove",
-      doc =
-          "Removes the first item from the list whose value is x. "
-              + "It is an error if there is no such item.",
-      parameters = {@Param(name = "x", type = Object.class, doc = "The object to remove.")})
-  public NoneType removeObject(Object x) throws EvalException {
-    for (int i = 0; i < size; i++) {
-      if (elems[i].equals(x)) {
-        remove(i, (Location) null);
-        return Starlark.NONE;
-      }
-    }
-    throw Starlark.errorf("item %s not found in list", Starlark.repr(x));
-  }
-
-  /**
-   * Sets the position at the given index to contain the given value. The index must already have
-   * been validated to be in range.
-   *
-   * @param index the position to change
-   * @param value the new value
-   * @param unused a nonce value to select this overload, not List.set
-   */
-  public void set(int index, E value, Location unused) throws EvalException {
-    Starlark.checkMutable(this);
-    elems[index] = value;
-  }
-
-  @StarlarkMethod(
-      name = "append",
-      doc = "Adds an item to the end of the list.",
-      parameters = {
-        @Param(name = "item", type = Object.class, doc = "Item to add at the end.", noneable = true)
-      })
-  @SuppressWarnings("unchecked")
-  public NoneType append(Object item) throws EvalException {
-    add((E) item, (Location) null); // unchecked
-    return Starlark.NONE;
-  }
-
-  @StarlarkMethod(name = "clear", doc = "Removes all the elements of the list.")
-  public NoneType clearMethod() throws EvalException {
-    Starlark.checkMutable(this);
-    for (int i = 0; i < size; i++) {
-      elems[i] = null; // aid GC
-    }
-    size = 0;
-    return Starlark.NONE;
-  }
-
-  @StarlarkMethod(
-      name = "insert",
-      doc = "Inserts an item at a given position.",
-      parameters = {
-        @Param(name = "index", type = Integer.class, doc = "The index of the given position."),
-        @Param(name = "item", type = Object.class, doc = "The item.", noneable = true)
-      })
-  @SuppressWarnings("unchecked")
-  public NoneType insert(Integer index, Object item) throws EvalException {
-    add(EvalUtils.toIndex(index, size), (E) item, (Location) null); // unchecked
-    return Starlark.NONE;
-  }
-
-  @StarlarkMethod(
-      name = "extend",
-      doc = "Adds all items to the end of the list.",
-      parameters = {@Param(name = "items", type = Object.class, doc = "Items to add at the end.")})
-  public NoneType extend(Object items) throws EvalException {
-    @SuppressWarnings("unchecked")
-    Iterable<? extends E> src = (Iterable<? extends E>) Starlark.toIterable(items);
-    addAll(src, (Location) null);
-    return Starlark.NONE;
-  }
-
-  @StarlarkMethod(
-      name = "index",
-      doc =
-          "Returns the index in the list of the first item whose value is x. "
-              + "It is an error if there is no such item.",
-      parameters = {
-        @Param(name = "x", type = Object.class, doc = "The object to search."),
-        @Param(
-            name = "start",
-            type = Integer.class,
-            defaultValue = "None",
-            noneable = true, // TODO(adonovan): this is wrong
-            named = true,
-            doc = "The start index of the list portion to inspect."),
-        @Param(
-            name = "end",
-            type = Integer.class,
-            defaultValue = "None",
-            noneable = true, // TODO(adonovan): this is wrong
-            named = true,
-            doc = "The end index of the list portion to inspect.")
-      })
-  public Integer index(Object x, Object start, Object end) throws EvalException {
-    int i = start == Starlark.NONE ? 0 : EvalUtils.toIndex((Integer) start, size);
-    int j = end == Starlark.NONE ? size : EvalUtils.toIndex((Integer) end, size);
-    for (; i < j; i++) {
-      if (elems[i].equals(x)) {
-        return i;
-      }
-    }
-    throw Starlark.errorf("item %s not found in list", Starlark.repr(x));
-  }
-
-  @StarlarkMethod(
-      name = "pop",
-      doc =
-          "Removes the item at the given position in the list, and returns it. "
-              + "If no <code>index</code> is specified, "
-              + "it removes and returns the last item in the list.",
-      parameters = {
-        @Param(
-            name = "i",
-            type = Integer.class,
-            noneable = true, // TODO(adonovan): this is wrong
-            defaultValue = "-1",
-            doc = "The index of the item.")
-      })
-  public Object pop(Object i) throws EvalException {
-    int arg = i == Starlark.NONE ? -1 : (Integer) i;
-    int index = EvalUtils.getSequenceIndex(arg, size);
-    Object result = elems[index];
-    remove(index, (Location) null);
-    return result;
-  }
-
-  @Override
-  public Object[] toArray() {
-    return size != 0 ? Arrays.copyOf(elems, size) : EMPTY_ARRAY;
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java
deleted file mode 100644
index 04b4937..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java
+++ /dev/null
@@ -1,214 +0,0 @@
-// Copyright 2019 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableSortedMap;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * A StarlarkSemantics is an immutable set of optional name/value pairs that affect the dynamic
- * behavior of Starlark operators and built-in functions, both core and application-defined.
- *
- * <p>For extensibility, a StarlarkSemantics only records a name/value pair when the value differs
- * from the default value appropriate to that name. Values of most types are accessed using a {@link
- * Key}, which defines the name, type, and default value for an entry. Boolean values are accessed
- * using a string key; the string must have the prefix "+" or "-", indicating the default value: +
- * for true, - for false. The reason for the special treatment of boolean entries is that they may
- * enable or disable methods and parameters in the StarlarkMethod annotation system, and it is not
- * possible to refer to a Key from a Java annotation, only a string.
- *
- * <p>It is the client's responsibility to ensure that a StarlarkSemantics does not encounter
- * multiple Keys of the same name but different value types.
- *
- * <p>For Bazel's semantics options, see {@link packages.semantics.BuildLanguageOptions}.
- *
- * <p>For options that affect the static behavior of the Starlark frontend (lexer, parser,
- * validator, compiler), see {@link FileOptions}.
- */
-public final class StarlarkSemantics {
-
-  /** Returns the empty semantics, in which every option has its default value. */
-  public static final StarlarkSemantics DEFAULT = new StarlarkSemantics(ImmutableSortedMap.of());
-
-  // A map entry must be accessed by Key iff its name has no [+-] prefix.
-  // Key<Boolean> is permitted too.
-  // We use ImmutableSortedMap for the benefit of equals/hashCode/toString.
-  private final ImmutableSortedMap<String, Object> map;
-  private final int hashCode;
-
-  private StarlarkSemantics(ImmutableSortedMap<String, Object> map) {
-    this.map = map;
-    this.hashCode = map.hashCode();
-  }
-
-  /** Returns the value of a boolean option, which must have a [+-] prefix. */
-  public boolean getBool(String name) {
-    char prefix = name.charAt(0);
-    Preconditions.checkArgument(prefix == '+' || prefix == '-');
-    boolean defaultValue = prefix == '+';
-    Boolean v = (Boolean) map.get(name); // prefix => cast cannot fail
-    return v != null ? v : defaultValue;
-  }
-
-  /** Returns the value of the option denoted by {@code key}. */
-  public <T> T get(Key<T> key) {
-    @SuppressWarnings("unchecked") // safe, if Key.names are unique
-    T v = (T) map.get(key.name);
-    return v != null ? v : key.defaultValue;
-  }
-
-  /** A Key identifies an option, providing its name, type, and default value. */
-  public static class Key<T> {
-    public final String name;
-    public final T defaultValue;
-
-    /**
-     * Constructs a key. The name must not start with [+-]. The value must not be subsequently
-     * modified.
-     */
-    public Key(String name, T defaultValue) {
-      char prefix = name.charAt(0);
-      Preconditions.checkArgument(prefix != '-' && prefix != '+');
-      this.name = name;
-      this.defaultValue = Preconditions.checkNotNull(defaultValue);
-    }
-
-    @Override
-    public String toString() {
-      return this.name;
-    }
-  }
-
-  /**
-   * Returns a new builder that initially holds the same key/value pairs as this StarlarkSemantics.
-   */
-  public Builder toBuilder() {
-    return new Builder(new HashMap<>(map));
-  }
-
-  /** Returns a new empty builder. */
-  public static Builder builder() {
-    return new Builder(new HashMap<>());
-  }
-
-  /** A Builder is a mutable container used to construct an immutable StarlarkSemantics. */
-  public static final class Builder {
-    private final HashMap<String, Object> map;
-
-    private Builder(HashMap<String, Object> map) {
-      this.map = map;
-    }
-
-    /** Sets the value for the specified key. */
-    public <T> Builder set(Key<T> key, T value) {
-      if (!value.equals(key.defaultValue)) {
-        map.put(key.name, value);
-      } else {
-        map.remove(key.name);
-      }
-      return this;
-    }
-
-    /** Sets the value for the boolean key, which must have a [+-] prefix. */
-    public Builder setBool(String name, boolean value) {
-      char prefix = name.charAt(0);
-      Preconditions.checkArgument(prefix == '+' || prefix == '-');
-      boolean defaultValue = prefix == '+';
-      if (value != defaultValue) {
-        map.put(name, value);
-      } else {
-        map.remove(name);
-      }
-      return this;
-    }
-
-    /** Returns an immutable StarlarkSemantics. */
-    public StarlarkSemantics build() {
-      return new StarlarkSemantics(ImmutableSortedMap.copyOf(map));
-    }
-  }
-
-  /**
-   * Returns true if a feature attached to the given toggling flags should be enabled.
-   *
-   * <ul>
-   *   <li>If both parameters are empty, this indicates the feature is not controlled by flags, and
-   *       should thus be enabled.
-   *   <li>If the {@code enablingFlag} parameter is non-empty, this returns true if and only if that
-   *       flag is true. (This represents a feature that is only on if a given flag is *on*).
-   *   <li>If the {@code disablingFlag} parameter is non-empty, this returns true if and only if
-   *       that flag is false. (This represents a feature that is only on if a given flag is *off*).
-   *   <li>It is illegal to pass both parameters as non-empty.
-   * </ul>
-   */
-  boolean isFeatureEnabledBasedOnTogglingFlags(String enablingFlag, String disablingFlag) {
-    Preconditions.checkArgument(
-        enablingFlag.isEmpty() || disablingFlag.isEmpty(),
-        "at least one of 'enablingFlag' or 'disablingFlag' must be empty");
-    if (!enablingFlag.isEmpty()) {
-      return this.getBool(enablingFlag);
-    } else if (!disablingFlag.isEmpty()) {
-      return !this.getBool(disablingFlag);
-    } else {
-      return true;
-    }
-  }
-
-  @Override
-  public int hashCode() {
-    return hashCode;
-  }
-
-  @Override
-  public boolean equals(Object that) {
-    return this == that
-        || (that instanceof StarlarkSemantics && this.map.equals(((StarlarkSemantics) that).map));
-  }
-
-  /**
-   * Returns a representation of this StarlarkSemantics' non-default key/value pairs in key order.
-   */
-  @Override
-  public String toString() {
-    // Print "StarlarkSemantics{k=v, ...}", without +/- prefixes.
-    StringBuilder buf = new StringBuilder();
-    buf.append("StarlarkSemantics{");
-    String sep = "";
-    for (Map.Entry<String, Object> e : map.entrySet()) {
-      String key = e.getKey();
-      buf.append(sep);
-      sep = ", ";
-      if (key.charAt(0) == '+' || key.charAt(0) == '-') {
-        buf.append(key, 1, key.length());
-      } else {
-        buf.append(key);
-      }
-      buf.append('=').append(e.getValue());
-    }
-    return buf.append('}').toString();
-  }
-
-  // -- semantics options affecting the Starlark interpreter itself --
-
-  /** Ignore negative n in string.replace(count=n), and treat n=None as an error. */
-  public static final String INCOMPATIBLE_STRING_REPLACE_COUNT =
-      "-incompatible_string_replace_count";
-
-  /** Change the behavior of 'print' statements. Used in tests to verify flag propagation. */
-  public static final String PRINT_TEST_MARKER = "-print_test_marker";
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkThread.java b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkThread.java
deleted file mode 100644
index f6cc8b3..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkThread.java
+++ /dev/null
@@ -1,473 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Maps;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.atomic.AtomicInteger;
-import javax.annotation.Nullable;
-import javax.annotation.concurrent.Immutable;
-
-/**
- * An StarlarkThread represents a Starlark thread.
- *
- * <p>It holds the stack of active Starlark and built-in function calls. In addition, it may hold
- * per-thread application state (see {@link #setThreadLocal}) that passes through Starlark functions
- * but does not directly affect them, such as information about the BUILD file being loaded.
- *
- * <p>Every {@code StarlarkThread} has a {@link Mutability} field, and must be used within a
- * function that creates and closes this {@link Mutability} with the try-with-resource pattern. This
- * {@link Mutability} is also used when initializing mutable objects within that {@code
- * StarlarkThread}. When the {@code Mutability} is closed at the end of the computation, it freezes
- * the {@code StarlarkThread} along with all of those objects. This pattern enforces the discipline
- * that there should be no dangling mutable {@code StarlarkThread}, or concurrency between
- * interacting {@code StarlarkThread}s. It is a Starlark-level error to attempt to mutate a frozen
- * {@code StarlarkThread} or its objects, but it is a Java-level error to attempt to mutate an
- * unfrozen {@code StarlarkThread} or its objects from within a different {@code StarlarkThread}.
- */
-public final class StarlarkThread {
-
-  /** The mutability of values created by this thread. */
-  private final Mutability mutability;
-
-  // profiler state
-  //
-  // The profiler field (and savedThread) are set when we first observe during a
-  // push (function call entry) that the profiler is active. They are unset
-  // not in the corresponding pop, but when the last frame is popped, because
-  // the profiler session might start in the middle of a call and/or run beyond
-  // the lifetime of this thread.
-  final AtomicInteger cpuTicks = new AtomicInteger();
-  @Nullable private CpuProfiler profiler;
-  StarlarkThread savedThread; // saved StarlarkThread, when profiling reentrant evaluation
-
-  private final Map<Class<?>, Object> threadLocals = new HashMap<>();
-
-  private boolean interruptible = true;
-
-  long steps; // count of logical computation steps executed so far
-  long stepLimit = Long.MAX_VALUE; // limit on logical computation steps
-
-  /**
-   * Returns the number of Starlark computation steps executed by this thread according to a
-   * small-step semantics. (Today, that means exec, eval, and assign operations executed by the
-   * tree-walking evaluator, but in future will mean byte code instructions; the two are not
-   * commensurable.)
-   */
-  public long getExecutedSteps() {
-    return steps;
-  }
-
-  /**
-   * Sets the maximum number of Starlark computation steps that may be executed by this thread (see
-   * {@link #getExecutedSteps}). When the step counter reaches or exceeds this value, execution
-   * fails with an EvalException.
-   */
-  public void setMaxExecutionSteps(long steps) {
-    this.stepLimit = steps;
-  }
-
-  /**
-   * Disables polling of the {@link java.lang.Thread#interrupted} flag during Starlark evaluation.
-   */
-  // TODO(adonovan): expose a public API for this if we can establish a stronger semantics. (There
-  // are other ways besides polling for evaluation to be interrupted, such as calling certain
-  // built-in functions.)
-  void ignoreThreadInterrupts() {
-    interruptible = false;
-  }
-
-  void checkInterrupt() throws InterruptedException {
-    if (interruptible && Thread.interrupted()) {
-      throw new InterruptedException();
-    }
-  }
-
-  /**
-   * setThreadLocal saves {@code value} as a thread-local variable of this Starlark thread, keyed by
-   * {@code key}, so that it can later be retrieved by {@code getThreadLocal(key)}.
-   */
-  public <T> void setThreadLocal(Class<T> key, T value) {
-    threadLocals.put(key, value);
-  }
-
-  /**
-   * getThreadLocal returns the value {@code v} supplied to the most recent {@code
-   * setThreadLocal(key, v)} call, or null if there was no prior call.
-   */
-  public <T> T getThreadLocal(Class<T> key) {
-    Object v = threadLocals.get(key);
-    return v == null ? null : key.cast(v);
-  }
-
-  /** A Frame records information about an active function call. */
-  static final class Frame implements Debug.Frame {
-    final StarlarkThread thread;
-    final StarlarkCallable fn; // the called function
-
-    @Nullable
-    final Debug.Debugger dbg = Debug.debugger.get(); // the debugger, if active for this frame
-
-    int compcount = 0; // number of enclosing comprehensions
-
-    Object result = Starlark.NONE; // the operand of a Starlark return statement
-
-    // Current PC location. Initially fn.getLocation(); for Starlark functions,
-    // it is updated at key points when it may be observed: calls, breakpoints, errors.
-    private Location loc;
-
-    // Indicates that setErrorLocation has been called already and the error
-    // location (loc) should not be overrwritten.
-    private boolean errorLocationSet;
-
-    // The locals of this frame, if fn is a StarlarkFunction, otherwise empty.
-    Map<String, Object> locals;
-
-    @Nullable private Object profileSpan; // current span of walltime call profiler
-
-    private Frame(StarlarkThread thread, StarlarkCallable fn) {
-      this.thread = thread;
-      this.fn = fn;
-    }
-
-    // Updates the PC location in this frame.
-    void setLocation(Location loc) {
-      this.loc = loc;
-    }
-
-    // Sets location only the first time it is called,
-    // to ensure that the location of the innermost expression
-    // is used for errors.
-    // (Once we switch to a bytecode interpreter, we can afford
-    // to update fr.pc before each fallible operation, but until then
-    // we must materialize Locations only after the fact of failure.)
-    // Sets errorLocationSet.
-    void setErrorLocation(Location loc) {
-      if (!errorLocationSet) {
-        errorLocationSet = true;
-        setLocation(loc);
-      }
-    }
-
-    @Override
-    public StarlarkCallable getFunction() {
-      return fn;
-    }
-
-    @Override
-    public Location getLocation() {
-      return loc;
-    }
-
-    @Override
-    public ImmutableMap<String, Object> getLocals() {
-      return ImmutableMap.copyOf(this.locals);
-    }
-
-    @Override
-    public String toString() {
-      return fn.getName() + "@" + loc;
-    }
-  }
-
-  /** The semantics options that affect how Starlark code is evaluated. */
-  private final StarlarkSemantics semantics;
-
-  /** PrintHandler for Starlark print statements. */
-  private PrintHandler printHandler = StarlarkThread::defaultPrintHandler;
-
-  /** Loader for Starlark load statements. Null if loading is disallowed. */
-  @Nullable private Loader loader = null;
-
-  /** Stack of active function calls. */
-  private final ArrayList<Frame> callstack = new ArrayList<>();
-
-  /** A hook for notifications of assignments at top level. */
-  PostAssignHook postAssignHook;
-
-  /** Pushes a function onto the call stack. */
-  void push(StarlarkCallable fn) {
-    Frame fr = new Frame(this, fn);
-    callstack.add(fr);
-
-    // Notify debug tools of the thread's first push.
-    if (callstack.size() == 1 && Debug.threadHook != null) {
-      Debug.threadHook.onPushFirst(this);
-    }
-
-    if (fn instanceof StarlarkFunction) {
-      StarlarkFunction sfn = (StarlarkFunction) fn;
-      fr.locals = Maps.newLinkedHashMapWithExpectedSize(sfn.getParameterNames().size());
-    } else {
-      // built-in function
-      fr.locals = ImmutableMap.of();
-    }
-
-    fr.loc = fn.getLocation();
-
-    // Start wall-time call profile span.
-    CallProfiler callProfiler = StarlarkThread.callProfiler;
-    if (callProfiler != null) {
-      fr.profileSpan = callProfiler.start(fn);
-    }
-
-    // Poll for newly installed CPU profiler.
-    if (profiler == null) {
-      this.profiler = CpuProfiler.get();
-      if (profiler != null) {
-        cpuTicks.set(0);
-        // Associated current Java thread with this StarlarkThread.
-        // (Save the previous association so we can restore it later.)
-        this.savedThread = CpuProfiler.setStarlarkThread(this);
-      }
-    }
-  }
-
-  /** Pops a function off the call stack. */
-  void pop() {
-    int last = callstack.size() - 1;
-    Frame fr = callstack.get(last);
-
-    if (profiler != null) {
-      int ticks = cpuTicks.getAndSet(0);
-      if (ticks > 0) {
-        profiler.addEvent(ticks, getDebugCallStack());
-      }
-
-      // If this is the final pop in this thread,
-      // unregister it from the profiler.
-      if (last == 0) {
-        // Restore the previous association (in case of reentrant evaluation).
-        CpuProfiler.setStarlarkThread(this.savedThread);
-        this.savedThread = null;
-        this.profiler = null;
-      }
-    }
-
-    callstack.remove(last); // pop
-
-    // End wall-time profile span.
-    CallProfiler callProfiler = StarlarkThread.callProfiler;
-    if (callProfiler != null && fr.profileSpan != null) {
-      callProfiler.end(fr.profileSpan);
-    }
-
-    // Notify debug tools of the thread's last pop.
-    if (last == 0 && Debug.threadHook != null) {
-      Debug.threadHook.onPopLast(this);
-    }
-  }
-
-  /** Returns the mutability for values created by this thread. */
-  public Mutability mutability() {
-    return mutability;
-  }
-
-  /**
-   * A PrintHandler determines how a Starlark thread deals with print statements. It is invoked by
-   * the built-in {@code print} function. Its default behavior is to write the message to standard
-   * error, preceded by the location of the print statement, {@code thread.getCallerLocation()}.
-   */
-  @FunctionalInterface
-  public interface PrintHandler {
-    void print(StarlarkThread thread, String msg);
-  }
-
-  /** Returns the PrintHandler for Starlark print statements. */
-  PrintHandler getPrintHandler() {
-    return printHandler;
-  }
-
-  /** Sets the behavior of Starlark print statements executed by this thread. */
-  public void setPrintHandler(PrintHandler h) {
-    this.printHandler = Preconditions.checkNotNull(h);
-  }
-
-  private static void defaultPrintHandler(StarlarkThread thread, String msg) {
-    System.err.println(thread.getCallerLocation() + ": " + msg);
-  }
-
-  /**
-   * A Loader determines the behavior of load statements executed by this thread. It returns the
-   * named module, or null if not found.
-   */
-  @FunctionalInterface
-  public interface Loader {
-    @Nullable
-    Module load(String module);
-  }
-
-  /** Returns the loader for Starlark load statements. */
-  Loader getLoader() {
-    return loader;
-  }
-
-  /** Sets the behavior of Starlark load statements executed by this thread. */
-  public void setLoader(Loader loader) {
-    this.loader = Preconditions.checkNotNull(loader);
-  }
-
-  /** Reports whether {@code fn} has been recursively reentered within this thread. */
-  boolean isRecursiveCall(StarlarkFunction fn) {
-    // Find fn buried within stack. (The top of the stack is assumed to be fn.)
-    for (int i = callstack.size() - 2; i >= 0; --i) {
-      Frame fr = callstack.get(i);
-      // TODO(adonovan): compare code, not closure values, otherwise
-      // one can defeat this check by writing the Y combinator.
-      if (fr.fn.equals(fn)) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  /**
-   * Returns the location of the program counter in the enclosing call frame. If called from within
-   * a built-in function, this is the location of the call expression that called the built-in. It
-   * returns BUILTIN if called with fewer than two frames (such as within a test).
-   */
-  public Location getCallerLocation() {
-    return toplevel() ? Location.BUILTIN : frame(1).loc;
-  }
-
-  /**
-   * Reports whether the call stack has less than two frames. Zero frames means an idle thread. One
-   * frame means the function for the top-level statements of a file is active. More than that means
-   * a function call is in progress.
-   *
-   * <p>Every use of this function is a hack to work around the lack of proper local vs global
-   * identifier resolution at top level.
-   */
-  boolean toplevel() {
-    return callstack.size() < 2;
-  }
-
-  // Returns the stack frame at the specified depth. 0 means top of stack, 1 is its caller, etc.
-  Frame frame(int depth) {
-    return callstack.get(callstack.size() - 1 - depth);
-  }
-
-  /**
-   * Constructs a StarlarkThread.
-   *
-   * @param mu the (non-frozen) mutability of values created by this thread.
-   * @param semantics the StarlarkSemantics for this thread.
-   */
-  public StarlarkThread(Mutability mu, StarlarkSemantics semantics) {
-    Preconditions.checkArgument(!mu.isFrozen());
-    this.mutability = mu;
-    this.semantics = semantics;
-  }
-
-  /**
-   * Specifies a hook function to be run after each assignment at top level.
-   *
-   * <p>This is a short-term hack to allow us to consolidate all StarlarkFile execution in one place
-   * even while BzlLoadFunction implements the old "export" behavior, in which rules, aspects and
-   * providers are "exported" as soon as they are assigned, not at the end of file execution.
-   */
-  public void setPostAssignHook(PostAssignHook postAssignHook) {
-    this.postAssignHook = postAssignHook;
-  }
-
-  /** A hook for notifications of assignments at top level. */
-  @FunctionalInterface
-  public interface PostAssignHook {
-    void assign(String name, Object value);
-  }
-
-  public StarlarkSemantics getSemantics() {
-    return semantics;
-  }
-
-  // Implementation of Debug.getCallStack.
-  // Intentionally obscured to steer most users to the simpler getCallStack.
-  ImmutableList<Debug.Frame> getDebugCallStack() {
-    return ImmutableList.<Debug.Frame>copyOf(callstack);
-  }
-
-  /** Returns the size of the callstack. This is needed for the debugger. */
-  int getCallStackSize() {
-    return callstack.size();
-  }
-
-  /**
-   * A CallStackEntry describes the name and PC location of an active function call. See {@link
-   * #getCallStack}.
-   */
-  @Immutable
-  public static final class CallStackEntry {
-    public final String name;
-    public final Location location;
-
-    public CallStackEntry(String name, Location location) {
-      this.location = location;
-      this.name = name;
-    }
-
-    @Override
-    public String toString() {
-      return name + "@" + location;
-    }
-  }
-
-  /**
-   * Returns information about this thread's current stack of active function calls, outermost call
-   * first. For each function, it reports its name, and the location of its current program counter.
-   * The result is immutable and does not reference interpreter data structures, so it may retained
-   * indefinitely and safely shared with other threads.
-   */
-  public ImmutableList<CallStackEntry> getCallStack() {
-    ImmutableList.Builder<CallStackEntry> stack = ImmutableList.builder();
-    for (Frame fr : callstack) {
-      stack.add(new CallStackEntry(fr.fn.getName(), fr.loc));
-    }
-    return stack.build();
-  }
-
-  @Override
-  public int hashCode() {
-    throw new UnsupportedOperationException(); // avoid nondeterminism
-  }
-
-  @Override
-  public boolean equals(Object that) {
-    throw new UnsupportedOperationException();
-  }
-
-  @Override
-  public String toString() {
-    return String.format("<StarlarkThread%s>", mutability);
-  }
-
-  /** CallProfiler records the start and end wall times of function calls. */
-  public interface CallProfiler {
-    Object start(StarlarkCallable fn);
-
-    void end(Object span);
-  }
-
-  /** Installs a global hook that will be notified of function calls. */
-  public static void setCallProfiler(@Nullable CallProfiler p) {
-    callProfiler = p;
-  }
-
-  @Nullable private static CallProfiler callProfiler = null;
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkValue.java b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkValue.java
deleted file mode 100644
index 8a14128..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkValue.java
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright 2015 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-/** Base interface for all Starlark values besides boxed Java primitives. */
-public interface StarlarkValue {
-
-  /**
-   * Prints an official representation of object x.
-   *
-   * <p>Convention is that the string should be parseable back to the value x. If this isn't
-   * feasible then it should be a short human-readable description enclosed in angled brackets, e.g.
-   * {@code "<foo object>"}.
-   *
-   * @param printer a printer to be used for formatting nested values.
-   */
-  default void repr(Printer printer) {
-    printer.append("<unknown object ").append(getClass().getName()).append(">");
-  }
-
-  /**
-   * Prints an informal, human-readable representation of the value.
-   *
-   * <p>By default dispatches to the {@code repr} method.
-   *
-   * @param printer a printer to be used for formatting nested values.
-   */
-  default void str(Printer printer) {
-    repr(printer);
-  }
-
-  /**
-   * Prints an informal debug representation of the value.
-   *
-   * <p>This debug representation is only ever printed to the terminal or to another out-of-band
-   * channel, and is never accessible to Starlark code. Therefore, it is safe for the debug
-   * representation to reveal properties of the value that are usually hidden for the sake of
-   * performance, determinism, or forward-compatibility.
-   *
-   * <p>By default dispatches to the {@code str} method.
-   *
-   * @param printer a printer to be used for formatting nested values.
-   */
-  default void debugPrint(Printer printer) {
-    str(printer);
-  }
-
-  /** Returns the truth-value of this Starlark value. */
-  default boolean truth() {
-    return true;
-  }
-
-  /** Reports whether the value is deeply immutable. */
-  // TODO(adonovan): eliminate this concept. All uses really need to know is, is it hashable?,
-  // because Starlark values must have stable hashes: a hashable value must either be immutable or
-  // its hash must be part of its identity.
-  // But this must wait until --incompatible_disallow_hashing_frozen_mutables=true is removed.
-  // (see github.com/bazelbuild/bazel/issues/7800)
-  default boolean isImmutable() {
-    return false;
-  }
-
-  /** Reports whether the Starlark value is hashable and thus suitable as a dict key. */
-  default boolean isHashable() {
-    return this.isImmutable();
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Statement.java b/src/main/java/com/google/devtools/build/lib/syntax/Statement.java
deleted file mode 100644
index e3633b4..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Statement.java
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.syntax;
-
-/** Base class for all statements nodes in the AST. */
-public abstract class Statement extends Node {
-
-  /**
-   * Kind of the statement. This is similar to using instanceof, except that it's more efficient and
-   * can be used in a switch/case.
-   */
-  public enum Kind {
-    ASSIGNMENT,
-    EXPRESSION,
-    FLOW,
-    FOR,
-    DEF,
-    IF,
-    LOAD,
-    RETURN,
-  }
-
-  Statement(FileLocations locs) {
-    super(locs);
-  }
-
-  /**
-   * Kind of the statement. This is similar to using instanceof, except that it's more efficient and
-   * can be used in a switch/case.
-   */
-  public abstract Kind kind();
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StringLiteral.java b/src/main/java/com/google/devtools/build/lib/syntax/StringLiteral.java
deleted file mode 100644
index 51d4909..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/StringLiteral.java
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.syntax;
-
-/** Syntax node for a string literal. */
-public final class StringLiteral extends Expression {
-
-  // See skyframe.serialization.StringLiteralCodec for custom serialization logic.
-
-  private final int startOffset;
-  private final String value;
-  private final int endOffset;
-
-  StringLiteral(FileLocations locs, int startOffset, String value, int endOffset) {
-    super(locs);
-    this.startOffset = startOffset;
-    this.value = value;
-    this.endOffset = endOffset;
-  }
-
-  /** Returns the value denoted by the string literal */
-  public String getValue() {
-    return value;
-  }
-
-  public Location getLocation() {
-    return locs.getLocation(startOffset);
-  }
-
-  @Override
-  public int getStartOffset() {
-    return startOffset;
-  }
-
-  @Override
-  public int getEndOffset() {
-    // TODO(adonovan): when we switch to compilation,
-    // making syntax trees ephemeral, we can afford to
-    // record the raw literal. This becomes:
-    //   return startOffset + raw.length().
-    return endOffset;
-  }
-
-  @Override
-  public void accept(NodeVisitor visitor) {
-    visitor.visit(this);
-  }
-
-  @Override
-  public Kind kind() {
-    return Kind.STRING_LITERAL;
-  }
-
-  // -- hooks to support Skyframe serialization without creating a dependency --
-
-  /** Returns an opaque serializable object that may be passed to {@link #fromSerialization}. */
-  public Object getFileLocations() {
-    return locs;
-  }
-
-  /** Constructs a StringLiteral from its serialized components. */
-  public static StringLiteral fromSerialization(
-      Object fileLocations, int startOffset, String value, int endOffset) {
-    return new StringLiteral((FileLocations) fileLocations, startOffset, value, endOffset);
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StringModule.java b/src/main/java/com/google/devtools/build/lib/syntax/StringModule.java
deleted file mode 100644
index bb28acb..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/StringModule.java
+++ /dev/null
@@ -1,993 +0,0 @@
-// Copyright 2018 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.base.Ascii;
-import com.google.common.base.CharMatcher;
-import com.google.common.base.Joiner;
-import com.google.common.collect.ImmutableList;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import net.starlark.java.annot.Param;
-import net.starlark.java.annot.ParamType;
-import net.starlark.java.annot.StarlarkBuiltin;
-import net.starlark.java.annot.StarlarkDocumentationCategory;
-import net.starlark.java.annot.StarlarkMethod;
-
-/**
- * Starlark String module.
- *
- * <p>This module has special treatment in Starlark, as its methods represent methods represent for
- * any 'string' objects in the language.
- *
- * <p>Methods of this class annotated with {@link StarlarkMethod} must have a positional-only
- * 'String self' parameter as the first parameter of the method.
- */
-@StarlarkBuiltin(
-    name = "string",
-    category = StarlarkDocumentationCategory.BUILTIN,
-    doc =
-        "A language built-in type to support strings. "
-            + "Examples of string literals:<br>"
-            + "<pre class=\"language-python\">a = 'abc\\ndef'\n"
-            + "b = \"ab'cd\"\n"
-            + "c = \"\"\"multiline string\"\"\"\n"
-            + "\n"
-            + "# Strings support slicing (negative index starts from the end):\n"
-            + "x = \"hello\"[2:4]  # \"ll\"\n"
-            + "y = \"hello\"[1:-1]  # \"ell\"\n"
-            + "z = \"hello\"[:4]  # \"hell\""
-            + "# Slice steps can be used, too:\n"
-            + "s = \"hello\"[::2] # \"hlo\"\n"
-            + "t = \"hello\"[3:0:-1] # \"lle\"\n</pre>"
-            + "Strings are not directly iterable, use the <code>.elems()</code> "
-            + "method to iterate over their characters. Examples:<br>"
-            + "<pre class=\"language-python\">\"bc\" in \"abcd\"   # evaluates to True\n"
-            + "x = [s for s.elems() in \"abc\"]  # x == [\"a\", \"b\", \"c\"]</pre>\n"
-            + "Implicit concatenation of strings is not allowed; use the <code>+</code> "
-            + "operator instead. Comparison operators perform a lexicographical comparison; "
-            + "use <code>==</code> to test for equality.")
-final class StringModule implements StarlarkValue {
-
-  static final StringModule INSTANCE = new StringModule();
-
-  private StringModule() {}
-
-  // Returns s[start:stop:step], as if by Sequence.getSlice.
-  static String slice(String s, int start, int stop, int step) {
-    RangeList indices = new RangeList(start, stop, step);
-    int n = indices.size();
-    if (step == 1) { // common case
-      return s.substring(indices.at(0), indices.at(n));
-    } else {
-      char[] res = new char[n];
-      for (int i = 0; i < n; ++i) {
-        res[i] = s.charAt(indices.at(i));
-      }
-      return new String(res);
-    }
-  }
-
-  // Returns the substring denoted by str[start:end], which is never out of bounds.
-  // For speed, we don't return str.substring(start, end), as substring allocates a copy.
-  // Instead we return the (start, end) indices, packed into the lo/hi arms of a long.
-  private static long substringIndices(String str, int start, Object end, String name)
-      throws EvalException {
-    // This function duplicates the logic of Starlark.slice for strings.
-    int n = str.length();
-    // TODO(adonovan): allow start to be None, as required by spec.
-    start = EvalUtils.toIndex(start, n);
-    int stop = end == Starlark.NONE ? n : EvalUtils.toIndex(Starlark.toInt(end, name), n);
-    if (stop < start) {
-      stop = start; // => empty result
-    }
-    return pack(start, stop); // = str.substring(start, stop)
-  }
-
-  private static long pack(int lo, int hi) {
-    return (((long) hi) << 32) | (lo & 0xffffffffL);
-  }
-
-  private static int lo(long x) {
-    return (int) x;
-  }
-
-  private static int hi(long x) {
-    return (int) (x >>> 32);
-  }
-
-  @StarlarkMethod(
-      name = "join",
-      doc =
-          "Returns a string in which the string elements of the argument have been "
-              + "joined by this string as a separator. Example:<br>"
-              + "<pre class=\"language-python\">\"|\".join([\"a\", \"b\", \"c\"]) == \"a|b|c\""
-              + "</pre>",
-      parameters = {
-        @Param(name = "self", type = String.class),
-        @Param(name = "elements", type = Object.class, doc = "The objects to join.")
-      })
-  public String join(String self, Object elements) throws EvalException {
-    Iterable<?> items = Starlark.toIterable(elements);
-    int i = 0;
-    for (Object item : items) {
-      if (!(item instanceof String)) {
-        throw Starlark.errorf(
-            "expected string for sequence element %d, got '%s'", i, Starlark.type(item));
-      }
-      i++;
-    }
-    return Joiner.on(self).join(items);
-  }
-
-  @StarlarkMethod(
-      name = "lower",
-      doc = "Returns the lower case version of this string.",
-      parameters = {@Param(name = "self", type = String.class)})
-  public String lower(String self) {
-    return Ascii.toLowerCase(self);
-  }
-
-  @StarlarkMethod(
-      name = "upper",
-      doc = "Returns the upper case version of this string.",
-      parameters = {@Param(name = "self", type = String.class)})
-  public String upper(String self) {
-    return Ascii.toUpperCase(self);
-  }
-
-  /**
-   * For consistency with Python we recognize the same whitespace characters as they do over the
-   * range 0x00-0xFF. See https://hg.python.org/cpython/file/3.6/Objects/unicodetype_db.h#l5738 This
-   * list is a consequence of Unicode character information.
-   *
-   * <p>Note that this differs from Python 2.7, which uses ctype.h#isspace(), and from
-   * java.lang.Character#isWhitespace(), which does not recognize U+00A0.
-   */
-  private static final String LATIN1_WHITESPACE =
-      ("\u0009" + "\n" + "\u000B" + "\u000C" + "\r" + "\u001C" + "\u001D" + "\u001E" + "\u001F"
-          + "\u0020" + "\u0085" + "\u00A0");
-
-  private static String stringLStrip(String self, String chars) {
-    CharMatcher matcher = CharMatcher.anyOf(chars);
-    for (int i = 0; i < self.length(); i++) {
-      if (!matcher.matches(self.charAt(i))) {
-        return self.substring(i);
-      }
-    }
-    return ""; // All characters were stripped.
-  }
-
-  private static String stringRStrip(String self, String chars) {
-    CharMatcher matcher = CharMatcher.anyOf(chars);
-    for (int i = self.length() - 1; i >= 0; i--) {
-      if (!matcher.matches(self.charAt(i))) {
-        return self.substring(0, i + 1);
-      }
-    }
-    return ""; // All characters were stripped.
-  }
-
-  private static String stringStrip(String self, String chars) {
-    return stringLStrip(stringRStrip(self, chars), chars);
-  }
-
-  @StarlarkMethod(
-      name = "lstrip",
-      doc =
-          "Returns a copy of the string where leading characters that appear in "
-              + "<code>chars</code> are removed. Note that <code>chars</code> "
-              + "is not a prefix: all combinations of its value are removed:"
-              + "<pre class=\"language-python\">"
-              + "\"abcba\".lstrip(\"ba\") == \"cba\""
-              + "</pre>",
-      parameters = {
-        @Param(name = "self", type = String.class),
-        @Param(
-            name = "chars",
-            type = String.class,
-            noneable = true,
-            doc = "The characters to remove, or all whitespace if None.",
-            defaultValue = "None")
-      })
-  public String lstrip(String self, Object charsOrNone) {
-    String chars = charsOrNone != Starlark.NONE ? (String) charsOrNone : LATIN1_WHITESPACE;
-    return stringLStrip(self, chars);
-  }
-
-  @StarlarkMethod(
-      name = "rstrip",
-      doc =
-          "Returns a copy of the string where trailing characters that appear in "
-              + "<code>chars</code> are removed. Note that <code>chars</code> "
-              + "is not a suffix: all combinations of its value are removed:"
-              + "<pre class=\"language-python\">"
-              + "\"abcbaa\".rstrip(\"ab\") == \"abc\""
-              + "</pre>",
-      parameters = {
-        @Param(name = "self", type = String.class, doc = "This string."),
-        @Param(
-            name = "chars",
-            type = String.class,
-            noneable = true,
-            doc = "The characters to remove, or all whitespace if None.",
-            defaultValue = "None")
-      })
-  public String rstrip(String self, Object charsOrNone) {
-    String chars = charsOrNone != Starlark.NONE ? (String) charsOrNone : LATIN1_WHITESPACE;
-    return stringRStrip(self, chars);
-  }
-
-  @StarlarkMethod(
-      name = "strip",
-      doc =
-          "Returns a copy of the string where leading or trailing characters that appear in "
-              + "<code>chars</code> are removed. Note that <code>chars</code> "
-              + "is neither a prefix nor a suffix: all combinations of its value "
-              + "are removed:"
-              + "<pre class=\"language-python\">"
-              + "\"aabcbcbaa\".strip(\"ab\") == \"cbc\""
-              + "</pre>",
-      parameters = {
-        @Param(name = "self", type = String.class, doc = "This string."),
-        @Param(
-            name = "chars",
-            type = String.class,
-            noneable = true,
-            doc = "The characters to remove, or all whitespace if None.",
-            defaultValue = "None")
-      })
-  public String strip(String self, Object charsOrNone) {
-    String chars = charsOrNone != Starlark.NONE ? (String) charsOrNone : LATIN1_WHITESPACE;
-    return stringStrip(self, chars);
-  }
-
-  @StarlarkMethod(
-      name = "replace",
-      doc =
-          "Returns a copy of the string in which the occurrences "
-              + "of <code>old</code> have been replaced with <code>new</code>, optionally "
-              + "restricting the number of replacements to <code>maxsplit</code>.",
-      parameters = {
-        @Param(name = "self", type = String.class, doc = "This string."),
-        @Param(name = "old", type = String.class, doc = "The string to be replaced."),
-        @Param(name = "new", type = String.class, doc = "The string to replace with."),
-        @Param(
-            name = "count",
-            type = Integer.class,
-            noneable = true, // TODO(#11244): Set false once incompatible flag is deleted.
-            defaultValue = "unbound",
-            doc =
-                "The maximum number of replacements. If omitted, there is no limit."
-                    + "<p>If <code>--incompatible_string_replace_count</code> is true, a negative "
-                    + "value is ignored (so there's no limit) and a <code>None</code> value is an "
-                    + "error. Otherwise, a negative value is treated as 0 and a <code>None</code> "
-                    + "value is ignored. (See also issue <a "
-                    + "href='https://github.com/bazelbuild/bazel/issues/11244'>#11244</a>.)")
-      },
-      useStarlarkThread = true)
-  public String replace(
-      String self, String oldString, String newString, Object countUnchecked, StarlarkThread thread)
-      throws EvalException {
-    int count = Integer.MAX_VALUE;
-
-    StarlarkSemantics semantics = thread.getSemantics();
-    if (semantics.getBool(StarlarkSemantics.INCOMPATIBLE_STRING_REPLACE_COUNT)) {
-      if (countUnchecked == Starlark.NONE) {
-        throw Starlark.errorf(
-            "Cannot pass a None count to string.replace(); omit the count argument instead. (You "
-                + "can temporarily opt out of this change by setting "
-                + "--incompatible_string_replace_count=false.)");
-      }
-      if (countUnchecked != Starlark.UNBOUND && (Integer) countUnchecked >= 0) {
-        count = (Integer) countUnchecked;
-      }
-    } else {
-      if (countUnchecked != Starlark.UNBOUND && countUnchecked != Starlark.NONE) {
-        // Negative has same effect as 0 below.
-        count = (Integer) countUnchecked;
-      }
-    }
-
-    StringBuilder sb = new StringBuilder();
-    int start = 0;
-    for (int i = 0; i < count; i++) {
-      if (oldString.isEmpty()) {
-        sb.append(newString);
-        if (start < self.length()) {
-          sb.append(self.charAt(start++));
-        } else {
-          break;
-        }
-      } else {
-        int end = self.indexOf(oldString, start);
-        if (end < 0) {
-          break;
-        }
-        sb.append(self, start, end).append(newString);
-        start = end + oldString.length();
-      }
-    }
-    sb.append(self, start, self.length());
-    return sb.toString();
-  }
-
-  @StarlarkMethod(
-      name = "split",
-      doc =
-          "Returns a list of all the words in the string, using <code>sep</code> as the "
-              + "separator, optionally limiting the number of splits to <code>maxsplit</code>.",
-      parameters = {
-        @Param(name = "self", type = String.class, doc = "This string."),
-        @Param(name = "sep", type = String.class, doc = "The string to split on."),
-        @Param(
-            name = "maxsplit",
-            type = Integer.class,
-            noneable = true,
-            defaultValue = "None",
-            doc = "The maximum number of splits.")
-      },
-      useStarlarkThread = true)
-  public StarlarkList<String> split(
-      String self, String sep, Object maxSplitO, StarlarkThread thread) throws EvalException {
-    if (sep.isEmpty()) {
-      throw Starlark.errorf("Empty separator");
-    }
-    int maxSplit = Integer.MAX_VALUE;
-    if (maxSplitO != Starlark.NONE) {
-      maxSplit = (Integer) maxSplitO;
-    }
-    ArrayList<String> res = new ArrayList<>();
-    int start = 0;
-    while (true) {
-      int end = self.indexOf(sep, start);
-      if (end < 0 || maxSplit-- == 0) {
-        res.add(self.substring(start));
-        break;
-      }
-      res.add(self.substring(start, end));
-      start = end + sep.length();
-    }
-    return StarlarkList.copyOf(thread.mutability(), res);
-  }
-
-  @StarlarkMethod(
-      name = "rsplit",
-      doc =
-          "Returns a list of all the words in the string, using <code>sep</code> as the "
-              + "separator, optionally limiting the number of splits to <code>maxsplit</code>. "
-              + "Except for splitting from the right, this method behaves like split().",
-      parameters = {
-        @Param(name = "self", type = String.class, doc = "This string."),
-        @Param(name = "sep", type = String.class, doc = "The string to split on."),
-        @Param(
-            name = "maxsplit",
-            type = Integer.class,
-            noneable = true,
-            defaultValue = "None",
-            doc = "The maximum number of splits.")
-      },
-      useStarlarkThread = true)
-  public StarlarkList<String> rsplit(
-      String self, String sep, Object maxSplitO, StarlarkThread thread) throws EvalException {
-    if (sep.isEmpty()) {
-      throw Starlark.errorf("Empty separator");
-    }
-    int maxSplit = Integer.MAX_VALUE;
-    if (maxSplitO != Starlark.NONE) {
-      maxSplit = (Integer) maxSplitO;
-    }
-    ArrayList<String> res = new ArrayList<>();
-    int end = self.length();
-    while (true) {
-      int start = self.lastIndexOf(sep, end - 1);
-      if (start < 0 || maxSplit-- == 0) {
-        res.add(self.substring(0, end));
-        break;
-      }
-      res.add(self.substring(start + sep.length(), end));
-      end = start;
-    }
-    Collections.reverse(res);
-    return StarlarkList.copyOf(thread.mutability(), res);
-  }
-
-  @StarlarkMethod(
-      name = "partition",
-      doc =
-          "Splits the input string at the first occurrence of the separator <code>sep</code> and"
-              + " returns the resulting partition as a three-element tuple of the form (before,"
-              + " separator, after). If the input string does not contain the separator, partition"
-              + " returns (self, '', '').",
-      parameters = {
-        @Param(name = "self", type = String.class),
-        @Param(name = "sep", type = String.class, doc = "The string to split on.")
-      })
-  public Tuple<String> partition(String self, String sep) throws EvalException {
-    return partitionCommon(self, sep, /*first=*/ true);
-  }
-
-  @StarlarkMethod(
-      name = "rpartition",
-      doc =
-          "Splits the input string at the last occurrence of the separator <code>sep</code> and"
-              + " returns the resulting partition as a three-element tuple of the form (before,"
-              + " separator, after). If the input string does not contain the separator,"
-              + " rpartition returns ('', '', self).",
-      parameters = {
-        @Param(name = "self", type = String.class),
-        @Param(name = "sep", type = String.class, doc = "The string to split on.")
-      })
-  public Tuple<String> rpartition(String self, String sep) throws EvalException {
-    return partitionCommon(self, sep, /*first=*/ false);
-  }
-
-  // Splits input at the first or last occurrence of the given separator,
-  // and returns a triple of substrings (before, separator, after).
-  // If the input does not contain the separator,
-  // it returns (input, "", "") if first, or ("", "", input), if !first.
-  private static Tuple<String> partitionCommon(String input, String separator, boolean first)
-      throws EvalException {
-    if (separator.isEmpty()) {
-      throw Starlark.errorf("empty separator");
-    }
-
-    String a = "";
-    String b = "";
-    String c = "";
-
-    int pos = first ? input.indexOf(separator) : input.lastIndexOf(separator);
-    if (pos < 0) {
-      if (first) {
-        a = input;
-      } else {
-        c = input;
-      }
-    } else {
-      a = input.substring(0, pos);
-      b = separator;
-      c = input.substring(pos + separator.length());
-    }
-
-    return Tuple.triple(a, b, c);
-  }
-
-  @StarlarkMethod(
-      name = "capitalize",
-      doc =
-          "Returns a copy of the string with its first character (if any) capitalized and the rest "
-              + "lowercased. This method does not support non-ascii characters. ",
-      parameters = {@Param(name = "self", type = String.class, doc = "This string.")})
-  public String capitalize(String self) throws EvalException {
-    if (self.isEmpty()) {
-      return self;
-    }
-    // TODO(adonovan): fix: support non-ASCII characters. Requires that Bazel stop abusing Latin1.
-    return Character.toUpperCase(self.charAt(0)) + Ascii.toLowerCase(self.substring(1));
-  }
-
-  @StarlarkMethod(
-      name = "title",
-      doc =
-          "Converts the input string into title case, i.e. every word starts with an "
-              + "uppercase letter while the remaining letters are lowercase. In this "
-              + "context, a word means strictly a sequence of letters. This method does "
-              + "not support supplementary Unicode characters.",
-      parameters = {@Param(name = "self", type = String.class, doc = "This string.")})
-  public String title(String self) throws EvalException {
-    char[] data = self.toCharArray();
-    boolean previousWasLetter = false;
-
-    for (int pos = 0; pos < data.length; ++pos) {
-      char current = data[pos];
-      boolean currentIsLetter = Character.isLetter(current);
-
-      if (currentIsLetter) {
-        if (previousWasLetter && Character.isUpperCase(current)) {
-          data[pos] = Character.toLowerCase(current);
-        } else if (!previousWasLetter && Character.isLowerCase(current)) {
-          data[pos] = Character.toUpperCase(current);
-        }
-      }
-      previousWasLetter = currentIsLetter;
-    }
-
-    return new String(data);
-  }
-
-  /**
-   * Common implementation for find, rfind, index, rindex.
-   *
-   * @param forward true if we want to return the last matching index.
-   */
-  private static int stringFind(
-      boolean forward, String self, String sub, int start, Object end, String msg)
-      throws EvalException {
-    long indices = substringIndices(self, start, end, msg);
-    // Unfortunately Java forces us to allocate here, even though
-    // String has a private indexOf method that accepts indices.
-    // Fortunately the common case is self[0:n].
-    String substr = self.substring(lo(indices), hi(indices));
-    int subpos = forward ? substr.indexOf(sub) : substr.lastIndexOf(sub);
-    return subpos < 0
-        ? subpos //
-        : subpos + lo(indices);
-  }
-
-  private static final Pattern SPLIT_LINES_PATTERN =
-      Pattern.compile("(?<line>.*)(?<break>(\\r\\n|\\r|\\n)?)");
-
-  @StarlarkMethod(
-      name = "rfind",
-      doc =
-          "Returns the last index where <code>sub</code> is found, or -1 if no such index exists, "
-              + "optionally restricting to <code>[start:end]</code>, "
-              + "<code>start</code> being inclusive and <code>end</code> being exclusive.",
-      parameters = {
-        @Param(name = "self", type = String.class, doc = "This string."),
-        @Param(name = "sub", type = String.class, doc = "The substring to find."),
-        @Param(
-            name = "start",
-            type = Integer.class,
-            defaultValue = "0",
-            doc = "Restrict to search from this position."),
-        @Param(
-            name = "end",
-            type = Integer.class,
-            noneable = true,
-            defaultValue = "None",
-            doc = "optional position before which to restrict to search.")
-      })
-  public Integer rfind(String self, String sub, Integer start, Object end) throws EvalException {
-    return stringFind(false, self, sub, start, end, "'end' argument to rfind");
-  }
-
-  @StarlarkMethod(
-      name = "find",
-      doc =
-          "Returns the first index where <code>sub</code> is found, or -1 if no such index exists, "
-              + "optionally restricting to <code>[start:end]</code>, "
-              + "<code>start</code> being inclusive and <code>end</code> being exclusive.",
-      parameters = {
-        @Param(name = "self", type = String.class, doc = "This string."),
-        @Param(name = "sub", type = String.class, doc = "The substring to find."),
-        @Param(
-            name = "start",
-            type = Integer.class,
-            defaultValue = "0",
-            doc = "Restrict to search from this position."),
-        @Param(
-            name = "end",
-            type = Integer.class,
-            noneable = true,
-            defaultValue = "None",
-            doc = "optional position before which to restrict to search.")
-      })
-  public Integer find(String self, String sub, Integer start, Object end) throws EvalException {
-    return stringFind(true, self, sub, start, end, "'end' argument to find");
-  }
-
-  @StarlarkMethod(
-      name = "rindex",
-      doc =
-          "Returns the last index where <code>sub</code> is found, or raises an error if no such "
-              + "index exists, optionally restricting to <code>[start:end]</code>, "
-              + "<code>start</code> being inclusive and <code>end</code> being exclusive.",
-      parameters = {
-        @Param(name = "self", type = String.class, doc = "This string."),
-        @Param(name = "sub", type = String.class, doc = "The substring to find."),
-        @Param(
-            name = "start",
-            type = Integer.class,
-            defaultValue = "0",
-            doc = "Restrict to search from this position."),
-        @Param(
-            name = "end",
-            type = Integer.class,
-            noneable = true,
-            defaultValue = "None",
-            doc = "optional position before which to restrict to search.")
-      })
-  public Integer rindex(String self, String sub, Integer start, Object end) throws EvalException {
-    int res = stringFind(false, self, sub, start, end, "'end' argument to rindex");
-    if (res < 0) {
-      throw Starlark.errorf(
-          "substring %s not found in %s", Starlark.repr(sub), Starlark.repr(self));
-    }
-    return res;
-  }
-
-  @StarlarkMethod(
-      name = "index",
-      doc =
-          "Returns the first index where <code>sub</code> is found, or raises an error if no such "
-              + " index exists, optionally restricting to <code>[start:end]</code>"
-              + "<code>start</code> being inclusive and <code>end</code> being exclusive.",
-      parameters = {
-        @Param(name = "self", type = String.class, doc = "This string."),
-        @Param(name = "sub", type = String.class, doc = "The substring to find."),
-        @Param(
-            name = "start",
-            type = Integer.class,
-            defaultValue = "0",
-            doc = "Restrict to search from this position."),
-        @Param(
-            name = "end",
-            type = Integer.class,
-            noneable = true,
-            defaultValue = "None",
-            doc = "optional position before which to restrict to search.")
-      })
-  public Integer index(String self, String sub, Integer start, Object end) throws EvalException {
-    int res = stringFind(true, self, sub, start, end, "'end' argument to index");
-    if (res < 0) {
-      throw Starlark.errorf(
-          "substring %s not found in %s", Starlark.repr(sub), Starlark.repr(self));
-    }
-    return res;
-  }
-
-  @StarlarkMethod(
-      name = "splitlines",
-      doc =
-          "Splits the string at line boundaries ('\\n', '\\r\\n', '\\r') "
-              + "and returns the result as a list.",
-      parameters = {
-        @Param(name = "self", type = String.class, doc = "This string."),
-        @Param(
-            name = "keepends",
-            type = Boolean.class,
-            defaultValue = "False",
-            doc = "Whether the line breaks should be included in the resulting list.")
-      })
-  public Sequence<String> splitLines(String self, Boolean keepEnds) throws EvalException {
-    List<String> result = new ArrayList<>();
-    Matcher matcher = SPLIT_LINES_PATTERN.matcher(self);
-    while (matcher.find()) {
-      String line = matcher.group("line");
-      String lineBreak = matcher.group("break");
-      boolean trailingBreak = lineBreak.isEmpty();
-      if (line.isEmpty() && trailingBreak) {
-        break;
-      }
-      if (keepEnds && !trailingBreak) {
-        result.add(line + lineBreak);
-      } else {
-        result.add(line);
-      }
-    }
-    return StarlarkList.immutableCopyOf(result);
-  }
-
-  @StarlarkMethod(
-      name = "isalpha",
-      doc =
-          "Returns True if all characters in the string are alphabetic ([a-zA-Z]) and there is "
-              + "at least one character.",
-      parameters = {@Param(name = "self", type = String.class, doc = "This string.")})
-  public Boolean isAlpha(String self) throws EvalException {
-    return matches(self, ALPHA, false);
-  }
-
-  @StarlarkMethod(
-      name = "isalnum",
-      doc =
-          "Returns True if all characters in the string are alphanumeric ([a-zA-Z0-9]) and there "
-              + "is at least one character.",
-      parameters = {@Param(name = "self", type = String.class, doc = "This string.")})
-  public Boolean isAlnum(String self) throws EvalException {
-    return matches(self, ALNUM, false);
-  }
-
-  @StarlarkMethod(
-      name = "isdigit",
-      doc =
-          "Returns True if all characters in the string are digits ([0-9]) and there is "
-              + "at least one character.",
-      parameters = {@Param(name = "self", type = String.class, doc = "This string.")})
-  public Boolean isDigit(String self) throws EvalException {
-    return matches(self, DIGIT, false);
-  }
-
-  @StarlarkMethod(
-      name = "isspace",
-      doc =
-          "Returns True if all characters are white space characters and the string "
-              + "contains at least one character.",
-      parameters = {@Param(name = "self", type = String.class, doc = "This string.")})
-  public Boolean isSpace(String self) throws EvalException {
-    return matches(self, SPACE, false);
-  }
-
-  @StarlarkMethod(
-      name = "islower",
-      doc =
-          "Returns True if all cased characters in the string are lowercase and there is "
-              + "at least one character.",
-      parameters = {@Param(name = "self", type = String.class, doc = "This string.")})
-  public Boolean isLower(String self) throws EvalException {
-    // Python also accepts non-cased characters, so we cannot use LOWER.
-    return matches(self, UPPER.negate(), true);
-  }
-
-  @StarlarkMethod(
-      name = "isupper",
-      doc =
-          "Returns True if all cased characters in the string are uppercase and there is "
-              + "at least one character.",
-      parameters = {@Param(name = "self", type = String.class, doc = "This string.")})
-  public Boolean isUpper(String self) throws EvalException {
-    // Python also accepts non-cased characters, so we cannot use UPPER.
-    return matches(self, LOWER.negate(), true);
-  }
-
-  @StarlarkMethod(
-      name = "istitle",
-      doc =
-          "Returns True if the string is in title case and it contains at least one character. "
-              + "This means that every uppercase character must follow an uncased one (e.g. "
-              + "whitespace) and every lowercase character must follow a cased one (e.g. "
-              + "uppercase or lowercase).",
-      parameters = {@Param(name = "self", type = String.class, doc = "This string.")})
-  public Boolean isTitle(String self) throws EvalException {
-    if (self.isEmpty()) {
-      return false;
-    }
-    // From the Python documentation: "uppercase characters may only follow uncased characters
-    // and lowercase characters only cased ones".
-    char[] data = self.toCharArray();
-    CharMatcher matcher = CharMatcher.any();
-    char leftMostCased = ' ';
-    for (int pos = data.length - 1; pos >= 0; --pos) {
-      char current = data[pos];
-      // 1. Check condition that was determined by the right neighbor.
-      if (!matcher.matches(current)) {
-        return false;
-      }
-      // 2. Determine condition for the left neighbor.
-      if (LOWER.matches(current)) {
-        matcher = CASED;
-      } else if (UPPER.matches(current)) {
-        matcher = CASED.negate();
-      } else {
-        matcher = CharMatcher.any();
-      }
-      // 3. Store character if it is cased.
-      if (CASED.matches(current)) {
-        leftMostCased = current;
-      }
-    }
-    // The leftmost cased letter must be uppercase. If leftMostCased is not a cased letter here,
-    // then the string doesn't have any cased letter, so UPPER.test will return false.
-    return UPPER.matches(leftMostCased);
-  }
-
-  private static boolean matches(
-      String str, CharMatcher matcher, boolean requiresAtLeastOneCasedLetter) {
-    if (str.isEmpty()) {
-      return false;
-    } else if (!requiresAtLeastOneCasedLetter) {
-      return matcher.matchesAllOf(str);
-    }
-    int casedLetters = 0;
-    for (char current : str.toCharArray()) {
-      if (!matcher.matches(current)) {
-        return false;
-      } else if (requiresAtLeastOneCasedLetter && CASED.matches(current)) {
-        ++casedLetters;
-      }
-    }
-    return casedLetters > 0;
-  }
-
-  private static final CharMatcher DIGIT = CharMatcher.javaDigit();
-  private static final CharMatcher LOWER = CharMatcher.inRange('a', 'z');
-  private static final CharMatcher UPPER = CharMatcher.inRange('A', 'Z');
-  private static final CharMatcher ALPHA = LOWER.or(UPPER);
-  private static final CharMatcher ALNUM = ALPHA.or(DIGIT);
-  private static final CharMatcher CASED = ALPHA;
-  private static final CharMatcher SPACE = CharMatcher.whitespace();
-
-  @StarlarkMethod(
-      name = "count",
-      doc =
-          "Returns the number of (non-overlapping) occurrences of substring <code>sub</code> in "
-              + "string, optionally restricting to <code>[start:end]</code>, <code>start</code> "
-              + "being inclusive and <code>end</code> being exclusive.",
-      parameters = {
-        @Param(name = "self", type = String.class, doc = "This string."),
-        @Param(name = "sub", type = String.class, doc = "The substring to count."),
-        @Param(
-            name = "start",
-            type = Integer.class,
-            defaultValue = "0",
-            doc = "Restrict to search from this position."),
-        @Param(
-            name = "end",
-            type = Integer.class,
-            noneable = true,
-            defaultValue = "None",
-            doc = "optional position before which to restrict to search.")
-      })
-  public Integer count(String self, String sub, Integer start, Object end) throws EvalException {
-    long indices = substringIndices(self, start, end, "'end' operand of 'count'");
-    if (sub.isEmpty()) {
-      return hi(indices) - lo(indices) + 1; // str.length() + 1
-    }
-    // Unfortunately Java forces us to allocate here, even though
-    // String has a private indexOf method that accepts indices.
-    // Fortunately the common case is self[0:n].
-    String str = self.substring(lo(indices), hi(indices));
-    int count = 0;
-    int index = 0;
-    while ((index = str.indexOf(sub, index)) >= 0) {
-      count++;
-      index += sub.length();
-    }
-    return count;
-  }
-
-  @StarlarkMethod(
-      name = "elems",
-      doc =
-          "Returns an iterable value containing successive 1-element substrings of the string. "
-              + "Equivalent to <code>[s[i] for i in range(len(s))]</code>, except that the "
-              + "returned value might not be a list.",
-      parameters = {@Param(name = "self", type = String.class, doc = "This string.")})
-  public Sequence<String> elems(String self) throws EvalException {
-    ImmutableList.Builder<String> builder = new ImmutableList.Builder<>();
-    for (char c : self.toCharArray()) {
-      builder.add(String.valueOf(c));
-    }
-    return StarlarkList.immutableCopyOf(builder.build());
-  }
-
-  @StarlarkMethod(
-      name = "endswith",
-      doc =
-          "Returns True if the string ends with <code>sub</code>, otherwise False, optionally "
-              + "restricting to <code>[start:end]</code>, <code>start</code> being inclusive "
-              + "and <code>end</code> being exclusive.",
-      parameters = {
-        @Param(name = "self", type = String.class, doc = "This string."),
-        @Param(
-            name = "sub",
-            allowedTypes = {
-              @ParamType(type = String.class),
-              @ParamType(type = Tuple.class, generic1 = String.class),
-            },
-            doc = "The suffix (or tuple of alternative suffixes) to match."),
-        @Param(
-            name = "start",
-            type = Integer.class,
-            defaultValue = "0",
-            doc = "Test beginning at this position."),
-        @Param(
-            name = "end",
-            type = Integer.class,
-            noneable = true,
-            defaultValue = "None",
-            doc = "optional position at which to stop comparing.")
-      })
-  public Boolean endsWith(String self, Object sub, Integer start, Object end) throws EvalException {
-    long indices = substringIndices(self, start, end, "'end' operand of 'endswith'");
-    if (sub instanceof String) {
-      return substringEndsWith(self, lo(indices), hi(indices), (String) sub);
-    }
-    for (String s : Sequence.cast(sub, String.class, "sub")) {
-      if (substringEndsWith(self, lo(indices), hi(indices), s)) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  // Computes str.substring(start, end).endsWith(suffix) without allocation.
-  private static boolean substringEndsWith(String str, int start, int end, String suffix) {
-    int n = suffix.length();
-    return start + n <= end && str.regionMatches(end - n, suffix, 0, n);
-  }
-
-  // In Python, formatting is very complex.
-  // We handle here the simplest case which provides most of the value of the function.
-  // https://docs.python.org/3/library/string.html#formatstrings
-  @StarlarkMethod(
-      name = "format",
-      doc =
-          "Perform string interpolation. Format strings contain replacement fields "
-              + "surrounded by curly braces <code>{}</code>. Anything that is not contained "
-              + "in braces is considered literal text, which is copied unchanged to the output."
-              + "If you need to include a brace character in the literal text, it can be "
-              + "escaped by doubling: <code>{{</code> and <code>}}</code>"
-              + "A replacement field can be either a name, a number, or empty. Values are "
-              + "converted to strings using the <a href=\"globals.html#str\">str</a> function."
-              + "<pre class=\"language-python\">"
-              + "# Access in order:\n"
-              + "\"{} < {}\".format(4, 5) == \"4 < 5\"\n"
-              + "# Access by position:\n"
-              + "\"{1}, {0}\".format(2, 1) == \"1, 2\"\n"
-              + "# Access by name:\n"
-              + "\"x{key}x\".format(key = 2) == \"x2x\"</pre>\n",
-      parameters = {
-        @Param(name = "self", type = String.class, doc = "This string."),
-      },
-      extraPositionals =
-          @Param(
-              name = "args",
-              type = Sequence.class,
-              defaultValue = "()",
-              doc = "List of arguments."),
-      extraKeywords =
-          @Param(
-              name = "kwargs",
-              type = Dict.class,
-              defaultValue = "{}",
-              doc = "Dictionary of arguments."))
-  public String format(String self, Sequence<?> args, Dict<?, ?> kwargs) throws EvalException {
-    @SuppressWarnings("unchecked")
-    List<Object> argObjects = (List<Object>) args.getImmutableList();
-    return new FormatParser()
-        .format(self, argObjects, Dict.cast(kwargs, String.class, Object.class, "kwargs"));
-  }
-
-  @StarlarkMethod(
-      name = "startswith",
-      doc =
-          "Returns True if the string starts with <code>sub</code>, otherwise False, optionally "
-              + "restricting to <code>[start:end]</code>, <code>start</code> being inclusive and "
-              + "<code>end</code> being exclusive.",
-      parameters = {
-        @Param(name = "self", type = String.class, doc = "This string."),
-        @Param(
-            name = "sub",
-            allowedTypes = {
-              @ParamType(type = String.class),
-              @ParamType(type = Tuple.class, generic1 = String.class),
-            },
-            doc = "The prefix (or tuple of alternative prefixes) to match."),
-        @Param(
-            name = "start",
-            type = Integer.class,
-            defaultValue = "0",
-            doc = "Test beginning at this position."),
-        @Param(
-            name = "end",
-            type = Integer.class,
-            noneable = true,
-            defaultValue = "None",
-            doc = "Stop comparing at this position.")
-      })
-  public Boolean startsWith(String self, Object sub, Integer start, Object end)
-      throws EvalException {
-    long indices = substringIndices(self, start, end, "'end' operand of 'startswith'");
-    if (sub instanceof String) {
-      return substringStartsWith(self, lo(indices), hi(indices), (String) sub);
-    }
-    for (String s : Sequence.cast(sub, String.class, "sub")) {
-      if (substringStartsWith(self, lo(indices), hi(indices), s)) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  // Computes str.substring(start, end).startsWith(prefix) without allocation.
-  private static boolean substringStartsWith(String str, int start, int end, String prefix) {
-    return start + prefix.length() <= end && str.startsWith(prefix, start);
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SyntaxError.java b/src/main/java/com/google/devtools/build/lib/syntax/SyntaxError.java
deleted file mode 100644
index 95ca5d1..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/SyntaxError.java
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright 2019 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
-import java.util.List;
-
-/**
- * A SyntaxError represents a static error associated with the syntax, such as a scanner or parse
- * error, a structural problem, or a failure of identifier resolution. It records a description of
- * the error and its location in the syntax.
- */
-public final class SyntaxError {
-
-  private final Location location;
-  private final String message;
-
-  public SyntaxError(Location location, String message) {
-    this.location = Preconditions.checkNotNull(location);
-    this.message = Preconditions.checkNotNull(message);
-  }
-
-  /** Returns the location of the error. */
-  public Location location() {
-    return location;
-  }
-
-  /** Returns a description of the error. */
-  public String message() {
-    return message;
-  }
-
-  /** Returns a string of the form {@code "foo.star:1:2: oops"}. */
-  @Override
-  public String toString() {
-    return location + ": " + message;
-  }
-
-  /**
-   * A SyntaxError.Exception is an exception holding one or more syntax errors.
-   *
-   * <p>SyntaxError.Exception is thrown by operations such as {@link Expression#parse}, which are
-   * "all or nothing". By contrast, {@link StarlarkFile#parse} does not throw an exception; instead,
-   * it records the accumulated scanner, parser, and optionally validation errors within the syntax
-   * tree, so that clients may obtain partial information from a damaged file.
-   *
-   * <p>Clients that fail abruptly when encountering parse errors are encouraged to throw
-   * SyntaxError.Exception, as in this example:
-   *
-   * <pre>
-   * StarlarkFile file = StarlarkFile.parse(input);
-   * if (!file.ok()) {
-   *     throw new SyntaxError.Exception(file.errors());
-   * }
-   * </pre>
-   */
-  public static final class Exception extends java.lang.Exception {
-
-    private final ImmutableList<SyntaxError> errors;
-
-    /** Construct a SyntaxError from a non-empty list of errors. */
-    public Exception(List<SyntaxError> errors) {
-      if (errors.isEmpty()) {
-        throw new IllegalArgumentException("no errors");
-      }
-      this.errors = ImmutableList.copyOf(errors);
-    }
-
-    /** Returns an immutable non-empty list of errors. */
-    public ImmutableList<SyntaxError> errors() {
-      return errors;
-    }
-
-    @Override
-    public String getMessage() {
-      String first = errors.get(0).message();
-      if (errors.size() > 1) {
-        // TODO(adonovan): say ("+ n more errors") to avoid ambiguity.
-        return String.format("%s (+ %d more)", first, errors.size() - 1);
-      } else {
-        return first;
-      }
-    }
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/TokenKind.java b/src/main/java/com/google/devtools/build/lib/syntax/TokenKind.java
deleted file mode 100644
index e6fc450..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/TokenKind.java
+++ /dev/null
@@ -1,111 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-/** A TokenKind represents the kind of a lexical token. */
-public enum TokenKind {
-  AMPERSAND("&"),
-  AMPERSAND_EQUALS("&="),
-  AND("and"),
-  AS("as"),
-  ASSERT("assert"),
-  BREAK("break"),
-  CARET("^"),
-  CARET_EQUALS("^="),
-  CLASS("class"),
-  COLON(":"),
-  COMMA(","),
-  CONTINUE("continue"),
-  DEF("def"),
-  DEL("del"),
-  DOT("."),
-  ELIF("elif"),
-  ELSE("else"),
-  EOF("EOF"),
-  EQUALS("="),
-  EQUALS_EQUALS("=="),
-  EXCEPT("except"),
-  FINALLY("finally"),
-  FOR("for"),
-  FROM("from"),
-  GLOBAL("global"),
-  GREATER(">"),
-  GREATER_EQUALS(">="),
-  GREATER_GREATER(">>"),
-  GREATER_GREATER_EQUALS(">>="),
-  IDENTIFIER("identifier"),
-  IF("if"),
-  ILLEGAL("illegal character"),
-  IMPORT("import"),
-  IN("in"),
-  INDENT("indent"),
-  INT("integer literal"),
-  IS("is"),
-  LAMBDA("lambda"),
-  LBRACE("{"),
-  LBRACKET("["),
-  LESS("<"),
-  LESS_EQUALS("<="),
-  LESS_LESS("<<"),
-  LESS_LESS_EQUALS("<<="),
-  LOAD("load"),
-  LPAREN("("),
-  MINUS("-"),
-  MINUS_EQUALS("-="),
-  NEWLINE("newline"),
-  NONLOCAL("nonlocal"),
-  NOT("not"),
-  NOT_EQUALS("!="),
-  NOT_IN("not in"),
-  OR("or"),
-  OUTDENT("outdent"),
-  PASS("pass"),
-  PERCENT("%"),
-  PERCENT_EQUALS("%="),
-  PIPE("|"),
-  PIPE_EQUALS("|="),
-  PLUS("+"),
-  PLUS_EQUALS("+="),
-  RAISE("raise"),
-  RBRACE("}"),
-  RBRACKET("]"),
-  RETURN("return"),
-  RPAREN(")"),
-  SEMI(";"),
-  SLASH("/"),
-  SLASH_EQUALS("/="),
-  SLASH_SLASH("//"),
-  SLASH_SLASH_EQUALS("//="),
-  STAR("*"),
-  STAR_EQUALS("*="),
-  STAR_STAR("**"),
-  STRING("string literal"),
-  TILDE("~"),
-  TRY("try"),
-  WHILE("while"),
-  WITH("with"),
-  YIELD("yield");
-
-  private final String name;
-
-  private TokenKind(String name) {
-    this.name = name;
-  }
-
-  @Override
-  public String toString() {
-    return name;
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Tuple.java b/src/main/java/com/google/devtools/build/lib/syntax/Tuple.java
deleted file mode 100644
index 8b3e9a9..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/Tuple.java
+++ /dev/null
@@ -1,243 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.syntax;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.ObjectArrays;
-import java.util.AbstractCollection;
-import java.util.AbstractList;
-import java.util.Arrays;
-import java.util.Iterator;
-import net.starlark.java.annot.StarlarkBuiltin;
-import net.starlark.java.annot.StarlarkDocumentationCategory;
-
-/**
- * A Starlark tuple, i.e. the value represented by {@code (1, 2, 3)}. Tuples are always immutable
- * (regardless of the {@link StarlarkThread} they are created in).
- */
-@StarlarkBuiltin(
-    name = "tuple",
-    category = StarlarkDocumentationCategory.BUILTIN,
-    doc =
-        "The built-in tuple type. Example tuple expressions:<br>"
-            + "<pre class=language-python>x = (1, 2, 3)</pre>"
-            + "Accessing elements is possible using indexing (starts from <code>0</code>):<br>"
-            + "<pre class=language-python>e = x[1]   # e == 2</pre>"
-            + "Lists support the <code>+</code> operator to concatenate two tuples. Example:<br>"
-            + "<pre class=language-python>x = (1, 2) + (3, 4)   # x == (1, 2, 3, 4)\n"
-            + "x = (\"a\", \"b\")\n"
-            + "x += (\"c\",)            # x == (\"a\", \"b\", \"c\")</pre>"
-            + "Similar to lists, tuples support slice operations:"
-            + "<pre class=language-python>('a', 'b', 'c', 'd')[1:3]   # ('b', 'c')\n"
-            + "('a', 'b', 'c', 'd')[::2]  # ('a', 'c')\n"
-            + "('a', 'b', 'c', 'd')[3:0:-1]  # ('d', 'c', 'b')</pre>"
-            + "Tuples are immutable, therefore <code>x[1] = \"a\"</code> is not supported.")
-public final class Tuple<E> extends AbstractList<E> implements Sequence<E> {
-
-  private final Object[] elems;
-
-  private Tuple(Object[] elems) {
-    this.elems = elems;
-  }
-
-  // The shared (sole) empty tuple.
-  private static final Tuple<?> EMPTY = new Tuple<>(new Object[0]);
-
-  /** Returns the empty tuple, cast to have an arbitrary content type. */
-  @SuppressWarnings("unchecked")
-  public static <T> Tuple<T> empty() {
-    return (Tuple<T>) EMPTY; // unchecked
-  }
-
-  /**
-   * Returns a Tuple that wraps the specified array, which must not be subsequently modified. The
-   * caller is additionally trusted to choose an appropriate type T.
-   */
-  static <T> Tuple<T> wrap(Object[] array) {
-    return array.length == 0 ? empty() : new Tuple<T>(array);
-  }
-
-  /** Returns a tuple containing the given elements. */
-  @SuppressWarnings("unchecked")
-  public static <T> Tuple<T> copyOf(Iterable<? extends T> seq) {
-    if (seq instanceof Tuple) {
-      return (Tuple<T>) seq; // unchecked
-    }
-    return wrap(Iterables.toArray(seq, Object.class));
-  }
-
-  /** Returns a tuple containing the given elements. */
-  public static <T> Tuple<T> of(T... elems) {
-    if (elems.length == 0) {
-      return empty();
-    }
-    return new Tuple<T>(Arrays.copyOf(elems, elems.length));
-  }
-
-  /** Returns a two-element tuple. */
-  public static <T> Tuple<T> pair(T a, T b) {
-    // Equivalent to of(a, b) but avoids variadic array allocation.
-    return wrap(new Object[] {a, b});
-  }
-
-  /** Returns a three-element tuple. */
-  public static <T> Tuple<T> triple(T a, T b, T c) {
-    // Equivalent to of(a, b, c) but avoids variadic array allocation.
-    return wrap(new Object[] {a, b, c});
-  }
-
-  /** Returns a tuple that is the concatenation of two tuples. */
-  public static <T> Tuple<T> concat(Tuple<? extends T> x, Tuple<? extends T> y) {
-    // TODO(adonovan): opt: exploit x + () == x; y + () == y.
-    return wrap(ObjectArrays.concat(x.elems, y.elems, Object.class));
-  }
-
-  @Override
-  public boolean isImmutable() {
-    for (Object x : elems) {
-      if (!Starlark.isImmutable(x)) {
-        return false;
-      }
-    }
-    return true;
-  }
-
-  @Override
-  public boolean isHashable() {
-    for (Object x : elems) {
-      if (!EvalUtils.isHashable(x)) {
-        return false;
-      }
-    }
-    return true;
-  }
-
-  @Override
-  public int hashCode() {
-    return 9857 + 8167 * Arrays.hashCode(elems);
-  }
-
-  @Override
-  public boolean equals(Object that) {
-    // This slightly violates the java.util.List equivalence contract
-    // because it considers the class, not just the elements.
-    return this == that
-        || (that instanceof Tuple && Arrays.equals(this.elems, ((Tuple) that).elems));
-  }
-
-  @Override
-  @SuppressWarnings("unchecked")
-  public E get(int i) {
-    return (E) elems[i]; // unchecked
-  }
-
-  @Override
-  public int size() {
-    return elems.length;
-  }
-
-  @Override
-  public Tuple<E> subList(int from, int to) {
-    return wrap(Arrays.copyOfRange(elems, from, to));
-  }
-
-  @Override
-  public Object[] toArray() {
-    return elems.length != 0 ? elems.clone() : elems;
-  }
-
-  @Override
-  public void repr(Printer printer) {
-    printer.append('(');
-    String sep = "";
-    for (Object elem : elems) {
-      printer.append(sep);
-      sep = ", ";
-      printer.repr(elem);
-    }
-    if (elems.length == 1) {
-      printer.append(',');
-    }
-    printer.append(')');
-  }
-
-  // TODO(adonovan): StarlarkValue has 3 String methods yet still we need this fourth. Why?
-  @Override
-  public String toString() {
-    return Starlark.repr(this);
-  }
-
-  @Override
-  public ImmutableList<E> getImmutableList() {
-    // Share the array with this (immutable) Tuple.
-    return wrapImmutable(elems);
-  }
-
-  /**
-   * Returns a new ImmutableList<T> backed by {@code array}, which must not be subsequently
-   * modified.
-   */
-  // TODO(adonovan): move this somewhere more appropriate.
-  static <T> ImmutableList<T> wrapImmutable(Object[] array) {
-    // Construct an ImmutableList that shares the array.
-    // ImmutableList relies on the implementation of Collection.toArray
-    // not subsequently modifying the returned array.
-    return ImmutableList.copyOf(
-        new AbstractCollection<T>() {
-          @Override
-          public Object[] toArray() {
-            return array;
-          }
-
-          @Override
-          public int size() {
-            return array.length;
-          }
-
-          @Override
-          public Iterator<T> iterator() {
-            throw new UnsupportedOperationException();
-          }
-        });
-  }
-
-  @Override
-  public Tuple<E> getSlice(Mutability mu, int start, int stop, int step) {
-    RangeList indices = new RangeList(start, stop, step);
-    int n = indices.size();
-    if (step == 1) { // common case
-      return subList(indices.at(0), indices.at(n));
-    }
-    Object[] res = new Object[n];
-    for (int i = 0; i < n; ++i) {
-      res[i] = elems[indices.at(i)];
-    }
-    return wrap(res);
-  }
-
-  /** Returns a Tuple containing n consecutive repeats of this tuple. */
-  Tuple<E> repeat(int n) {
-    if (n <= 0 || isEmpty()) {
-      return empty();
-    }
-    // TODO(adonovan): reject unreasonably large n.
-    Object[] res = new Object[n * elems.length];
-    for (int i = 0; i < n; i++) {
-      System.arraycopy(elems, 0, res, i * elems.length, elems.length);
-    }
-    return wrap(res);
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/UnaryOperatorExpression.java b/src/main/java/com/google/devtools/build/lib/syntax/UnaryOperatorExpression.java
deleted file mode 100644
index 4b1e9f4..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/UnaryOperatorExpression.java
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright 2017 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.syntax;
-
-
-/** A UnaryOperatorExpression represents a unary operator expression, 'op x'. */
-public final class UnaryOperatorExpression extends Expression {
-
-  private final TokenKind op; // NOT, TILDE, MINUS or PLUS
-  private final int opOffset;
-  private final Expression x;
-
-  UnaryOperatorExpression(FileLocations locs, TokenKind op, int opOffset, Expression x) {
-    super(locs);
-    this.op = op;
-    this.opOffset = opOffset;
-    this.x = x;
-  }
-
-  /** Returns the operator. */
-  public TokenKind getOperator() {
-    return op;
-  }
-
-  @Override
-  public int getStartOffset() {
-    return opOffset;
-  }
-
-  @Override
-  public int getEndOffset() {
-    return x.getEndOffset();
-  }
-
-  /** Returns the operand. */
-  public Expression getX() {
-    return x;
-  }
-
-  @Override
-  public String toString() {
-    // Note that this omits the parentheses for brevity, but is not correct in general due to
-    // operator precedence rules. For example, "(not False) in mylist" prints as
-    // "not False in mylist", which evaluates to opposite results in the case that mylist is empty.
-    // TODO(adonovan): record parentheses explicitly in syntax tree.
-    return (op == TokenKind.NOT ? "not " : op.toString()) + x;
-  }
-
-  @Override
-  public void accept(NodeVisitor visitor) {
-    visitor.visit(this);
-  }
-
-  @Override
-  public Kind kind() {
-    return Kind.UNARY_OPERATOR;
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/cpu_profiler_posix.cc b/src/main/java/com/google/devtools/build/lib/syntax/cpu_profiler_posix.cc
deleted file mode 100644
index c64b30d..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/cpu_profiler_posix.cc
+++ /dev/null
@@ -1,200 +0,0 @@
-// Copyright 2020 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// POSIX support for Starlark CPU profiler.
-
-#include <arpa/inet.h>  // for htonl
-#include <errno.h>
-#include <fcntl.h>
-#include <jni.h>
-#include <signal.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/syscall.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <unistd.h>
-
-namespace cpu_profiler {
-
-// static native boolean supported();
-extern "C" JNIEXPORT jboolean JNICALL
-Java_com_google_devtools_build_lib_syntax_CpuProfiler_supported(JNIEnv *env,
-                                                                jclass clazz) {
-  return true;
-}
-
-static int fd;  // the write end of the profile event pipe
-
-pid_t gettid(void) {
-#ifdef __linux__
-  return (pid_t)syscall(SYS_gettid);
-#else  // darwin
-  return (pid_t)syscall(SYS_thread_selfid);
-#endif
-}
-
-// SIGPROF handler.
-// Warning: asynchronous! See signal-safety(7) for the programming discipline.
-void onsigprof(int sig) {
-  int old_errno = errno;
-
-  if (fd == 0) {
-    const char *msg = "startTimer called before createPipe\n";
-    write(2, msg, strlen(msg));
-    abort();
-  }
-
-  // Send an event containing the int32be-encoded OS thread ID.
-  pid_t tid = gettid();
-  uint32_t tid_be = htonl(tid);
-  int r = write(fd, (void *)&tid_be, sizeof tid_be);
-  if (r < 0) {
-    if (errno == EAGAIN || errno == EWOULDBLOCK) {
-      // The Java router thread cannot keep up.
-      //
-      // A busy 12-core machine receives 12 * 100Hz = 1200 signals per second,
-      // and thus writes 4.8KB/s to the pipe. The default pipe buffer
-      // size on Linux is 64KiB, sufficient to buffer ~14s of data.
-      // (It is a quarter of that on Mac OS X.)
-      //
-      // Rather than block in write(2), causing the JVM to deadlock,
-      // we print an error and discard the event.
-      const char *msg =
-          "Starlark profile event router thread cannot keep up; discarding "
-          "events\n";
-      write(2, msg, strlen(msg));
-    } else {
-      // We shouldn't use perror in a signal handler.
-      // Strictly, we shouldn't use strerror either,
-      // but for all errors returned by write it merely
-      // returns a constant.
-      char buf[1024] = "write: ";
-      strncat(buf, strerror(errno), sizeof buf - strlen(buf) - 1);
-      strncat(buf, "\n", sizeof buf - strlen(buf) - 1);
-      write(2, buf, strlen(buf));
-      abort();
-    }
-  }
-
-  errno = old_errno;
-}
-
-// static native jint gettid();
-extern "C" JNIEXPORT jint JNICALL
-Java_com_google_devtools_build_lib_syntax_CpuProfiler_gettid(JNIEnv *env,
-                                                             jclass clazz) {
-  return gettid();
-}
-
-// makeFD: return new FileDescriptor(fd)
-//
-// This would be easy to do in Java, but for the field being private.
-// Java really does everything it can to make system programming hateful.
-static jobject makeFD(JNIEnv *env, int fd) {
-  jclass fdclass = env->FindClass("java/io/FileDescriptor");
-  if (fdclass == NULL) return NULL;  // exception
-
-  jmethodID init = env->GetMethodID(fdclass, "<init>", "()V");
-  if (init == NULL) return NULL;  // exception
-  jobject fdobj = env->NewObject(fdclass, init);
-
-  jfieldID fd_field = env->GetFieldID(fdclass, "fd", "I");
-  if (fd_field == NULL) return NULL;  // exception
-  env->SetIntField(fdobj, fd_field, fd);
-
-  return fdobj;
-}
-
-// static native FileDescriptor createPipe();
-extern "C" JNIEXPORT jobject JNICALL
-Java_com_google_devtools_build_lib_syntax_CpuProfiler_createPipe(JNIEnv *env,
-                                                                 jclass clazz) {
-  // Create a pipe for profile events from the handler to Java.
-  // The default pipe size is 64KiB on Linux and 16KiB on Mac OS X.
-  int pipefds[2];
-  if (pipe(pipefds) < 0) {
-    perror("pipe");
-    abort();
-  }
-  fd = pipefds[1];
-
-  // Make the write end non-blocking so that the signal
-  // handler can detect overflow (rather than deadlock).
-  fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) | O_NONBLOCK);
-
-  // Return the read end of the event pipe,
-  // wrapped by a java FileDescriptor.
-  return makeFD(env, pipefds[0]);
-}
-
-// static native boolean startTimer(long period_micros);
-extern "C" JNIEXPORT jboolean JNICALL
-Java_com_google_devtools_build_lib_syntax_CpuProfiler_startTimer(
-    JNIEnv *env, jclass clazz, jlong period_micros) {
-  // Install the signal handler.
-  // Use sigaction(2) not signal(2) so that we can correctly
-  // restore the previous handler if necessary.
-  struct sigaction oldact = {}, act = {};
-  act.sa_handler = onsigprof;
-  act.sa_flags = SA_RESTART;  // the JVM doesn't expect EINTR
-  if (sigaction(SIGPROF, &act, &oldact) < 0) {
-    perror("sigaction");
-    abort();
-  }
-
-  // Is a handler already in effect?
-  // Check for 3-arg and 1-arg forms.
-  typedef void (*sighandler_t)(int);  // don't rely on this GNU extension
-  sighandler_t prev = (oldact.sa_flags & SA_SIGINFO) != 0
-                          ? reinterpret_cast<sighandler_t>(oldact.sa_sigaction)
-                          : oldact.sa_handler;
-  // The initial handler (DFL or IGN) may vary by thread package.
-  if (prev != SIG_DFL && prev != SIG_IGN) {
-    // Someone else is profiling this JVM.
-    // Restore their handler and fail.
-    (void)sigaction(SIGPROF, &oldact, nullptr);
-    return false;
-  }
-
-  // Start the CPU interval timer.
-  struct timeval period = {
-      .tv_sec = 0,
-      .tv_usec = static_cast<suseconds_t>(period_micros),
-  };
-  struct itimerval timer = {.it_interval = period, .it_value = period};
-  if (setitimer(ITIMER_PROF, &timer, nullptr) < 0) {
-    perror("setitimer");
-    abort();
-  }
-
-  return true;
-}
-
-// static native void stopTimer();
-extern "C" JNIEXPORT void JNICALL
-Java_com_google_devtools_build_lib_syntax_CpuProfiler_stopTimer(JNIEnv *env,
-                                                                jclass clazz) {
-  // Disarm the CPU interval timer.
-  struct itimerval timer = {};
-  if (setitimer(ITIMER_PROF, &timer, nullptr) < 0) {
-    perror("setitimer");
-    abort();
-  }
-
-  // Uninstall signal handler.
-  signal(SIGPROF, SIG_IGN);
-}
-
-}  // namespace cpu_profiler
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/cpu_profiler_unimpl.cc b/src/main/java/com/google/devtools/build/lib/syntax/cpu_profiler_unimpl.cc
deleted file mode 100644
index 103d401..0000000
--- a/src/main/java/com/google/devtools/build/lib/syntax/cpu_profiler_unimpl.cc
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2020 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Starlark CPU profiler stubs for unsupported platforms.
-
-#include <jni.h>
-#include <stdlib.h>
-
-namespace cpu_profiler {
-
-extern "C" JNIEXPORT jboolean JNICALL
-Java_com_google_devtools_build_lib_syntax_CpuProfiler_supported(JNIEnv *env,
-                                                                jclass clazz) {
-  return false;
-}
-
-extern "C" JNIEXPORT jint JNICALL
-Java_com_google_devtools_build_lib_syntax_CpuProfiler_gettid(JNIEnv *env,
-                                                             jclass clazz) {
-  abort();
-}
-
-extern "C" JNIEXPORT jobject JNICALL
-Java_com_google_devtools_build_lib_syntax_CpuProfiler_createPipe(JNIEnv *env,
-                                                                 jclass clazz) {
-  abort();
-}
-
-extern "C" JNIEXPORT jboolean JNICALL
-Java_com_google_devtools_build_lib_syntax_CpuProfiler_startTimer(
-    JNIEnv *env, jclass clazz, jlong period_micros) {
-  abort();
-}
-
-extern "C" JNIEXPORT void JNICALL
-Java_com_google_devtools_build_lib_syntax_CpuProfiler_stopTimer(JNIEnv *env,
-                                                                jclass clazz) {
-  abort();
-}
-
-}  // namespace cpu_profiler
diff --git a/src/main/java/com/google/devtools/build/skydoc/BUILD b/src/main/java/com/google/devtools/build/skydoc/BUILD
index 7aeea4e..3d02297 100644
--- a/src/main/java/com/google/devtools/build/skydoc/BUILD
+++ b/src/main/java/com/google/devtools/build/skydoc/BUILD
@@ -57,7 +57,6 @@
     srcs = glob(["*.java"]),
     visibility = ["//src/test:__subpackages__"],
     deps = [
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/collect/nestedset",
         "//src/main/java/com/google/devtools/build/lib/events",
@@ -90,6 +89,8 @@
         "//src/main/java/com/google/devtools/build/skydoc/rendering",
         "//src/main/java/com/google/devtools/build/skydoc/rendering/proto:stardoc_output_java_proto",
         "//src/main/java/com/google/devtools/common/options",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//src/tools/starlark/java/com/google/devtools/starlark/common",
         "//third_party:guava",
     ],
diff --git a/src/main/java/com/google/devtools/build/skydoc/FilesystemFileAccessor.java b/src/main/java/com/google/devtools/build/skydoc/FilesystemFileAccessor.java
index 4015cfd..80d2fbe 100644
--- a/src/main/java/com/google/devtools/build/skydoc/FilesystemFileAccessor.java
+++ b/src/main/java/com/google/devtools/build/skydoc/FilesystemFileAccessor.java
@@ -14,10 +14,10 @@
 
 package com.google.devtools.build.skydoc;
 
-import com.google.devtools.build.lib.syntax.ParserInput;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Paths;
+import net.starlark.java.syntax.ParserInput;
 
 /** Implementation of {@link StarlarkFileAccessor} which uses the real filesystem. */
 public class FilesystemFileAccessor implements StarlarkFileAccessor {
diff --git a/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java b/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
index eb60115..664a54c 100644
--- a/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
+++ b/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
@@ -46,24 +46,6 @@
 import com.google.devtools.build.lib.starlarkbuildapi.stubs.ProviderStub;
 import com.google.devtools.build.lib.starlarkbuildapi.stubs.StarlarkAspectStub;
 import com.google.devtools.build.lib.starlarkbuildapi.test.TestingBootstrap;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Expression;
-import com.google.devtools.build.lib.syntax.ExpressionStatement;
-import com.google.devtools.build.lib.syntax.FileOptions;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.ParserInput;
-import com.google.devtools.build.lib.syntax.Program;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkFile;
-import com.google.devtools.build.lib.syntax.StarlarkFunction;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.Statement;
-import com.google.devtools.build.lib.syntax.StringLiteral;
-import com.google.devtools.build.lib.syntax.SyntaxError;
 import com.google.devtools.build.skydoc.fakebuildapi.FakeActionsInfoProvider;
 import com.google.devtools.build.skydoc.fakebuildapi.FakeBuildApiGlobals;
 import com.google.devtools.build.skydoc.fakebuildapi.FakeConfigApi;
@@ -146,6 +128,24 @@
 import java.util.Map.Entry;
 import java.util.TreeMap;
 import java.util.stream.Collectors;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.Mutability;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkFunction;
+import net.starlark.java.eval.StarlarkSemantics;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Expression;
+import net.starlark.java.syntax.ExpressionStatement;
+import net.starlark.java.syntax.FileOptions;
+import net.starlark.java.syntax.ParserInput;
+import net.starlark.java.syntax.Program;
+import net.starlark.java.syntax.StarlarkFile;
+import net.starlark.java.syntax.Statement;
+import net.starlark.java.syntax.StringLiteral;
+import net.starlark.java.syntax.SyntaxError;
 
 /**
  * Main entry point for the Skydoc binary.
diff --git a/src/main/java/com/google/devtools/build/skydoc/StarlarkFileAccessor.java b/src/main/java/com/google/devtools/build/skydoc/StarlarkFileAccessor.java
index 369114d..0542a6c 100644
--- a/src/main/java/com/google/devtools/build/skydoc/StarlarkFileAccessor.java
+++ b/src/main/java/com/google/devtools/build/skydoc/StarlarkFileAccessor.java
@@ -14,8 +14,8 @@
 
 package com.google.devtools.build.skydoc;
 
-import com.google.devtools.build.lib.syntax.ParserInput;
 import java.io.IOException;
+import net.starlark.java.syntax.ParserInput;
 
 /**
  * Helper to handle Skydoc file I/O. This abstraction is useful for tests which don't involve
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/BUILD b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/BUILD
index 26e3c2c..802fdbb 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/BUILD
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/BUILD
@@ -15,7 +15,6 @@
     name = "fakebuildapi",
     srcs = glob(["*.java"]),
     deps = [
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/collect/nestedset",
         "//src/main/java/com/google/devtools/build/lib/events",
@@ -23,6 +22,8 @@
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
         "//src/main/java/com/google/devtools/build/skydoc/rendering",
         "//src/main/java/com/google/devtools/build/skydoc/rendering/proto:stardoc_output_java_proto",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:guava",
         "//third_party:jsr305",
     ],
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/ConfigApiFakes.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/ConfigApiFakes.java
index 0434dd5..919a543 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/ConfigApiFakes.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/ConfigApiFakes.java
@@ -17,7 +17,7 @@
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkConfigApi;
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkConfigApi.BuildSettingApi;
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkConfigApi.ExecTransitionFactoryApi;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
 
 /** Fakes for callables under the {@link StarlarkConfigApi} module. */
 public class ConfigApiFakes {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeActionsInfoProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeActionsInfoProvider.java
index dc23b95..5399e08 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeActionsInfoProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeActionsInfoProvider.java
@@ -15,7 +15,7 @@
 package com.google.devtools.build.skydoc.fakebuildapi;
 
 import com.google.devtools.build.lib.starlarkbuildapi.ActionsInfoProviderApi;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
 
 /**
  * Fake implementation of {@link ActionsInfoProviderApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeBuildApiGlobals.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeBuildApiGlobals.java
index 26b5da0..2b3d482 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeBuildApiGlobals.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeBuildApiGlobals.java
@@ -16,8 +16,8 @@
 
 import com.google.devtools.build.lib.starlarkbuildapi.LateBoundDefaultApi;
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkBuildApiGlobals;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.StarlarkThread;
 
 /** Fake implementation of {@link StarlarkBuildApiGlobals}. */
 public class FakeBuildApiGlobals implements StarlarkBuildApiGlobals {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeConfigApi.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeConfigApi.java
index 9007edf..5b2ba52 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeConfigApi.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeConfigApi.java
@@ -15,9 +15,9 @@
 package com.google.devtools.build.skydoc.fakebuildapi;
 
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkConfigApi;
-import com.google.devtools.build.lib.syntax.Printer;
 import com.google.devtools.build.skydoc.fakebuildapi.ConfigApiFakes.FakeBuildSettingDescriptor;
 import com.google.devtools.build.skydoc.fakebuildapi.ConfigApiFakes.FakeExecTransitionFactory;
+import net.starlark.java.eval.Printer;
 
 /** Fake implementation of {@link StarlarkConfigApi}. */
 public class FakeConfigApi implements StarlarkConfigApi {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeDefaultInfoProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeDefaultInfoProvider.java
index 103d848..02b48d4 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeDefaultInfoProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeDefaultInfoProvider.java
@@ -18,9 +18,9 @@
 import com.google.devtools.build.lib.starlarkbuildapi.DefaultInfoApi.DefaultInfoApiProvider;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.RunfilesApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.StarlarkThread;
 
 /**
  * Fake implementation of {@link DefaultInfoApiProvider}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeDescriptor.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeDescriptor.java
index 6d6d25d..88b8bb2 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeDescriptor.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeDescriptor.java
@@ -15,11 +15,11 @@
 package com.google.devtools.build.skydoc.fakebuildapi;
 
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkAttrModuleApi.Descriptor;
-import com.google.devtools.build.lib.syntax.Printer;
 import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.AttributeInfo;
 import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.AttributeType;
 import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.ProviderNameGroup;
 import java.util.List;
+import net.starlark.java.eval.Printer;
 
 /**
  * Fake implementation of {@link Descriptor}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeExecGroup.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeExecGroup.java
index 214ac42..18ffcd5 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeExecGroup.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeExecGroup.java
@@ -15,7 +15,7 @@
 package com.google.devtools.build.skydoc.fakebuildapi;
 
 import com.google.devtools.build.lib.starlarkbuildapi.ExecGroupApi;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
 
 /** Fake implementation of {@link ExecGroupApi} */
 public class FakeExecGroup implements ExecGroupApi {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeLateBoundDefaultApi.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeLateBoundDefaultApi.java
index 6c81f56..9ea8671 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeLateBoundDefaultApi.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeLateBoundDefaultApi.java
@@ -15,7 +15,7 @@
 package com.google.devtools.build.skydoc.fakebuildapi;
 
 import com.google.devtools.build.lib.starlarkbuildapi.LateBoundDefaultApi;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
 
 /**
  * Fake implementation of {@link LateBoundDefaultApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeOutputGroupInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeOutputGroupInfo.java
index 7a50a43..dba1beb 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeOutputGroupInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeOutputGroupInfo.java
@@ -15,9 +15,9 @@
 package com.google.devtools.build.skydoc.fakebuildapi;
 
 import com.google.devtools.build.lib.starlarkbuildapi.OutputGroupInfoApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
 
 /**
  * Fake implementation of {@link OutputGroupInfoApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeProviderApi.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeProviderApi.java
index e7ce53e..7a5bfb6 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeProviderApi.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeProviderApi.java
@@ -15,11 +15,11 @@
 package com.google.devtools.build.skydoc.fakebuildapi;
 
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.Tuple;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.Tuple;
 
 /** Fake callable implementation of {@link ProviderApi}. */
 public class FakeProviderApi implements StarlarkCallable, ProviderApi {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSplitTransitionProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSplitTransitionProvider.java
index d84d18b..0cb3ba6 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSplitTransitionProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSplitTransitionProvider.java
@@ -15,7 +15,7 @@
 package com.google.devtools.build.skydoc.fakebuildapi;
 
 import com.google.devtools.build.lib.starlarkbuildapi.SplitTransitionProviderApi;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
 
 /** Fake implementation of {@link SplitTransitionProviderApi}. */
 public class FakeSplitTransitionProvider implements SplitTransitionProviderApi {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkAspect.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkAspect.java
index 4a5d1b4..bf4ffb8 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkAspect.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkAspect.java
@@ -15,8 +15,8 @@
 package com.google.devtools.build.skydoc.fakebuildapi;
 
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkAspectApi;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.StarlarkCallable;
 
 /** Fake implementation of {@link StarlarkAspectApi}. */
 public class FakeStarlarkAspect implements StarlarkCallable, StarlarkAspectApi {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkAttrModuleApi.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkAttrModuleApi.java
index 547e0f7..bbe8707 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkAttrModuleApi.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkAttrModuleApi.java
@@ -17,17 +17,17 @@
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkAttrModuleApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.AttributeType;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Module;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
 
 /**
  * Fake implementation of {@link StarlarkAttrModuleApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkNativeModuleApi.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkNativeModuleApi.java
index 0f19f49..1b1fd00 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkNativeModuleApi.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkNativeModuleApi.java
@@ -17,18 +17,18 @@
 import com.google.common.collect.ImmutableCollection;
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkNativeModuleApi;
-import com.google.devtools.build.lib.syntax.ClassObject;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.NoneType;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkList;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.ClassObject;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.NoneType;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkList;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
 
 /** Fake implementation of {@link StarlarkNativeModuleApi}. */
 public class FakeStarlarkNativeModuleApi implements StarlarkNativeModuleApi, ClassObject {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkRuleFunctionsApi.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkRuleFunctionsApi.java
index 9ce5351..1573f18 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkRuleFunctionsApi.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkRuleFunctionsApi.java
@@ -23,14 +23,6 @@
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkAspectApi;
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkRuleFunctionsApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkFunction;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import com.google.devtools.build.skydoc.rendering.AspectInfoWrapper;
 import com.google.devtools.build.skydoc.rendering.ProviderInfoWrapper;
 import com.google.devtools.build.skydoc.rendering.RuleInfoWrapper;
@@ -46,6 +38,14 @@
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkFunction;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
 
 /**
  * Fake implementation of {@link StarlarkRuleFunctionsApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStructApi.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStructApi.java
index 38fd011..15185b5 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStructApi.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStructApi.java
@@ -20,13 +20,13 @@
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Ordering;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.syntax.ClassObject;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import java.util.Map;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.ClassObject;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.StarlarkThread;
 
 /**
  * Fake implementation of {@link StructApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/BUILD b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/BUILD
index a3e1b8f..1877c02 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/BUILD
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/BUILD
@@ -15,7 +15,6 @@
     name = "android",
     srcs = glob(["*.java"]),
     deps = [
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/collect/nestedset",
         "//src/main/java/com/google/devtools/build/lib/events",
@@ -24,6 +23,8 @@
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:guava",
         "//third_party:jsr305",
     ],
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidApplicationResourceInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidApplicationResourceInfo.java
index dbb76ca..352629c 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidApplicationResourceInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidApplicationResourceInfo.java
@@ -18,8 +18,8 @@
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidApplicationResourceInfoApi;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidApplicationResourceInfoApi.AndroidApplicationResourceInfoApiProvider;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidDeviceBrokerInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
 
 /** Fake implementation of {@link AndroidDeviceBrokerInfoApi}. */
 public class FakeAndroidApplicationResourceInfo implements AndroidDeviceBrokerInfoApi {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidAssetsInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidAssetsInfo.java
index 891a0d5..cdcd1be 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidAssetsInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidAssetsInfo.java
@@ -20,8 +20,8 @@
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidAssetsInfoApi;
 import com.google.devtools.build.lib.starlarkbuildapi.android.ParsedAndroidAssetsApi;
-import com.google.devtools.build.lib.syntax.EvalException;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
 
 /** Fake implementation of AndroidAssetsInfo. */
 public class FakeAndroidAssetsInfo
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidBinaryDataInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidBinaryDataInfo.java
index 1ef416a..67bd31f 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidBinaryDataInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidBinaryDataInfo.java
@@ -16,7 +16,7 @@
 
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidBinaryDataInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
 
 /** Fake implementation of {@link AndroidBinaryDataInfoApi}. */
 public class FakeAndroidBinaryDataInfo implements AndroidBinaryDataInfoApi<FileApi> {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidCcLinkParamsProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidCcLinkParamsProvider.java
index 5672953..1d73b3e 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidCcLinkParamsProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidCcLinkParamsProvider.java
@@ -17,7 +17,7 @@
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidCcLinkParamsProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
 
 /** Fake implementation of AndroidCcLinkParamsProvider. */
 public class FakeAndroidCcLinkParamsProvider
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidDeviceBrokerInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidDeviceBrokerInfo.java
index 949a2f7..a3e7ed3 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidDeviceBrokerInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidDeviceBrokerInfo.java
@@ -15,8 +15,8 @@
 package com.google.devtools.build.skydoc.fakebuildapi.android;
 
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidDeviceBrokerInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
 
 /**
  * Fake implementation of {@link AndroidDeviceBrokerInfoApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidFeatureFlagSetProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidFeatureFlagSetProvider.java
index 46c8e13..de535e7 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidFeatureFlagSetProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidFeatureFlagSetProvider.java
@@ -17,8 +17,8 @@
 import com.google.common.collect.ImmutableMap;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidFeatureFlagSetProviderApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
 
 /** Fake implementation of {@link AndroidFeatureFlagSetProviderApi}. */
 public class FakeAndroidFeatureFlagSetProvider implements AndroidFeatureFlagSetProviderApi {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidIdeInfoProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidIdeInfoProvider.java
index 1b6736f..d22f44a 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidIdeInfoProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidIdeInfoProvider.java
@@ -20,10 +20,10 @@
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidIdeInfoProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.java.OutputJarApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
 
 /** Fake implementation of AndroidIdeInfoProvider. */
 public class FakeAndroidIdeInfoProvider
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidIdlProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidIdlProvider.java
index 06aa79e..87a4be9 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidIdlProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidIdlProvider.java
@@ -17,7 +17,7 @@
 import com.google.devtools.build.lib.collect.nestedset.Depset;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidIdlProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
 
 /** Fake implementation of AndroidIdlProvider. */
 public class FakeAndroidIdlProvider implements AndroidIdlProviderApi<FileApi> {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidInstrumentationInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidInstrumentationInfo.java
index a562d0b..b3a0996 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidInstrumentationInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidInstrumentationInfo.java
@@ -16,8 +16,8 @@
 
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidInstrumentationInfoApi;
 import com.google.devtools.build.lib.starlarkbuildapi.android.ApkInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
 
 /** Fake implementation of {@link AndroidInstrumentationInfoApi}. */
 public class FakeAndroidInstrumentationInfo
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidLibraryAarInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidLibraryAarInfo.java
index 35866fc..154b7a0 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidLibraryAarInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidLibraryAarInfo.java
@@ -17,8 +17,8 @@
 import com.google.devtools.build.lib.collect.nestedset.Depset;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidLibraryAarInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
 
 /** Fake implementation of {@link AndroidLibraryAarInfoApi}. */
 public class FakeAndroidLibraryAarInfo implements AndroidLibraryAarInfoApi<FileApi> {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidLibraryResourceClassJarProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidLibraryResourceClassJarProvider.java
index 19215a6..c3e1393 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidLibraryResourceClassJarProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidLibraryResourceClassJarProvider.java
@@ -17,7 +17,7 @@
 import com.google.devtools.build.lib.collect.nestedset.Depset;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidLibraryResourceClassJarProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
 
 /** Fake implementation of AndroidLibraryResourceClassJarProvider. */
 public class FakeAndroidLibraryResourceClassJarProvider
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidManifestInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidManifestInfo.java
index 92f97c5..aabe3e0 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidManifestInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidManifestInfo.java
@@ -16,7 +16,7 @@
 
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidManifestInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
 
 /** Fake implementation of AndroidManifestInfo. */
 public class FakeAndroidManifestInfo implements AndroidManifestInfoApi<FileApi> {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidNativeLibsInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidNativeLibsInfo.java
index 1db41c6..2b12a03 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidNativeLibsInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidNativeLibsInfo.java
@@ -17,8 +17,8 @@
 import com.google.devtools.build.lib.collect.nestedset.Depset;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidNativeLibsInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
 
 /**
  * Fake implementation of {@link AndroidNativeLibsInfoApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidPreDexJarProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidPreDexJarProvider.java
index 91dfd6f..cebdac0 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidPreDexJarProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidPreDexJarProvider.java
@@ -16,7 +16,7 @@
 
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidPreDexJarProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
 
 /** Fake implementation of AndroidPreDexJarProvider. */
 public class FakeAndroidPreDexJarProvider implements AndroidPreDexJarProviderApi<FileApi> {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidProguardInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidProguardInfo.java
index 05cb379..85c985a 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidProguardInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidProguardInfo.java
@@ -17,8 +17,8 @@
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidProguardInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
 
 /** Fake implementation of AndroidProguardInfo. */
 public class FakeAndroidProguardInfo implements AndroidProguardInfoApi<FileApi> {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidResourcesInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidResourcesInfo.java
index 77b3a69..88acf4a 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidResourcesInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidResourcesInfo.java
@@ -20,9 +20,9 @@
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidManifestInfoApi;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidResourcesInfoApi;
 import com.google.devtools.build.lib.starlarkbuildapi.android.ValidatedAndroidDataApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
 
 /** Fake implementation of {@link AndroidResourcesInfoApi}. */
 public class FakeAndroidResourcesInfo
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidSdkProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidSdkProvider.java
index 21b5807..30a091d 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidSdkProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidSdkProvider.java
@@ -18,8 +18,8 @@
 import com.google.devtools.build.lib.starlarkbuildapi.FilesToRunProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidSdkProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.TransitiveInfoCollectionApi;
-import com.google.devtools.build.lib.syntax.EvalException;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
 
 /** Fake implementation of AndroidSdkProvider. */
 public class FakeAndroidSdkProvider
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidSplitTransitition.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidSplitTransitition.java
index 9373bf2..b7d8b2f 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidSplitTransitition.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidSplitTransitition.java
@@ -15,7 +15,7 @@
 package com.google.devtools.build.skydoc.fakebuildapi.android;
 
 import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidSplitTransititionApi;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
 
 /**
  * Fake implementation of {@link AndroidSplitTransititionApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeApkInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeApkInfo.java
index 513cfb5..f9d2d30 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeApkInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeApkInfo.java
@@ -17,9 +17,9 @@
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.android.ApkInfoApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
 
 /**
  * Fake implementation of {@link ApkInfoApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeDataBindingV2Provider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeDataBindingV2Provider.java
index a363dae..ef77e17 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeDataBindingV2Provider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeDataBindingV2Provider.java
@@ -18,9 +18,9 @@
 import com.google.devtools.build.lib.collect.nestedset.Depset;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.android.DataBindingV2ProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
 
 /** Fake implementation of {@link DataBindingV2Provider}. */
 public class FakeDataBindingV2Provider implements DataBindingV2ProviderApi<FileApi> {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeProguardMappingProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeProguardMappingProvider.java
index 1ae4386..8c3b697 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeProguardMappingProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeProguardMappingProvider.java
@@ -16,7 +16,7 @@
 
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.android.ProguardMappingProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
 
 /** Fake implementation of ProguardMappingProvider. */
 public class FakeProguardMappingProvider implements ProguardMappingProviderApi<FileApi> {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/BUILD b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/BUILD
index 871f01b..4ffa5c3 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/BUILD
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/BUILD
@@ -15,7 +15,6 @@
     name = "apple",
     srcs = glob(["*.java"]),
     deps = [
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/collect/nestedset",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple",
@@ -23,6 +22,8 @@
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform",
         "//src/main/java/com/google/devtools/build/skydoc/fakebuildapi",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:guava",
     ],
 )
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleCommon.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleCommon.java
index 131bc12..a018487 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleCommon.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleCommon.java
@@ -30,14 +30,14 @@
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
 import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import com.google.devtools.build.skydoc.fakebuildapi.FakeProviderApi;
 import com.google.devtools.build.skydoc.fakebuildapi.FakeSplitTransitionProvider;
 import com.google.devtools.build.skydoc.fakebuildapi.FakeStarlarkAspect;
 import com.google.devtools.build.skydoc.fakebuildapi.FakeStructApi;
 import com.google.devtools.build.skydoc.fakebuildapi.apple.FakeAppleStaticLibraryInfo.FakeAppleStaticLibraryInfoProvider;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
 
 /** Fake implementation of {@link AppleCommonApi}. */
 public class FakeAppleCommon
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleDynamicFrameworkInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleDynamicFrameworkInfo.java
index 69c3095..7a3420d 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleDynamicFrameworkInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleDynamicFrameworkInfo.java
@@ -18,8 +18,8 @@
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.apple.AppleDynamicFrameworkInfoApi;
 import com.google.devtools.build.lib.starlarkbuildapi.apple.ObjcProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
 
 /** Fake implementation of {@link AppleDynamicFrameworkInfoApi}. */
 public class FakeAppleDynamicFrameworkInfo implements AppleDynamicFrameworkInfoApi<FileApi> {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleStaticLibraryInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleStaticLibraryInfo.java
index 9680513..4cd651d 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleStaticLibraryInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleStaticLibraryInfo.java
@@ -17,8 +17,8 @@
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.apple.AppleStaticLibraryInfoApi;
 import com.google.devtools.build.lib.starlarkbuildapi.apple.ObjcProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
 
 /**
  * Fake implementation of {@link AppleStaticLibraryInfoApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeDottedVersion.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeDottedVersion.java
index e889bd4..005fa47 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeDottedVersion.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeDottedVersion.java
@@ -15,7 +15,7 @@
 package com.google.devtools.build.skydoc.fakebuildapi.apple;
 
 import com.google.devtools.build.lib.starlarkbuildapi.apple.DottedVersionApi;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
 
 /**
  * Fake implementation of {@link DottedVersionApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeObjcProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeObjcProvider.java
index 5a237c7..1712004 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeObjcProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeObjcProvider.java
@@ -18,8 +18,8 @@
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.apple.ObjcProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcCompilationContextApi;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
 
 /**
  * Fake implementation of {@link ObjcProviderApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/BUILD b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/BUILD
index e7214ca..85207b9 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/BUILD
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/BUILD
@@ -15,10 +15,11 @@
     name = "config",
     srcs = glob(["*.java"]),
     deps = [
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/events",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/config",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
         "//src/main/java/com/google/devtools/build/skydoc/fakebuildapi",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
     ],
 )
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/FakeConfigGlobalLibrary.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/FakeConfigGlobalLibrary.java
index 5ec5275..71fefc0 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/FakeConfigGlobalLibrary.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/FakeConfigGlobalLibrary.java
@@ -16,10 +16,10 @@
 
 import com.google.devtools.build.lib.starlarkbuildapi.config.ConfigGlobalLibraryApi;
 import com.google.devtools.build.lib.starlarkbuildapi.config.ConfigurationTransitionApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkThread;
 
 /**
  * Fake implementation of {@link ConfigGlobalLibraryApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/FakeConfigurationTransition.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/FakeConfigurationTransition.java
index 31a241e..ee497a4 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/FakeConfigurationTransition.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/FakeConfigurationTransition.java
@@ -15,7 +15,7 @@
 package com.google.devtools.build.skydoc.fakebuildapi.config;
 
 import com.google.devtools.build.lib.starlarkbuildapi.config.ConfigurationTransitionApi;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
 
 /**
  * Fake implementation of {@link ConfigurationTransitionApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/BUILD b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/BUILD
index 271a268..72c92d1 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/BUILD
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/BUILD
@@ -15,7 +15,6 @@
     name = "cpp",
     srcs = glob(["*.java"]),
     deps = [
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/collect/nestedset",
         "//src/main/java/com/google/devtools/build/lib/events",
@@ -25,6 +24,8 @@
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/go",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform",
         "//src/main/java/com/google/devtools/build/skydoc/fakebuildapi",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:guava",
     ],
 )
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcInfo.java
index c4a4e26..60b8dba 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcInfo.java
@@ -18,8 +18,8 @@
 import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcCompilationContextApi;
 import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcInfoApi;
 import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcLinkingContextApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
 
 /** Fake implementation of {@link CcInfoApi}. */
 public class FakeCcInfo implements CcInfoApi<FileApi> {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcModule.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcModule.java
index 917a80f..b21c1c5 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcModule.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcModule.java
@@ -33,13 +33,13 @@
 import com.google.devtools.build.lib.starlarkbuildapi.cpp.LibraryToLinkApi;
 import com.google.devtools.build.lib.starlarkbuildapi.cpp.LinkerInputApi;
 import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkList;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
-import com.google.devtools.build.lib.syntax.Tuple;
 import com.google.devtools.build.skydoc.fakebuildapi.FakeProviderApi;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkList;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.eval.Tuple;
 
 /** Fake implementation of {@link CcModuleApi}. */
 public class FakeCcModule
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcToolchainConfigInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcToolchainConfigInfo.java
index 0847720..be32f26 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcToolchainConfigInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcToolchainConfigInfo.java
@@ -15,8 +15,8 @@
 package com.google.devtools.build.skydoc.fakebuildapi.cpp;
 
 import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcToolchainConfigInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
 
 /** Fake implementation of {@link CcToolchainConfigInfoApi}. */
 public class FakeCcToolchainConfigInfo implements CcToolchainConfigInfoApi {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeGoWrapCcHelper.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeGoWrapCcHelper.java
index bc5ba85..09cea24 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeGoWrapCcHelper.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeGoWrapCcHelper.java
@@ -33,8 +33,8 @@
 import com.google.devtools.build.lib.starlarkbuildapi.go.GoContextInfoApi;
 import com.google.devtools.build.lib.starlarkbuildapi.go.GoPackageInfoApi;
 import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Tuple;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Tuple;
 
 /** Fake implementation of {@link GoWrapCcHelperApi}. */
 public class FakeGoWrapCcHelper
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyCcLinkParamsProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyCcLinkParamsProvider.java
index 5121f90..fa45d7e 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyCcLinkParamsProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyCcLinkParamsProvider.java
@@ -17,8 +17,8 @@
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcInfoApi;
 import com.google.devtools.build.lib.starlarkbuildapi.cpp.PyCcLinkParamsProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
 
 /** Fake implementation of {@link PyCcLinkParamsProviderApi}. */
 public class FakePyCcLinkParamsProvider implements PyCcLinkParamsProviderApi<FileApi> {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcHelper.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcHelper.java
index 5d759bc..99bc274 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcHelper.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcHelper.java
@@ -27,7 +27,7 @@
 import com.google.devtools.build.lib.starlarkbuildapi.cpp.PyWrapCcInfoApi;
 import com.google.devtools.build.lib.starlarkbuildapi.cpp.WrapCcIncludeProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.Sequence;
+import net.starlark.java.eval.Sequence;
 
 /** Fake implementation of {@link PyWrapCcHelperApi}. */
 public class FakePyWrapCcHelper
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcInfo.java
index 91ffee3..3d40dbe 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcInfo.java
@@ -18,8 +18,8 @@
 import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcInfoApi;
 import com.google.devtools.build.lib.starlarkbuildapi.cpp.PyWrapCcHelperApi;
 import com.google.devtools.build.lib.starlarkbuildapi.cpp.PyWrapCcInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
 
 /** Fake implementation of {@link PyWrapCcHelperApi}. */
 public class FakePyWrapCcInfo implements PyWrapCcInfoApi<FileApi> {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/BUILD b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/BUILD
index 3090c0b..89b4c3a 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/BUILD
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/BUILD
@@ -15,7 +15,6 @@
     name = "java",
     srcs = glob(["*.java"]),
     deps = [
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/collect/nestedset",
         "//src/main/java/com/google/devtools/build/lib/events",
@@ -25,6 +24,8 @@
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform",
         "//src/main/java/com/google/devtools/build/skydoc/fakebuildapi",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:guava",
         "//third_party:jsr305",
     ],
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCcLinkParamsProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCcLinkParamsProvider.java
index 4145cb4..ee310a5 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCcLinkParamsProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCcLinkParamsProvider.java
@@ -17,8 +17,8 @@
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcInfoApi;
 import com.google.devtools.build.lib.starlarkbuildapi.java.JavaCcLinkParamsProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
 
 /** Fake implementation of {@link JavaCcLinkParamsProvider}. */
 public class FakeJavaCcLinkParamsProvider
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCommon.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCommon.java
index 871f5511..59cb175 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCommon.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCommon.java
@@ -24,10 +24,10 @@
 import com.google.devtools.build.lib.starlarkbuildapi.java.JavaCommonApi;
 import com.google.devtools.build.lib.starlarkbuildapi.java.JavaToolchainStarlarkApiProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import com.google.devtools.build.skydoc.fakebuildapi.FakeProviderApi;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
 
 /** Fake implementation of {@link JavaCommonApi}. */
 public class FakeJavaCommon
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaInfo.java
index 7cb4110..3e72f02 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaInfo.java
@@ -20,10 +20,10 @@
 import com.google.devtools.build.lib.starlarkbuildapi.java.JavaCompilationInfoProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.java.JavaInfoApi;
 import com.google.devtools.build.lib.starlarkbuildapi.java.JavaRuleOutputJarsProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.StarlarkThread;
 
 /**
  * Fake implementation of {@link JavaInfoApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaProtoCommon.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaProtoCommon.java
index a002c8b..2eb9a76 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaProtoCommon.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaProtoCommon.java
@@ -20,7 +20,7 @@
 import com.google.devtools.build.lib.starlarkbuildapi.java.JavaInfoApi;
 import com.google.devtools.build.lib.starlarkbuildapi.java.JavaProtoCommonApi;
 import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
 
 /** Fake implementation of {@link JavaProtoCommonApi}. */
 public class FakeJavaProtoCommon
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaRuntimeInfoApi.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaRuntimeInfoApi.java
index 70ec553..51d8c01 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaRuntimeInfoApi.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaRuntimeInfoApi.java
@@ -16,8 +16,8 @@
 
 import com.google.devtools.build.lib.collect.nestedset.Depset;
 import com.google.devtools.build.lib.starlarkbuildapi.java.JavaRuntimeInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
 
 final class FakeJavaRuntimeInfoApi implements JavaRuntimeInfoApi {
 
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaToolchainStarlarkApiProviderApi.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaToolchainStarlarkApiProviderApi.java
index 0d7e47e..636188e 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaToolchainStarlarkApiProviderApi.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaToolchainStarlarkApiProviderApi.java
@@ -17,9 +17,9 @@
 import com.google.devtools.build.lib.collect.nestedset.Depset;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.java.JavaToolchainStarlarkApiProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
 
 final class FakeJavaToolchainStarlarkApiProviderApi implements JavaToolchainStarlarkApiProviderApi {
 
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeProguardSpecProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeProguardSpecProvider.java
index afe551e..c7db396 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeProguardSpecProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeProguardSpecProvider.java
@@ -16,7 +16,7 @@
 import com.google.devtools.build.lib.collect.nestedset.Depset;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.java.ProguardSpecProviderApi;
-import com.google.devtools.build.lib.syntax.EvalException;
+import net.starlark.java.eval.EvalException;
 
 /** Fake implementation of {@link ProguardSpecProviderApi} */
 public class FakeProguardSpecProvider implements ProguardSpecProviderApi<FileApi> {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/proto/BUILD b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/proto/BUILD
index 470dc21..fff143f 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/proto/BUILD
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/proto/BUILD
@@ -15,10 +15,11 @@
     name = "proto",
     srcs = glob(["*.java"]),
     deps = [
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/collect/nestedset",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:guava",
         "//third_party:jsr305",
     ],
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/proto/FakeProtoInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/proto/FakeProtoInfo.java
index 6b6526a..0da6f16 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/proto/FakeProtoInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/proto/FakeProtoInfo.java
@@ -18,8 +18,8 @@
 import com.google.devtools.build.lib.collect.nestedset.Depset;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.ProtoInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
 
 /** Fake implementation of {@link ProtoInfoApi}. */
 public class FakeProtoInfo implements ProtoInfoApi<FileApi> {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/BUILD b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/BUILD
index c457e66..e0d840c 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/BUILD
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/BUILD
@@ -15,11 +15,12 @@
     name = "python",
     srcs = glob(["*.java"]),
     deps = [
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/collect/nestedset",
         "//src/main/java/com/google/devtools/build/lib/events",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python",
         "//src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
     ],
 )
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/FakePyInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/FakePyInfo.java
index 059da20..a7245d2 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/FakePyInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/FakePyInfo.java
@@ -17,9 +17,9 @@
 import com.google.devtools.build.lib.collect.nestedset.Depset;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.python.PyInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.StarlarkThread;
 
 /** Fake implementation of {@link PyInfoApi}. */
 public class FakePyInfo implements PyInfoApi<FileApi> {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/FakePyRuntimeInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/FakePyRuntimeInfo.java
index debab34..43b8446 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/FakePyRuntimeInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/FakePyRuntimeInfo.java
@@ -17,9 +17,9 @@
 import com.google.devtools.build.lib.collect.nestedset.Depset;
 import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
 import com.google.devtools.build.lib.starlarkbuildapi.python.PyRuntimeInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.StarlarkThread;
 
 /** Fake implementation of {@link PyRuntimeInfoApi}. */
 public class FakePyRuntimeInfo implements PyRuntimeInfoApi<FileApi> {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/FakePyStarlarkTransitions.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/FakePyStarlarkTransitions.java
index dedd9eb..313ec68 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/FakePyStarlarkTransitions.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/FakePyStarlarkTransitions.java
@@ -15,8 +15,8 @@
 package com.google.devtools.build.skydoc.fakebuildapi.python;
 
 import com.google.devtools.build.lib.starlarkbuildapi.python.PyStarlarkTransitionsApi;
-import com.google.devtools.build.lib.syntax.StarlarkValue;
 import com.google.devtools.build.skydoc.fakebuildapi.config.FakeConfigurationTransition;
+import net.starlark.java.eval.StarlarkValue;
 
 /** Fake implementation of {@link PyStarlarkTransitionsApi}. */
 public final class FakePyStarlarkTransitions implements PyStarlarkTransitionsApi {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository/BUILD b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository/BUILD
index 424e2f3..f0b9960 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository/BUILD
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository/BUILD
@@ -15,12 +15,13 @@
     name = "repository",
     srcs = glob(["*.java"]),
     deps = [
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/events",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository",
         "//src/main/java/com/google/devtools/build/skydoc/fakebuildapi",
         "//src/main/java/com/google/devtools/build/skydoc/rendering",
         "//src/main/java/com/google/devtools/build/skydoc/rendering/proto:stardoc_output_java_proto",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:guava",
         "//third_party:jsr305",
     ],
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository/FakeRepositoryModule.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository/FakeRepositoryModule.java
index ddef972..8f9edc3 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository/FakeRepositoryModule.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository/FakeRepositoryModule.java
@@ -17,13 +17,6 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.devtools.build.lib.starlarkbuildapi.repository.RepositoryModuleApi;
-import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
-import com.google.devtools.build.lib.syntax.StarlarkThread;
 import com.google.devtools.build.skydoc.fakebuildapi.FakeDescriptor;
 import com.google.devtools.build.skydoc.fakebuildapi.FakeStarlarkRuleFunctionsApi.AttributeNameComparator;
 import com.google.devtools.build.skydoc.rendering.RuleInfoWrapper;
@@ -32,6 +25,13 @@
 import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.RuleInfo;
 import java.util.List;
 import java.util.stream.Collectors;
+import net.starlark.java.eval.Dict;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Sequence;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.syntax.Location;
 
 /**
  * Fake implementation of {@link RepositoryModuleApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/BUILD b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/BUILD
index 828e07f..e3b9720 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/BUILD
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/BUILD
@@ -15,11 +15,12 @@
     name = "test",
     srcs = glob(["*.java"]),
     deps = [
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform",
         "//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/test",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//third_party:guava",
     ],
 )
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeAnalysisFailureInfoProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeAnalysisFailureInfoProvider.java
index 83870ad..60d6a8a 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeAnalysisFailureInfoProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeAnalysisFailureInfoProvider.java
@@ -15,7 +15,7 @@
 package com.google.devtools.build.skydoc.fakebuildapi.test;
 
 import com.google.devtools.build.lib.starlarkbuildapi.test.AnalysisFailureInfoApi.AnalysisFailureInfoProviderApi;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
 
 /**
  * Fake implementation of {@link AnalysisFailureInfoProviderApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeAnalysisTestResultInfoProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeAnalysisTestResultInfoProvider.java
index 2d97f43..b177efc 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeAnalysisTestResultInfoProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeAnalysisTestResultInfoProvider.java
@@ -16,7 +16,7 @@
 
 import com.google.devtools.build.lib.starlarkbuildapi.test.AnalysisTestResultInfoApi;
 import com.google.devtools.build.lib.starlarkbuildapi.test.AnalysisTestResultInfoApi.AnalysisTestResultInfoProviderApi;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
 
 /**
  * Fake implementation of {@link AnalysisTestResultInfoProviderApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeCoverageCommon.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeCoverageCommon.java
index 806c699..cd1ebcc 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeCoverageCommon.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeCoverageCommon.java
@@ -18,8 +18,8 @@
 import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
 import com.google.devtools.build.lib.starlarkbuildapi.test.CoverageCommonApi;
 import com.google.devtools.build.lib.starlarkbuildapi.test.InstrumentedFilesInfoApi;
-import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.Sequence;
+import net.starlark.java.eval.Printer;
+import net.starlark.java.eval.Sequence;
 
 /** Fake implementation of {@link CoverageCommonApi}. */
 public class FakeCoverageCommon
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeExecutionInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeExecutionInfo.java
index 55001ce..e424f1c 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeExecutionInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeExecutionInfo.java
@@ -16,8 +16,8 @@
 
 import com.google.common.collect.ImmutableMap;
 import com.google.devtools.build.lib.starlarkbuildapi.test.ExecutionInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
 
 /**
  * Fake implementation of {@link ExecutionInfoApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeInstrumentedFilesInfoProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeInstrumentedFilesInfoProvider.java
index 7502223..f58193a 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeInstrumentedFilesInfoProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeInstrumentedFilesInfoProvider.java
@@ -15,7 +15,7 @@
 package com.google.devtools.build.skydoc.fakebuildapi.test;
 
 import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.syntax.Printer;
+import net.starlark.java.eval.Printer;
 
 /** Fake implementation of {@link InstrumentedFilesInfoProviderApi}. */
 public class FakeInstrumentedFilesInfoProvider implements ProviderApi {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeTestingEnvironmentInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeTestingEnvironmentInfo.java
index 173f0c5..8b9e8a5 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeTestingEnvironmentInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeTestingEnvironmentInfo.java
@@ -16,9 +16,9 @@
 
 import com.google.common.collect.ImmutableMap;
 import com.google.devtools.build.lib.starlarkbuildapi.test.TestEnvironmentInfoApi;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.Printer;
 import java.util.Map;
+import net.starlark.java.eval.EvalException;
+import net.starlark.java.eval.Printer;
 
 /**
  * Fake implementation of {@link TestEnvironmentInfoApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeTestingModule.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeTestingModule.java
index 73be8b4..b14f48c 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeTestingModule.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeTestingModule.java
@@ -17,7 +17,7 @@
 import com.google.devtools.build.lib.starlarkbuildapi.test.ExecutionInfoApi;
 import com.google.devtools.build.lib.starlarkbuildapi.test.TestEnvironmentInfoApi;
 import com.google.devtools.build.lib.starlarkbuildapi.test.TestingModuleApi;
-import com.google.devtools.build.lib.syntax.Dict;
+import net.starlark.java.eval.Dict;
 
 /**
  * Fake implementation of {@link TestingModuleApi}.
diff --git a/src/main/java/com/google/devtools/build/skydoc/rendering/AspectInfoWrapper.java b/src/main/java/com/google/devtools/build/skydoc/rendering/AspectInfoWrapper.java
index 7a76347..d553e02 100644
--- a/src/main/java/com/google/devtools/build/skydoc/rendering/AspectInfoWrapper.java
+++ b/src/main/java/com/google/devtools/build/skydoc/rendering/AspectInfoWrapper.java
@@ -14,9 +14,9 @@
 
 package com.google.devtools.build.skydoc.rendering;
 
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
 import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.AspectInfo;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.syntax.Location;
 
 /** Stores information about a Starlark aspect definition. */
 public class AspectInfoWrapper {
diff --git a/src/main/java/com/google/devtools/build/skydoc/rendering/BUILD b/src/main/java/com/google/devtools/build/skydoc/rendering/BUILD
index 0da7b88..67793e9 100644
--- a/src/main/java/com/google/devtools/build/skydoc/rendering/BUILD
+++ b/src/main/java/com/google/devtools/build/skydoc/rendering/BUILD
@@ -16,9 +16,10 @@
     srcs = glob(["*.java"]),
     resources = [":template_files"],
     deps = [
-        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/events",
         "//src/main/java/com/google/devtools/build/skydoc/rendering/proto:stardoc_output_java_proto",
+        "//src/main/java/net/starlark/java/eval",
+        "//src/main/java/net/starlark/java/syntax",
         "//src/tools/starlark/java/com/google/devtools/starlark/common",
         "//third_party:apache_velocity",
         "//third_party:guava",
diff --git a/src/main/java/com/google/devtools/build/skydoc/rendering/DocstringParseException.java b/src/main/java/com/google/devtools/build/skydoc/rendering/DocstringParseException.java
index 2e78dc7..d198e9f 100644
--- a/src/main/java/com/google/devtools/build/skydoc/rendering/DocstringParseException.java
+++ b/src/main/java/com/google/devtools/build/skydoc/rendering/DocstringParseException.java
@@ -14,10 +14,10 @@
 
 package com.google.devtools.build.skydoc.rendering;
 
-import com.google.devtools.build.lib.syntax.Location;
 import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.StarlarkFunctionInfo;
 import com.google.devtools.starlark.common.DocstringUtils.DocstringParseError;
 import java.util.List;
+import net.starlark.java.syntax.Location;
 
 /**
  * An exception that may be thrown during construction of {@link StarlarkFunctionInfo} if the
diff --git a/src/main/java/com/google/devtools/build/skydoc/rendering/FunctionUtil.java b/src/main/java/com/google/devtools/build/skydoc/rendering/FunctionUtil.java
index 874a3f5..c24e13e 100644
--- a/src/main/java/com/google/devtools/build/skydoc/rendering/FunctionUtil.java
+++ b/src/main/java/com/google/devtools/build/skydoc/rendering/FunctionUtil.java
@@ -17,8 +17,6 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
-import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.syntax.StarlarkFunction;
 import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.FunctionParamInfo;
 import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.StarlarkFunctionInfo;
 import com.google.devtools.starlark.common.DocstringUtils;
@@ -28,6 +26,8 @@
 import java.util.List;
 import java.util.Map;
 import javax.annotation.Nullable;
+import net.starlark.java.eval.Starlark;
+import net.starlark.java.eval.StarlarkFunction;
 
 /** Contains a number of utility methods for functions and parameters. */
 public final class FunctionUtil {
diff --git a/src/main/java/com/google/devtools/build/skydoc/rendering/ProtoRenderer.java b/src/main/java/com/google/devtools/build/skydoc/rendering/ProtoRenderer.java
index 728cf187..4b0e675 100644
--- a/src/main/java/com/google/devtools/build/skydoc/rendering/ProtoRenderer.java
+++ b/src/main/java/com/google/devtools/build/skydoc/rendering/ProtoRenderer.java
@@ -14,7 +14,6 @@
 
 package com.google.devtools.build.skydoc.rendering;
 
-import com.google.devtools.build.lib.syntax.StarlarkFunction;
 import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.AspectInfo;
 import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.ModuleInfo;
 import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.ProviderInfo;
@@ -24,6 +23,7 @@
 import java.io.IOException;
 import java.util.Collection;
 import java.util.Map;
+import net.starlark.java.eval.StarlarkFunction;
 
 /** Produces skydoc output in proto form. */
 public class ProtoRenderer {
diff --git a/src/main/java/com/google/devtools/build/skydoc/rendering/ProviderInfoWrapper.java b/src/main/java/com/google/devtools/build/skydoc/rendering/ProviderInfoWrapper.java
index 26d0c48..8b569a8 100644
--- a/src/main/java/com/google/devtools/build/skydoc/rendering/ProviderInfoWrapper.java
+++ b/src/main/java/com/google/devtools/build/skydoc/rendering/ProviderInfoWrapper.java
@@ -14,10 +14,10 @@
 
 package com.google.devtools.build.skydoc.rendering;
 
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
 import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.ProviderFieldInfo;
 import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.ProviderInfo;
 import java.util.Collection;
+import net.starlark.java.eval.StarlarkCallable;
 
 /**
  * Stores information about a starlark provider definition, comprised of StarlarkCallable identifier
diff --git a/src/main/java/com/google/devtools/build/skydoc/rendering/RuleInfoWrapper.java b/src/main/java/com/google/devtools/build/skydoc/rendering/RuleInfoWrapper.java
index 94dcd03..45ad633 100644
--- a/src/main/java/com/google/devtools/build/skydoc/rendering/RuleInfoWrapper.java
+++ b/src/main/java/com/google/devtools/build/skydoc/rendering/RuleInfoWrapper.java
@@ -14,9 +14,9 @@
 
 package com.google.devtools.build.skydoc.rendering;
 
-import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.StarlarkCallable;
 import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.RuleInfo;
+import net.starlark.java.eval.StarlarkCallable;
+import net.starlark.java.syntax.Location;
 
 /** Stores information about a Starlark rule definition. */
 public class RuleInfoWrapper {