Skip to content

Commit

Permalink
[7.2.0] Share Starlark env across module and repo files (#22159)
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

Commit
0b698fc

Co-authored-by: Fabian Meumertzheim <fabian@meumertzhe.im>
  • Loading branch information
bazel-io and fmeum committed Apr 29, 2024
1 parent 1ab19fe commit e99dc7d
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 @@ -373,7 +373,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 = new StarlarkThread(mu, starlarkSemantics);
context.storeInThread(thread);
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 @@ -150,9 +150,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 = new StarlarkThread(mu, starlarkSemantics);
thread.setPrintHandler(Event.makeDebugPrintHandler(handler));
Expand Down

0 comments on commit e99dc7d

Please sign in to comment.