12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- //===- CodeExpander.h - Expand variables in a string ----------------------===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- //
- /// \file Expand the variables in a string.
- //
- //===----------------------------------------------------------------------===//
- #ifndef LLVM_UTILS_TABLEGEN_CODEEXPANDER_H
- #define LLVM_UTILS_TABLEGEN_CODEEXPANDER_H
- #include "llvm/ADT/ArrayRef.h"
- #include "llvm/ADT/StringRef.h"
- namespace llvm {
- class CodeExpansions;
- class SMLoc;
- class raw_ostream;
- /// Emit the given code with all '${foo}' placeholders expanded to their
- /// replacements.
- ///
- /// It's an error to use an undefined expansion and expansion-like output that
- /// needs to be emitted verbatim can be escaped as '\${foo}'
- ///
- /// The emitted code can be given a custom indent to enable both indentation by
- /// an arbitrary amount of whitespace and emission of the code as a comment.
- class CodeExpander {
- StringRef Code;
- const CodeExpansions &Expansions;
- const ArrayRef<SMLoc> &Loc;
- bool ShowExpansions;
- StringRef Indent;
- public:
- CodeExpander(StringRef Code, const CodeExpansions &Expansions,
- const ArrayRef<SMLoc> &Loc, bool ShowExpansions,
- StringRef Indent = " ")
- : Code(Code), Expansions(Expansions), Loc(Loc),
- ShowExpansions(ShowExpansions), Indent(Indent) {}
- void emit(raw_ostream &OS) const;
- };
- inline raw_ostream &operator<<(raw_ostream &OS, const CodeExpander &Expander) {
- Expander.emit(OS);
- return OS;
- }
- } // end namespace llvm
- #endif // ifndef LLVM_UTILS_TABLEGEN_CODEEXPANDER_H
|