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"
11*43ec3af9SZachary 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;
1821473f7bSZachary Turner 
1998571ed9SZachary Turner PDBSymbolCompiland::PDBSymbolCompiland(const IPDBSession &PDBSession,
20bae16b3fSZachary Turner                                        std::unique_ptr<IPDBRawSymbol> Symbol)
21bae16b3fSZachary Turner     : PDBSymbol(PDBSession, std::move(Symbol)) {}
2221473f7bSZachary Turner 
23b52d08d9SZachary Turner void PDBSymbolCompiland::dump(PDBSymDumper &Dumper) const {
24b52d08d9SZachary Turner   Dumper.dump(*this);
2521473f7bSZachary Turner }
26*43ec3af9SZachary Turner 
27*43ec3af9SZachary Turner std::string PDBSymbolCompiland::getSourceFileName() const
28*43ec3af9SZachary Turner {
29*43ec3af9SZachary Turner     std::string Result = RawSymbol->getSourceFileName();
30*43ec3af9SZachary Turner     if (!Result.empty())
31*43ec3af9SZachary Turner         return Result;
32*43ec3af9SZachary Turner     auto Envs = findAllChildren<PDBSymbolCompilandEnv>();
33*43ec3af9SZachary Turner     if (!Envs)
34*43ec3af9SZachary Turner         return std::string();
35*43ec3af9SZachary Turner     while (auto Env = Envs->getNext()) {
36*43ec3af9SZachary Turner         std::string Var = Env->getName();
37*43ec3af9SZachary Turner         if (Var != "src")
38*43ec3af9SZachary Turner             continue;
39*43ec3af9SZachary Turner         std::string Value = Env->getValue();
40*43ec3af9SZachary Turner         return Value;
41*43ec3af9SZachary Turner     }
42*43ec3af9SZachary Turner     return std::string();
43*43ec3af9SZachary Turner }
44