//===-- PathConfig.cpp - Process paths of symbols ---------------*- C++ -*-===// // // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include "PathConfig.h" #include "llvm/Support/Path.h" namespace clang { namespace find_all_symbols { std::string getIncludePath(const SourceManager &SM, SourceLocation Loc, const HeaderMapCollector *Collector) { llvm::StringRef FilePath; // Walk up the include stack to skip .inc files. while (true) { if (!Loc.isValid() || SM.isInMainFile(Loc)) return ""; FilePath = SM.getFilename(Loc); if (FilePath.empty()) return ""; if (!FilePath.endswith(".inc")) break; FileID ID = SM.getFileID(Loc); Loc = SM.getIncludeLoc(ID); } if (Collector) FilePath = Collector->getMappedHeader(FilePath); SmallString<256> CleanedFilePath = FilePath; llvm::sys::path::remove_dots(CleanedFilePath, /*remove_dot_dot=*/false); return CleanedFilePath.str(); } } // namespace find_all_symbols } // namespace clang