clang 20.0.0git
|
#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 , ExcludedHeader = 0x4 } |
Flags describing the role of a module header. More... | |
using | AdditionalModMapsSet = llvm::DenseSet< FileEntryRef > |
using | module_iterator = llvm::StringMap< Module * >::const_iterator |
Public Member Functions | |
void | resolveLinkAsDependencies (Module *Mod) |
Use PendingLinkAsModule information to mark top level link names that are going to be replaced by export_as aliases. | |
void | addLinkAsDependency (Module *Mod) |
Make module to use export_as as the link dependency name if enough information is available or add it to a pending list otherwise. | |
ModuleMap (SourceManager &SourceMgr, DiagnosticsEngine &Diags, const LangOptions &LangOpts, const TargetInfo *Target, HeaderSearch &HeaderInfo) | |
Construct a new module map. | |
~ModuleMap () | |
Destroy the module map. | |
void | setTarget (const TargetInfo &Target) |
Set the target information. | |
void | setBuiltinIncludeDir (DirectoryEntryRef Dir) |
Set the directory that contains Clang-supplied include files, such as our stdarg.h or tgmath.h. | |
OptionalDirectoryEntryRef | getBuiltinDir () const |
Get the directory that contains Clang-supplied include files. | |
bool | isBuiltinHeader (FileEntryRef File) |
Is this a compiler builtin header? | |
bool | shouldImportRelativeToBuiltinIncludeDir (StringRef FileName, Module *Module) const |
void | addModuleMapCallbacks (std::unique_ptr< ModuleMapCallbacks > Callback) |
Add a module map callback. | |
KnownHeader | findModuleForHeader (FileEntryRef File, bool AllowTextual=false, bool AllowExcluded=false) |
Retrieve the module that owns the given header file, if any. | |
ArrayRef< KnownHeader > | findAllModulesForHeader (FileEntryRef File) |
Retrieve all the modules that contain the given header file. | |
ArrayRef< KnownHeader > | findResolvedModulesForHeader (FileEntryRef File) const |
Like findAllModulesForHeader, but do not attempt to infer module ownership from umbrella headers if we've not already done so. | |
void | resolveHeaderDirectives (const FileEntry *File) const |
Resolve all lazy header directives for the specified file. | |
void | resolveHeaderDirectives (Module *Mod, std::optional< const FileEntry * > File) const |
Resolve lazy header directives for the specified module. | |
void | diagnoseHeaderInclusion (Module *RequestingModule, bool RequestingModuleIsModuleInterface, SourceLocation FilenameLoc, StringRef Filename, FileEntryRef File) |
Reports errors if a module must not include a specific file. | |
bool | isHeaderInUnavailableModule (FileEntryRef Header) const |
Determine whether the given header is part of a module marked 'unavailable'. | |
bool | isHeaderUnavailableInModule (FileEntryRef Header, const Module *RequestingModule) const |
Determine whether the given header is unavailable as part of the specified module. | |
Module * | findModule (StringRef Name) const |
Retrieve a module with the given name. | |
Module * | findOrInferSubmodule (Module *Parent, StringRef Name) |
Module * | lookupModuleUnqualified (StringRef Name, Module *Context) const |
Retrieve a module with the given name using lexical name lookup, starting at the given context. | |
Module * | lookupModuleQualified (StringRef Name, Module *Context) const |
Retrieve a module with the given name within the given context, using direct (qualified) name lookup. | |
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. | |
Module * | findOrCreateModuleFirst (StringRef Name, Module *Parent, bool IsFramework, bool IsExplicit) |
Call ModuleMap::findOrCreateModule and throw away the information whether the module was found or created. | |
Module * | createModule (StringRef Name, Module *Parent, bool IsFramework, bool IsExplicit) |
Create new submodule, assuming it does not exist. | |
Module * | createGlobalModuleFragmentForModuleUnit (SourceLocation Loc, Module *Parent=nullptr) |
Create a global module fragment for a C++ module unit. | |
Module * | createImplicitGlobalModuleFragmentForModuleUnit (SourceLocation Loc, Module *Parent) |
Module * | createPrivateModuleFragmentForInterfaceUnit (Module *Parent, SourceLocation Loc) |
Create a global module fragment for a C++ module interface unit. | |
Module * | createModuleUnitWithKind (SourceLocation Loc, StringRef Name, Module::ModuleKind Kind) |
Create a new C++ module with the specified kind, and reparent any pending global module fragment(s) to it. | |
Module * | createModuleForInterfaceUnit (SourceLocation Loc, StringRef Name) |
Create a new module for a C++ module interface unit. | |
Module * | createModuleForImplementationUnit (SourceLocation Loc, StringRef Name) |
Create a new module for a C++ module implementation unit. | |
Module * | createHeaderUnit (SourceLocation Loc, StringRef Name, Module::Header H) |
Create a C++20 header unit. | |
Module * | inferFrameworkModule (DirectoryEntryRef FrameworkDir, bool IsSystem, Module *Parent) |
Infer the contents of a framework module map from the given framework directory. | |
Module * | createShadowedModule (StringRef Name, bool IsFramework, Module *ShadowingModule) |
Create a new top-level module that is shadowed by ShadowingModule . | |
void | finishModuleDeclarationScope () |
Creates a new declaration scope for module names, allowing previously defined modules to shadow definitions from the new scope. | |
bool | mayShadowNewModule (Module *ExistingModule) |
bool | canInferFrameworkModule (const DirectoryEntry *Dir) const |
Check whether a framework module can be inferred in the given directory. | |
FileID | getContainingModuleMapFileID (const Module *Module) const |
Retrieve the module map file containing the definition of the given module. | |
OptionalFileEntryRef | getContainingModuleMapFile (const Module *Module) const |
FileID | getModuleMapFileIDForUniquing (const Module *M) const |
Get the module map file that (along with the module name) uniquely identifies this module. | |
OptionalFileEntryRef | getModuleMapFileForUniquing (const Module *M) const |
void | setInferredModuleAllowedBy (Module *M, FileID ModMapFID) |
std::error_code | canonicalizeModuleMapPath (SmallVectorImpl< char > &Path) |
Canonicalize Path in a manner suitable for a module map file. | |
AdditionalModMapsSet * | getAdditionalModuleMapFiles (const Module *M) |
Get any module map files other than getModuleMapFileForUniquing(M) that define submodules of a top-level module M . | |
void | addAdditionalModuleMapFile (const Module *M, FileEntryRef ModuleMap) |
bool | resolveExports (Module *Mod, bool Complain) |
Resolve all of the unresolved exports in the given module. | |
bool | resolveUses (Module *Mod, bool Complain) |
Resolve all of the unresolved uses in the given module. | |
bool | resolveConflicts (Module *Mod, bool Complain) |
Resolve all of the unresolved conflicts in the given module. | |
void | setUmbrellaHeaderAsWritten (Module *Mod, FileEntryRef UmbrellaHeader, const Twine &NameAsWritten, const Twine &PathRelativeToRootModuleDirectory) |
Sets the umbrella header of the given module to the given header. | |
void | setUmbrellaDirAsWritten (Module *Mod, DirectoryEntryRef UmbrellaDir, const Twine &NameAsWritten, const Twine &PathRelativeToRootModuleDirectory) |
Sets the umbrella directory of the given module to the given directory. | |
void | addHeader (Module *Mod, Module::Header Header, ModuleHeaderRole Role, bool Imported=false) |
Adds this header to the given module. | |
bool | parseModuleMapFile (FileEntryRef File, bool IsSystem, DirectoryEntryRef HomeDir, FileID ID=FileID(), unsigned *Offset=nullptr, SourceLocation ExternModuleLoc=SourceLocation()) |
Parse the given module map file, and record any modules we encounter. | |
void | dump () |
Dump the contents of the module map, for debugging purposes. | |
module_iterator | module_begin () const |
module_iterator | module_end () const |
llvm::iterator_range< module_iterator > | modules () const |
void | cacheModuleLoad (const IdentifierInfo &II, Module *M) |
Cache a module load. M might be nullptr. | |
std::optional< Module * > | getCachedModuleLoad (const IdentifierInfo &II) |
Return a cached module load. | |
Static Public Member Functions | |
static ModuleHeaderRole | headerKindToRole (Module::HeaderKind Kind) |
Convert a header kind to a role. Requires Kind to not be HK_Excluded. | |
static Module::HeaderKind | headerRoleToKind (ModuleHeaderRole Role) |
Convert a header role to a kind. | |
static bool | isModular (ModuleHeaderRole Role) |
Check if the header with the given role is a modular one. | |
Friends | |
class | ModuleMapParser |
Definition at line 74 of file ModuleMap.h.
using clang::ModuleMap::AdditionalModMapsSet = llvm::DenseSet<FileEntryRef> |
Definition at line 200 of file ModuleMap.h.
using clang::ModuleMap::module_iterator = llvm::StringMap<Module *>::const_iterator |
Definition at line 751 of file ModuleMap.h.
Flags describing the role of a module header.
Definition at line 130 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 355 of file ModuleMap.cpp.
|
default |
Destroy the module map.
void ModuleMap::addAdditionalModuleMapFile | ( | const Module * | M, |
FileEntryRef | ModuleMap | ||
) |
Definition at line 1390 of file ModuleMap.cpp.
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 1299 of file ModuleMap.cpp.
References clang::Module::addHeader(), clang::Module::Header::Entry, clang::FileEntryRef::getName(), headerRoleToKind(), clang::Module::isForBuilding(), and clang::HeaderSearch::MarkFileModuleHeader().
Referenced by createHeaderUnit(), and clang::serialization::reader::HeaderFileInfoTrait::ReadData().
void ModuleMap::addLinkAsDependency | ( | Module * | Mod | ) |
Make module to use export_as as the link dependency name if enough information is available or add it to a pending list otherwise.
Definition at line 67 of file ModuleMap.cpp.
References clang::Module::ExportAsModule, findModule(), clang::Module::Name, and clang::Module::UseExportAsModuleLinkName.
|
inline |
Add a module map callback.
Definition at line 427 of file ModuleMap.h.
Referenced by clang::DependencyCollector::attachToPreprocessor(), and clang::ModuleDependencyCollector::attachToPreprocessor().
|
inline |
Cache a module load. M might be nullptr.
Definition at line 760 of file ModuleMap.h.
Referenced by clang::CompilerInstance::loadModule().
|
inline |
Check whether a framework module can be inferred in the given directory.
Definition at line 626 of file ModuleMap.h.
Referenced by loadModuleMapForModuleBuild().
std::error_code ModuleMap::canonicalizeModuleMapPath | ( | SmallVectorImpl< char > & | Path | ) |
Canonicalize Path
in a manner suitable for a module map file.
In particular, this canonicalizes the parent directory separately from the filename so that it does not affect header resolution relative to the modulemap.
Path
is not modified. Definition at line 1358 of file ModuleMap.cpp.
References clang::FileManager::getCanonicalName(), clang::FileManager::getDirectoryRef(), clang::SourceManager::getFileManager(), Parent, and Path.
Module * ModuleMap::createGlobalModuleFragmentForModuleUnit | ( | SourceLocation | Loc, |
Module * | Parent = nullptr |
||
) |
Create a global module fragment for a C++ module unit.
We model the global module fragment as a submodule of the module interface unit. Unfortunately, we can't create the module interface unit's Module until later, because we don't know what it will be called usually. See C++20 [module.unit]/7.2 for the case we could know its parent.
Definition at line 888 of file ModuleMap.cpp.
References clang::Module::ExplicitGlobalModuleFragment, Loc, Parent, and clang::Result.
Module * ModuleMap::createHeaderUnit | ( | SourceLocation | Loc, |
StringRef | Name, | ||
Module::Header | H | ||
) |
Create a C++20 header unit.
Definition at line 982 of file ModuleMap.cpp.
References addHeader(), clang::LangOptions::CurrentModule, Loc, clang::Module::ModuleHeaderUnit, NormalHeader, and clang::Result.
Module * ModuleMap::createImplicitGlobalModuleFragmentForModuleUnit | ( | SourceLocation | Loc, |
Module * | Parent | ||
) |
Definition at line 902 of file ModuleMap.cpp.
References clang::Module::ImplicitGlobalModuleFragment, Loc, Parent, and clang::Result.
Module * ModuleMap::createModule | ( | StringRef | Name, |
Module * | Parent, | ||
bool | IsFramework, | ||
bool | IsExplicit | ||
) |
Create new submodule, assuming it does not exist.
This function can only be called when it is guaranteed that this submodule does not exist yet. The parameters have same semantics as ModuleMap::findOrCreateModule
.
Definition at line 871 of file ModuleMap.cpp.
References clang::LangOptions::CurrentModule, lookupModuleQualified(), Parent, and clang::Result.
Referenced by findOrCreateModule().
Module * ModuleMap::createModuleForImplementationUnit | ( | SourceLocation | Loc, |
StringRef | Name | ||
) |
Create a new module for a C++ module implementation unit.
The interface module for this implementation (implicitly imported) must exist and be loaded and present in the modules map.
Definition at line 958 of file ModuleMap.cpp.
References createModuleUnitWithKind(), clang::LangOptions::CurrentModule, clang::SourceManager::getFileEntryForID(), clang::SourceManager::getMainFileID(), Loc, clang::Module::ModuleImplementationUnit, clang::Module::ModuleInterfaceUnit, and clang::Result.
Module * ModuleMap::createModuleForInterfaceUnit | ( | SourceLocation | Loc, |
StringRef | Name | ||
) |
Create a new module for a C++ 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 940 of file ModuleMap.cpp.
References createModuleUnitWithKind(), clang::LangOptions::CurrentModule, clang::SourceManager::getFileEntryRefForID(), clang::SourceManager::getMainFileID(), Loc, clang::Module::ModuleInterfaceUnit, PrivateHeader, and clang::Result.
Module * ModuleMap::createModuleUnitWithKind | ( | SourceLocation | Loc, |
StringRef | Name, | ||
Module::ModuleKind | Kind | ||
) |
Create a new C++ module with the specified kind, and reparent any pending global module fragment(s) to it.
Definition at line 926 of file ModuleMap.cpp.
References Loc, and clang::Result.
Referenced by createModuleForImplementationUnit(), and createModuleForInterfaceUnit().
Module * ModuleMap::createPrivateModuleFragmentForInterfaceUnit | ( | Module * | Parent, |
SourceLocation | Loc | ||
) |
Create a global module fragment for a C++ module interface unit.
Definition at line 917 of file ModuleMap.cpp.
References Loc, Parent, clang::Module::PrivateModuleFragment, and clang::Result.
Module * ModuleMap::createShadowedModule | ( | StringRef | Name, |
bool | IsFramework, | ||
Module * | ShadowingModule | ||
) |
Create a new top-level module that is shadowed by ShadowingModule
.
Definition at line 1188 of file ModuleMap.cpp.
References clang::Result.
void ModuleMap::diagnoseHeaderInclusion | ( | Module * | RequestingModule, |
bool | RequestingModuleIsModuleInterface, | ||
SourceLocation | FilenameLoc, | ||
StringRef | Filename, | ||
FileEntryRef | 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 489 of file ModuleMap.cpp.
References clang::Module::directlyUses(), ExcludedHeader, clang::File, Filename, clang::Module::getFullModuleName(), clang::ModuleMap::KnownHeader::getModule(), clang::ModuleMap::KnownHeader::getRole(), clang::Module::getTopLevelModule(), getTopLevelOrNull(), clang::LangOptions::isCompilingModule(), clang::Module::IsFramework, clang::Module::Name, clang::Private, clang::DiagnosticsEngine::Report(), resolveHeaderDirectives(), resolveUses(), and violatesPrivateInclude().
LLVM_DUMP_METHOD void ModuleMap::dump | ( | ) |
Dump the contents of the module map, for debugging purposes.
Definition at line 1395 of file ModuleMap.cpp.
References E, and clang::Module::print().
ArrayRef< ModuleMap::KnownHeader > ModuleMap::findAllModulesForHeader | ( | FileEntryRef | File | ) |
Retrieve all the modules that contain the given header file.
Note that this does not implicitly load module maps, except for builtin headers, and does not consult the external source. (Those checks are the responsibility of HeaderSearch.)
Typically, findModuleForHeader should be used instead, as it picks the preferred module for the header.
Definition at line 698 of file ModuleMap.cpp.
References clang::File.
Referenced by clang::HeaderSearch::findAllModulesForHeader().
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 817 of file ModuleMap.cpp.
Referenced by addLinkAsDependency(), clang::serialization::ModuleManager::lookupByModuleName(), clang::HeaderSearch::lookupModule(), lookupModuleQualified(), lookupModuleUnqualified(), and resolveLinkAsDependencies().
ModuleMap::KnownHeader ModuleMap::findModuleForHeader | ( | FileEntryRef | File, |
bool | AllowTextual = false , |
||
bool | AllowExcluded = false |
||
) |
Retrieve the module that owns the given header file, if any.
Note that this does not implicitly load module maps, except for builtin headers, and does not consult the external source. (Those checks are the responsibility of HeaderSearch.)
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 599 of file ModuleMap.cpp.
References ExcludedHeader, clang::File, clang::ModuleMap::KnownHeader::getModule(), clang::ModuleMap::KnownHeader::getRole(), 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 nullptr 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 858 of file ModuleMap.cpp.
References createModule(), lookupModuleQualified(), and Parent.
Referenced by findOrCreateModuleFirst().
|
inline |
Call ModuleMap::findOrCreateModule
and throw away the information whether the module was found or created.
Definition at line 551 of file ModuleMap.h.
References findOrCreateModule(), and Parent.
Definition at line 825 of file ModuleMap.cpp.
References Parent, and clang::Result.
ArrayRef< ModuleMap::KnownHeader > ModuleMap::findResolvedModulesForHeader | ( | FileEntryRef | File | ) | const |
Like findAllModulesForHeader, but do not attempt to infer module ownership from umbrella headers if we've not already done so.
Definition at line 710 of file ModuleMap.cpp.
References clang::File, and resolveHeaderDirectives().
Referenced by clang::HeaderSearch::findResolvedModulesForHeader().
|
inline |
Creates a new declaration scope for module names, allowing previously defined modules to shadow definitions from the new scope.
Definition at line 617 of file ModuleMap.h.
Referenced by clang::FrontendAction::BeginSourceFile().
|
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 668 of file ModuleMap.h.
|
inline |
Get the directory that contains Clang-supplied include files.
Definition at line 418 of file ModuleMap.h.
Referenced by clang::Preprocessor::LookupFile().
|
inline |
Return a cached module load.
Definition at line 765 of file ModuleMap.h.
Referenced by clang::CompilerInstance::loadModule().
OptionalFileEntryRef ModuleMap::getContainingModuleMapFile | ( | const Module * | Module | ) | const |
Definition at line 1335 of file ModuleMap.cpp.
References getContainingModuleMapFileID(), and clang::SourceManager::getFileEntryRefForID().
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 1327 of file ModuleMap.cpp.
References clang::Module::DefinitionLoc, clang::SourceManager::getFileID(), and clang::SourceLocation::isInvalid().
Referenced by compileModule(), getContainingModuleMapFile(), and getModuleMapFileIDForUniquing().
OptionalFileEntryRef ModuleMap::getModuleMapFileForUniquing | ( | const Module * | M | ) | const |
Definition at line 1348 of file ModuleMap.cpp.
References clang::SourceManager::getFileEntryRefForID(), and getModuleMapFileIDForUniquing().
Referenced by clang::tooling::dependencies::ModuleDepCollector::applyDiscoveredDependencies(), compileModule(), clang::HeaderSearch::getCachedModuleFileName(), and clang::HeaderSearch::getPrebuiltImplicitModuleFileName().
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 1339 of file ModuleMap.cpp.
References getContainingModuleMapFileID(), and clang::Module::IsInferred.
Referenced by getModuleMapFileForUniquing().
|
static |
Convert a header kind to a role. Requires Kind to not be HK_Excluded.
Definition at line 91 of file ModuleMap.cpp.
References ExcludedHeader, 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 74 of file ModuleMap.cpp.
References ExcludedHeader, clang::Module::HK_Excluded, 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 | ( | DirectoryEntryRef | FrameworkDir, |
bool | IsSystem, | ||
Module * | Parent | ||
) |
Infer the contents of a framework module map from the given framework directory.
Definition at line 1009 of file ModuleMap.cpp.
References clang::Module::IsSystem, and Parent.
bool ModuleMap::isBuiltinHeader | ( | FileEntryRef | File | ) |
Is this a compiler builtin header?
Definition at line 408 of file ModuleMap.cpp.
References clang::File, and isBuiltinHeaderName().
Referenced by clang::HeaderSearch::ShouldEnterIncludeFile(), and suggestModule().
bool ModuleMap::isHeaderInUnavailableModule | ( | FileEntryRef | Header | ) | const |
Determine whether the given header is part of a module marked 'unavailable'.
Definition at line 719 of file ModuleMap.cpp.
References isHeaderUnavailableInModule().
bool ModuleMap::isHeaderUnavailableInModule | ( | FileEntryRef | Header, |
const Module * | RequestingModule | ||
) | const |
Determine whether the given header is unavailable as part of the specified module.
Definition at line 723 of file ModuleMap.cpp.
References E, ExcludedHeader, clang::Found, clang::FileEntryRef::getDir(), clang::Module::getEffectiveUmbrellaDir(), clang::SourceManager::getFileManager(), clang::DirectoryEntryRef::getName(), clang::FileEntryRef::getName(), clang::FileManager::getOptionalDirectoryRef(), clang::if(), clang::Module::InferSubmodules, clang::Module::isAvailable(), clang::Module::isSubModuleOf(), lookupModuleQualified(), clang::Module::Parent, resolveHeaderDirectives(), sanitizeFilenameAsIdentifier(), and TextualHeader.
Referenced by collectModuleHeaderIncludes(), and isHeaderInUnavailableModule().
|
static |
Check if the header with the given role is a modular one.
Definition at line 107 of file ModuleMap.cpp.
References ExcludedHeader, and TextualHeader.
Referenced by clang::HeaderFileInfo::mergeModuleMembership(), and moduleMembershipNeedsMerge().
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 851 of file ModuleMap.cpp.
References findModule().
Referenced by createModule(), 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 841 of file ModuleMap.cpp.
References findModule(), and lookupModuleQualified().
Definition at line 619 of file ModuleMap.h.
References clang::Module::Parent.
|
inline |
Definition at line 753 of file ModuleMap.h.
Referenced by clang::CompilerInstance::loadGlobalModuleIndex(), and modules().
|
inline |
Definition at line 754 of file ModuleMap.h.
Referenced by clang::CompilerInstance::loadGlobalModuleIndex(), and modules().
|
inline |
Definition at line 755 of file ModuleMap.h.
References module_begin(), and module_end().
Referenced by clang::HeaderSearch::collectAllModules().
bool ModuleMap::parseModuleMapFile | ( | FileEntryRef | File, |
bool | IsSystem, | ||
DirectoryEntryRef | 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 3136 of file ModuleMap.cpp.
References clang::SrcMgr::C_System_ModuleMap, clang::SrcMgr::C_User_ModuleMap, clang::SourceManager::createFileID(), clang::File, clang::SourceManager::getBufferOrNone(), clang::SourceManager::getDecomposedLoc(), clang::SourceManager::getLocForStartOfFile(), clang::Lexer::getSourceLocation(), Loc, 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 1444 of file ModuleMap.cpp.
References clang::Module::Conflicts, clang::Module::Conflict::Message, clang::Module::Conflict::Other, clang::Unresolved, 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 1417 of file ModuleMap.cpp.
References clang::Module::Exports, clang::Unresolved, 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 1264 of file ModuleMap.cpp.
References clang::File, and resolveHeaderDirectives().
Referenced by collectModuleHeaderIncludes(), diagnoseHeaderInclusion(), findResolvedModulesForHeader(), isHeaderUnavailableInModule(), resolveHeaderDirectives(), and clang::HeaderSearch::ShouldEnterIncludeFile().
void ModuleMap::resolveHeaderDirectives | ( | Module * | Mod, |
std::optional< const FileEntry * > | File | ||
) | const |
Resolve lazy header directives for the specified module.
If File is provided, only headers with same size and modtime are resolved. If File is not set, all headers are resolved.
Definition at line 1280 of file ModuleMap.cpp.
References clang::File, clang::Module::UnresolvedHeaderDirective::ModTime, clang::Module::UnresolvedHeaderDirective::Size, and clang::Module::UnresolvedHeaders.
void ModuleMap::resolveLinkAsDependencies | ( | Module * | Mod | ) |
Use PendingLinkAsModule information to mark top level link names that are going to be replaced by export_as aliases.
Definition at line 56 of file ModuleMap.cpp.
References findModule(), and clang::Module::Name.
Referenced by clang::CompilerInstance::loadModule().
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 1430 of file ModuleMap.cpp.
References clang::Module::getTopLevelModule(), and clang::Unresolved.
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 415 of file ModuleMap.h.
Referenced by clang::ApplyHeaderSearchOptions().
Definition at line 1352 of file ModuleMap.cpp.
References clang::Module::IsInferred.
Referenced by prepareToBuildModule().
void ModuleMap::setTarget | ( | const TargetInfo & | Target | ) |
Set the target information.
Definition at line 365 of file ModuleMap.cpp.
Referenced by clang::HeaderSearch::setTarget().
void ModuleMap::setUmbrellaDirAsWritten | ( | Module * | Mod, |
DirectoryEntryRef | UmbrellaDir, | ||
const Twine & | NameAsWritten, | ||
const Twine & | PathRelativeToRootModuleDirectory | ||
) |
Sets the umbrella directory of the given module to the given directory.
Definition at line 1218 of file ModuleMap.cpp.
References clang::Module::Umbrella, clang::Module::UmbrellaAsWritten, and clang::Module::UmbrellaRelativeToRootModuleDirectory.
void ModuleMap::setUmbrellaHeaderAsWritten | ( | Module * | Mod, |
FileEntryRef | UmbrellaHeader, | ||
const Twine & | NameAsWritten, | ||
const Twine & | PathRelativeToRootModuleDirectory | ||
) |
Sets the umbrella header of the given module to the given header.
Definition at line 1203 of file ModuleMap.cpp.
References clang::FileEntryRef::getDir(), NormalHeader, clang::Module::Umbrella, clang::Module::UmbrellaAsWritten, and clang::Module::UmbrellaRelativeToRootModuleDirectory.
bool ModuleMap::shouldImportRelativeToBuiltinIncludeDir | ( | StringRef | FileName, |
Module * | Module | ||
) | const |
Definition at line 413 of file ModuleMap.cpp.
References clang::FileName, isBuiltinHeaderName(), clang::Module::isPartOfFramework(), and clang::Module::IsSystem.
Referenced by clang::Preprocessor::LookupFile().
|
friend |
Definition at line 203 of file ModuleMap.h.