Refactor the Ninja variable value class, and correct some lexer/parser issues.

Ninja variable value now contains the list of functions for composing the expanded value.
For the text fragments, the function return the text literal, for variable reference, it uses the passed variable expander function to obtain the variable value.

Corrected lexing/parsing problems:
- In text fragment, do not treat = and | symbols as special.
- Do not allow the single $ symbol in text (always require it to be escaped).
- In a variable value, allow non-escaped : symbol, except for the case in build line (this is still not coded).
- Do not try to cut out the escape symbol; rather, un-escape text in parser. For convenience, introduce one more NinjaToken: escaped text.

All the lexing/parsing changes are done in correspondence with Ninja manual and source code.

Closes #10227.

PiperOrigin-RevId: 280404778
10 files changed
tree: 99ac7e088410913b7177c7a96cd2f49ea9d29e8c
  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