clang API Documentation

Classes | Public Types | Public Member Functions | Static Public Member Functions | Public Attributes
clang::Module Class Reference

Describes a module or submodule. More...

#include <Module.h>

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

List of all members.

Classes

struct  Conflict
 A conflict between two modules. More...
struct  HeaderDirective
 Information about a header directive as found in the module map file. More...
struct  LinkLibrary
 A library or framework to link against when an entity from this module is used. More...
struct  UnresolvedConflict
 An unresolved conflict with another module. More...
struct  UnresolvedExportDecl
 Describes an exported module that has not yet been resolved (perhaps because the module it refers to has not yet been loaded). More...

Public Types

enum  NameVisibilityKind { Hidden, MacrosVisible, AllVisible }
 Describes the visibility of the various names within a particular module. More...
typedef std::pair< std::string,
bool
Requirement
 An individual requirement: a feature name and a flag indicating the required state of that feature.
typedef llvm::PointerIntPair
< Module *, 1, bool
ExportDecl
 Describes an exported module.
typedef std::vector< Module * >
::iterator 
submodule_iterator
typedef std::vector< Module * >
::const_iterator 
submodule_const_iterator

Public Member Functions

 Module (StringRef Name, SourceLocation DefinitionLoc, Module *Parent, bool IsFramework, bool IsExplicit)
 Construct a new module or submodule.
 ~Module ()
bool isAvailable () const
 Determine whether this module is available for use within the current translation unit.
bool isAvailable (const LangOptions &LangOpts, const TargetInfo &Target, Requirement &Req, HeaderDirective &MissingHeader) const
 Determine whether this module is available for use within the current translation unit.
bool isSubModule () const
 Determine whether this module is a submodule.
bool isSubModuleOf (const Module *Other) const
 Determine whether this module is a submodule of the given other module.
bool isPartOfFramework () const
 Determine whether this module is a part of a framework, either because it is a framework module or because it is a submodule of a framework module.
bool isSubFramework () const
 Determine whether this module is a subframework of another framework.
std::string getFullModuleName () const
 Retrieve the full name of this module, including the path from its top-level module.
ModulegetTopLevelModule ()
 Retrieve the top-level module for this (sub)module, which may be this module.
const ModulegetTopLevelModule () const
 Retrieve the top-level module for this (sub)module, which may be this module.
StringRef getTopLevelModuleName () const
 Retrieve the name of the top-level module.
const FileEntrygetASTFile () const
 The serialized AST file for this module, if one was created.
void setASTFile (const FileEntry *File)
 Set the serialized AST file for the top-level module of this module.
const DirectoryEntrygetUmbrellaDir () const
 Retrieve the directory for which this module serves as the umbrella.
const FileEntrygetUmbrellaHeader () const
 Retrieve the header that serves as the umbrella header for this module.
bool hasUmbrellaDir () const
 Determine whether this module has an umbrella directory that is not based on an umbrella header.
void addTopHeader (const FileEntry *File)
 Add a top-level header associated with this module.
void addTopHeaderFilename (StringRef Filename)
 Add a top-level header filename associated with this module.
ArrayRef< const FileEntry * > getTopHeaders (FileManager &FileMgr)
 The top-level headers associated with this module.
void addRequirement (StringRef Feature, bool RequiredState, const LangOptions &LangOpts, const TargetInfo &Target)
 Add the given feature requirement to the list of features required by this module.
void markUnavailable (bool MissingRequirement=false)
 Mark this module and all of its submodules as unavailable.
ModulefindSubmodule (StringRef Name) const
 Find the submodule with the given name.
bool isModuleVisible (const Module *M) const
 Determine whether the specified module would be visible to a lookup at the end of this module.
submodule_iterator submodule_begin ()
submodule_const_iterator submodule_begin () const
submodule_iterator submodule_end ()
submodule_const_iterator submodule_end () const
void getExportedModules (SmallVectorImpl< Module * > &Exported) const
 Appends this module's list of exported modules to Exported.
void print (raw_ostream &OS, unsigned Indent=0) const
 Print the module map for this module to the given stream.
void dump () const
 Dump the contents of this module to the given output stream.

Static Public Member Functions

static StringRef getModuleInputBufferName ()

Public Attributes

std::string Name
 The name of this module.
SourceLocation DefinitionLoc
 The location of the module definition.
ModuleParent
 The parent of this module. This will be NULL for the top-level module.
llvm::PointerUnion< const
DirectoryEntry *, const
FileEntry * > 
Umbrella
 The umbrella header or directory.
SmallVector< const FileEntry *, 2 > NormalHeaders
 The headers that are part of this module.
SmallVector< const FileEntry *, 2 > TextualHeaders
 The headers that are logically part of this module but must be textually included.
SmallVector< const FileEntry *, 2 > PrivateHeaders
 The headers that are private to this module.
SmallVector< const FileEntry *, 2 > PrivateTextualHeaders
 The headers that are private to this module and are to be included textually.
SmallVector< const FileEntry *, 2 > ExcludedHeaders
 The headers that are explicitly excluded from this module.
SmallVector< HeaderDirective, 1 > MissingHeaders
 Headers that are mentioned in the module map file but could not be found on the file system.
SmallVector< Requirement, 2 > Requirements
 The set of language features required to use this module.
unsigned IsMissingRequirement: 1
 Whether this module is missing a feature from Requirements.
unsigned IsAvailable: 1
 Whether this module is available in the current translation unit.
unsigned IsFromModuleFile: 1
 Whether this module was loaded from a module file.
unsigned IsFramework: 1
 Whether this is a framework module.
unsigned IsExplicit: 1
 Whether this is an explicit submodule.
unsigned IsSystem: 1
 Whether this is a "system" module (which assumes that all headers in it are system headers).
unsigned IsExternC: 1
 Whether this is an 'extern "C"' module (which implicitly puts all headers in it within an 'extern "C"' block, and allows the module to be imported within such a block).
unsigned IsInferred: 1
 Whether this is an inferred submodule (module * { ... }).
unsigned InferSubmodules: 1
 Whether we should infer submodules for this module based on the headers.
unsigned InferExplicitSubmodules: 1
 Whether, when inferring submodules, the inferred submodules should be explicit.
unsigned InferExportWildcard: 1
 Whether, when inferring submodules, the inferr submodules should export all modules they import (e.g., the equivalent of "export *").
unsigned ConfigMacrosExhaustive: 1
 Whether the set of configuration macros is exhaustive.
NameVisibilityKind NameVisibility
 The visibility of names within this particular module.
SourceLocation MacroVisibilityLoc
 The location at which macros within this module became visible.
SourceLocation InferredSubmoduleLoc
 The location of the inferred submodule.
SmallVector< Module *, 2 > Imports
 The set of modules imported by this module, and on which this module depends.
SmallVector< ExportDecl, 2 > Exports
 The set of export declarations.
SmallVector
< UnresolvedExportDecl, 2 > 
UnresolvedExports
 The set of export declarations that have yet to be resolved.
SmallVector< Module *, 2 > DirectUses
 The directly used modules.
SmallVector< ModuleId, 2 > UnresolvedDirectUses
 The set of use declarations that have yet to be resolved.
llvm::SmallVector< LinkLibrary, 2 > LinkLibraries
 The set of libraries or frameworks to link against when an entity from this module is used.
std::vector< std::string > ConfigMacros
 The set of "configuration macros", which are macros that (intentionally) change how this module is built.
std::vector< UnresolvedConflictUnresolvedConflicts
 The list of conflicts for which the module-id has not yet been resolved.
std::vector< ConflictConflicts
 The list of conflicts.

Detailed Description

Describes a module or submodule.

Definition at line 47 of file Basic/Module.h.


Member Typedef Documentation

typedef llvm::PointerIntPair<Module *, 1, bool> clang::Module::ExportDecl

Describes an exported module.

The pointer is the module being re-exported, while the bit will be true to indicate that this is a wildcard export.

Definition at line 203 of file Basic/Module.h.

typedef std::pair<std::string, bool> clang::Module::Requirement

An individual requirement: a feature name and a flag indicating the required state of that feature.

Definition at line 115 of file Basic/Module.h.

typedef std::vector<Module *>::const_iterator clang::Module::submodule_const_iterator

Definition at line 434 of file Basic/Module.h.

typedef std::vector<Module *>::iterator clang::Module::submodule_iterator

Definition at line 433 of file Basic/Module.h.


Member Enumeration Documentation

Describes the visibility of the various names within a particular module.

Enumerator:
Hidden 

All of the names in this module are hidden.

MacrosVisible 

Only the macro names in this module are visible.

AllVisible 

All of the names in this module are visible.

Definition at line 176 of file Basic/Module.h.


Constructor & Destructor Documentation

Module::Module ( StringRef  Name,
SourceLocation  DefinitionLoc,
Module Parent,
bool  IsFramework,
bool  IsExplicit 
)

Construct a new module or submodule.

Definition at line 27 of file Basic/Module.cpp.

References IsAvailable, isAvailable(), IsExternC, IsMissingRequirement, IsSystem, and Name.

Definition at line 50 of file Basic/Module.cpp.

References submodule_begin(), and submodule_end().


Member Function Documentation

void Module::addRequirement ( StringRef  Feature,
bool  RequiredState,
const LangOptions LangOpts,
const TargetInfo Target 
)

Add the given feature requirement to the list of features required by this module.

Parameters:
FeatureThe feature that is required by this module (and its submodules).
RequiredStateThe required state of this feature: true if it must be present, false if it must be absent.
LangOptsThe set of language options that will be used to evaluate the availability of this feature.
TargetThe target options that will be used to evaluate the availability of this feature.

Definition at line 156 of file Basic/Module.cpp.

References hasFeature(), markUnavailable(), and Requirements.

void clang::Module::addTopHeader ( const FileEntry File) [inline]

Add a top-level header associated with this module.

Definition at line 382 of file Basic/Module.h.

Referenced by collectModuleHeaderIncludes(), and clang::ModuleMap::findModuleForHeader().

void clang::Module::addTopHeaderFilename ( StringRef  Filename) [inline]

Add a top-level header filename associated with this module.

Definition at line 388 of file Basic/Module.h.

void Module::dump ( ) const

Dump the contents of this module to the given output stream.

Definition at line 452 of file Basic/Module.cpp.

References print().

Module * Module::findSubmodule ( StringRef  Name) const

Find the submodule with the given name.

Returns:
The submodule if found, or NULL otherwise.

Definition at line 192 of file Basic/Module.cpp.

Referenced by clang::CompilerInstance::loadModule(), and clang::ModuleMap::lookupModuleQualified().

const FileEntry* clang::Module::getASTFile ( ) const [inline]

The serialized AST file for this module, if one was created.

Definition at line 354 of file Basic/Module.h.

References getTopLevelModule().

Referenced by clang::CompilerInstance::loadGlobalModuleIndex(), and setASTFile().

void Module::getExportedModules ( SmallVectorImpl< Module * > &  Exported) const

Appends this module's list of exported modules to Exported.

This provides a subset of immediately imported modules (the ones that are directly exported), not the complete set of exported modules.

Definition at line 208 of file Basic/Module.cpp.

References Exports, Imports, IsExplicit, and isSubModuleOf().

Referenced by clang::ASTReader::makeModuleVisible().

std::string Module::getFullModuleName ( ) const
static StringRef clang::Module::getModuleInputBufferName ( ) [inline, static]

Definition at line 447 of file Basic/Module.h.

Referenced by clang::GenerateModuleAction::BeginSourceFileAction().

ArrayRef< const FileEntry * > Module::getTopHeaders ( FileManager FileMgr)

The top-level headers associated with this module.

Definition at line 143 of file Basic/Module.cpp.

References clang::FileManager::getFile().

const Module * Module::getTopLevelModule ( ) const

Retrieve the top-level module for this (sub)module, which may be this module.

Definition at line 108 of file Basic/Module.cpp.

References Parent.

StringRef clang::Module::getTopLevelModuleName ( ) const [inline]

Retrieve the name of the top-level module.

Definition at line 349 of file Basic/Module.h.

References getTopLevelModule(), and Name.

Referenced by clang::Sema::ActOnModuleImport(), and compileModuleImpl().

Retrieve the directory for which this module serves as the umbrella.

Definition at line 136 of file Basic/Module.cpp.

References getUmbrellaHeader(), and Umbrella.

Referenced by collectModuleHeaderIncludes(), clang::ModuleMap::findModuleForHeader(), clang::ModuleMap::isHeaderUnavailableInModule(), and print().

const FileEntry* clang::Module::getUmbrellaHeader ( ) const [inline]

Retrieve the header that serves as the umbrella header for this module.

Definition at line 371 of file Basic/Module.h.

References Umbrella.

Referenced by clang::GenerateModuleAction::BeginSourceFileAction(), collectModuleHeaderIncludes(), getUmbrellaDir(), and print().

bool clang::Module::hasUmbrellaDir ( ) const [inline]

Determine whether this module has an umbrella directory that is not based on an umbrella header.

Definition at line 377 of file Basic/Module.h.

References Umbrella.

bool clang::Module::isAvailable ( ) const [inline]
bool Module::isAvailable ( const LangOptions LangOpts,
const TargetInfo Target,
Requirement Req,
HeaderDirective MissingHeader 
) const

Determine whether this module is available for use within the current translation unit.

Parameters:
LangOptsThe language options used for the current translation unit.
TargetThe target options used for the current translation unit.
ReqIf this module is unavailable, this parameter will be set to one of the requirements that is not met for use of this module.

Definition at line 74 of file Basic/Module.cpp.

References Current, hasFeature(), and IsAvailable.

bool clang::Module::isModuleVisible ( const Module M) const [inline]

Determine whether the specified module would be visible to a lookup at the end of this module.

FIXME: This may return incorrect results for (submodules of) the module currently being built, if it's queried before we see all of its imports.

Definition at line 427 of file Basic/Module.h.

Determine whether this module is a part of a framework, either because it is a framework module or because it is a submodule of a framework module.

Definition at line 318 of file Basic/Module.h.

References Parent.

Referenced by isSubFramework().

bool clang::Module::isSubFramework ( ) const [inline]

Determine whether this module is a subframework of another framework.

Definition at line 328 of file Basic/Module.h.

References IsFramework, isPartOfFramework(), and Parent.

Referenced by inferFrameworkLink(), and clang::ModuleMap::inferFrameworkModule().

bool clang::Module::isSubModule ( ) const [inline]

Determine whether this module is a submodule.

Definition at line 309 of file Basic/Module.h.

References Parent.

bool Module::isSubModuleOf ( const Module Other) const

Determine whether this module is a submodule of the given other module.

Definition at line 96 of file Basic/Module.cpp.

References Parent.

Referenced by getExportedModules(), clang::ASTWriter::inferSubmoduleIDFromLocation(), and clang::ModuleMap::isHeaderUnavailableInModule().

void Module::markUnavailable ( bool  MissingRequirement = false)

Mark this module and all of its submodules as unavailable.

Definition at line 168 of file Basic/Module.cpp.

References Current, IsAvailable, IsMissingRequirement, Stack, submodule_begin(), and submodule_end().

Referenced by addRequirement().

void Module::print ( raw_ostream &  OS,
unsigned  Indent = 0 
) const
void clang::Module::setASTFile ( const FileEntry File) [inline]

Set the serialized AST file for the top-level module of this module.

Definition at line 359 of file Basic/Module.h.

References getASTFile(), and getTopLevelModule().

Definition at line 437 of file Basic/Module.h.

Definition at line 439 of file Basic/Module.h.


Member Data Documentation

std::vector<std::string> clang::Module::ConfigMacros

The set of "configuration macros", which are macros that (intentionally) change how this module is built.

Definition at line 255 of file Basic/Module.h.

Referenced by clang::CompilerInstance::loadModule(), and print().

Whether the set of configuration macros is exhaustive.

When the set of configuration macros is exhaustive, meaning that no identifier not in this list should affect how the module is built.

Definition at line 172 of file Basic/Module.h.

Referenced by print().

The list of conflicts.

Definition at line 280 of file Basic/Module.h.

Referenced by clang::ASTReader::makeModuleVisible(), print(), and clang::ModuleMap::resolveConflicts().

The location of the module definition.

Definition at line 53 of file Basic/Module.h.

Referenced by clang::ModuleMap::getContainingModuleMapFile(), and clang::CompilerInstance::loadGlobalModuleIndex().

SmallVector<Module *, 2> clang::Module::DirectUses

The directly used modules.

Definition at line 227 of file Basic/Module.h.

Referenced by directlyUses(), print(), and clang::ModuleMap::resolveUses().

SmallVector<const FileEntry *, 2> clang::Module::ExcludedHeaders

The headers that are explicitly excluded from this module.

Definition at line 99 of file Basic/Module.h.

Referenced by clang::ModuleMap::excludeHeader(), and print().

SmallVector<Module *, 2> clang::Module::Imports

The set of modules imported by this module, and on which this module depends.

Definition at line 197 of file Basic/Module.h.

Referenced by addLinkOptionsPostorder(), and getExportedModules().

Whether, when inferring submodules, the inferred submodules should be explicit.

Definition at line 161 of file Basic/Module.h.

Referenced by clang::ModuleMap::findModuleForHeader(), and print().

Whether, when inferring submodules, the inferr submodules should export all modules they import (e.g., the equivalent of "export *").

Definition at line 165 of file Basic/Module.h.

Referenced by clang::ModuleMap::findModuleForHeader(), clang::ModuleMap::inferFrameworkModule(), and print().

The location of the inferred submodule.

Definition at line 193 of file Basic/Module.h.

Whether we should infer submodules for this module based on the headers.

Submodules can only be inferred for modules with an umbrella header.

Definition at line 157 of file Basic/Module.h.

Referenced by clang::ModuleMap::findModuleForHeader(), clang::ModuleMap::inferFrameworkModule(), clang::ModuleMap::isHeaderUnavailableInModule(), and print().

Whether this module is available in the current translation unit.

If the module is missing headers or does not meet all requirements then this bit will be 0.

Definition at line 130 of file Basic/Module.h.

Referenced by isAvailable(), markUnavailable(), and Module().

Whether this is an explicit submodule.

Definition at line 139 of file Basic/Module.h.

Referenced by getExportedModules(), and print().

Whether this is an 'extern "C"' module (which implicitly puts all headers in it within an 'extern "C"' block, and allows the module to be imported within such a block).

Definition at line 148 of file Basic/Module.h.

Referenced by clang::GenerateModuleAction::BeginSourceFileAction(), checkModuleImportContext(), collectModuleHeaderIncludes(), and Module().

Whether this is a framework module.

Definition at line 136 of file Basic/Module.h.

Referenced by appendSubframeworkPaths(), clang::ModuleMap::diagnoseHeaderInclusion(), inferFrameworkLink(), isSubFramework(), and print().

Whether this module was loaded from a module file.

Definition at line 133 of file Basic/Module.h.

Referenced by clang::CompilerInstance::loadModule().

Whether this module is missing a feature from Requirements.

Definition at line 124 of file Basic/Module.h.

Referenced by markUnavailable(), and Module().

Whether this is a "system" module (which assumes that all headers in it are system headers).

Definition at line 143 of file Basic/Module.h.

Referenced by areDefinedInSystemModules(), clang::GenerateModuleAction::BeginSourceFileAction(), compileModuleImpl(), clang::ModuleMap::inferFrameworkModule(), Module(), and print().

The set of libraries or frameworks to link against when an entity from this module is used.

Definition at line 251 of file Basic/Module.h.

Referenced by addLinkOptionsPostorder(), inferFrameworkLink(), and print().

The location at which macros within this module became visible.

Definition at line 190 of file Basic/Module.h.

Referenced by clang::ASTReader::installImportedMacro(), and clang::ASTReader::makeModuleVisible().

Headers that are mentioned in the module map file but could not be found on the file system.

Definition at line 111 of file Basic/Module.h.

std::string clang::Module::Name

The visibility of names within this particular module.

Definition at line 187 of file Basic/Module.h.

Referenced by clang::ASTReader::makeModuleVisible(), clang::ASTReader::makeNamesVisible(), and clang::ASTReader::resolvePendingMacro().

SmallVector<const FileEntry *, 2> clang::Module::NormalHeaders

The headers that are part of this module.

Definition at line 85 of file Basic/Module.h.

Referenced by clang::ModuleMap::addHeader(), collectModuleHeaderIncludes(), and print().

SmallVector<const FileEntry *, 2> clang::Module::PrivateHeaders

The headers that are private to this module.

Definition at line 92 of file Basic/Module.h.

Referenced by clang::ModuleMap::addHeader(), print(), and violatesPrivateInclude().

The headers that are private to this module and are to be included textually.

Definition at line 96 of file Basic/Module.h.

Referenced by clang::ModuleMap::addHeader(), and violatesPrivateInclude().

The set of language features required to use this module.

If any of these requirements are not available, the IsAvailable bit will be false to indicate that this (sub)module is not available.

Definition at line 121 of file Basic/Module.h.

Referenced by addRequirement(), and print().

SmallVector<const FileEntry *, 2> clang::Module::TextualHeaders

The headers that are logically part of this module but must be textually included.

Definition at line 89 of file Basic/Module.h.

Referenced by clang::ModuleMap::addHeader(), and print().

llvm::PointerUnion<const DirectoryEntry *, const FileEntry *> clang::Module::Umbrella

The list of conflicts for which the module-id has not yet been resolved.

Definition at line 268 of file Basic/Module.h.

Referenced by print(), and clang::ModuleMap::resolveConflicts().

The set of use declarations that have yet to be resolved.

Definition at line 230 of file Basic/Module.h.

Referenced by print(), and clang::ModuleMap::resolveUses().

The set of export declarations that have yet to be resolved.

Definition at line 224 of file Basic/Module.h.

Referenced by print(), and clang::ModuleMap::resolveExports().


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