brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · bfcdc2a Raw
56 lines · c
1//===- CodeExpander.h - Expand variables in a string ------------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9/// \file Expand the variables in a string.10//11//===----------------------------------------------------------------------===//12 13#ifndef LLVM_UTILS_TABLEGEN_COMMON_GLOBALISEL_CODEEXPANDER_H14#define LLVM_UTILS_TABLEGEN_COMMON_GLOBALISEL_CODEEXPANDER_H15 16#include "llvm/ADT/ArrayRef.h"17#include "llvm/ADT/StringRef.h"18 19namespace llvm {20class CodeExpansions;21class SMLoc;22class raw_ostream;23 24/// Emit the given code with all '${foo}' placeholders expanded to their25/// replacements.26///27/// It's an error to use an undefined expansion and expansion-like output that28/// needs to be emitted verbatim can be escaped as '\${foo}'29///30/// The emitted code can be given a custom indent to enable both indentation by31/// an arbitrary amount of whitespace and emission of the code as a comment.32class CodeExpander {33  StringRef Code;34  const CodeExpansions &Expansions;35  ArrayRef<SMLoc> Loc;36  bool ShowExpansions;37  StringRef Indent;38 39public:40  CodeExpander(StringRef Code, const CodeExpansions &Expansions,41               const ArrayRef<SMLoc> &Loc, bool ShowExpansions,42               StringRef Indent = "    ")43      : Code(Code), Expansions(Expansions), Loc(Loc),44        ShowExpansions(ShowExpansions), Indent(Indent) {}45 46  void emit(raw_ostream &OS) const;47};48 49inline raw_ostream &operator<<(raw_ostream &OS, const CodeExpander &Expander) {50  Expander.emit(OS);51  return OS;52}53} // end namespace llvm54 55#endif // LLVM_UTILS_TABLEGEN_COMMON_GLOBALISEL_CODEEXPANDER_H56