aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/syntax/SkylarkUtils.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/syntax/SkylarkUtils.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/SkylarkUtils.java23
1 files changed, 17 insertions, 6 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkUtils.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkUtils.java
index 875586f4f0..970543f60a 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkUtils.java
@@ -17,22 +17,33 @@ package com.google.devtools.build.lib.syntax;
/** This class contains Bazel-specific functions to extend or interoperate with Skylark. */
public final class SkylarkUtils {
- public static final String TOOLS_REPOSITORY = "$tools_repository";
+ /** Bazel-specific information that we store in the Environment. */
+ private static class BazelInfo {
+ String toolsRepository;
+ }
+
+ private static final String BAZEL_INFO_KEY = "$bazel";
+
+ private static BazelInfo getInfo(Environment env) {
+ Object info = env.lookup(BAZEL_INFO_KEY);
+ if (info != null) {
+ return (BazelInfo) info;
+ }
- /** Unsafe version of Environment#update */
- private static void updateEnv(Environment env, String key, Object value) {
+ BazelInfo result = new BazelInfo();
try {
- env.update(key, value);
+ env.update(BAZEL_INFO_KEY, result);
+ return result;
} catch (EvalException e) {
throw new AssertionError(e);
}
}
public static void setToolsRepository(Environment env, String toolsRepository) {
- updateEnv(env, TOOLS_REPOSITORY, toolsRepository);
+ getInfo(env).toolsRepository = toolsRepository;
}
public static String getToolsRepository(Environment env) {
- return (String) env.lookup(TOOLS_REPOSITORY);
+ return getInfo(env).toolsRepository;
}
}