[cfe-commits] r144925 - in /cfe/trunk: include/clang/Lex/DirectoryLookup.h include/clang/Lex/HeaderSearch.h include/clang/Lex/Preprocessor.h lib/Lex/HeaderSearch.cpp lib/Lex/PPDirectives.cpp
Douglas Gregor
dgregor at apple.com
Thu Nov 17 14:44:56 PST 2011
Author: dgregor
Date: Thu Nov 17 16:44:56 2011
New Revision: 144925
URL: http://llvm.org/viewvc/llvm-project?rev=144925&view=rev
Log:
When making a suggestion regarding which module to load rather than
preprocess/parse a header, report back with an actual module (which
may be a submodule) rather than just the name of the module.
Modified:
cfe/trunk/include/clang/Lex/DirectoryLookup.h
cfe/trunk/include/clang/Lex/HeaderSearch.h
cfe/trunk/include/clang/Lex/Preprocessor.h
cfe/trunk/lib/Lex/HeaderSearch.cpp
cfe/trunk/lib/Lex/PPDirectives.cpp
Modified: cfe/trunk/include/clang/Lex/DirectoryLookup.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/DirectoryLookup.h?rev=144925&r1=144924&r2=144925&view=diff
==============================================================================
--- cfe/trunk/include/clang/Lex/DirectoryLookup.h (original)
+++ cfe/trunk/include/clang/Lex/DirectoryLookup.h Thu Nov 17 16:44:56 2011
@@ -14,6 +14,7 @@
#ifndef LLVM_CLANG_LEX_DIRECTORYLOOKUP_H
#define LLVM_CLANG_LEX_DIRECTORYLOOKUP_H
+#include "clang/Lex/ModuleMap.h"
#include "clang/Basic/LLVM.h"
#include "clang/Basic/SourceManager.h"
@@ -144,13 +145,13 @@
/// \param BuildingModule The name of the module we're currently building.
///
/// \param SuggestedModule If non-null, and the file found is semantically
- /// part of a known module, this will be set to the name of the module that
- /// could be imported instead of preprocessing/parsing the file found.
+ /// part of a known module, this will be set to the module that should
+ /// be imported instead of preprocessing/parsing the file found.
const FileEntry *LookupFile(StringRef Filename, HeaderSearch &HS,
SmallVectorImpl<char> *SearchPath,
SmallVectorImpl<char> *RelativePath,
StringRef BuildingModule,
- StringRef *SuggestedModule) const;
+ ModuleMap::Module **SuggestedModule) const;
private:
const FileEntry *DoFrameworkLookup(
@@ -158,7 +159,7 @@
SmallVectorImpl<char> *SearchPath,
SmallVectorImpl<char> *RelativePath,
StringRef BuildingModule,
- StringRef *SuggestedModule) const;
+ ModuleMap::Module **SuggestedModule) const;
};
Modified: cfe/trunk/include/clang/Lex/HeaderSearch.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/HeaderSearch.h?rev=144925&r1=144924&r2=144925&view=diff
==============================================================================
--- cfe/trunk/include/clang/Lex/HeaderSearch.h (original)
+++ cfe/trunk/include/clang/Lex/HeaderSearch.h Thu Nov 17 16:44:56 2011
@@ -258,15 +258,15 @@
/// Filename for framework includes.
///
/// \param SuggestedModule If non-null, and the file found is semantically
- /// part of a known module, this will be set to the name of the module that
- /// could be imported instead of preprocessing/parsing the file found.
+ /// part of a known module, this will be set to the module that should
+ /// be imported instead of preprocessing/parsing the file found.
const FileEntry *LookupFile(StringRef Filename, bool isAngled,
const DirectoryLookup *FromDir,
const DirectoryLookup *&CurDir,
const FileEntry *CurFileEnt,
SmallVectorImpl<char> *SearchPath,
SmallVectorImpl<char> *RelativePath,
- StringRef *SuggestedModule);
+ ModuleMap::Module **SuggestedModule);
/// LookupSubframeworkHeader - Look up a subframework for the specified
/// #include file. For example, if #include'ing <HIToolbox/HIToolbox.h> from
@@ -366,9 +366,7 @@
bool hasModuleMap(StringRef Filename, const DirectoryEntry *Root);
/// \brief Retrieve the module that corresponds to the given file, if any.
- ///
- /// FIXME: This will need to be generalized for submodules.
- StringRef findModuleForHeader(const FileEntry *File);
+ ModuleMap::Module *findModuleForHeader(const FileEntry *File);
/// \brief Read the contents of the given module map file.
Modified: cfe/trunk/include/clang/Lex/Preprocessor.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/Preprocessor.h?rev=144925&r1=144924&r2=144925&view=diff
==============================================================================
--- cfe/trunk/include/clang/Lex/Preprocessor.h (original)
+++ cfe/trunk/include/clang/Lex/Preprocessor.h Thu Nov 17 16:44:56 2011
@@ -1008,7 +1008,7 @@
const DirectoryLookup *&CurDir,
SmallVectorImpl<char> *SearchPath,
SmallVectorImpl<char> *RelativePath,
- StringRef *SuggestedModule);
+ ModuleMap::Module **SuggestedModule);
/// GetCurLookup - The DirectoryLookup structure used to find the current
/// FileEntry, if CurLexer is non-null and if applicable. This allows us to
Modified: cfe/trunk/lib/Lex/HeaderSearch.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/HeaderSearch.cpp?rev=144925&r1=144924&r2=144925&view=diff
==============================================================================
--- cfe/trunk/lib/Lex/HeaderSearch.cpp (original)
+++ cfe/trunk/lib/Lex/HeaderSearch.cpp Thu Nov 17 16:44:56 2011
@@ -219,7 +219,7 @@
SmallVectorImpl<char> *SearchPath,
SmallVectorImpl<char> *RelativePath,
StringRef BuildingModule,
- StringRef *SuggestedModule) const {
+ ModuleMap::Module **SuggestedModule) const {
llvm::SmallString<1024> TmpDir;
if (isNormalDir()) {
// Concatenate the requested file onto the directory.
@@ -245,8 +245,8 @@
// If there is a module that corresponds to this header,
// suggest it.
- StringRef Module = HS.findModuleForHeader(File);
- if (!Module.empty() && Module != BuildingModule)
+ ModuleMap::Module *Module = HS.findModuleForHeader(File);
+ if (Module && Module->getTopLevelModuleName() != BuildingModule)
*SuggestedModule = Module;
return File;
@@ -285,7 +285,7 @@
SmallVectorImpl<char> *SearchPath,
SmallVectorImpl<char> *RelativePath,
StringRef BuildingModule,
- StringRef *SuggestedModule) const
+ ModuleMap::Module **SuggestedModule) const
{
FileManager &FileMgr = HS.getFileMgr();
@@ -370,7 +370,7 @@
if (const FileEntry *FE = FileMgr.getFile(FrameworkName.str(),
/*openFile=*/!AutomaticImport)) {
if (AutomaticImport)
- *SuggestedModule = Module->Name;
+ *SuggestedModule = Module;
return FE;
}
@@ -385,7 +385,7 @@
const FileEntry *FE = FileMgr.getFile(FrameworkName.str(),
/*openFile=*/!AutomaticImport);
if (FE && AutomaticImport)
- *SuggestedModule = Module->Name;
+ *SuggestedModule = Module;
return FE;
}
@@ -408,10 +408,10 @@
const FileEntry *CurFileEnt,
SmallVectorImpl<char> *SearchPath,
SmallVectorImpl<char> *RelativePath,
- StringRef *SuggestedModule)
+ ModuleMap::Module **SuggestedModule)
{
if (SuggestedModule)
- *SuggestedModule = StringRef();
+ *SuggestedModule = 0;
// If 'Filename' is absolute, check to see if it exists and no searching.
if (llvm::sys::path::is_absolute(Filename)) {
@@ -806,11 +806,11 @@
return false;
}
-StringRef HeaderSearch::findModuleForHeader(const FileEntry *File) {
+ModuleMap::Module *HeaderSearch::findModuleForHeader(const FileEntry *File) {
if (ModuleMap::Module *Module = ModMap.findModuleForHeader(File))
- return Module->getTopLevelModuleName();
+ return Module;
- return StringRef();
+ return 0;
}
bool HeaderSearch::loadModuleMapFile(const FileEntry *File) {
Modified: cfe/trunk/lib/Lex/PPDirectives.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PPDirectives.cpp?rev=144925&r1=144924&r2=144925&view=diff
==============================================================================
--- cfe/trunk/lib/Lex/PPDirectives.cpp (original)
+++ cfe/trunk/lib/Lex/PPDirectives.cpp Thu Nov 17 16:44:56 2011
@@ -486,7 +486,7 @@
const DirectoryLookup *&CurDir,
SmallVectorImpl<char> *SearchPath,
SmallVectorImpl<char> *RelativePath,
- StringRef *SuggestedModule) {
+ ModuleMap::Module **SuggestedModule) {
// If the header lookup mechanism may be relative to the current file, pass in
// info about where the current file is.
const FileEntry *CurFileEnt = 0;
@@ -1269,7 +1269,7 @@
llvm::SmallString<1024> RelativePath;
// We get the raw path only if we have 'Callbacks' to which we later pass
// the path.
- StringRef SuggestedModule;
+ ModuleMap::Module *SuggestedModule = 0;
const FileEntry *File = LookupFile(
Filename, isAngled, LookupFrom, CurDir,
Callbacks ? &SearchPath : NULL, Callbacks ? &RelativePath : NULL,
@@ -1277,9 +1277,13 @@
// If we are supposed to import a module rather than including the header,
// do so now.
- if (!SuggestedModule.empty()) {
+ if (SuggestedModule) {
+ // FIXME: Actually load the submodule that we were given.
+ while (SuggestedModule->Parent)
+ SuggestedModule = SuggestedModule->Parent;
+
TheModuleLoader.loadModule(IncludeTok.getLocation(),
- Identifiers.get(SuggestedModule),
+ Identifiers.get(SuggestedModule->Name),
FilenameTok.getLocation());
return;
}
More information about the cfe-commits
mailing list