121473f7bSZachary Turner //===- PDBSymbolCompiland.cpp - compiland details --------*- C++ -*-===// 221473f7bSZachary Turner // 321473f7bSZachary Turner // The LLVM Compiler Infrastructure 421473f7bSZachary Turner // 521473f7bSZachary Turner // This file is distributed under the University of Illinois Open Source 621473f7bSZachary Turner // License. See LICENSE.TXT for details. 721473f7bSZachary Turner // 821473f7bSZachary Turner //===----------------------------------------------------------------------===// 921473f7bSZachary Turner 1052c9f881SZachary Turner #include "llvm/DebugInfo/PDB/PDBSymbolCompiland.h" 1143ec3af9SZachary Turner #include "llvm/DebugInfo/PDB/PDBSymbolCompilandEnv.h" 1252c9f881SZachary Turner 139a818ad1SZachary Turner #include "llvm/DebugInfo/PDB/PDBSymDumper.h" 1452c9f881SZachary Turner 1571f308adSChandler Carruth #include <utility> 1621473f7bSZachary Turner 1721473f7bSZachary Turner using namespace llvm; 18ec28fc34SZachary Turner using namespace llvm::pdb; 1921473f7bSZachary Turner 2098571ed9SZachary Turner PDBSymbolCompiland::PDBSymbolCompiland(const IPDBSession &PDBSession, 21bae16b3fSZachary Turner std::unique_ptr<IPDBRawSymbol> Symbol) 22*1b1a70f1SZachary Turner : PDBSymbol(PDBSession, std::move(Symbol)) { 23*1b1a70f1SZachary Turner assert(RawSymbol->getSymTag() == PDB_SymType::Compiland); 24*1b1a70f1SZachary Turner } 2521473f7bSZachary Turner 26b52d08d9SZachary Turner void PDBSymbolCompiland::dump(PDBSymDumper &Dumper) const { 27b52d08d9SZachary Turner Dumper.dump(*this); 2821473f7bSZachary Turner } 2943ec3af9SZachary Turner 3043ec3af9SZachary Turner std::string PDBSymbolCompiland::getSourceFileName() const 3143ec3af9SZachary Turner { 3243ec3af9SZachary Turner std::string Result = RawSymbol->getSourceFileName(); 3343ec3af9SZachary Turner if (!Result.empty()) 3443ec3af9SZachary Turner return Result; 3543ec3af9SZachary Turner auto Envs = findAllChildren<PDBSymbolCompilandEnv>(); 3643ec3af9SZachary Turner if (!Envs) 3743ec3af9SZachary Turner return std::string(); 3843ec3af9SZachary Turner while (auto Env = Envs->getNext()) { 3943ec3af9SZachary Turner std::string Var = Env->getName(); 4043ec3af9SZachary Turner if (Var != "src") 4143ec3af9SZachary Turner continue; 4243ec3af9SZachary Turner std::string Value = Env->getValue(); 4343ec3af9SZachary Turner return Value; 4443ec3af9SZachary Turner } 4543ec3af9SZachary Turner return std::string(); 4643ec3af9SZachary Turner } 47