clang
3.7.0
|
#include <ModuleMap.h>
Classes | |
class | KnownHeader |
A header that is known to reside within a given module, whether it was included or excluded. More... | |
Public Types | |
enum | ModuleHeaderRole { NormalHeader = 0x0, PrivateHeader = 0x1, TextualHeader = 0x2 } |
Flags describing the role of a module header. More... | |
typedef llvm::SmallPtrSet < const FileEntry *, 1 > | AdditionalModMapsSet |
typedef llvm::StringMap < Module * >::const_iterator | module_iterator |
Public Member Functions | |
ModuleMap (SourceManager &SourceMgr, DiagnosticsEngine &Diags, const LangOptions &LangOpts, const TargetInfo *Target, HeaderSearch &HeaderInfo) | |
Construct a new module map. More... | |
~ModuleMap () | |
Destroy the module map. More... | |
void | setTarget (const TargetInfo &Target) |
Set the target information. More... | |
void | setBuiltinIncludeDir (const DirectoryEntry *Dir) |
Set the directory that contains Clang-supplied include files, such as our stdarg.h or tgmath.h. More... | |
KnownHeader | findModuleForHeader (const FileEntry *File) |
Retrieve the module that owns the given header file, if any. More... | |
void | diagnoseHeaderInclusion (Module *RequestingModule, SourceLocation FilenameLoc, StringRef Filename, const FileEntry *File) |
Reports errors if a module must not include a specific file. More... | |
bool | isHeaderInUnavailableModule (const FileEntry *Header) const |
Determine whether the given header is part of a module marked 'unavailable'. More... | |
bool | isHeaderUnavailableInModule (const FileEntry *Header, const Module *RequestingModule) const |
Determine whether the given header is unavailable as part of the specified module. More... | |
Module * | findModule (StringRef Name) const |
Retrieve a module with the given name. More... | |
Module * | lookupModuleUnqualified (StringRef Name, Module *Context) const |
Retrieve a module with the given name using lexical name lookup, starting at the given context. More... | |
Module * | lookupModuleQualified (StringRef Name, Module *Context) const |
Retrieve a module with the given name within the given context, using direct (qualified) name lookup. More... | |
std::pair< Module *, bool > | findOrCreateModule (StringRef Name, Module *Parent, bool IsFramework, bool IsExplicit) |
Find a new module or submodule, or create it if it does not already exist. More... | |
Module * | inferFrameworkModule (const DirectoryEntry *FrameworkDir, bool IsSystem, Module *Parent) |
Infer the contents of a framework module map from the given framework directory. More... | |
const FileEntry * | getContainingModuleMapFile (const Module *Module) const |
Retrieve the module map file containing the definition of the given module. More... | |
const FileEntry * | getModuleMapFileForUniquing (const Module *M) const |
Get the module map file that (along with the module name) uniquely identifies this module. More... | |
void | setInferredModuleAllowedBy (Module *M, const FileEntry *ModuleMap) |
AdditionalModMapsSet * | getAdditionalModuleMapFiles (const Module *M) |
Get any module map files other than getModuleMapFileForUniquing(M) that define submodules of a top-level module M . This is cheaper than getting the module map file for each submodule individually, since the expected number of results is very small. More... | |
void | addAdditionalModuleMapFile (const Module *M, const FileEntry *ModuleMap) |
bool | resolveExports (Module *Mod, bool Complain) |
Resolve all of the unresolved exports in the given module. More... | |
bool | resolveUses (Module *Mod, bool Complain) |
Resolve all of the unresolved uses in the given module. More... | |
bool | resolveConflicts (Module *Mod, bool Complain) |
Resolve all of the unresolved conflicts in the given module. More... | |
Module * | inferModuleFromLocation (FullSourceLoc Loc) |
Infers the (sub)module based on the given source location and source manager. More... | |
void | setUmbrellaHeader (Module *Mod, const FileEntry *UmbrellaHeader, Twine NameAsWritten) |
Sets the umbrella header of the given module to the given header. More... | |
void | setUmbrellaDir (Module *Mod, const DirectoryEntry *UmbrellaDir, Twine NameAsWritten) |
Sets the umbrella directory of the given module to the given directory. More... | |
void | addHeader (Module *Mod, Module::Header Header, ModuleHeaderRole Role) |
Adds this header to the given module. More... | |
void | excludeHeader (Module *Mod, Module::Header Header) |
Marks this header as being excluded from the given module. More... | |
bool | parseModuleMapFile (const FileEntry *File, bool IsSystem, const DirectoryEntry *HomeDir, SourceLocation ExternModuleLoc=SourceLocation()) |
Parse the given module map file, and record any modules we encounter. More... | |
void | dump () |
Dump the contents of the module map, for debugging purposes. More... | |
module_iterator | module_begin () const |
module_iterator | module_end () const |
Public Attributes | |
Module * | SourceModule |
std::string | SourceModuleName |
Friends | |
class | ModuleMapParser |
Definition at line 39 of file ModuleMap.h.
typedef llvm::SmallPtrSet<const FileEntry *, 1> clang::ModuleMap::AdditionalModMapsSet |
Definition at line 115 of file ModuleMap.h.
typedef llvm::StringMap<Module *>::const_iterator clang::ModuleMap::module_iterator |
Definition at line 466 of file ModuleMap.h.
Flags describing the role of a module header.
Definition at line 72 of file ModuleMap.h.
ModuleMap::ModuleMap | ( | SourceManager & | SourceMgr, |
DiagnosticsEngine & | Diags, | ||
const LangOptions & | LangOpts, | ||
const TargetInfo * | Target, | ||
HeaderSearch & | HeaderInfo | ||
) |
Construct a new module map.
SourceMgr | The source manager used to find module files and headers. This source manager should be shared with the header-search mechanism, since they will refer to the same headers. |
Diags | A diagnostic engine used for diagnostics. |
LangOpts | Language options for this translation unit. |
Target | The target for this translation unit. |
Definition at line 87 of file ModuleMap.cpp.
ModuleMap::~ModuleMap | ( | ) |
Destroy the module map.
Definition at line 96 of file ModuleMap.cpp.
|
inline |
Definition at line 382 of file ModuleMap.h.
void ModuleMap::addHeader | ( | Module * | Mod, |
Module::Header | Header, | ||
ModuleHeaderRole | Role | ||
) |
Adds this header to the given module.
Role | The role of the header wrt the module. |
Definition at line 787 of file ModuleMap.cpp.
References clang::Module::Header::Entry, clang::Module::getTopLevelModule(), headerRoleToKind(), clang::Module::Headers, clang::HeaderSearch::MarkFileModuleHeader(), and TextualHeader.
Referenced by clang::serialization::reader::HeaderFileInfoTrait::ReadData().
void ModuleMap::diagnoseHeaderInclusion | ( | Module * | RequestingModule, |
SourceLocation | FilenameLoc, | ||
StringRef | Filename, | ||
const FileEntry * | File | ||
) |
Reports errors if a module must not include a specific file.
RequestingModule | The module including a file. |
FilenameLoc | The location of the inclusion's filename. |
Filename | The included filename as written. |
File | The included file. |
Definition at line 245 of file ModuleMap.cpp.
References clang::Module::directlyUses(), clang::Module::getFullModuleName(), clang::ModuleMap::KnownHeader::getModule(), clang::ModuleMap::KnownHeader::getRole(), clang::Module::getTopLevelModule(), getTopLevelOrNull(), clang::Module::IsFramework, clang::Module::isSubModuleOf(), clang::DiagnosticsEngine::Report(), resolveUses(), SourceModule, and violatesPrivateInclude().
Referenced by clang::Preprocessor::LookupFile().
void ModuleMap::dump | ( | ) |
Dump the contents of the module map, for debugging purposes.
Definition at line 831 of file ModuleMap.cpp.
void ModuleMap::excludeHeader | ( | Module * | Mod, |
Module::Header | Header | ||
) |
Marks this header as being excluded from the given module.
Definition at line 799 of file ModuleMap.cpp.
References clang::Module::Header::Entry, clang::Module::Headers, and clang::Module::HK_Excluded.
Module * ModuleMap::findModule | ( | StringRef | Name | ) | const |
Retrieve a module with the given name.
Name | The name of the module to look up. |
Definition at line 520 of file ModuleMap.cpp.
Referenced by clang::HeaderSearch::lookupModule(), lookupModuleQualified(), lookupModuleUnqualified(), and clang::serialization::ModuleManager::removeModules().
ModuleMap::KnownHeader ModuleMap::findModuleForHeader | ( | const FileEntry * | File | ) |
Retrieve the module that owns the given header file, if any.
File | The header file that is likely to be included. |
Definition at line 337 of file ModuleMap.cpp.
References clang::Module::addTopHeader(), clang::Module::Exports, findOrCreateModule(), clang::ModuleMap::KnownHeader::getModule(), getModuleMapFileForUniquing(), clang::FileEntry::getName(), clang::Module::getTopLevelModule(), clang::Module::getUmbrellaDir(), clang::if(), clang::Module::InferExplicitSubmodules, clang::Module::InferExportWildcard, clang::Module::InferSubmodules, clang::Module::isAvailable(), isBetterKnownHeader(), clang::Module::IsInferred, NormalHeader, clang::Module::Parent, clang::Result, sanitizeFilenameAsIdentifier(), and TextualHeader.
Referenced by clang::HeaderSearch::findModuleForHeader(), clang::Preprocessor::getModuleForLocation(), and inferModuleFromLocation().
std::pair< Module *, bool > ModuleMap::findOrCreateModule | ( | StringRef | Name, |
Module * | Parent, | ||
bool | IsFramework, | ||
bool | IsExplicit | ||
) |
Find a new module or submodule, or create it if it does not already exist.
Name | The name of the module to find or create. |
Parent | The module that will act as the parent of this submodule, or NULL to indicate that this is a top-level module. |
IsFramework | Whether this is a framework module. |
IsExplicit | Whether this is an explicit submodule. |
Definition at line 546 of file ModuleMap.cpp.
References clang::LangOptions::CurrentModule, lookupModuleQualified(), clang::Result, SourceModule, and SourceModuleName.
Referenced by findModuleForHeader().
|
inline |
Get any module map files other than getModuleMapFileForUniquing(M) that define submodules of a top-level module M
. This is cheaper than getting the module map file for each submodule individually, since the expected number of results is very small.
Definition at line 375 of file ModuleMap.h.
Retrieve the module map file containing the definition of the given module.
Module | The module whose module map file will be returned, if known. |
Definition at line 810 of file ModuleMap.cpp.
References clang::Module::DefinitionLoc, clang::SourceManager::getFileEntryForID(), clang::SourceManager::getFileID(), and clang::SourceLocation::isInvalid().
Referenced by compileModuleImpl(), and getModuleMapFileForUniquing().
Get the module map file that (along with the module name) uniquely identifies this module.
The particular module that Name
refers to may depend on how the module was found in header search. However, the combination of Name
and this module map will be globally unique for top-level modules. In the case of inferred modules, returns the module map that allowed the inference (e.g. contained 'module *'). Otherwise, returns getContainingModuleMapFile().
Definition at line 818 of file ModuleMap.cpp.
References getContainingModuleMapFile(), and clang::Module::IsInferred.
Referenced by compileModuleImpl(), findModuleForHeader(), and clang::HeaderSearch::getModuleFileName().
Module * ModuleMap::inferFrameworkModule | ( | const DirectoryEntry * | FrameworkDir, |
bool | IsSystem, | ||
Module * | Parent | ||
) |
Infer the contents of a framework module map from the given framework directory.
Definition at line 586 of file ModuleMap.cpp.
References clang::Module::IsSystem.
Module * ModuleMap::inferModuleFromLocation | ( | FullSourceLoc | Loc | ) |
Infers the (sub)module based on the given source location and source manager.
Loc | The location within the source that we are querying, along with its source manager. |
Definition at line 894 of file ModuleMap.cpp.
References findModuleForHeader(), clang::FullSourceLoc::getExpansionLoc(), clang::SourceManager::getFileEntryForID(), clang::FullSourceLoc::getFileID(), clang::SourceManager::getFileID(), clang::SourceManager::getIncludeLoc(), clang::FullSourceLoc::getManager(), clang::ModuleMap::KnownHeader::getModule(), clang::SourceLocation::isFileID(), and clang::SourceLocation::isInvalid().
Referenced by clang::Preprocessor::getModuleContainingLocation(), and clang::ASTWriter::inferSubmoduleIDFromLocation().
Determine whether the given header is part of a module marked 'unavailable'.
Definition at line 434 of file ModuleMap.cpp.
References isHeaderUnavailableInModule().
Referenced by clang::Preprocessor::HandleEndOfFile().
bool ModuleMap::isHeaderUnavailableInModule | ( | const FileEntry * | Header, |
const Module * | RequestingModule | ||
) | const |
Determine whether the given header is unavailable as part of the specified module.
Definition at line 439 of file ModuleMap.cpp.
References clang::FileEntry::getDir(), clang::FileManager::getDirectory(), clang::SourceManager::getFileManager(), clang::DirectoryEntry::getName(), clang::FileEntry::getName(), clang::Module::getUmbrellaDir(), clang::if(), clang::Module::InferSubmodules, clang::Module::isSubModuleOf(), lookupModuleQualified(), clang::Module::Parent, and sanitizeFilenameAsIdentifier().
Referenced by collectModuleHeaderIncludes(), and isHeaderInUnavailableModule().
Retrieve a module with the given name within the given context, using direct (qualified) name lookup.
Name | The name of the module to look up. |
Context | The module for which we will look for a submodule. If null, we will look for a top-level module. |
Definition at line 538 of file ModuleMap.cpp.
References findModule(), and clang::Module::findSubmodule().
Referenced by findOrCreateModule(), isHeaderUnavailableInModule(), and lookupModuleUnqualified().
Retrieve a module with the given name using lexical name lookup, starting at the given context.
Name | The name of the module to look up. |
Context | The module context, from which we will perform lexical name lookup. |
Definition at line 528 of file ModuleMap.cpp.
References Context, findModule(), lookupModuleQualified(), and clang::Module::Parent.
|
inline |
Definition at line 467 of file ModuleMap.h.
Referenced by clang::HeaderSearch::collectAllModules(), and clang::CompilerInstance::loadGlobalModuleIndex().
|
inline |
Definition at line 468 of file ModuleMap.h.
Referenced by clang::HeaderSearch::collectAllModules(), and clang::CompilerInstance::loadGlobalModuleIndex().
bool ModuleMap::parseModuleMapFile | ( | const FileEntry * | File, |
bool | IsSystem, | ||
const DirectoryEntry * | HomeDir, | ||
SourceLocation | ExternModuleLoc = SourceLocation() |
||
) |
Parse the given module map file, and record any modules we encounter.
File | The file to be parsed. |
IsSystem | Whether this module map file is in a system header directory, and therefore should be considered a system module. |
HomeDir | The directory in which relative paths within this module map file will be resolved. |
ExternModuleLoc | The location of the "extern module" declaration that caused us to load this module map file, if any. |
Definition at line 2321 of file ModuleMap.cpp.
References clang::SrcMgr::C_System, clang::SrcMgr::C_User, clang::SourceManager::createFileID(), clang::SourceManager::getBuffer(), and clang::Result.
Resolve all of the unresolved conflicts in the given module.
Mod | The module whose conflicts should be resolved. |
Complain | Whether to emit diagnostics for failures. |
Definition at line 879 of file ModuleMap.cpp.
References clang::Module::Conflicts, clang::Module::Conflict::Message, clang::Module::Conflict::Other, and clang::Module::UnresolvedConflicts.
Referenced by clang::Sema::ActOnEndOfTranslationUnit().
Resolve all of the unresolved exports in the given module.
Mod | The module whose exports should be resolved. |
Complain | Whether to emit diagnostics for failures. |
Definition at line 853 of file ModuleMap.cpp.
References clang::Module::Exports, and clang::Module::UnresolvedExports.
Referenced by clang::Sema::ActOnEndOfTranslationUnit().
Resolve all of the unresolved uses in the given module.
Mod | The module whose uses should be resolved. |
Complain | Whether to emit diagnostics for failures. |
Definition at line 866 of file ModuleMap.cpp.
References clang::Module::DirectUses, and clang::Module::UnresolvedDirectUses.
Referenced by clang::Sema::ActOnEndOfTranslationUnit(), and diagnoseHeaderInclusion().
|
inline |
Set the directory that contains Clang-supplied include files, such as our stdarg.h or tgmath.h.
Definition at line 262 of file ModuleMap.h.
Referenced by clang::ApplyHeaderSearchOptions().
Definition at line 826 of file ModuleMap.cpp.
References clang::Module::IsInferred.
Referenced by clang::GenerateModuleAction::BeginSourceFileAction().
void ModuleMap::setTarget | ( | const TargetInfo & | Target | ) |
Set the target information.
Definition at line 104 of file ModuleMap.cpp.
Referenced by clang::HeaderSearch::setTarget().
void ModuleMap::setUmbrellaDir | ( | Module * | Mod, |
const DirectoryEntry * | UmbrellaDir, | ||
Twine | NameAsWritten | ||
) |
Sets the umbrella directory of the given module to the given directory.
Definition at line 766 of file ModuleMap.cpp.
References clang::Module::Umbrella, and clang::Module::UmbrellaAsWritten.
void ModuleMap::setUmbrellaHeader | ( | Module * | Mod, |
const FileEntry * | UmbrellaHeader, | ||
Twine | NameAsWritten | ||
) |
Sets the umbrella header of the given module to the given header.
Definition at line 758 of file ModuleMap.cpp.
References clang::FileEntry::getDir(), NormalHeader, clang::Module::Umbrella, and clang::Module::UmbrellaAsWritten.
|
friend |
Definition at line 180 of file ModuleMap.h.
Module* clang::ModuleMap::SourceModule |
Definition at line 60 of file ModuleMap.h.
Referenced by diagnoseHeaderInclusion(), findOrCreateModule(), and clang::Preprocessor::getModuleForLocation().
std::string clang::ModuleMap::SourceModuleName |
Definition at line 61 of file ModuleMap.h.
Referenced by findOrCreateModule().