|
clang
5.0.0
|
#include "clang/Lex/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... | |
| const DirectoryEntry * | getBuiltinDir () const |
| Get the directory that contains Clang-supplied include files. More... | |
| void | addModuleMapCallbacks (std::unique_ptr< ModuleMapCallbacks > Callback) |
| Add a module map callback. More... | |
| KnownHeader | findModuleForHeader (const FileEntry *File, bool AllowTextual=false) |
| Retrieve the module that owns the given header file, if any. More... | |
| ArrayRef< KnownHeader > | findAllModulesForHeader (const FileEntry *File) const |
| Retrieve all the modules that contain the given header file. More... | |
| void | resolveHeaderDirectives (const FileEntry *File) const |
| Resolve all lazy header directives for the specified file. More... | |
| void | resolveHeaderDirectives (Module *Mod) const |
| Resolve all lazy header directives for the specified module. More... | |
| void | diagnoseHeaderInclusion (Module *RequestingModule, bool RequestingModuleIsModuleInterface, 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 * | createModuleForInterfaceUnit (SourceLocation Loc, StringRef Name) |
| Create a new module for a C++ Modules TS module interface unit. 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. 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... | |
| 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, bool Imported=false) |
| 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, FileID ID=FileID(), unsigned *Offset=nullptr, 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 |
Static Public Member Functions | |
| static ModuleHeaderRole | headerKindToRole (Module::HeaderKind Kind) |
| Convert a header kind to a role. Requires Kind to not be HK_Excluded. More... | |
| static Module::HeaderKind | headerRoleToKind (ModuleHeaderRole Role) |
| Convert a header role to a kind. More... | |
| static bool | isBuiltinHeader (StringRef FileName) |
| Is this a compiler builtin header? More... | |
Friends | |
| class | ModuleMapParser |
Definition at line 74 of file ModuleMap.h.
| typedef llvm::SmallPtrSet<const FileEntry *, 1> clang::ModuleMap::AdditionalModMapsSet |
Definition at line 165 of file ModuleMap.h.
| typedef llvm::StringMap<Module *>::const_iterator clang::ModuleMap::module_iterator |
Definition at line 602 of file ModuleMap.h.
Flags describing the role of a module header.
Definition at line 104 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 255 of file ModuleMap.cpp.
| ModuleMap::~ModuleMap | ( | ) |
Destroy the module map.
Definition at line 264 of file ModuleMap.cpp.
|
inline |
Definition at line 522 of file ModuleMap.h.
| void ModuleMap::addHeader | ( | Module * | Mod, |
| Module::Header | Header, | ||
| ModuleHeaderRole | Role, | ||
| bool | Imported = false |
||
| ) |
Adds this header to the given module.
| Role | The role of the header wrt the module. |
Definition at line 1047 of file ModuleMap.cpp.
References clang::Module::Header::Entry, clang::FileEntry::getName(), clang::Module::getTopLevelModule(), headerRoleToKind(), clang::Module::Headers, clang::LangOptions::isCompilingModule(), and clang::HeaderSearch::MarkFileModuleHeader().
Referenced by clang::serialization::reader::HeaderFileInfoTrait::ReadData().
|
inline |
Add a module map callback.
Definition at line 365 of file ModuleMap.h.
Referenced by clang::DependencyCollector::attachToPreprocessor(), clang::ModuleDependencyCollector::attachToPreprocessor(), and clang::DependencyFileGenerator::CreateAndAttachToPreprocessor().
| Module * ModuleMap::createModuleForInterfaceUnit | ( | SourceLocation | Loc, |
| StringRef | Name | ||
| ) |
Create a new module for a C++ Modules TS module interface unit.
The module must not already exist, and will be configured for the current compilation.
Note that this also sets the current module to the newly-created module.
Definition at line 749 of file ModuleMap.cpp.
References clang::LangOptions::CurrentModule, clang::SourceManager::getFileEntryForID(), clang::SourceManager::getMainFileID(), clang::Module::Kind, clang::Module::ModuleInterfaceUnit, Name, PrivateHeader, and clang::Result.
| void ModuleMap::diagnoseHeaderInclusion | ( | Module * | RequestingModule, |
| bool | RequestingModuleIsModuleInterface, | ||
| SourceLocation | FilenameLoc, | ||
| StringRef | Filename, | ||
| const FileEntry * | File | ||
| ) |
Reports errors if a module must not include a specific file.
| RequestingModule | The module including a file. |
| RequestingModuleIsModuleInterface | true if the inclusion is in the interface of RequestingModule, false if it's in the implementation of RequestingModule. Value is ignored and meaningless if RequestingModule is nullptr. |
| FilenameLoc | The location of the inclusion's filename. |
| Filename | The included filename as written. |
| File | The included file. |
Definition at line 406 of file ModuleMap.cpp.
References clang::Module::directlyUses(), Filename, clang::Module::getFullModuleName(), clang::ModuleMap::KnownHeader::getModule(), clang::FileEntry::getName(), clang::Module::getTopLevelModule(), getTopLevelOrNull(), clang::LangOptions::isCompilingModule(), clang::Module::IsFramework, clang::DiagnosticsEngine::Report(), resolveHeaderDirectives(), resolveUses(), and violatesPrivateInclude().
Referenced by clang::Preprocessor::LookupFile().
| LLVM_DUMP_METHOD void ModuleMap::dump | ( | ) |
Dump the contents of the module map, for debugging purposes.
Definition at line 1108 of file ModuleMap.cpp.
References E, I, and clang::Module::print().
| void ModuleMap::excludeHeader | ( | Module * | Mod, |
| Module::Header | Header | ||
| ) |
Marks this header as being excluded from the given module.
Definition at line 1076 of file ModuleMap.cpp.
References clang::Module::Header::Entry, clang::Module::Headers, and clang::Module::HK_Excluded.
| ArrayRef< ModuleMap::KnownHeader > ModuleMap::findAllModulesForHeader | ( | const FileEntry * | File | ) | const |
Retrieve all the modules that contain the given header file.
This may not include umbrella modules, nor information from external sources, if they have not yet been inferred / loaded.
Typically, findModuleForHeader should be used instead, as it picks the preferred module for the header.
Definition at line 600 of file ModuleMap.cpp.
References clang::None, and resolveHeaderDirectives().
Referenced by clang::Preprocessor::getModuleHeaderToIncludeForDiagnostics().
| 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 705 of file ModuleMap.cpp.
Referenced by clang::CompilerInstance::loadModuleFile(), clang::HeaderSearch::lookupModule(), lookupModuleQualified(), lookupModuleUnqualified(), and clang::serialization::ModuleManager::removeModules().
| ModuleMap::KnownHeader ModuleMap::findModuleForHeader | ( | const FileEntry * | File, |
| bool | AllowTextual = false |
||
| ) |
Retrieve the module that owns the given header file, if any.
| File | The header file that is likely to be included. |
| AllowTextual | If true and File is a textual header, return its owning module. Otherwise, no KnownHeader will be returned if the file is only known as a textual header. |
Definition at line 502 of file ModuleMap.cpp.
References clang::ModuleMap::KnownHeader::getModule(), clang::Module::getTopLevelModule(), isBetterKnownHeader(), clang::Result, and TextualHeader.
Referenced by clang::HeaderSearch::findModuleForHeader(), and clang::Preprocessor::getModuleForLocation().
| 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 730 of file ModuleMap.cpp.
References clang::LangOptions::CurrentModule, lookupModuleQualified(), Name, and clang::Result.
|
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 515 of file ModuleMap.h.
References I.
|
inline |
Get the directory that contains Clang-supplied include files.
Definition at line 357 of file ModuleMap.h.
Referenced by clang::HeaderSearch::ShouldEnterIncludeFile().
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 1087 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 1095 of file ModuleMap.cpp.
References getContainingModuleMapFile(), and clang::Module::IsInferred.
Referenced by compileModuleImpl(), and clang::HeaderSearch::getModuleFileName().
|
static |
Convert a header kind to a role. Requires Kind to not be HK_Excluded.
Definition at line 54 of file ModuleMap.cpp.
References clang::Module::HK_Excluded, clang::Module::HK_Normal, clang::Module::HK_Private, clang::Module::HK_PrivateTextual, clang::Module::HK_Textual, NormalHeader, PrivateHeader, and TextualHeader.
|
static |
Convert a header role to a kind.
Definition at line 39 of file ModuleMap.cpp.
References clang::Module::HK_Normal, clang::Module::HK_Private, clang::Module::HK_PrivateTextual, clang::Module::HK_Textual, NormalHeader, PrivateHeader, and TextualHeader.
Referenced by addHeader().
| 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 794 of file ModuleMap.cpp.
References clang::Module::IsSystem.
|
static |
Is this a compiler builtin header?
Determine whether the given file name is the name of a builtin header, supplied by Clang to replace, override, or augment existing system headers.
Definition at line 315 of file ModuleMap.cpp.
References FileName.
Referenced by clang::HeaderSearch::ShouldEnterIncludeFile().
Determine whether the given header is part of a module marked 'unavailable'.
Definition at line 608 of file ModuleMap.cpp.
References isHeaderUnavailableInModule().
| 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 613 of file ModuleMap.cpp.
References E, clang::FileEntry::getDir(), clang::FileManager::getDirectory(), clang::SourceManager::getFileManager(), clang::DirectoryEntry::getName(), clang::FileEntry::getName(), clang::Module::getUmbrellaDir(), I, clang::if(), clang::Module::InferSubmodules, clang::Module::isAvailable(), clang::Module::isSubModuleOf(), lookupModuleQualified(), clang::Module::Parent, resolveHeaderDirectives(), sanitizeFilenameAsIdentifier(), and TextualHeader.
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 723 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 713 of file ModuleMap.cpp.
References Context, findModule(), lookupModuleQualified(), and clang::Module::Parent.
|
inline |
Definition at line 603 of file ModuleMap.h.
Referenced by clang::HeaderSearch::collectAllModules(), and clang::CompilerInstance::loadGlobalModuleIndex().
|
inline |
Definition at line 604 of file ModuleMap.h.
Referenced by clang::HeaderSearch::collectAllModules(), and clang::CompilerInstance::loadGlobalModuleIndex().
| bool ModuleMap::parseModuleMapFile | ( | const FileEntry * | File, |
| bool | IsSystem, | ||
| const DirectoryEntry * | HomeDir, | ||
| FileID | ID = FileID(), |
||
| unsigned * | Offset = nullptr, |
||
| 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. |
| ID | The FileID of the file to process, if we've already entered it. |
| Offset | [inout] On input the offset at which to start parsing. On output, the offset at which the module map terminated. |
| ExternModuleLoc | The location of the "extern module" declaration that caused us to load this module map file, if any. |
Definition at line 2701 of file ModuleMap.cpp.
References Buffer, clang::SrcMgr::C_System_ModuleMap, clang::SrcMgr::C_User_ModuleMap, clang::SourceManager::createFileID(), clang::SourceManager::getBuffer(), clang::SourceManager::getDecomposedLoc(), clang::ModuleMapParser::getLocation(), clang::SourceManager::getLocForStartOfFile(), clang::if(), clang::FileID::isInvalid(), clang::ModuleMapParser::parseModuleMapFile(), 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 1156 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(), and clang::Preprocessor::EnterSubmodule().
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 1130 of file ModuleMap.cpp.
References clang::Module::Exports, and clang::Module::UnresolvedExports.
Referenced by clang::Sema::ActOnEndOfTranslationUnit(), and clang::Preprocessor::EnterSubmodule().
| void ModuleMap::resolveHeaderDirectives | ( | const FileEntry * | File | ) | const |
Resolve all lazy header directives for the specified file.
This ensures that the HeaderFileInfo on HeaderSearch is up to date. This is effectively internal, but is exposed so HeaderSearch can call it.
Definition at line 1023 of file ModuleMap.cpp.
References clang::FileEntry::getModificationTime(), and clang::FileEntry::getSize().
Referenced by collectModuleHeaderIncludes(), diagnoseHeaderInclusion(), findAllModulesForHeader(), isHeaderUnavailableInModule(), and clang::HeaderSearch::ShouldEnterIncludeFile().
| void ModuleMap::resolveHeaderDirectives | ( | Module * | Mod | ) | const |
Resolve all lazy header directives for the specified module.
Definition at line 1039 of file ModuleMap.cpp.
References clang::Module::UnresolvedHeaders.
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 1143 of file ModuleMap.cpp.
References clang::Module::DirectUses, and clang::Module::UnresolvedDirectUses.
Referenced by clang::Sema::ActOnEndOfTranslationUnit(), diagnoseHeaderInclusion(), clang::Preprocessor::EnterSubmodule(), and suggestModule().
|
inline |
Set the directory that contains Clang-supplied include files, such as our stdarg.h or tgmath.h.
Definition at line 352 of file ModuleMap.h.
Referenced by clang::ApplyHeaderSearchOptions().
Definition at line 1103 of file ModuleMap.cpp.
References clang::Module::IsInferred.
Referenced by prepareToBuildModule().
| void ModuleMap::setTarget | ( | const TargetInfo & | Target | ) |
Set the target information.
Definition at line 269 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 981 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 969 of file ModuleMap.cpp.
References clang::FileEntry::getDir(), clang::SourceManager::getFileManager(), NormalHeader, clang::Module::Umbrella, and clang::Module::UmbrellaAsWritten.
|
friend |
Definition at line 241 of file ModuleMap.h.
1.8.6