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;
18*ec28fc34SZachary Turner using namespace llvm::pdb;
1921473f7bSZachary Turner 
2098571ed9SZachary Turner PDBSymbolCompiland::PDBSymbolCompiland(const IPDBSession &PDBSession,
21bae16b3fSZachary Turner                                        std::unique_ptr<IPDBRawSymbol> Symbol)
22bae16b3fSZachary Turner     : PDBSymbol(PDBSession, std::move(Symbol)) {}
2321473f7bSZachary Turner 
24b52d08d9SZachary Turner void PDBSymbolCompiland::dump(PDBSymDumper &Dumper) const {
25b52d08d9SZachary Turner   Dumper.dump(*this);
2621473f7bSZachary Turner }
2743ec3af9SZachary Turner 
2843ec3af9SZachary Turner std::string PDBSymbolCompiland::getSourceFileName() const
2943ec3af9SZachary Turner {
3043ec3af9SZachary Turner     std::string Result = RawSymbol->getSourceFileName();
3143ec3af9SZachary Turner     if (!Result.empty())
3243ec3af9SZachary Turner         return Result;
3343ec3af9SZachary Turner     auto Envs = findAllChildren<PDBSymbolCompilandEnv>();
3443ec3af9SZachary Turner     if (!Envs)
3543ec3af9SZachary Turner         return std::string();
3643ec3af9SZachary Turner     while (auto Env = Envs->getNext()) {
3743ec3af9SZachary Turner         std::string Var = Env->getName();
3843ec3af9SZachary Turner         if (Var != "src")
3943ec3af9SZachary Turner             continue;
4043ec3af9SZachary Turner         std::string Value = Env->getValue();
4143ec3af9SZachary Turner         return Value;
4243ec3af9SZachary Turner     }
4343ec3af9SZachary Turner     return std::string();
4443ec3af9SZachary Turner }
45