Refactor and document the BzlLoadFunction inlining code path

This is refactoring work toward adding a new kind of .bzl loading context, for Bazel-internal .bzl files.

Work toward #11437.

Changes:
- Add more documentation of the inlining behavior to save future readers some effort and make the invariants explicit. This also streamlines away some inline (haha) comments.
- The recursive entry point to the inlining code path (computeInlineWithState()) now accepts InliningState, to keep the signatures more uniform and avoid forcing other callers to break encapsulation. Responsibility for registering child nodes with the parent is moved into that function.
- Split cache-checking and child-registration logic (computeInlineWithState()) from code that runs only when we need to compute it from scratch (computeInlineForCacheMiss()).
- Gave InliningState a little more responsibility: It now has a couple factory methods and manages the visited stack. A small change, but it helps readability.
- Store a callback in InliningState instead of the whole cacheDataBuilder, to keep the knowledge minimal.

(In the future, StarlarkBuiltinsFunction will grow an inlining code path that will call into computeInlineWithState(). The recordingEnv will be threaded through StarlarkBuiltinsFunction but unwrapped just before the call back to computeInlineWithState(), mirroring the current recursive call. I would've liked to avoid forcing callers to do this unwrapping and instead localizing the knowledge to computeInlineWithState(), but that would mean having computeInline() manufacture a dummy recordingEnv, which seemed confusing to readers.)

RELNOTES: None
PiperOrigin-RevId: 313665628
1 file changed
tree: 559e0e9d3a4138e2f6b6392e9afbd117699b2912
  1. .bazelci/
  2. examples/
  3. scripts/
  4. site/
  5. src/
  6. third_party/
  7. tools/
  8. .bazelrc
  9. .gitattributes
  10. .gitignore
  11. AUTHORS
  12. BUILD
  13. CHANGELOG.md
  14. CODEOWNERS
  15. combine_distfiles.py
  16. combine_distfiles_to_tar.sh
  17. compile.sh
  18. CONTRIBUTING.md
  19. CONTRIBUTORS
  20. distdir.bzl
  21. ISSUE_TEMPLATE.md
  22. LICENSE
  23. README.md
  24. WORKSPACE
README.md

Bazel

{Fast, Correct} - Choose two

Build and test software of any size, quickly and reliably.

  • Speed up your builds and tests: Bazel rebuilds only what is necessary. With advanced local and distributed caching, optimized dependency analysis and parallel execution, you get fast and incremental builds.

  • One tool, multiple languages: Build and test Java, C++, Android, iOS, Go, and a wide variety of other language platforms. Bazel runs on Windows, macOS, and Linux.

  • Scalable: Bazel helps you scale your organization, codebase, and continuous integration solution. It handles codebases of any size, in multiple repositories or a huge monorepo.

  • Extensible to your needs: Easily add support for new languages and platforms with Bazel's familiar extension language. Share and re-use language rules written by the growing Bazel community.

Getting Started

Documentation

Contributing to Bazel

See CONTRIBUTING.md

Build status