123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- //===- LinePrinter.cpp ------------------------------------------*- C++ -*-===//
- //
- // The LLVM Compiler Infrastructure
- //
- // This file is distributed under the University of Illinois Open Source
- // License. See LICENSE.TXT for details.
- //
- //===----------------------------------------------------------------------===//
- #include "LinePrinter.h"
- #include "llvm-pdbdump.h"
- #include "llvm/Support/Regex.h"
- #include <algorithm>
- using namespace llvm;
- LinePrinter::LinePrinter(int Indent, llvm::raw_ostream &Stream)
- : OS(Stream), IndentSpaces(Indent), CurrentIndent(0) {
- SetFilters(TypeFilters, opts::ExcludeTypes.begin(), opts::ExcludeTypes.end());
- SetFilters(SymbolFilters, opts::ExcludeSymbols.begin(),
- opts::ExcludeSymbols.end());
- SetFilters(CompilandFilters, opts::ExcludeCompilands.begin(),
- opts::ExcludeCompilands.end());
- }
- void LinePrinter::Indent() { CurrentIndent += IndentSpaces; }
- void LinePrinter::Unindent() {
- CurrentIndent = std::max(0, CurrentIndent - IndentSpaces);
- }
- void LinePrinter::NewLine() {
- OS << "\n";
- OS.indent(CurrentIndent);
- }
- bool LinePrinter::IsTypeExcluded(llvm::StringRef TypeName) {
- if (TypeName.empty())
- return false;
- for (auto &Expr : TypeFilters) {
- if (Expr.match(TypeName))
- return true;
- }
- return false;
- }
- bool LinePrinter::IsSymbolExcluded(llvm::StringRef SymbolName) {
- if (SymbolName.empty())
- return false;
- for (auto &Expr : SymbolFilters) {
- if (Expr.match(SymbolName))
- return true;
- }
- return false;
- }
- bool LinePrinter::IsCompilandExcluded(llvm::StringRef CompilandName) {
- if (CompilandName.empty())
- return false;
- for (auto &Expr : CompilandFilters) {
- if (Expr.match(CompilandName))
- return true;
- }
- return false;
- }
- WithColor::WithColor(LinePrinter &P, PDB_ColorItem C) : OS(P.OS) {
- if (C == PDB_ColorItem::None)
- OS.resetColor();
- else {
- raw_ostream::Colors Color;
- bool Bold;
- translateColor(C, Color, Bold);
- OS.changeColor(Color, Bold);
- }
- }
- WithColor::~WithColor() { OS.resetColor(); }
- void WithColor::translateColor(PDB_ColorItem C, raw_ostream::Colors &Color,
- bool &Bold) const {
- switch (C) {
- case PDB_ColorItem::Address:
- Color = raw_ostream::YELLOW;
- Bold = true;
- return;
- case PDB_ColorItem::Keyword:
- Color = raw_ostream::MAGENTA;
- Bold = true;
- return;
- case PDB_ColorItem::Register:
- case PDB_ColorItem::Offset:
- Color = raw_ostream::YELLOW;
- Bold = false;
- return;
- case PDB_ColorItem::Type:
- Color = raw_ostream::CYAN;
- Bold = true;
- return;
- case PDB_ColorItem::Identifier:
- Color = raw_ostream::CYAN;
- Bold = false;
- return;
- case PDB_ColorItem::Path:
- Color = raw_ostream::CYAN;
- Bold = false;
- return;
- case PDB_ColorItem::SectionHeader:
- Color = raw_ostream::RED;
- Bold = true;
- return;
- case PDB_ColorItem::LiteralValue:
- Color = raw_ostream::GREEN;
- Bold = true;
- default:
- return;
- }
- }
|