DebugInfoPDB: Make the symbol base case hold an IPDBSession ref.
Dumping a symbol often requires access to data that isn't inside
the symbol hierarchy, but which is only accessible through the
top-level session. This patch is a pure interface change to give
symbols a reference to the session.
llvm-svn: 228542
diff --git a/llvm/lib/DebugInfo/PDB/PDBSymbol.cpp b/llvm/lib/DebugInfo/PDB/PDBSymbol.cpp
index 095cdfc..f99fc8c 100644
--- a/llvm/lib/DebugInfo/PDB/PDBSymbol.cpp
+++ b/llvm/lib/DebugInfo/PDB/PDBSymbol.cpp
@@ -48,17 +48,19 @@
using namespace llvm;
-PDBSymbol::PDBSymbol(std::unique_ptr<IPDBRawSymbol> Symbol)
- : RawSymbol(std::move(Symbol)) {}
+PDBSymbol::PDBSymbol(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> Symbol)
+ : Session(PDBSession), RawSymbol(std::move(Symbol)) {}
PDBSymbol::~PDBSymbol() {}
#define FACTORY_SYMTAG_CASE(Tag, Type) \
case PDB_SymType::Tag: \
- return std::unique_ptr<PDBSymbol>(new Type(std::move(Symbol)));
+ return std::unique_ptr<PDBSymbol>(new Type(PDBSession, std::move(Symbol)));
std::unique_ptr<PDBSymbol>
-PDBSymbol::create(std::unique_ptr<IPDBRawSymbol> Symbol) {
+PDBSymbol::create(IPDBSession &PDBSession,
+ std::unique_ptr<IPDBRawSymbol> Symbol) {
switch (Symbol->getSymTag()) {
FACTORY_SYMTAG_CASE(Exe, PDBSymbolExe)
FACTORY_SYMTAG_CASE(Compiland, PDBSymbolCompiland)
@@ -91,7 +93,8 @@
FACTORY_SYMTAG_CASE(ManagedType, PDBSymbolTypeManaged)
FACTORY_SYMTAG_CASE(Dimension, PDBSymbolTypeDimension)
default:
- return std::unique_ptr<PDBSymbol>(new PDBSymbolUnknown(std::move(Symbol)));
+ return std::unique_ptr<PDBSymbol>(
+ new PDBSymbolUnknown(PDBSession, std::move(Symbol)));
}
}