aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/llvm12/utils/TableGen/GlobalISel/CodeExpander.h
blob: 63530e24329ac3b446a370f7107eeeaec07c48a4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
//===- 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" 
#include "llvm/Support/SMLoc.h" 
 
namespace llvm { 
class CodeExpansions; 
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