clang
3.7.0
|
Manages the set of modules loaded by an AST reader. More...
#include <ModuleManager.h>
Public Types | |
enum | AddModuleResult { AlreadyLoaded, NewlyLoaded, Missing, OutOfDate } |
The result of attempting to add a new module. More... | |
enum | DFSPreorderControl { Continue, Abort, SkipImports } |
Control DFS behavior during preorder visitation. More... | |
typedef SmallVectorImpl < ModuleFile * >::iterator | ModuleIterator |
typedef SmallVectorImpl < ModuleFile * > ::const_iterator | ModuleConstIterator |
typedef SmallVectorImpl < ModuleFile * > ::reverse_iterator | ModuleReverseIterator |
typedef std::pair< uint32_t, StringRef > | ModuleOffset |
typedef ASTFileSignature(* | ASTFileSignatureReader )(llvm::BitstreamReader &) |
Public Member Functions | |
ModuleManager (FileManager &FileMgr, const PCHContainerReader &PCHContainerRdr) | |
~ModuleManager () | |
ModuleIterator | begin () |
Forward iterator to traverse all loaded modules. This is reverse source-order. More... | |
ModuleIterator | end () |
Forward iterator end-point to traverse all loaded modules. More... | |
ModuleConstIterator | begin () const |
Const forward iterator to traverse all loaded modules. This is in reverse source-order. More... | |
ModuleConstIterator | end () const |
Const forward iterator end-point to traverse all loaded modules. More... | |
ModuleReverseIterator | rbegin () |
Reverse iterator to traverse all loaded modules. This is in source order. More... | |
ModuleReverseIterator | rend () |
Reverse iterator end-point to traverse all loaded modules. More... | |
ModuleFile & | getPrimaryModule () |
Returns the primary module associated with the manager, that is, the first module loaded. More... | |
ModuleFile & | getPrimaryModule () const |
Returns the primary module associated with the manager, that is, the first module loaded. More... | |
ModuleFile & | operator[] (unsigned Index) const |
Returns the module associated with the given index. More... | |
ModuleFile * | lookup (StringRef Name) |
Returns the module associated with the given name. More... | |
ModuleFile * | lookup (const FileEntry *File) |
Returns the module associated with the given module file. More... | |
std::unique_ptr < llvm::MemoryBuffer > | lookupBuffer (StringRef Name) |
Returns the in-memory (virtual file) buffer with the given name. More... | |
unsigned | size () const |
Number of modules loaded. More... | |
AddModuleResult | addModule (StringRef FileName, ModuleKind Type, SourceLocation ImportLoc, ModuleFile *ImportedBy, unsigned Generation, off_t ExpectedSize, time_t ExpectedModTime, ASTFileSignature ExpectedSignature, ASTFileSignatureReader ReadSignature, ModuleFile *&Module, std::string &ErrorStr) |
Attempts to create a new module and add it to the list of known modules. More... | |
void | removeModules (ModuleIterator first, ModuleIterator last, llvm::SmallPtrSetImpl< ModuleFile * > &LoadedSuccessfully, ModuleMap *modMap) |
Remove the given set of modules. More... | |
void | addInMemoryBuffer (StringRef FileName, std::unique_ptr< llvm::MemoryBuffer > Buffer) |
Add an in-memory buffer the list of known buffers. More... | |
void | setGlobalIndex (GlobalModuleIndex *Index) |
Set the global module index. More... | |
void | moduleFileAccepted (ModuleFile *MF) |
Notification from the AST reader that the given module file has been "accepted", and will not (can not) be unloaded. More... | |
bool | addKnownModuleFile (StringRef FileName) |
Notification from the frontend that the given module file is part of this compilation (even if not imported) and, if this compilation is exported, should be made available to importers of it. More... | |
llvm::iterator_range < AdditionalKnownModuleFileSet::const_iterator > | getAdditionalKnownModuleFiles () |
Get a list of additional module files that are not currently loaded but are considered to be part of the current compilation. More... | |
void | visit (bool(*Visitor)(ModuleFile &M, void *UserData), void *UserData, llvm::SmallPtrSetImpl< ModuleFile * > *ModuleFilesHit=nullptr) |
Visit each of the modules. More... | |
void | visitDepthFirst (DFSPreorderControl(*PreorderVisitor)(ModuleFile &M, void *UserData), bool(*PostorderVisitor)(ModuleFile &M, void *UserData), void *UserData) |
Visit each of the modules with a depth-first traversal. More... | |
bool | lookupModuleFile (StringRef FileName, off_t ExpectedSize, time_t ExpectedModTime, const FileEntry *&File) |
Attempt to resolve the given module file name to a file entry. More... | |
void | viewGraph () |
View the graphviz representation of the module graph. More... | |
Manages the set of modules loaded by an AST reader.
Definition at line 32 of file ModuleManager.h.
typedef ASTFileSignature(* clang::serialization::ModuleManager::ASTFileSignatureReader)(llvm::BitstreamReader &) |
Definition at line 177 of file ModuleManager.h.
typedef SmallVectorImpl<ModuleFile*>::const_iterator clang::serialization::ModuleManager::ModuleConstIterator |
Definition at line 116 of file ModuleManager.h.
typedef SmallVectorImpl<ModuleFile*>::iterator clang::serialization::ModuleManager::ModuleIterator |
Definition at line 115 of file ModuleManager.h.
typedef std::pair<uint32_t, StringRef> clang::serialization::ModuleManager::ModuleOffset |
Definition at line 118 of file ModuleManager.h.
typedef SmallVectorImpl<ModuleFile*>::reverse_iterator clang::serialization::ModuleManager::ModuleReverseIterator |
Definition at line 117 of file ModuleManager.h.
The result of attempting to add a new module.
Definition at line 166 of file ModuleManager.h.
Control DFS behavior during preorder visitation.
Enumerator | |
---|---|
Continue | |
Abort |
Continue visiting all nodes. |
SkipImports |
Stop the visitation immediately. |
Definition at line 278 of file ModuleManager.h.
|
explicit |
Definition at line 292 of file ModuleManager.cpp.
ModuleManager::~ModuleManager | ( | ) |
Definition at line 297 of file ModuleManager.cpp.
void ModuleManager::addInMemoryBuffer | ( | StringRef | FileName, |
std::unique_ptr< llvm::MemoryBuffer > | Buffer | ||
) |
Add an in-memory buffer the list of known buffers.
Definition at line 231 of file ModuleManager.cpp.
References clang::FileManager::getVirtualFile().
Referenced by clang::ASTReader::addInMemoryBuffer().
bool ModuleManager::addKnownModuleFile | ( | StringRef | FileName | ) |
Notification from the frontend that the given module file is part of this compilation (even if not imported) and, if this compilation is exported, should be made available to importers of it.
Definition at line 239 of file ModuleManager.cpp.
References lookupModuleFile().
ModuleManager::AddModuleResult ModuleManager::addModule | ( | StringRef | FileName, |
ModuleKind | Type, | ||
SourceLocation | ImportLoc, | ||
ModuleFile * | ImportedBy, | ||
unsigned | Generation, | ||
off_t | ExpectedSize, | ||
time_t | ExpectedModTime, | ||
ASTFileSignature | ExpectedSignature, | ||
ASTFileSignatureReader | ReadSignature, | ||
ModuleFile *& | Module, | ||
std::string & | ErrorStr | ||
) |
Attempts to create a new module and add it to the list of known modules.
FileName | The file name of the module to be loaded. |
Type | The kind of module being loaded. |
ImportLoc | The location at which the module is imported. |
ImportedBy | The module that is importing this module, or NULL if this module is imported directly by the user. |
Generation | The generation in which this module was loaded. |
ExpectedSize | The expected size of the module file, used for validation. This will be zero if unknown. |
ExpectedModTime | The expected modification time of the module file, used for validation. This will be zero if unknown. |
ExpectedSignature | The expected signature of the module file, used for validation. This will be zero if unknown. |
ReadSignature | Reads the signature from an AST file without actually loading it. |
Module | A pointer to the module file if the module was successfully loaded. |
ErrorStr | Will be set to a non-empty string if any errors occurred while trying to load the module. |
Definition at line 57 of file ModuleManager.cpp.
References AlreadyLoaded, clang::serialization::ModuleFile::Buffer, clang::serialization::ModuleFile::DirectlyImported, clang::PCHContainerReader::ExtractPCH(), clang::serialization::ModuleFile::File, clang::serialization::ModuleFile::FileName, clang::FileManager::getBufferForFile(), clang::vfs::Status::getLastModificationTime(), clang::FileManager::getNoncachedStatValue(), clang::serialization::ModuleFile::getTimestampFilename(), clang::serialization::ModuleFile::ImportedBy, clang::serialization::ModuleFile::ImportLoc, clang::serialization::ModuleFile::Imports, clang::serialization::ModuleFile::Index, clang::serialization::ModuleFile::InputFilesValidationTimestamp, clang::serialization::ModuleFile::Kind, lookupBuffer(), lookupModuleFile(), Missing, clang::serialization::MK_ExplicitModule, clang::serialization::MK_ImplicitModule, NewlyLoaded, OutOfDate, clang::serialization::ModuleFile::Signature, and clang::serialization::ModuleFile::StreamFile.
|
inline |
Forward iterator to traverse all loaded modules. This is reverse source-order.
Definition at line 126 of file ModuleManager.h.
Referenced by clang::ASTReader::getTotalNumPreprocessedEntities(), llvm::GraphTraits< ModuleManager >::nodes_begin(), and visit().
|
inline |
Const forward iterator to traverse all loaded modules. This is in reverse source-order.
Definition at line 132 of file ModuleManager.h.
|
inline |
Forward iterator end-point to traverse all loaded modules.
Definition at line 128 of file ModuleManager.h.
Referenced by clang::ASTReader::getTotalNumPreprocessedEntities(), llvm::GraphTraits< ModuleManager >::nodes_end(), and visit().
|
inline |
Const forward iterator end-point to traverse all loaded modules.
Definition at line 134 of file ModuleManager.h.
|
inline |
Get a list of additional module files that are not currently loaded but are considered to be part of the current compilation.
Definition at line 246 of file ModuleManager.h.
|
inline |
Returns the primary module associated with the manager, that is, the first module loaded.
Definition at line 144 of file ModuleManager.h.
Referenced by clang::ASTReader::getOriginalSourceFile(), and clang::ASTReader::getSourceDescriptor().
|
inline |
Returns the primary module associated with the manager, that is, the first module loaded.
Definition at line 148 of file ModuleManager.h.
ModuleFile * ModuleManager::lookup | ( | StringRef | Name | ) |
Returns the module associated with the given name.
Definition at line 31 of file ModuleManager.cpp.
References clang::FileManager::getFile().
ModuleFile * ModuleManager::lookup | ( | const FileEntry * | File | ) |
Returns the module associated with the given module file.
Definition at line 40 of file ModuleManager.cpp.
std::unique_ptr< llvm::MemoryBuffer > ModuleManager::lookupBuffer | ( | StringRef | Name | ) |
Returns the in-memory (virtual file) buffer with the given name.
Definition at line 50 of file ModuleManager.cpp.
References clang::FileManager::getFile().
Referenced by addModule().
bool ModuleManager::lookupModuleFile | ( | StringRef | FileName, |
off_t | ExpectedSize, | ||
time_t | ExpectedModTime, | ||
const FileEntry *& | File | ||
) |
Attempt to resolve the given module file name to a file entry.
FileName | The name of the module file. |
ExpectedSize | The size that the module file is expected to have. If the actual size differs, the resolver should return true . |
ExpectedModTime | The modification time that the module file is expected to have. If the actual modification time differs, the resolver should return true . |
File | Will be set to the file if there is one, or null otherwise. |
Definition at line 478 of file ModuleManager.cpp.
References clang::FileManager::getFile(), clang::FileEntry::getModificationTime(), and clang::FileEntry::getSize().
Referenced by addKnownModuleFile(), and addModule().
void ModuleManager::moduleFileAccepted | ( | ModuleFile * | MF | ) |
Notification from the AST reader that the given module file has been "accepted", and will not (can not) be unloaded.
Definition at line 283 of file ModuleManager.cpp.
References clang::serialization::ModuleFile::File, and clang::GlobalModuleIndex::loadedModuleFile().
|
inline |
Returns the module associated with the given index.
Definition at line 151 of file ModuleManager.h.
|
inline |
Reverse iterator to traverse all loaded modules. This is in source order.
Definition at line 138 of file ModuleManager.h.
Referenced by clang::PCHValidator::ReadDiagnosticOptions().
void ModuleManager::removeModules | ( | ModuleIterator | first, |
ModuleIterator | last, | ||
llvm::SmallPtrSetImpl< ModuleFile * > & | LoadedSuccessfully, | ||
ModuleMap * | modMap | ||
) |
Remove the given set of modules.
Definition at line 186 of file ModuleManager.cpp.
References clang::ModuleMap::findModule(), and clang::FileManager::invalidateCache().
|
inline |
Reverse iterator end-point to traverse all loaded modules.
Definition at line 140 of file ModuleManager.h.
void ModuleManager::setGlobalIndex | ( | GlobalModuleIndex * | Index | ) |
Set the global module index.
Definition at line 267 of file ModuleManager.cpp.
References clang::GlobalModuleIndex::loadedModuleFile().
|
inline |
Number of modules loaded.
Definition at line 163 of file ModuleManager.h.
Referenced by clang::ASTReader::getSourceDescriptor(), clang::PCHValidator::ReadDiagnosticOptions(), visit(), and visitDepthFirst().
void ModuleManager::viewGraph | ( | ) |
View the graphviz representation of the module graph.
Definition at line 539 of file ModuleManager.cpp.
void ModuleManager::visit | ( | bool(*)(ModuleFile &M, void *UserData) | Visitor, |
void * | UserData, | ||
llvm::SmallPtrSetImpl< ModuleFile * > * | ModuleFilesHit = nullptr |
||
) |
Visit each of the modules.
This routine visits each of the modules, starting with the "root" modules that no other loaded modules depend on, and proceeding to the leaf modules, visiting each module only once during the traversal.
This traversal is intended to support various "lookup" operations that can find data in any of the loaded modules.
Visitor | A visitor function that will be invoked with each module and the given user data pointer. The return value must be convertible to bool; when false, the visitation continues to modules that the current module depends on. When true, the visitation skips any modules that the current module depends on. |
UserData | User data associated with the visitor object, which will be passed along to the visitor. |
ModuleFilesHit | If non-NULL, contains the set of module files that we know we need to visit because the global module index told us to. Any module that is known to both the global module index and the module manager that is not in this set can be skipped. |
Definition at line 304 of file ModuleManager.cpp.
References begin(), end(), clang::serialization::ModuleFile::Imports, clang::serialization::ModuleFile::Index, size(), and State.
Referenced by clang::ASTReader::ReadMethodPool().
void ModuleManager::visitDepthFirst | ( | ModuleManager::DFSPreorderControl(*)(ModuleFile &M, void *UserData) | PreorderVisitor, |
bool(*)(ModuleFile &M, void *UserData) | PostorderVisitor, | ||
void * | UserData | ||
) |
Visit each of the modules with a depth-first traversal.
This routine visits each of the modules known to the module manager using a depth-first search, starting with the first loaded module. The traversal invokes one callback before traversing the imports (preorder traversal) and one after traversing the imports (postorder traversal).
PreorderVisitor | A visitor function that will be invoked with each module before visiting its imports. The visitor can control how to continue the visitation through its return value. |
PostorderVisitor | A visitor function taht will be invoked with each module after visiting its imports. The visitor may return true at any time to abort the depth-first visitation. |
UserData | User data ssociated with the visitor object, which will be passed along to the user. |
Definition at line 463 of file ModuleManager.cpp.
References size().