clang API Documentation

Classes | Public Types | Public Member Functions | Public Attributes | Friends
clang::ModuleMap Class Reference

#include <ModuleMap.h>

Collaboration diagram for clang::ModuleMap:
Collaboration graph
[legend]

List of all members.

Classes

struct  InferredDirectory
 A directory for which framework modules can be inferred.
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.
 ~ModuleMap ()
 Destroy the module map.
void setTarget (const TargetInfo &Target)
 Set the target information.
void setBuiltinIncludeDir (const DirectoryEntry *Dir)
 Set the directory that contains Clang-supplied include files, such as our stdarg.h or tgmath.h.
KnownHeader findModuleForHeader (const FileEntry *File, Module *RequestingModule=nullptr, bool IncludeTextualHeaders=false)
 Retrieve the module that owns the given header file, if any.
void diagnoseHeaderInclusion (Module *RequestingModule, SourceLocation FilenameLoc, StringRef Filename, const FileEntry *File)
 Reports errors if a module must not include a specific file.
bool isHeaderInUnavailableModule (const FileEntry *Header) const
 Determine whether the given header is part of a module marked 'unavailable'.
bool isHeaderUnavailableInModule (const FileEntry *Header, const Module *RequestingModule) const
 Determine whether the given header is unavailable as part of the specified module.
ModulefindModule (StringRef Name) const
 Retrieve a module with the given name.
ModulelookupModuleUnqualified (StringRef Name, Module *Context) const
 Retrieve a module with the given name using lexical name lookup, starting at the given context.
ModulelookupModuleQualified (StringRef Name, Module *Context) const
 Retrieve a module with the given name within the given context, using direct (qualified) name lookup.
std::pair< Module *, boolfindOrCreateModule (StringRef Name, Module *Parent, bool IsFramework, bool IsExplicit)
 Find a new module or submodule, or create it if it does not already exist.
bool canInferFrameworkModule (const DirectoryEntry *ParentDir, StringRef Name, bool &IsSystem) const
 Determine whether we can infer a framework module a framework with the given name in the given.
ModuleinferFrameworkModule (StringRef ModuleName, const DirectoryEntry *FrameworkDir, bool IsSystem, Module *Parent)
 Infer the contents of a framework module map from the given framework directory.
const FileEntrygetContainingModuleMapFile (const Module *Module) const
 Retrieve the module map file containing the definition of the given module.
const FileEntrygetModuleMapFileForUniquing (const Module *M) const
 Get the module map file that (along with the module name) uniquely identifies this module.
void setInferredModuleAllowedBy (Module *M, const FileEntry *ModuleMap)
AdditionalModMapsSetgetAdditionalModuleMapFiles (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.
void addAdditionalModuleMapFile (const Module *M, const FileEntry *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.
ModuleinferModuleFromLocation (FullSourceLoc Loc)
 Infers the (sub)module based on the given source location and source manager.
void setUmbrellaHeader (Module *Mod, const FileEntry *UmbrellaHeader)
 Sets the umbrella header of the given module to the given header.
void setUmbrellaDir (Module *Mod, const DirectoryEntry *UmbrellaDir)
 Sets the umbrella directory of the given module to the given directory.
void addHeader (Module *Mod, const FileEntry *Header, ModuleHeaderRole Role)
 Adds this header to the given module.
void excludeHeader (Module *Mod, const FileEntry *Header)
 Marks this header as being excluded from the given module.
bool parseModuleMapFile (const FileEntry *File, bool IsSystem)
 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

Public Attributes

ModuleSourceModule
std::string SourceModuleName

Friends

class ModuleMapParser

Detailed Description

Definition at line 39 of file ModuleMap.h.


Member Typedef Documentation

typedef llvm::SmallPtrSet<const FileEntry *, 1> clang::ModuleMap::AdditionalModMapsSet

Definition at line 112 of file ModuleMap.h.

typedef llvm::StringMap<Module *>::const_iterator clang::ModuleMap::module_iterator

Definition at line 463 of file ModuleMap.h.


Member Enumeration Documentation

Flags describing the role of a module header.

Enumerator:
NormalHeader 

This header is normally included in the module.

PrivateHeader 

This header is included but private.

TextualHeader 

This header is part of the module (for layering purposes) but should be textually included.

Definition at line 69 of file ModuleMap.h.


Constructor & Destructor Documentation

ModuleMap::ModuleMap ( SourceManager SourceMgr,
DiagnosticsEngine Diags,
const LangOptions LangOpts,
const TargetInfo Target,
HeaderSearch HeaderInfo 
)

Construct a new module map.

Parameters:
SourceMgrThe 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.
DiagsA diagnostic engine used for diagnostics.
LangOptsLanguage options for this translation unit.
TargetThe target for this translation unit.

Definition at line 86 of file ModuleMap.cpp.

Destroy the module map.

Definition at line 93 of file ModuleMap.cpp.


Member Function Documentation

void clang::ModuleMap::addAdditionalModuleMapFile ( const Module M,
const FileEntry ModuleMap 
) [inline]

Definition at line 389 of file ModuleMap.h.

void ModuleMap::addHeader ( Module Mod,
const FileEntry Header,
ModuleHeaderRole  Role 
)
bool ModuleMap::canInferFrameworkModule ( const DirectoryEntry ParentDir,
StringRef  Name,
bool IsSystem 
) const

Determine whether we can infer a framework module a framework with the given name in the given.

Parameters:
ParentDirThe directory that is the parent of the framework directory.
NameThe name of the module.
IsSystemWill be set to 'true' if the inferred module must be a system module.
Returns:
true if we are allowed to infer a framework module, and false otherwise.

Definition at line 563 of file ModuleMap.cpp.

void ModuleMap::diagnoseHeaderInclusion ( Module RequestingModule,
SourceLocation  FilenameLoc,
StringRef  Filename,
const FileEntry File 
)

Reports errors if a module must not include a specific file.

Parameters:
RequestingModuleThe module including a file.
FilenameLocThe location of the inclusion's filename.
FilenameThe included filename as written.
FileThe included file.

Definition at line 239 of file ModuleMap.cpp.

References directlyUses(), clang::Module::getFullModuleName(), clang::ModuleMap::KnownHeader::getModule(), clang::ModuleMap::KnownHeader::getRole(), clang::Module::getTopLevelModule(), getTopLevelOrNull(), clang::Module::IsFramework, 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 839 of file ModuleMap.cpp.

void ModuleMap::excludeHeader ( Module Mod,
const FileEntry Header 
)

Marks this header as being excluded from the given module.

Definition at line 807 of file ModuleMap.cpp.

References clang::Module::ExcludedHeaders.

Module * ModuleMap::findModule ( StringRef  Name) const

Retrieve a module with the given name.

Parameters:
NameThe name of the module to look up.
Returns:
The named module, if known; otherwise, returns null.

Definition at line 514 of file ModuleMap.cpp.

Referenced by clang::HeaderSearch::lookupModule(), lookupModuleQualified(), lookupModuleUnqualified(), and clang::serialization::ModuleManager::removeModules().

ModuleMap::KnownHeader ModuleMap::findModuleForHeader ( const FileEntry File,
Module RequestingModule = nullptr,
bool  IncludeTextualHeaders = false 
)

Retrieve the module that owns the given header file, if any.

Parameters:
FileThe header file that is likely to be included.
RequestingModuleSpecifies the module the header is intended to be used from. Used to disambiguate if a header is present in multiple modules.
IncludeTextualHeadersIf true, also find textual headers. By default, these are treated like excluded headers and result in no known header being found.
Returns:
The module KnownHeader, which provides the module that owns the given header file. The KnownHeader is default constructed to indicate that no module owns this header file.

Definition at line 315 of file ModuleMap.cpp.

References clang::Module::addTopHeader(), directlyUses(), clang::Module::Exports, findOrCreateModule(), clang::ModuleMap::KnownHeader::getModule(), getModuleMapFileForUniquing(), clang::FileEntry::getName(), clang::ModuleMap::KnownHeader::getRole(), clang::Module::getUmbrellaDir(), clang::Module::InferExplicitSubmodules, clang::Module::InferExportWildcard, clang::Module::InferSubmodules, clang::Module::isAvailable(), clang::Module::IsInferred, NormalHeader, clang::Module::Parent, PrivateHeader, sanitizeFilenameAsIdentifier(), and TextualHeader.

Referenced by clang::HeaderSearch::findModuleForHeader(), 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.

Parameters:
NameThe name of the module to find or create.
ParentThe module that will act as the parent of this submodule, or NULL to indicate that this is a top-level module.
IsFrameworkWhether this is a framework module.
IsExplicitWhether this is an explicit submodule.
Returns:
The found or newly-created module, along with a boolean value that will be true if the module is newly-created.

Definition at line 540 of file ModuleMap.cpp.

References clang::LangOptions::CurrentModule, lookupModuleQualified(), SourceModule, and SourceModuleName.

Referenced by findModuleForHeader().

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 382 of file ModuleMap.h.

const FileEntry * ModuleMap::getContainingModuleMapFile ( const Module Module) const

Retrieve the module map file containing the definition of the given module.

Parameters:
ModuleThe module whose module map file will be returned, if known.
Returns:
The file entry for the module map file containing the given module, or NULL if the module definition was inferred.

Definition at line 818 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 826 of file ModuleMap.cpp.

References getContainingModuleMapFile(), and clang::Module::IsInferred.

Referenced by compileModuleImpl(), findModuleForHeader(), clang::HeaderSearch::getModuleFileName(), and inferFrameworkModule().

Module * ModuleMap::inferFrameworkModule ( StringRef  ModuleName,
const DirectoryEntry FrameworkDir,
bool  IsSystem,
Module Parent 
)

Infers the (sub)module based on the given source location and source manager.

Parameters:
LocThe location within the source that we are querying, along with its source manager.
Returns:
The module that owns this source location, or null if no module owns this source location.

Definition at line 908 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::ASTWriter::inferSubmoduleIDFromLocation().

Determine whether the given header is part of a module marked 'unavailable'.

Definition at line 428 of file ModuleMap.cpp.

References isHeaderUnavailableInModule().

Referenced by clang::Preprocessor::HandleEndOfFile().

bool ModuleMap::isHeaderUnavailableInModule ( const FileEntry Header,
const Module RequestingModule 
) const
Module * ModuleMap::lookupModuleQualified ( StringRef  Name,
Module Context 
) const

Retrieve a module with the given name within the given context, using direct (qualified) name lookup.

Parameters:
NameThe name of the module to look up.
ContextThe module for which we will look for a submodule. If null, we will look for a top-level module.
Returns:
The named submodule, if known; otherwose, returns null.

Definition at line 532 of file ModuleMap.cpp.

References findModule(), and clang::Module::findSubmodule().

Referenced by findOrCreateModule(), inferFrameworkModule(), isHeaderUnavailableInModule(), and lookupModuleUnqualified().

Module * ModuleMap::lookupModuleUnqualified ( StringRef  Name,
Module Context 
) const

Retrieve a module with the given name using lexical name lookup, starting at the given context.

Parameters:
NameThe name of the module to look up.
ContextThe module context, from which we will perform lexical name lookup.
Returns:
The named module, if known; otherwise, returns null.

Definition at line 522 of file ModuleMap.cpp.

References Context, findModule(), lookupModuleQualified(), and clang::Module::Parent.

bool ModuleMap::parseModuleMapFile ( const FileEntry File,
bool  IsSystem 
)

Parse the given module map file, and record any modules we encounter.

Parameters:
FileThe file to be parsed.
IsSystemWhether this module map file is in a system header directory, and therefore should be considered a system module.
Returns:
true if an error occurred, false otherwise.

Definition at line 2319 of file ModuleMap.cpp.

References clang::SrcMgr::C_System, clang::SrcMgr::C_User, clang::SourceManager::createFileID(), clang::SourceManager::getBuffer(), clang::FileEntry::getDir(), clang::FileManager::getDirectory(), clang::SourceManager::getFileManager(), and clang::DirectoryEntry::getName().

Referenced by inferFrameworkModule().

bool ModuleMap::resolveConflicts ( Module Mod,
bool  Complain 
)

Resolve all of the unresolved conflicts in the given module.

Parameters:
ModThe module whose conflicts should be resolved.
ComplainWhether to emit diagnostics for failures.
Returns:
true if any errors were encountered while resolving conflicts, false otherwise.

Definition at line 889 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().

bool ModuleMap::resolveExports ( Module Mod,
bool  Complain 
)

Resolve all of the unresolved exports in the given module.

Parameters:
ModThe module whose exports should be resolved.
ComplainWhether to emit diagnostics for failures.
Returns:
true if any errors were encountered while resolving exports, false otherwise.

Definition at line 861 of file ModuleMap.cpp.

References clang::Module::Exports, and clang::Module::UnresolvedExports.

Referenced by clang::Sema::ActOnEndOfTranslationUnit().

bool ModuleMap::resolveUses ( Module Mod,
bool  Complain 
)

Resolve all of the unresolved uses in the given module.

Parameters:
ModThe module whose uses should be resolved.
ComplainWhether to emit diagnostics for failures.
Returns:
true if any errors were encountered while resolving uses, false otherwise.

Definition at line 875 of file ModuleMap.cpp.

References clang::Module::DirectUses, and clang::Module::UnresolvedDirectUses.

Referenced by clang::Sema::ActOnEndOfTranslationUnit(), and diagnoseHeaderInclusion().

Set the directory that contains Clang-supplied include files, such as our stdarg.h or tgmath.h.

Definition at line 242 of file ModuleMap.h.

Referenced by clang::ApplyHeaderSearchOptions().

void ModuleMap::setInferredModuleAllowedBy ( Module M,
const FileEntry ModuleMap 
)
void ModuleMap::setTarget ( const TargetInfo Target)

Set the target information.

Definition at line 101 of file ModuleMap.cpp.

Referenced by clang::HeaderSearch::setTarget().

void ModuleMap::setUmbrellaDir ( Module Mod,
const DirectoryEntry UmbrellaDir 
)

Sets the umbrella directory of the given module to the given directory.

Definition at line 776 of file ModuleMap.cpp.

References clang::Module::Umbrella.

void ModuleMap::setUmbrellaHeader ( Module Mod,
const FileEntry UmbrellaHeader 
)

Sets the umbrella header of the given module to the given header.

Definition at line 770 of file ModuleMap.cpp.

References clang::FileEntry::getDir(), NormalHeader, and clang::Module::Umbrella.


Friends And Related Function Documentation

friend class ModuleMapParser [friend]

Definition at line 163 of file ModuleMap.h.


Member Data Documentation

Definition at line 60 of file ModuleMap.h.

Referenced by diagnoseHeaderInclusion(), findOrCreateModule(), and inferFrameworkModule().

Definition at line 61 of file ModuleMap.h.

Referenced by findOrCreateModule(), and inferFrameworkModule().


The documentation for this class was generated from the following files: