Skip to content

Commit

Permalink
Share Starlark env across module and repo files
Browse files Browse the repository at this point in the history
This avoids recreating the (immutable) Starlark environment for each file via reflection.

Closes #21951.

PiperOrigin-RevId: 626077632
Change-Id: I55e205680abf37423091842a04324ded948abfad
  • Loading branch information
fmeum authored and Copybara-Service committed Apr 18, 2024
1 parent 2646f7a commit 0b698fc
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -383,7 +383,7 @@ private static ModuleThreadContext execModuleFile(
.check(starlarkFile);
net.starlark.java.eval.Module predeclaredEnv =
net.starlark.java.eval.Module.withPredeclared(
starlarkSemantics, starlarkEnv.getStarlarkGlobals().getModuleToplevels());
starlarkSemantics, starlarkEnv.getModuleBazelEnv());
Program program = Program.compileFile(starlarkFile, predeclaredEnv);
StarlarkThread thread =
StarlarkThread.create(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,12 @@ public final class BazelStarlarkEnvironment {
/** The top-level predeclared symbols for a bzl module in the {@code @_builtins} pseudo-repo. */
private final ImmutableMap<String, Object> builtinsBzlEnv;

/** The top-level predeclared symbols for a MODULE.bazel file. */
private final ImmutableMap<String, Object> moduleBazelEnv;

/** The top-level predeclared symbols for a REPO.bazel file. */
private final ImmutableMap<String, Object> repoBazelEnv;

/**
* Constructs a new {@code BazelStarlarkEnvironment} that will have complete knowledge of the
* proper Starlark symbols available in each context, with and without injection.
Expand Down Expand Up @@ -141,6 +147,8 @@ public BazelStarlarkEnvironment(
uninjectedBuildBzlEnv);
this.uninjectedBuildEnv =
createUninjectedBuildEnv(starlarkGlobals, ruleFunctions, registeredBuildFileToplevels);
this.moduleBazelEnv = starlarkGlobals.getModuleToplevels();
this.repoBazelEnv = starlarkGlobals.getRepoToplevels();
}

/**
Expand Down Expand Up @@ -206,6 +214,16 @@ public ImmutableMap<String, Object> getBuiltinsBzlEnv() {
return builtinsBzlEnv;
}

/** Returns the environment for MODULE.bazel files. */
public ImmutableMap<String, Object> getModuleBazelEnv() {
return moduleBazelEnv;
}

/** Returns the environment for REPO.bazel files. */
public ImmutableMap<String, Object> getRepoBazelEnv() {
return repoBazelEnv;
}

private static ImmutableMap<String, Object> createBzlToplevelsWithoutNative(
StarlarkGlobals starlarkGlobals, Map<String, Object> registeredBzlToplevels) {
ImmutableMap.Builder<String, Object> env = new ImmutableMap.Builder<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,9 +151,7 @@ private PackageArgs evalRepoFile(
try (Mutability mu = Mutability.create("repo file", repoName)) {
new DotBazelFileSyntaxChecker("REPO.bazel files", /* canLoadBzl= */ false)
.check(starlarkFile);
Module predeclared =
Module.withPredeclared(
starlarkSemantics, starlarkEnv.getStarlarkGlobals().getRepoToplevels());
Module predeclared = Module.withPredeclared(starlarkSemantics, starlarkEnv.getRepoBazelEnv());
Program program = Program.compileFile(starlarkFile, predeclared);
StarlarkThread thread =
StarlarkThread.create(
Expand Down

0 comments on commit 0b698fc

Please sign in to comment.