[llvm] r230746 - [llvm-pdbdump] Colorize output.
Zachary Turner
zturner at google.com
Fri Feb 27 01:15:59 PST 2015
Author: zturner
Date: Fri Feb 27 03:15:59 2015
New Revision: 230746
URL: http://llvm.org/viewvc/llvm-project?rev=230746&view=rev
Log:
[llvm-pdbdump] Colorize output.
Added:
llvm/trunk/tools/llvm-pdbdump/LinePrinter.cpp
llvm/trunk/tools/llvm-pdbdump/LinePrinter.h
Modified:
llvm/trunk/tools/llvm-pdbdump/BuiltinDumper.cpp
llvm/trunk/tools/llvm-pdbdump/BuiltinDumper.h
llvm/trunk/tools/llvm-pdbdump/CMakeLists.txt
llvm/trunk/tools/llvm-pdbdump/ClassDefinitionDumper.cpp
llvm/trunk/tools/llvm-pdbdump/ClassDefinitionDumper.h
llvm/trunk/tools/llvm-pdbdump/CompilandDumper.cpp
llvm/trunk/tools/llvm-pdbdump/CompilandDumper.h
llvm/trunk/tools/llvm-pdbdump/FunctionDumper.cpp
llvm/trunk/tools/llvm-pdbdump/FunctionDumper.h
llvm/trunk/tools/llvm-pdbdump/TypeDumper.cpp
llvm/trunk/tools/llvm-pdbdump/TypeDumper.h
llvm/trunk/tools/llvm-pdbdump/TypedefDumper.cpp
llvm/trunk/tools/llvm-pdbdump/TypedefDumper.h
llvm/trunk/tools/llvm-pdbdump/VariableDumper.cpp
llvm/trunk/tools/llvm-pdbdump/VariableDumper.h
llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp
Modified: llvm/trunk/tools/llvm-pdbdump/BuiltinDumper.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/BuiltinDumper.cpp?rev=230746&r1=230745&r2=230746&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/BuiltinDumper.cpp (original)
+++ llvm/trunk/tools/llvm-pdbdump/BuiltinDumper.cpp Fri Feb 27 03:15:59 2015
@@ -8,73 +8,81 @@
//===----------------------------------------------------------------------===//
#include "BuiltinDumper.h"
+#include "LinePrinter.h"
#include "llvm-pdbdump.h"
#include "llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h"
using namespace llvm;
-BuiltinDumper::BuiltinDumper() : PDBSymDumper(false) {}
+BuiltinDumper::BuiltinDumper(LinePrinter &P)
+ : PDBSymDumper(false), Printer(P) {}
void BuiltinDumper::start(const PDBSymbolTypeBuiltin &Symbol,
llvm::raw_ostream &OS) {
PDB_BuiltinType Type = Symbol.getBuiltinType();
switch (Type) {
case PDB_BuiltinType::Float:
- OS << ((Symbol.getLength() == 4) ? "float" : "double");
+ if (Symbol.getLength() == 4)
+ WithColor(Printer, PDB_ColorItem::Type).get() << "float";
+ else
+ WithColor(Printer, PDB_ColorItem::Type).get() << "double";
break;
case PDB_BuiltinType::UInt:
- OS << "unsigned";
+ WithColor(Printer, PDB_ColorItem::Type).get() << "unsigned";
if (Symbol.getLength() == 8)
- OS << " __int64";
+ WithColor(Printer, PDB_ColorItem::Type).get() << " __int64";
break;
case PDB_BuiltinType::Int:
- OS << ((Symbol.getLength() == 4) ? "int" : "__int64");
+ if (Symbol.getLength() == 4)
+ WithColor(Printer, PDB_ColorItem::Type).get() << "int";
+ else
+ WithColor(Printer, PDB_ColorItem::Type).get() << "__int64";
break;
case PDB_BuiltinType::Char:
- OS << "char";
+ WithColor(Printer, PDB_ColorItem::Type).get() << "char";
break;
case PDB_BuiltinType::WCharT:
- OS << "wchar_t";
+ WithColor(Printer, PDB_ColorItem::Type).get() << "wchar_t";
break;
case PDB_BuiltinType::Void:
- OS << "void";
+ WithColor(Printer, PDB_ColorItem::Type).get() << "void";
break;
case PDB_BuiltinType::Long:
- OS << "long";
+ WithColor(Printer, PDB_ColorItem::Type).get() << "long";
break;
case PDB_BuiltinType::ULong:
- OS << "unsigned long";
+ WithColor(Printer, PDB_ColorItem::Type).get() << "unsigned long";
break;
case PDB_BuiltinType::Bool:
- OS << "bool";
+ WithColor(Printer, PDB_ColorItem::Type).get() << "bool";
break;
case PDB_BuiltinType::Currency:
- OS << "CURRENCY";
+ WithColor(Printer, PDB_ColorItem::Type).get() << "CURRENCY";
break;
case PDB_BuiltinType::Date:
- OS << "DATE";
+ WithColor(Printer, PDB_ColorItem::Type).get() << "DATE";
break;
case PDB_BuiltinType::Variant:
- OS << "VARIANT";
+ WithColor(Printer, PDB_ColorItem::Type).get() << "VARIANT";
break;
case PDB_BuiltinType::Complex:
- OS << "complex";
+ WithColor(Printer, PDB_ColorItem::Type).get() << "complex";
break;
case PDB_BuiltinType::Bitfield:
- OS << "bitfield";
+ WithColor(Printer, PDB_ColorItem::Type).get() << "bitfield";
break;
case PDB_BuiltinType::BSTR:
- OS << "BSTR";
+ WithColor(Printer, PDB_ColorItem::Type).get() << "BSTR";
break;
case PDB_BuiltinType::HResult:
- OS << "HRESULT";
+ WithColor(Printer, PDB_ColorItem::Type).get() << "HRESULT";
break;
case PDB_BuiltinType::BCD:
- OS << "HRESULT";
+ WithColor(Printer, PDB_ColorItem::Type).get() << "HRESULT";
break;
default:
- OS << "(unknown builtin type)";
+ WithColor(Printer, PDB_ColorItem::Type).get() << "(unknown)";
break;
}
}
Modified: llvm/trunk/tools/llvm-pdbdump/BuiltinDumper.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/BuiltinDumper.h?rev=230746&r1=230745&r2=230746&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/BuiltinDumper.h (original)
+++ llvm/trunk/tools/llvm-pdbdump/BuiltinDumper.h Fri Feb 27 03:15:59 2015
@@ -14,11 +14,16 @@
namespace llvm {
+class LinePrinter;
+
class BuiltinDumper : public PDBSymDumper {
public:
- BuiltinDumper();
+ BuiltinDumper(LinePrinter &P);
void start(const PDBSymbolTypeBuiltin &Symbol, llvm::raw_ostream &OS);
+
+private:
+ LinePrinter &Printer;
};
}
Modified: llvm/trunk/tools/llvm-pdbdump/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/CMakeLists.txt?rev=230746&r1=230745&r2=230746&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/CMakeLists.txt (original)
+++ llvm/trunk/tools/llvm-pdbdump/CMakeLists.txt Fri Feb 27 03:15:59 2015
@@ -9,6 +9,7 @@ add_llvm_tool(llvm-pdbdump
ClassDefinitionDumper.cpp
CompilandDumper.cpp
FunctionDumper.cpp
+ LinePrinter.cpp
TypeDumper.cpp
TypedefDumper.cpp
VariableDumper.cpp
Modified: llvm/trunk/tools/llvm-pdbdump/ClassDefinitionDumper.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/ClassDefinitionDumper.cpp?rev=230746&r1=230745&r2=230746&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/ClassDefinitionDumper.cpp (original)
+++ llvm/trunk/tools/llvm-pdbdump/ClassDefinitionDumper.cpp Fri Feb 27 03:15:59 2015
@@ -9,6 +9,7 @@
#include "ClassDefinitionDumper.h"
#include "FunctionDumper.h"
+#include "LinePrinter.h"
#include "llvm-pdbdump.h"
#include "TypedefDumper.h"
#include "VariableDumper.h"
@@ -27,11 +28,15 @@
using namespace llvm;
-ClassDefinitionDumper::ClassDefinitionDumper() : PDBSymDumper(true) {}
+ClassDefinitionDumper::ClassDefinitionDumper(LinePrinter &P)
+ : PDBSymDumper(true), Printer(P) {}
void ClassDefinitionDumper::start(const PDBSymbolTypeUDT &Class,
raw_ostream &OS, int Indent) {
- OS << "class " << Class.getName() << " {";
+ std::string Name = Class.getName();
+ WithColor(Printer, PDB_ColorItem::Keyword).get() << "class ";
+ WithColor(Printer, PDB_ColorItem::Type).get() << Class.getName();
+ Printer << " {";
auto Children = Class.findAllChildren();
if (Children->getChildCount() == 0) {
OS << "}";
@@ -81,9 +86,8 @@ void ClassDefinitionDumper::start(const
Groups[(int)PDB_MemberAccess::Protected], OS, Indent);
Count += dumpAccessGroup(PDB_MemberAccess::Private,
Groups[(int)PDB_MemberAccess::Private], OS, Indent);
-
if (Count > 0)
- OS << newline(Indent);
+ Printer.NewLine();
OS << "}";
}
@@ -94,12 +98,20 @@ int ClassDefinitionDumper::dumpAccessGro
return 0;
int Count = 0;
- if (Access == PDB_MemberAccess::Private)
- OS << newline(Indent) << "private:";
- else if (Access == PDB_MemberAccess::Protected)
- OS << newline(Indent) << "protected:";
- else if (Access == PDB_MemberAccess::Public)
- OS << newline(Indent) << "public:";
+ if (Access == PDB_MemberAccess::Private) {
+ Printer.NewLine();
+ WithColor(Printer, PDB_ColorItem::Keyword).get() << "private";
+ Printer << ":";
+ } else if (Access == PDB_MemberAccess::Protected) {
+ Printer.NewLine();
+ WithColor(Printer, PDB_ColorItem::Keyword).get() << "protected";
+ Printer << ":";
+ } else if (Access == PDB_MemberAccess::Public) {
+ Printer.NewLine();
+ WithColor(Printer, PDB_ColorItem::Keyword).get() << "public";
+ Printer << ":";
+ }
+ Printer.Indent();
for (auto iter = Group.Functions.begin(), end = Group.Functions.end();
iter != end; ++iter) {
++Count;
@@ -115,6 +127,7 @@ int ClassDefinitionDumper::dumpAccessGro
++Count;
(*iter)->dump(OS, Indent + 2, *this);
}
+ Printer.Unindent();
return Count;
}
@@ -123,13 +136,14 @@ void ClassDefinitionDumper::dump(const P
void ClassDefinitionDumper::dump(const PDBSymbolData &Symbol, raw_ostream &OS,
int Indent) {
- VariableDumper Dumper;
+ VariableDumper Dumper(Printer);
Dumper.start(Symbol, OS, Indent);
}
void ClassDefinitionDumper::dump(const PDBSymbolFunc &Symbol, raw_ostream &OS,
int Indent) {
- FunctionDumper Dumper;
+ Printer.NewLine();
+ FunctionDumper Dumper(Printer);
Dumper.start(Symbol, FunctionDumper::PointerType::None, OS, Indent);
}
@@ -138,13 +152,15 @@ void ClassDefinitionDumper::dump(const P
void ClassDefinitionDumper::dump(const PDBSymbolTypeEnum &Symbol,
raw_ostream &OS, int Indent) {
- OS << newline(Indent) << "enum " << Symbol.getName();
+ Printer.NewLine();
+ WithColor(Printer, PDB_ColorItem::Keyword).get() << "enum ";
+ WithColor(Printer, PDB_ColorItem::Type).get() << Symbol.getName();
}
void ClassDefinitionDumper::dump(const PDBSymbolTypeTypedef &Symbol,
raw_ostream &OS, int Indent) {
- OS << newline(Indent);
- TypedefDumper Dumper;
+ Printer.NewLine();
+ TypedefDumper Dumper(Printer);
Dumper.start(Symbol, OS, Indent);
}
Modified: llvm/trunk/tools/llvm-pdbdump/ClassDefinitionDumper.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/ClassDefinitionDumper.h?rev=230746&r1=230745&r2=230746&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/ClassDefinitionDumper.h (original)
+++ llvm/trunk/tools/llvm-pdbdump/ClassDefinitionDumper.h Fri Feb 27 03:15:59 2015
@@ -20,9 +20,11 @@
namespace llvm {
+class LinePrinter;
+
class ClassDefinitionDumper : public PDBSymDumper {
public:
- ClassDefinitionDumper();
+ ClassDefinitionDumper(LinePrinter &P);
void start(const PDBSymbolTypeUDT &Exe, raw_ostream &OS, int Indent);
@@ -40,6 +42,8 @@ public:
int Indent) override;
private:
+ LinePrinter &Printer;
+
struct SymbolGroup {
SymbolGroup() {}
SymbolGroup(SymbolGroup &&Other) {
Modified: llvm/trunk/tools/llvm-pdbdump/CompilandDumper.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/CompilandDumper.cpp?rev=230746&r1=230745&r2=230746&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/CompilandDumper.cpp (original)
+++ llvm/trunk/tools/llvm-pdbdump/CompilandDumper.cpp Fri Feb 27 03:15:59 2015
@@ -8,6 +8,7 @@
//===----------------------------------------------------------------------===//
#include "CompilandDumper.h"
+#include "LinePrinter.h"
#include "llvm-pdbdump.h"
#include "llvm/DebugInfo/PDB/IPDBEnumChildren.h"
@@ -34,7 +35,8 @@
using namespace llvm;
-CompilandDumper::CompilandDumper() : PDBSymDumper(true) {}
+CompilandDumper::CompilandDumper(LinePrinter &P)
+ : Printer(P), PDBSymDumper(true) {}
void CompilandDumper::dump(const PDBSymbolCompilandDetails &Symbol,
raw_ostream &OS, int Indent) {}
@@ -45,32 +47,39 @@ void CompilandDumper::dump(const PDBSymb
void CompilandDumper::start(const PDBSymbolCompiland &Symbol, raw_ostream &OS,
int Indent, bool Children) {
std::string FullName = Symbol.getName();
- OS << newline(Indent) << FullName;
+ Printer.NewLine();
+ WithColor(Printer, PDB_ColorItem::Path).get() << FullName;
if (!Children)
return;
auto ChildrenEnum = Symbol.findAllChildren();
+ Printer.Indent();
while (auto Child = ChildrenEnum->getNext())
Child->dump(OS, Indent + 2, *this);
+ Printer.Unindent();
}
void CompilandDumper::dump(const PDBSymbolData &Symbol, raw_ostream &OS,
int Indent) {
- OS << newline(Indent);
+ Printer.NewLine();
+
switch (auto LocType = Symbol.getLocationType()) {
case PDB_LocType::Static:
- OS << "data: [";
- OS << format_hex(Symbol.getRelativeVirtualAddress(), 10);
- OS << "]";
+ Printer << "data: ";
+ WithColor(Printer, PDB_ColorItem::Address).get()
+ << "[" << format_hex(Symbol.getRelativeVirtualAddress(), 10) << "]";
break;
case PDB_LocType::Constant:
- OS << "constant: [" << Symbol.getValue() << "]";
+ Printer << "constant: ";
+ WithColor(Printer, PDB_ColorItem::LiteralValue).get()
+ << "[" << Symbol.getValue() << "]";
break;
default:
- OS << "data(unexpected type=" << LocType << ")";
+ Printer << "data(unexpected type=" << LocType << ")";
}
- OS << " " << Symbol.getName();
+ Printer << " ";
+ WithColor(Printer, PDB_ColorItem::Identifier).get() << Symbol.getName();
}
void CompilandDumper::dump(const PDBSymbolFunc &Symbol, raw_ostream &OS,
@@ -78,33 +87,40 @@ void CompilandDumper::dump(const PDBSymb
if (Symbol.getLength() == 0)
return;
- FunctionDumper Dumper;
+ Printer.NewLine();
+ FunctionDumper Dumper(Printer);
Dumper.start(Symbol, FunctionDumper::PointerType::None, OS, Indent);
}
void CompilandDumper::dump(const PDBSymbolLabel &Symbol, raw_ostream &OS,
int Indent) {
- OS << newline(Indent);
- OS << "label [" << format_hex(Symbol.getRelativeVirtualAddress(), 10) << "] "
- << Symbol.getName();
+ Printer.NewLine();
+ Printer << "label ";
+ WithColor(Printer, PDB_ColorItem::Address).get()
+ << "[" << format_hex(Symbol.getRelativeVirtualAddress(), 10) << "] ";
+ WithColor(Printer, PDB_ColorItem::Identifier).get() << Symbol.getName();
}
void CompilandDumper::dump(const PDBSymbolThunk &Symbol, raw_ostream &OS,
int Indent) {
- OS << newline(Indent) << "thunk ";
+ Printer.NewLine();
+ Printer << "thunk ";
PDB_ThunkOrdinal Ordinal = Symbol.getThunkOrdinal();
uint32_t RVA = Symbol.getRelativeVirtualAddress();
if (Ordinal == PDB_ThunkOrdinal::TrampIncremental) {
- OS << format_hex(RVA, 10);
- OS << " -> " << format_hex(Symbol.getTargetRelativeVirtualAddress(), 10);
+ uint32_t Target = Symbol.getTargetRelativeVirtualAddress();
+ WithColor(Printer, PDB_ColorItem::Address).get() << format_hex(RVA, 10);
+ Printer << " -> ";
+ WithColor(Printer, PDB_ColorItem::Address).get() << format_hex(Target, 10);
} else {
- OS << "[" << format_hex(RVA, 10);
- OS << " - " << format_hex(RVA + Symbol.getLength(), 10) << "]";
+ WithColor(Printer, PDB_ColorItem::Address).get()
+ << "[" << format_hex(RVA, 10) << " - "
+ << format_hex(RVA + Symbol.getLength(), 10) << "]";
}
- OS << " (" << Ordinal << ") ";
+ Printer << " (" << Ordinal << ") ";
std::string Name = Symbol.getName();
if (!Name.empty())
- OS << Name;
+ WithColor(Printer, PDB_ColorItem::Identifier).get() << Name;
}
void CompilandDumper::dump(const PDBSymbolTypeTypedef &Symbol, raw_ostream &OS,
@@ -112,6 +128,6 @@ void CompilandDumper::dump(const PDBSymb
void CompilandDumper::dump(const PDBSymbolUnknown &Symbol, raw_ostream &OS,
int Indent) {
- OS << newline(Indent);
- OS << "unknown (" << Symbol.getSymTag() << ")";
+ Printer.NewLine();
+ Printer << "unknown (" << Symbol.getSymTag() << ")";
}
Modified: llvm/trunk/tools/llvm-pdbdump/CompilandDumper.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/CompilandDumper.h?rev=230746&r1=230745&r2=230746&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/CompilandDumper.h (original)
+++ llvm/trunk/tools/llvm-pdbdump/CompilandDumper.h Fri Feb 27 03:15:59 2015
@@ -14,9 +14,11 @@
namespace llvm {
+class LinePrinter;
+
class CompilandDumper : public PDBSymDumper {
public:
- CompilandDumper();
+ CompilandDumper(LinePrinter &P);
void start(const PDBSymbolCompiland &Symbol, raw_ostream &OS, int Indent,
bool Children);
@@ -33,6 +35,9 @@ public:
int Indent) override;
void dump(const PDBSymbolUnknown &Symbol, raw_ostream &OS,
int Indent) override;
+
+private:
+ LinePrinter &Printer;
};
}
Modified: llvm/trunk/tools/llvm-pdbdump/FunctionDumper.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/FunctionDumper.cpp?rev=230746&r1=230745&r2=230746&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/FunctionDumper.cpp (original)
+++ llvm/trunk/tools/llvm-pdbdump/FunctionDumper.cpp Fri Feb 27 03:15:59 2015
@@ -9,6 +9,7 @@
#include "FunctionDumper.h"
#include "BuiltinDumper.h"
+#include "LinePrinter.h"
#include "llvm-pdbdump.h"
#include "llvm/DebugInfo/PDB/IPDBSession.h"
@@ -29,7 +30,7 @@ using namespace llvm;
namespace {
template <class T>
-void dumpClassParentWithScopeOperator(const T &Symbol, llvm::raw_ostream &OS,
+void dumpClassParentWithScopeOperator(const T &Symbol, LinePrinter &Printer,
llvm::FunctionDumper &Dumper) {
uint32_t ClassParentId = Symbol.getClassParentId();
auto ClassParent =
@@ -38,18 +39,20 @@ void dumpClassParentWithScopeOperator(co
if (!ClassParent)
return;
- OS << ClassParent->getName() << "::";
+ WithColor(Printer, PDB_ColorItem::Type).get() << ClassParent->getName();
+ Printer << "::";
}
}
-FunctionDumper::FunctionDumper() : PDBSymDumper(true) {}
+FunctionDumper::FunctionDumper(LinePrinter &P)
+ : PDBSymDumper(true), Printer(P) {}
void FunctionDumper::start(const PDBSymbolTypeFunctionSig &Symbol,
const char *Name, PointerType Pointer,
raw_ostream &OS) {
auto ReturnType = Symbol.getReturnType();
ReturnType->dump(OS, 0, *this);
- OS << " ";
+ Printer << " ";
uint32_t ClassParentId = Symbol.getClassParentId();
auto ClassParent =
Symbol.getSession().getConcreteSymbolById<PDBSymbolTypeUDT>(
@@ -64,39 +67,46 @@ void FunctionDumper::start(const PDBSymb
if (Pointer == PointerType::None) {
if (ShouldDumpCallingConvention)
- OS << CC << " ";
- if (ClassParent)
- OS << "(" << ClassParent->getName() << "::)";
+ WithColor(Printer, PDB_ColorItem::Keyword).get() << CC << " ";
+ if (ClassParent) {
+ Printer << "(";
+ WithColor(Printer, PDB_ColorItem::Identifier).get()
+ << ClassParent->getName();
+ Printer << "::)";
+ }
} else {
- OS << "(";
+ Printer << "(";
if (ShouldDumpCallingConvention)
- OS << CC << " ";
- if (ClassParent)
- OS << ClassParent->getName() << "::";
+ WithColor(Printer, PDB_ColorItem::Keyword).get() << CC << " ";
+ if (ClassParent) {
+ WithColor(Printer, PDB_ColorItem::Identifier).get()
+ << ClassParent->getName();
+ Printer << "::";
+ }
if (Pointer == PointerType::Reference)
- OS << "&";
+ Printer << "&";
else
- OS << "*";
+ Printer << "*";
if (Name)
- OS << Name;
- OS << ")";
+ WithColor(Printer, PDB_ColorItem::Identifier).get() << Name;
+ Printer << ")";
}
- OS << "(";
+ Printer << "(";
if (auto ChildEnum = Symbol.getArguments()) {
uint32_t Index = 0;
while (auto Arg = ChildEnum->getNext()) {
Arg->dump(OS, 0, *this);
if (++Index < ChildEnum->getChildCount())
- OS << ", ";
+ Printer << ", ";
}
}
- OS << ")";
+ Printer << ")";
if (Symbol.isConstType())
- OS << " const";
+ WithColor(Printer, PDB_ColorItem::Keyword).get() << " const";
if (Symbol.isVolatileType())
- OS << " volatile";
+ WithColor(Printer, PDB_ColorItem::Keyword).get() << " volatile";
}
void FunctionDumper::start(const PDBSymbolFunc &Symbol, PointerType Pointer,
@@ -104,74 +114,83 @@ void FunctionDumper::start(const PDBSymb
uint32_t FuncStart = Symbol.getRelativeVirtualAddress();
uint32_t FuncEnd = FuncStart + Symbol.getLength();
- OS << newline(Indent);
-
- OS << "func [" << format_hex(FuncStart, 8);
- if (auto DebugStart = Symbol.findOneChild<PDBSymbolFuncDebugStart>())
- OS << "+" << DebugStart->getRelativeVirtualAddress() - FuncStart;
- OS << " - " << format_hex(FuncEnd, 8);
- if (auto DebugEnd = Symbol.findOneChild<PDBSymbolFuncDebugEnd>())
- OS << "-" << FuncEnd - DebugEnd->getRelativeVirtualAddress();
- OS << "] ";
+ Printer << "func ";
+ WithColor(Printer, PDB_ColorItem::Address).get() << "["
+ << format_hex(FuncStart, 8);
+ if (auto DebugStart = Symbol.findOneChild<PDBSymbolFuncDebugStart>()) {
+ uint32_t Prologue = DebugStart->getRelativeVirtualAddress() - FuncStart;
+ WithColor(Printer, PDB_ColorItem::Offset).get() << "+" << Prologue;
+ }
+ WithColor(Printer, PDB_ColorItem::Address).get() << " - "
+ << format_hex(FuncEnd, 8);
+ if (auto DebugEnd = Symbol.findOneChild<PDBSymbolFuncDebugEnd>()) {
+ uint32_t Epilogue = FuncEnd - DebugEnd->getRelativeVirtualAddress();
+ WithColor(Printer, PDB_ColorItem::Offset).get() << "-" << Epilogue;
+ }
+ WithColor(Printer, PDB_ColorItem::Address).get() << "] ";
if (Symbol.hasFramePointer())
- OS << "(" << Symbol.getLocalBasePointerRegisterId() << ")";
+ WithColor(Printer, PDB_ColorItem::Address).get()
+ << "(" << Symbol.getLocalBasePointerRegisterId() << ")";
else
- OS << "(FPO)";
+ WithColor(Printer, PDB_ColorItem::Address).get() << "(FPO)";
- OS << " ";
+ Printer << " ";
if (Symbol.isVirtual() || Symbol.isPureVirtual())
- OS << "virtual ";
+ WithColor(Printer, PDB_ColorItem::Keyword).get() << "virtual ";
auto Signature = Symbol.getSignature();
if (!Signature) {
- OS << Symbol.getName();
+ WithColor(Printer, PDB_ColorItem::Identifier).get() << Symbol.getName();
if (Pointer == PointerType::Pointer)
- OS << "*";
+ Printer << "*";
else if (Pointer == FunctionDumper::PointerType::Reference)
- OS << "&";
+ Printer << "&";
return;
}
auto ReturnType = Signature->getReturnType();
ReturnType->dump(OS, 0, *this);
- OS << " ";
+ Printer << " ";
auto ClassParent = Symbol.getClassParent();
PDB_CallingConv CC = Signature->getCallingConvention();
if (Pointer != FunctionDumper::PointerType::None)
- OS << "(";
+ Printer << "(";
if ((ClassParent && CC != PDB_CallingConv::Thiscall) ||
- (!ClassParent && CC != PDB_CallingConv::NearStdcall))
- OS << Signature->getCallingConvention() << " ";
- OS << Symbol.getName();
+ (!ClassParent && CC != PDB_CallingConv::NearStdcall)) {
+ WithColor(Printer, PDB_ColorItem::Keyword).get()
+ << Signature->getCallingConvention() << " ";
+ }
+ WithColor(Printer, PDB_ColorItem::Identifier).get() << Symbol.getName();
if (Pointer != FunctionDumper::PointerType::None) {
if (Pointer == PointerType::Pointer)
- OS << "*";
+ Printer << "*";
else if (Pointer == FunctionDumper::PointerType::Reference)
- OS << "&";
- OS << ")";
+ Printer << "&";
+ Printer << ")";
}
- OS << "(";
+ Printer << "(";
if (auto Arguments = Symbol.getArguments()) {
uint32_t Index = 0;
while (auto Arg = Arguments->getNext()) {
auto ArgType = Arg->getType();
ArgType->dump(OS, 0, *this);
- OS << " " << Arg->getName();
+ WithColor(Printer, PDB_ColorItem::Identifier).get() << " "
+ << Arg->getName();
if (++Index < Arguments->getChildCount())
- OS << ", ";
+ Printer << ", ";
}
}
- OS << ")";
+ Printer << ")";
if (Symbol.isConstType())
- OS << " const";
+ WithColor(Printer, PDB_ColorItem::Keyword).get() << " const";
if (Symbol.isVolatileType())
- OS << " volatile";
+ WithColor(Printer, PDB_ColorItem::Keyword).get() << " volatile";
if (Symbol.isPureVirtual())
- OS << " = 0";
+ Printer << " = 0";
}
void FunctionDumper::dump(const PDBSymbolTypeArray &Symbol, raw_ostream &OS,
@@ -182,26 +201,27 @@ void FunctionDumper::dump(const PDBSymbo
return;
ElementType->dump(OS, 0, *this);
- OS << "[" << Symbol.getLength() << "]";
+ Printer << "[";
+ WithColor(Printer, PDB_ColorItem::LiteralValue).get() << Symbol.getLength();
+ Printer << "]";
}
void FunctionDumper::dump(const PDBSymbolTypeBuiltin &Symbol, raw_ostream &OS,
int Indent) {
- BuiltinDumper Dumper;
+ BuiltinDumper Dumper(Printer);
Dumper.start(Symbol, OS);
}
void FunctionDumper::dump(const PDBSymbolTypeEnum &Symbol, raw_ostream &OS,
int Indent) {
- dumpClassParentWithScopeOperator(Symbol, OS, *this);
- OS << Symbol.getName();
+ dumpClassParentWithScopeOperator(Symbol, Printer, *this);
+ WithColor(Printer, PDB_ColorItem::Type).get() << Symbol.getName();
}
void FunctionDumper::dump(const PDBSymbolTypeFunctionArg &Symbol,
raw_ostream &OS, int Indent) {
// PDBSymbolTypeFunctionArg is just a shim over the real argument. Just drill
// through to the real thing and dump it.
- Symbol.defaultDump(OS, Indent);
uint32_t TypeId = Symbol.getTypeId();
auto Type = Symbol.getSession().getSymbolById(TypeId);
if (!Type)
@@ -211,8 +231,8 @@ void FunctionDumper::dump(const PDBSymbo
void FunctionDumper::dump(const PDBSymbolTypeTypedef &Symbol, raw_ostream &OS,
int Indent) {
- dumpClassParentWithScopeOperator(Symbol, OS, *this);
- OS << Symbol.getName();
+ dumpClassParentWithScopeOperator(Symbol, Printer, *this);
+ WithColor(Printer, PDB_ColorItem::Type).get() << Symbol.getName();
}
void FunctionDumper::dump(const PDBSymbolTypePointer &Symbol, raw_ostream &OS,
@@ -223,15 +243,15 @@ void FunctionDumper::dump(const PDBSymbo
return;
if (auto FuncSig = dyn_cast<PDBSymbolTypeFunctionSig>(PointeeType.get())) {
- FunctionDumper NestedDumper;
+ FunctionDumper NestedDumper(Printer);
PointerType Pointer =
Symbol.isReference() ? PointerType::Reference : PointerType::Pointer;
NestedDumper.start(*FuncSig, nullptr, Pointer, OS);
} else {
if (Symbol.isConstType())
- OS << "const ";
+ WithColor(Printer, PDB_ColorItem::Keyword).get() << "const ";
if (Symbol.isVolatileType())
- OS << "volatile ";
+ WithColor(Printer, PDB_ColorItem::Keyword).get() << "volatile ";
PointeeType->dump(OS, Indent, *this);
OS << (Symbol.isReference() ? "&" : "*");
}
@@ -239,5 +259,5 @@ void FunctionDumper::dump(const PDBSymbo
void FunctionDumper::dump(const PDBSymbolTypeUDT &Symbol, raw_ostream &OS,
int Indent) {
- OS << Symbol.getName();
+ WithColor(Printer, PDB_ColorItem::Type).get() << Symbol.getName();
}
Modified: llvm/trunk/tools/llvm-pdbdump/FunctionDumper.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/FunctionDumper.h?rev=230746&r1=230745&r2=230746&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/FunctionDumper.h (original)
+++ llvm/trunk/tools/llvm-pdbdump/FunctionDumper.h Fri Feb 27 03:15:59 2015
@@ -14,9 +14,11 @@
namespace llvm {
+class LinePrinter;
+
class FunctionDumper : public PDBSymDumper {
public:
- FunctionDumper();
+ FunctionDumper(LinePrinter &P);
enum class PointerType { None, Pointer, Reference };
@@ -39,6 +41,9 @@ public:
int Indent) override;
void dump(const PDBSymbolTypeUDT &Symbol, raw_ostream &OS,
int Indent) override;
+
+private:
+ LinePrinter &Printer;
};
}
Added: llvm/trunk/tools/llvm-pdbdump/LinePrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/LinePrinter.cpp?rev=230746&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/LinePrinter.cpp (added)
+++ llvm/trunk/tools/llvm-pdbdump/LinePrinter.cpp Fri Feb 27 03:15:59 2015
@@ -0,0 +1,80 @@
+//===- 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 <algorithm>
+
+using namespace llvm;
+
+LinePrinter::LinePrinter(int Indent, llvm::raw_ostream &Stream)
+ : IndentSpaces(Indent), CurrentIndent(0), OS(Stream) {}
+
+void LinePrinter::Indent() { CurrentIndent += IndentSpaces; }
+
+void LinePrinter::Unindent() {
+ CurrentIndent = std::max(0, CurrentIndent - IndentSpaces);
+}
+
+void LinePrinter::NewLine() {
+ OS << "\n";
+ OS.indent(CurrentIndent);
+}
+
+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::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;
+ }
+}
Added: llvm/trunk/tools/llvm-pdbdump/LinePrinter.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/LinePrinter.h?rev=230746&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/LinePrinter.h (added)
+++ llvm/trunk/tools/llvm-pdbdump/LinePrinter.h Fri Feb 27 03:15:59 2015
@@ -0,0 +1,69 @@
+//===- LinePrinter.h ------------------------------------------ *- C++ --*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TOOLS_LLVMPDBDUMP_LINEPRINTER_H
+#define LLVM_TOOLS_LLVMPDBDUMP_LINEPRINTER_H
+
+#include "llvm/ADT/Twine.h"
+#include "llvm/Support/raw_ostream.h"
+
+namespace llvm {
+
+class LinePrinter {
+ friend class WithColor;
+
+public:
+ LinePrinter(int Indent, raw_ostream &Stream);
+
+ void Indent();
+ void Unindent();
+
+ void NewLine();
+
+ raw_ostream &getStream() { return OS; }
+
+private:
+ raw_ostream &OS;
+ int IndentSpaces;
+ int CurrentIndent;
+};
+
+template <class T>
+inline raw_ostream &operator<<(LinePrinter &Printer, const T &Item) {
+ Printer.getStream() << Item;
+ return Printer.getStream();
+}
+
+enum class PDB_ColorItem {
+ None,
+ Address,
+ Type,
+ Keyword,
+ Offset,
+ Identifier,
+ Path,
+ SectionHeader,
+ LiteralValue,
+};
+
+class WithColor {
+public:
+ WithColor(LinePrinter &P, PDB_ColorItem C);
+ ~WithColor();
+
+ raw_ostream &get() { return OS; }
+
+private:
+ void translateColor(PDB_ColorItem C, raw_ostream::Colors &Color,
+ bool &Bold) const;
+ raw_ostream &OS;
+};
+}
+
+#endif
Modified: llvm/trunk/tools/llvm-pdbdump/TypeDumper.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/TypeDumper.cpp?rev=230746&r1=230745&r2=230746&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/TypeDumper.cpp (original)
+++ llvm/trunk/tools/llvm-pdbdump/TypeDumper.cpp Fri Feb 27 03:15:59 2015
@@ -10,6 +10,7 @@
#include "TypeDumper.h"
#include "ClassDefinitionDumper.h"
+#include "LinePrinter.h"
#include "llvm-pdbdump.h"
#include "TypedefDumper.h"
@@ -21,26 +22,37 @@
using namespace llvm;
-TypeDumper::TypeDumper(bool Inline, bool ClassDefs)
- : PDBSymDumper(true), InlineDump(Inline), FullClassDefs(ClassDefs) {}
+TypeDumper::TypeDumper(LinePrinter &P, bool Inline, bool ClassDefs)
+ : PDBSymDumper(true), Printer(P), InlineDump(Inline),
+ FullClassDefs(ClassDefs) {}
void TypeDumper::start(const PDBSymbolExe &Exe, raw_ostream &OS, int Indent) {
auto Enums = Exe.findAllChildren<PDBSymbolTypeEnum>();
- OS << newline(Indent) << "Enums: (" << Enums->getChildCount() << " items)";
+ Printer.NewLine();
+ WithColor(Printer, PDB_ColorItem::Identifier).get() << "Enums";
+ Printer << ": (" << Enums->getChildCount() << " items)";
+ Printer.Indent();
while (auto Enum = Enums->getNext())
Enum->dump(OS, Indent + 2, *this);
+ Printer.Unindent();
auto Typedefs = Exe.findAllChildren<PDBSymbolTypeTypedef>();
- OS << newline(Indent) << "Typedefs: (" << Typedefs->getChildCount()
- << " items)";
+ Printer.NewLine();
+ WithColor(Printer, PDB_ColorItem::Identifier).get() << "Typedefs";
+ Printer << ": (" << Typedefs->getChildCount() << " items)";
+ Printer.Indent();
while (auto Typedef = Typedefs->getNext())
Typedef->dump(OS, Indent + 2, *this);
+ Printer.Unindent();
auto Classes = Exe.findAllChildren<PDBSymbolTypeUDT>();
- OS << newline(Indent) << "Classes: (" << Classes->getChildCount()
- << " items)";
+ Printer.NewLine();
+ WithColor(Printer, PDB_ColorItem::Identifier).get() << "Classes";
+ Printer << ": (" << Classes->getChildCount() << " items)";
+ Printer.Indent();
while (auto Class = Classes->getNext())
Class->dump(OS, Indent + 2, *this);
+ Printer.Unindent();
}
void TypeDumper::dump(const PDBSymbolTypeEnum &Symbol, raw_ostream &OS,
@@ -49,17 +61,18 @@ void TypeDumper::dump(const PDBSymbolTyp
return;
if (!InlineDump)
- OS << newline(Indent);
+ Printer.NewLine();
- OS << "enum " << Symbol.getName();
+ WithColor(Printer, PDB_ColorItem::Keyword).get() << "enum ";
+ WithColor(Printer, PDB_ColorItem::Identifier).get() << Symbol.getName();
}
void TypeDumper::dump(const PDBSymbolTypeTypedef &Symbol, raw_ostream &OS,
int Indent) {
if (!InlineDump)
- OS << newline(Indent);
+ Printer.NewLine();
- TypedefDumper Dumper;
+ TypedefDumper Dumper(Printer);
Dumper.start(Symbol, OS, Indent);
}
@@ -68,12 +81,13 @@ void TypeDumper::dump(const PDBSymbolTyp
if (Symbol.getUnmodifiedTypeId() != 0)
return;
if (!InlineDump)
- OS << newline(Indent);
+ Printer.NewLine();
if (FullClassDefs) {
- ClassDefinitionDumper Dumper;
+ ClassDefinitionDumper Dumper(Printer);
Dumper.start(Symbol, OS, Indent);
} else {
- OS << "class " << Symbol.getName();
+ WithColor(Printer, PDB_ColorItem::Keyword).get() << "class ";
+ WithColor(Printer, PDB_ColorItem::Identifier).get() << Symbol.getName();
}
}
Modified: llvm/trunk/tools/llvm-pdbdump/TypeDumper.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/TypeDumper.h?rev=230746&r1=230745&r2=230746&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/TypeDumper.h (original)
+++ llvm/trunk/tools/llvm-pdbdump/TypeDumper.h Fri Feb 27 03:15:59 2015
@@ -14,9 +14,11 @@
namespace llvm {
+class LinePrinter;
+
class TypeDumper : public PDBSymDumper {
public:
- TypeDumper(bool Inline, bool ClassDefs);
+ TypeDumper(LinePrinter &P, bool Inline, bool ClassDefs);
void start(const PDBSymbolExe &Exe, raw_ostream &OS, int Indent);
@@ -28,6 +30,7 @@ public:
int Indent) override;
private:
+ LinePrinter &Printer;
bool InlineDump;
bool FullClassDefs;
};
Modified: llvm/trunk/tools/llvm-pdbdump/TypedefDumper.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/TypedefDumper.cpp?rev=230746&r1=230745&r2=230746&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/TypedefDumper.cpp (original)
+++ llvm/trunk/tools/llvm-pdbdump/TypedefDumper.cpp Fri Feb 27 03:15:59 2015
@@ -11,6 +11,7 @@
#include "BuiltinDumper.h"
#include "FunctionDumper.h"
+#include "LinePrinter.h"
#include "llvm-pdbdump.h"
#include "llvm/DebugInfo/PDB/IPDBSession.h"
@@ -23,15 +24,15 @@
using namespace llvm;
-TypedefDumper::TypedefDumper() : PDBSymDumper(true) {}
+TypedefDumper::TypedefDumper(LinePrinter &P) : PDBSymDumper(true), Printer(P) {}
void TypedefDumper::start(const PDBSymbolTypeTypedef &Symbol, raw_ostream &OS,
int Indent) {
- OS << "typedef ";
+ WithColor(Printer, PDB_ColorItem::Keyword).get() << "typedef ";
uint32_t TargetId = Symbol.getTypeId();
if (auto TypeSymbol = Symbol.getSession().getSymbolById(TargetId))
TypeSymbol->dump(OS, 0, *this);
- OS << " " << Symbol.getName();
+ WithColor(Printer, PDB_ColorItem::Type).get() << " " << Symbol.getName();
}
void TypedefDumper::dump(const PDBSymbolTypeArray &Symbol, raw_ostream &OS,
@@ -39,21 +40,22 @@ void TypedefDumper::dump(const PDBSymbol
void TypedefDumper::dump(const PDBSymbolTypeBuiltin &Symbol, raw_ostream &OS,
int Indent) {
- BuiltinDumper Dumper;
+ BuiltinDumper Dumper(Printer);
Dumper.start(Symbol, OS);
}
void TypedefDumper::dump(const PDBSymbolTypeEnum &Symbol, raw_ostream &OS,
int Indent) {
- OS << "enum " << Symbol.getName();
+ WithColor(Printer, PDB_ColorItem::Keyword).get() << "enum ";
+ WithColor(Printer, PDB_ColorItem::Type).get() << " " << Symbol.getName();
}
void TypedefDumper::dump(const PDBSymbolTypePointer &Symbol, raw_ostream &OS,
int Indent) {
if (Symbol.isConstType())
- OS << "const ";
+ WithColor(Printer, PDB_ColorItem::Keyword).get() << "const ";
if (Symbol.isVolatileType())
- OS << "volatile ";
+ WithColor(Printer, PDB_ColorItem::Keyword).get() << "volatile ";
uint32_t PointeeId = Symbol.getTypeId();
auto PointeeType = Symbol.getSession().getSymbolById(PointeeId);
if (!PointeeType)
@@ -62,7 +64,7 @@ void TypedefDumper::dump(const PDBSymbol
FunctionDumper::PointerType Pointer = FunctionDumper::PointerType::Pointer;
if (Symbol.isReference())
Pointer = FunctionDumper::PointerType::Reference;
- FunctionDumper NestedDumper;
+ FunctionDumper NestedDumper(Printer);
NestedDumper.start(*FuncSig, nullptr, Pointer, OS);
} else {
PointeeType->dump(OS, Indent, *this);
@@ -72,11 +74,12 @@ void TypedefDumper::dump(const PDBSymbol
void TypedefDumper::dump(const PDBSymbolTypeFunctionSig &Symbol,
raw_ostream &OS, int Indent) {
- FunctionDumper Dumper;
+ FunctionDumper Dumper(Printer);
Dumper.start(Symbol, nullptr, FunctionDumper::PointerType::None, OS);
}
void TypedefDumper::dump(const PDBSymbolTypeUDT &Symbol, raw_ostream &OS,
int Indent) {
- OS << "class " << Symbol.getName();
+ WithColor(Printer, PDB_ColorItem::Keyword).get() << "class ";
+ WithColor(Printer, PDB_ColorItem::Type).get() << " " << Symbol.getName();
}
Modified: llvm/trunk/tools/llvm-pdbdump/TypedefDumper.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/TypedefDumper.h?rev=230746&r1=230745&r2=230746&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/TypedefDumper.h (original)
+++ llvm/trunk/tools/llvm-pdbdump/TypedefDumper.h Fri Feb 27 03:15:59 2015
@@ -14,9 +14,11 @@
namespace llvm {
+class LinePrinter;
+
class TypedefDumper : public PDBSymDumper {
public:
- TypedefDumper();
+ TypedefDumper(LinePrinter &P);
void start(const PDBSymbolTypeTypedef &Symbol, raw_ostream &OS, int Indent);
@@ -32,6 +34,9 @@ public:
int Indent) override;
void dump(const PDBSymbolTypeUDT &Symbol, raw_ostream &OS,
int Indent) override;
+
+private:
+ LinePrinter &Printer;
};
}
Modified: llvm/trunk/tools/llvm-pdbdump/VariableDumper.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/VariableDumper.cpp?rev=230746&r1=230745&r2=230746&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/VariableDumper.cpp (original)
+++ llvm/trunk/tools/llvm-pdbdump/VariableDumper.cpp Fri Feb 27 03:15:59 2015
@@ -10,6 +10,7 @@
#include "VariableDumper.h"
#include "BuiltinDumper.h"
+#include "LinePrinter.h"
#include "llvm-pdbdump.h"
#include "FunctionDumper.h"
@@ -26,45 +27,51 @@
using namespace llvm;
-VariableDumper::VariableDumper() : PDBSymDumper(true) {}
+VariableDumper::VariableDumper(LinePrinter &P)
+ : PDBSymDumper(true), Printer(P) {}
void VariableDumper::start(const PDBSymbolData &Var, raw_ostream &OS,
int Indent) {
- OS << newline(Indent);
- OS << "data ";
+ Printer.NewLine();
+ Printer << "data ";
auto VarType = Var.getType();
switch (auto LocType = Var.getLocationType()) {
case PDB_LocType::Static:
- OS << "[" << format_hex(Var.getRelativeVirtualAddress(), 10) << "] ";
- OS << "static ";
+ WithColor(Printer, PDB_ColorItem::Address).get()
+ << "[" << format_hex(Var.getRelativeVirtualAddress(), 10) << "] ";
+ WithColor(Printer, PDB_ColorItem::Keyword).get() << "static ";
dumpSymbolTypeAndName(*VarType, Var.getName(), OS);
break;
case PDB_LocType::Constant:
- OS << "const ";
+ WithColor(Printer, PDB_ColorItem::Keyword).get() << "const ";
dumpSymbolTypeAndName(*VarType, Var.getName(), OS);
- OS << "[" << Var.getValue() << "]";
+ Printer << "[";
+ WithColor(Printer, PDB_ColorItem::LiteralValue).get() << Var.getValue();
+ Printer << "]";
break;
case PDB_LocType::ThisRel:
- OS << "+" << format_hex(Var.getOffset(), 4) << " ";
+ WithColor(Printer, PDB_ColorItem::Offset).get()
+ << "+" << format_hex(Var.getOffset(), 4) << " ";
dumpSymbolTypeAndName(*VarType, Var.getName(), OS);
break;
default:
+ OS << "unknown(" << LocType << ") ";
+ WithColor(Printer, PDB_ColorItem::Identifier).get() << Var.getName();
break;
- OS << "unknown(" << LocType << ") " << Var.getName();
}
}
void VariableDumper::dump(const PDBSymbolTypeBuiltin &Symbol, raw_ostream &OS,
int Indent) {
- BuiltinDumper Dumper;
+ BuiltinDumper Dumper(Printer);
Dumper.start(Symbol, OS);
}
void VariableDumper::dump(const PDBSymbolTypeEnum &Symbol, raw_ostream &OS,
int Indent) {
- OS << Symbol.getName();
+ WithColor(Printer, PDB_ColorItem::Type).get() << Symbol.getName();
}
void VariableDumper::dump(const PDBSymbolTypeFunctionSig &Symbol,
@@ -77,29 +84,30 @@ void VariableDumper::dump(const PDBSymbo
return;
if (auto Func = dyn_cast<PDBSymbolFunc>(PointeeType.get())) {
- FunctionDumper NestedDumper;
+ FunctionDumper NestedDumper(Printer);
FunctionDumper::PointerType Pointer =
Symbol.isReference() ? FunctionDumper::PointerType::Reference
: FunctionDumper::PointerType::Pointer;
NestedDumper.start(*Func, Pointer, OS, Indent);
} else {
if (Symbol.isConstType())
- OS << "const ";
+ WithColor(Printer, PDB_ColorItem::Keyword).get() << "const ";
if (Symbol.isVolatileType())
- OS << "volatile ";
+ WithColor(Printer, PDB_ColorItem::Keyword).get() << "volatile ";
PointeeType->dump(OS, Indent, *this);
- OS << (Symbol.isReference() ? "&" : "*");
+ Printer << (Symbol.isReference() ? "&" : "*");
}
}
void VariableDumper::dump(const PDBSymbolTypeTypedef &Symbol, raw_ostream &OS,
int Indent) {
- OS << "typedef " << Symbol.getName();
+ WithColor(Printer, PDB_ColorItem::Keyword).get() << "typedef ";
+ WithColor(Printer, PDB_ColorItem::Type).get() << Symbol.getName();
}
void VariableDumper::dump(const PDBSymbolTypeUDT &Symbol, raw_ostream &OS,
int Indent) {
- OS << Symbol.getName();
+ WithColor(Printer, PDB_ColorItem::Type).get() << Symbol.getName();
}
void VariableDumper::dumpSymbolTypeAndName(const PDBSymbol &Type,
@@ -109,16 +117,19 @@ void VariableDumper::dumpSymbolTypeAndNa
raw_string_ostream IndexStream(IndexSpec);
std::unique_ptr<PDBSymbol> ElementType = ArrayType->getElementType();
while (auto NestedArray = dyn_cast<PDBSymbolTypeArray>(ElementType.get())) {
- IndexStream << "[" << NestedArray->getCount() << "]";
+ IndexStream << "[";
+ IndexStream << NestedArray->getCount();
+ IndexStream << "]";
ElementType = NestedArray->getElementType();
}
IndexStream << "[" << ArrayType->getCount() << "]";
ElementType->dump(OS, 0, *this);
- OS << " " << Name << IndexStream.str();
+ WithColor(Printer, PDB_ColorItem::Identifier).get() << " " << Name;
+ Printer << IndexStream.str();
} else {
if (!tryDumpFunctionPointer(Type, Name, OS)) {
Type.dump(OS, 0, *this);
- OS << " " << Name;
+ WithColor(Printer, PDB_ColorItem::Identifier).get() << " " << Name;
}
}
}
@@ -131,7 +142,7 @@ bool VariableDumper::tryDumpFunctionPoin
auto PointeeType = PointerType->getPointeeType();
if (auto *FunctionSig =
dyn_cast<PDBSymbolTypeFunctionSig>(PointeeType.get())) {
- FunctionDumper Dumper;
+ FunctionDumper Dumper(Printer);
FunctionDumper::PointerType PT = FunctionDumper::PointerType::Pointer;
if (PointerType->isReference())
PT = FunctionDumper::PointerType::Reference;
Modified: llvm/trunk/tools/llvm-pdbdump/VariableDumper.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/VariableDumper.h?rev=230746&r1=230745&r2=230746&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/VariableDumper.h (original)
+++ llvm/trunk/tools/llvm-pdbdump/VariableDumper.h Fri Feb 27 03:15:59 2015
@@ -15,9 +15,11 @@
namespace llvm {
+class LinePrinter;
+
class VariableDumper : public PDBSymDumper {
public:
- VariableDumper();
+ VariableDumper(LinePrinter &P);
void start(const PDBSymbolData &Var, raw_ostream &OS, int Indent);
@@ -39,6 +41,8 @@ private:
raw_ostream &OS);
bool tryDumpFunctionPointer(const PDBSymbol &Type, StringRef Name,
raw_ostream &OS);
+
+ LinePrinter &Printer;
};
}
Modified: llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp?rev=230746&r1=230745&r2=230746&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp (original)
+++ llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp Fri Feb 27 03:15:59 2015
@@ -16,6 +16,7 @@
#include "llvm-pdbdump.h"
#include "CompilandDumper.h"
#include "FunctionDumper.h"
+#include "LinePrinter.h"
#include "TypeDumper.h"
#include "VariableDumper.h"
@@ -73,66 +74,98 @@ static void dumpInput(StringRef Path) {
return;
}
+ LinePrinter Printer(2, outs());
+
auto GlobalScope(Session->getGlobalScope());
std::string FileName(GlobalScope->getSymbolsFileName());
- outs() << "Summary for " << FileName;
+ WithColor(Printer, PDB_ColorItem::None).get() << "Summary for ";
+ WithColor(Printer, PDB_ColorItem::Path).get() << FileName;
+ Printer.Indent();
uint64_t FileSize = 0;
- if (!llvm::sys::fs::file_size(FileName, FileSize))
- outs() << newline(2) << "Size: " << FileSize << " bytes";
- else
- outs() << newline(2) << "Size: (Unable to obtain file size)";
-
- outs() << newline(2) << "Guid: " << GlobalScope->getGuid();
- outs() << newline(2) << "Age: " << GlobalScope->getAge();
- outs() << newline(2) << "Attributes: ";
+
+ Printer.NewLine();
+ WithColor(Printer, PDB_ColorItem::Identifier).get() << "Size";
+ if (!llvm::sys::fs::file_size(FileName, FileSize)) {
+ Printer << ": " << FileSize << " bytes";
+ } else {
+ Printer << ": (Unable to obtain file size)";
+ }
+
+ Printer.NewLine();
+ WithColor(Printer, PDB_ColorItem::Identifier).get() << "Guid";
+ Printer << ": " << GlobalScope->getGuid();
+
+ Printer.NewLine();
+ WithColor(Printer, PDB_ColorItem::Identifier).get() << "Age";
+ Printer << ": " << GlobalScope->getAge();
+
+ Printer.NewLine();
+ WithColor(Printer, PDB_ColorItem::Identifier).get() << "Attributes";
+ Printer << ": ";
if (GlobalScope->hasCTypes())
outs() << "HasCTypes ";
if (GlobalScope->hasPrivateSymbols())
outs() << "HasPrivateSymbols ";
+ Printer.Unindent();
if (opts::Compilands) {
- outs() << "\n---COMPILANDS---";
+ Printer.NewLine();
+ WithColor(Printer, PDB_ColorItem::SectionHeader).get()
+ << "---COMPILANDS---";
+ Printer.Indent();
auto Compilands = GlobalScope->findAllChildren<PDBSymbolCompiland>();
- CompilandDumper Dumper;
+ CompilandDumper Dumper(Printer);
while (auto Compiland = Compilands->getNext())
Dumper.start(*Compiland, outs(), 2, false);
+ Printer.Unindent();
}
if (opts::Types) {
- outs() << "\n---TYPES---";
- TypeDumper Dumper(false, opts::ClassDefs);
+ Printer.NewLine();
+ WithColor(Printer, PDB_ColorItem::SectionHeader).get() << "---TYPES---";
+ Printer.Indent();
+ TypeDumper Dumper(Printer, false, opts::ClassDefs);
Dumper.start(*GlobalScope, outs(), 2);
+ Printer.Unindent();
}
if (opts::Symbols) {
- outs() << "\n---SYMBOLS---";
+ Printer.NewLine();
+ WithColor(Printer, PDB_ColorItem::SectionHeader).get() << "---SYMBOLS---";
+ Printer.Indent();
auto Compilands = GlobalScope->findAllChildren<PDBSymbolCompiland>();
- CompilandDumper Dumper;
+ CompilandDumper Dumper(Printer);
while (auto Compiland = Compilands->getNext())
Dumper.start(*Compiland, outs(), 2, true);
+ Printer.Unindent();
}
if (opts::Globals) {
- outs() << "\n---GLOBALS---";
+ Printer.NewLine();
+ WithColor(Printer, PDB_ColorItem::SectionHeader).get() << "---GLOBALS---";
+ Printer.Indent();
{
- FunctionDumper Dumper;
+ FunctionDumper Dumper(Printer);
auto Functions = GlobalScope->findAllChildren<PDBSymbolFunc>();
- while (auto Function = Functions->getNext())
+ while (auto Function = Functions->getNext()) {
+ Printer.NewLine();
Dumper.start(*Function, FunctionDumper::PointerType::None, outs(), 2);
+ }
}
{
auto Vars = GlobalScope->findAllChildren<PDBSymbolData>();
- VariableDumper Dumper;
+ VariableDumper Dumper(Printer);
while (auto Var = Vars->getNext())
Dumper.start(*Var, outs(), 2);
}
{
auto Thunks = GlobalScope->findAllChildren<PDBSymbolThunk>();
- CompilandDumper Dumper;
+ CompilandDumper Dumper(Printer);
while (auto Thunk = Thunks->getNext())
Dumper.dump(*Thunk, outs(), 2);
}
+ Printer.Unindent();
}
outs().flush();
}
More information about the llvm-commits
mailing list