xref: /aosp_15_r20/external/llvm/tools/llvm-pdbdump/LinePrinter.h (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker //===- LinePrinter.h ------------------------------------------ *- C++ --*-===//
2*9880d681SAndroid Build Coastguard Worker //
3*9880d681SAndroid Build Coastguard Worker //                     The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker //
5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker //
8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker 
10*9880d681SAndroid Build Coastguard Worker #ifndef LLVM_TOOLS_LLVMPDBDUMP_LINEPRINTER_H
11*9880d681SAndroid Build Coastguard Worker #define LLVM_TOOLS_LLVMPDBDUMP_LINEPRINTER_H
12*9880d681SAndroid Build Coastguard Worker 
13*9880d681SAndroid Build Coastguard Worker #include "llvm/ADT/StringRef.h"
14*9880d681SAndroid Build Coastguard Worker #include "llvm/ADT/Twine.h"
15*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/raw_ostream.h"
16*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/Regex.h"
17*9880d681SAndroid Build Coastguard Worker 
18*9880d681SAndroid Build Coastguard Worker #include <list>
19*9880d681SAndroid Build Coastguard Worker 
20*9880d681SAndroid Build Coastguard Worker namespace llvm {
21*9880d681SAndroid Build Coastguard Worker namespace pdb {
22*9880d681SAndroid Build Coastguard Worker 
23*9880d681SAndroid Build Coastguard Worker class LinePrinter {
24*9880d681SAndroid Build Coastguard Worker   friend class WithColor;
25*9880d681SAndroid Build Coastguard Worker 
26*9880d681SAndroid Build Coastguard Worker public:
27*9880d681SAndroid Build Coastguard Worker   LinePrinter(int Indent, raw_ostream &Stream);
28*9880d681SAndroid Build Coastguard Worker 
29*9880d681SAndroid Build Coastguard Worker   void Indent();
30*9880d681SAndroid Build Coastguard Worker   void Unindent();
31*9880d681SAndroid Build Coastguard Worker   void NewLine();
32*9880d681SAndroid Build Coastguard Worker 
getStream()33*9880d681SAndroid Build Coastguard Worker   raw_ostream &getStream() { return OS; }
getIndentLevel()34*9880d681SAndroid Build Coastguard Worker   int getIndentLevel() const { return CurrentIndent; }
35*9880d681SAndroid Build Coastguard Worker 
36*9880d681SAndroid Build Coastguard Worker   bool IsTypeExcluded(llvm::StringRef TypeName);
37*9880d681SAndroid Build Coastguard Worker   bool IsSymbolExcluded(llvm::StringRef SymbolName);
38*9880d681SAndroid Build Coastguard Worker   bool IsCompilandExcluded(llvm::StringRef CompilandName);
39*9880d681SAndroid Build Coastguard Worker 
40*9880d681SAndroid Build Coastguard Worker private:
41*9880d681SAndroid Build Coastguard Worker   template <typename Iter>
SetFilters(std::list<Regex> & List,Iter Begin,Iter End)42*9880d681SAndroid Build Coastguard Worker   void SetFilters(std::list<Regex> &List, Iter Begin, Iter End) {
43*9880d681SAndroid Build Coastguard Worker     List.clear();
44*9880d681SAndroid Build Coastguard Worker     for (; Begin != End; ++Begin)
45*9880d681SAndroid Build Coastguard Worker       List.emplace_back(StringRef(*Begin));
46*9880d681SAndroid Build Coastguard Worker   }
47*9880d681SAndroid Build Coastguard Worker 
48*9880d681SAndroid Build Coastguard Worker   raw_ostream &OS;
49*9880d681SAndroid Build Coastguard Worker   int IndentSpaces;
50*9880d681SAndroid Build Coastguard Worker   int CurrentIndent;
51*9880d681SAndroid Build Coastguard Worker 
52*9880d681SAndroid Build Coastguard Worker   std::list<Regex> ExcludeCompilandFilters;
53*9880d681SAndroid Build Coastguard Worker   std::list<Regex> ExcludeTypeFilters;
54*9880d681SAndroid Build Coastguard Worker   std::list<Regex> ExcludeSymbolFilters;
55*9880d681SAndroid Build Coastguard Worker 
56*9880d681SAndroid Build Coastguard Worker   std::list<Regex> IncludeCompilandFilters;
57*9880d681SAndroid Build Coastguard Worker   std::list<Regex> IncludeTypeFilters;
58*9880d681SAndroid Build Coastguard Worker   std::list<Regex> IncludeSymbolFilters;
59*9880d681SAndroid Build Coastguard Worker };
60*9880d681SAndroid Build Coastguard Worker 
61*9880d681SAndroid Build Coastguard Worker template <class T>
62*9880d681SAndroid Build Coastguard Worker inline raw_ostream &operator<<(LinePrinter &Printer, const T &Item) {
63*9880d681SAndroid Build Coastguard Worker   Printer.getStream() << Item;
64*9880d681SAndroid Build Coastguard Worker   return Printer.getStream();
65*9880d681SAndroid Build Coastguard Worker }
66*9880d681SAndroid Build Coastguard Worker 
67*9880d681SAndroid Build Coastguard Worker enum class PDB_ColorItem {
68*9880d681SAndroid Build Coastguard Worker   None,
69*9880d681SAndroid Build Coastguard Worker   Address,
70*9880d681SAndroid Build Coastguard Worker   Type,
71*9880d681SAndroid Build Coastguard Worker   Keyword,
72*9880d681SAndroid Build Coastguard Worker   Offset,
73*9880d681SAndroid Build Coastguard Worker   Identifier,
74*9880d681SAndroid Build Coastguard Worker   Path,
75*9880d681SAndroid Build Coastguard Worker   SectionHeader,
76*9880d681SAndroid Build Coastguard Worker   LiteralValue,
77*9880d681SAndroid Build Coastguard Worker   Register,
78*9880d681SAndroid Build Coastguard Worker };
79*9880d681SAndroid Build Coastguard Worker 
80*9880d681SAndroid Build Coastguard Worker class WithColor {
81*9880d681SAndroid Build Coastguard Worker public:
82*9880d681SAndroid Build Coastguard Worker   WithColor(LinePrinter &P, PDB_ColorItem C);
83*9880d681SAndroid Build Coastguard Worker   ~WithColor();
84*9880d681SAndroid Build Coastguard Worker 
get()85*9880d681SAndroid Build Coastguard Worker   raw_ostream &get() { return OS; }
86*9880d681SAndroid Build Coastguard Worker 
87*9880d681SAndroid Build Coastguard Worker private:
88*9880d681SAndroid Build Coastguard Worker   void applyColor(PDB_ColorItem C);
89*9880d681SAndroid Build Coastguard Worker   raw_ostream &OS;
90*9880d681SAndroid Build Coastguard Worker };
91*9880d681SAndroid Build Coastguard Worker }
92*9880d681SAndroid Build Coastguard Worker }
93*9880d681SAndroid Build Coastguard Worker 
94*9880d681SAndroid Build Coastguard Worker #endif
95