summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2011-11-11 22:18:48 +0000
committerDouglas Gregor <dgregor@apple.com>2011-11-11 22:18:48 +0000
commitab0c8a849a82bd5378d08320fb470f4d188acbe6 (patch)
treeea4b490a11120121e98086cb0026da17a1b2d2d0 /clang/lib
parent28c1d1843471622daa408be21a86b52d90fae046 (diff)
downloadbcm5719-llvm-ab0c8a849a82bd5378d08320fb470f4d188acbe6.tar.gz
bcm5719-llvm-ab0c8a849a82bd5378d08320fb470f4d188acbe6.zip
Wire up the mapping from header files mentioned in module maps over to
the corresponding (top-level) modules. This isn't actually useful yet, because we don't yet have a way to build modules out of module maps. llvm-svn: 144410
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Lex/HeaderSearch.cpp8
-rw-r--r--clang/lib/Lex/ModuleMap.cpp17
2 files changed, 22 insertions, 3 deletions
diff --git a/clang/lib/Lex/HeaderSearch.cpp b/clang/lib/Lex/HeaderSearch.cpp
index 6403cfb8683..4522de5cf3d 100644
--- a/clang/lib/Lex/HeaderSearch.cpp
+++ b/clang/lib/Lex/HeaderSearch.cpp
@@ -205,7 +205,7 @@ const FileEntry *DirectoryLookup::LookupFile(
// If there is a module that corresponds to this header,
// suggest it.
- StringRef Module = HS.getModuleForHeader(File);
+ StringRef Module = HS.findModuleForHeader(File);
if (!Module.empty() && Module != BuildingModule)
*SuggestedModule = Module;
@@ -772,8 +772,10 @@ bool HeaderSearch::hasModuleMap(StringRef FileName,
return false;
}
-StringRef HeaderSearch::getModuleForHeader(const FileEntry *File) {
- // FIXME: Actually look for the corresponding module for this header.
+StringRef HeaderSearch::findModuleForHeader(const FileEntry *File) {
+ if (ModuleMap::Module *Module = ModMap.findModuleForHeader(File))
+ return Module->getTopLevelModuleName();
+
return StringRef();
}
diff --git a/clang/lib/Lex/ModuleMap.cpp b/clang/lib/Lex/ModuleMap.cpp
index 8adb22014b7..7defe01a67f 100644
--- a/clang/lib/Lex/ModuleMap.cpp
+++ b/clang/lib/Lex/ModuleMap.cpp
@@ -51,6 +51,14 @@ std::string ModuleMap::Module::getFullModuleName() const {
return Result;
}
+StringRef ModuleMap::Module::getTopLevelModuleName() const {
+ const Module *Top = this;
+ while (Top->Parent)
+ Top = Top->Parent;
+
+ return Top->Name;
+}
+
//----------------------------------------------------------------------------//
// Module map
//----------------------------------------------------------------------------//
@@ -67,6 +75,15 @@ ModuleMap::~ModuleMap() {
delete SourceMgr;
}
+ModuleMap::Module *ModuleMap::findModuleForHeader(const FileEntry *File) {
+ llvm::DenseMap<const FileEntry *, Module *>::iterator Known
+ = Headers.find(File);
+ if (Known != Headers.end())
+ return Known->second;
+
+ return 0;
+}
+
static void indent(llvm::raw_ostream &OS, unsigned Spaces) {
OS << std::string(' ', Spaces);
}
OpenPOWER on IntegriCloud