diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/SkylarkModules.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/SkylarkModules.java | 63 |
1 files changed, 31 insertions, 32 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkModules.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkModules.java index c52c58c88c..30544208c2 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkModules.java +++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkModules.java @@ -19,11 +19,8 @@ import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.events.EventHandler; import com.google.devtools.build.lib.packages.SkylarkNativeModule; import com.google.devtools.build.lib.syntax.Environment; -import com.google.devtools.build.lib.syntax.EvaluationContext; -import com.google.devtools.build.lib.syntax.MethodLibrary; +import com.google.devtools.build.lib.syntax.Mutability; import com.google.devtools.build.lib.syntax.Runtime; -import com.google.devtools.build.lib.syntax.SkylarkEnvironment; -import com.google.devtools.build.lib.syntax.ValidationEnvironment; /** * The basis for a Skylark Environment with all build-related modules registered. @@ -44,41 +41,43 @@ public final class SkylarkModules { SkylarkRuleClassFunctions.class, SkylarkRuleImplementationFunctions.class); - /** - * Returns a new SkylarkEnvironment with the elements of the Skylark modules. - */ - public static SkylarkEnvironment getNewEnvironment( - EventHandler eventHandler, String astFileContentHashCode) { - SkylarkEnvironment env = new SkylarkEnvironment(eventHandler, astFileContentHashCode); - setupEnvironment(env); - return env; - } - - @VisibleForTesting - public static SkylarkEnvironment getNewEnvironment(EventHandler eventHandler) { - return getNewEnvironment(eventHandler, null); - } + /** Global bindings for all Skylark modules */ + public static final Environment.Frame GLOBALS = createGlobals(); - private static void setupEnvironment(Environment env) { - MethodLibrary.setupMethodEnvironment(env); - for (Class<?> moduleClass : MODULES) { - Runtime.registerModuleGlobals(env, moduleClass); + private static Environment.Frame createGlobals() { + try (Mutability mutability = Mutability.create("SkylarkModules")) { + Environment env = Environment.builder(mutability) + .setSkylark() + .setGlobals(Environment.SKYLARK) + .build(); + for (Class<?> moduleClass : MODULES) { + Runtime.registerModuleGlobals(env, moduleClass); + } + return env.getGlobals(); } - // Even though PACKAGE_NAME has no value _now_ and will be bound later, - // it needs to be visible for the ValidationEnvironment to be happy. - env.update(Runtime.PKG_NAME, Runtime.NONE); } + /** - * Returns a new ValidationEnvironment with the elements of the Skylark modules. + * Create an {@link Environment} in which to load a Skylark file. + * @param eventHandler an EventHandler for warnings, errors, etc. + * @param astFileContentHashCode a hash code identifying the file being evaluated + * @param mutability the Mutability for the current evaluation context + * @return a new Environment with the elements of the Skylark modules. */ - public static ValidationEnvironment getValidationEnvironment() { - // TODO(bazel-team): refactor constructors so we don't have those null-s - return new ValidationEnvironment(getNewEnvironment(null)); + public static Environment getNewEnvironment( + EventHandler eventHandler, String astFileContentHashCode, Mutability mutability) { + return Environment.builder(mutability) + .setSkylark() + .setGlobals(GLOBALS) + .setEventHandler(eventHandler) + .setFileContentHashCode(astFileContentHashCode) + .build(); } - public static EvaluationContext newEvaluationContext(EventHandler eventHandler) { - return EvaluationContext.newSkylarkContext( - getNewEnvironment(eventHandler), getValidationEnvironment()); + @VisibleForTesting + public static Environment getNewEnvironment( + EventHandler eventHandler, Mutability mutability) { + return getNewEnvironment(eventHandler, null, mutability); } } |