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