diff options
| author | Douglas Gregor <dgregor@apple.com> | 2011-11-11 22:18:48 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2011-11-11 22:18:48 +0000 |
| commit | ab0c8a849a82bd5378d08320fb470f4d188acbe6 (patch) | |
| tree | ea4b490a11120121e98086cb0026da17a1b2d2d0 /clang/lib | |
| parent | 28c1d1843471622daa408be21a86b52d90fae046 (diff) | |
| download | bcm5719-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.cpp | 8 | ||||
| -rw-r--r-- | clang/lib/Lex/ModuleMap.cpp | 17 |
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); } |

