summaryrefslogtreecommitdiff
path: root/include/clang/Serialization/ModuleManager.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/clang/Serialization/ModuleManager.h')
-rw-r--r--include/clang/Serialization/ModuleManager.h77
1 files changed, 51 insertions, 26 deletions
diff --git a/include/clang/Serialization/ModuleManager.h b/include/clang/Serialization/ModuleManager.h
index fae387cac7e2..147a6910aa29 100644
--- a/include/clang/Serialization/ModuleManager.h
+++ b/include/clang/Serialization/ModuleManager.h
@@ -1,4 +1,4 @@
-//===--- ModuleManager.cpp - Module Manager ---------------------*- C++ -*-===//
+//===- ModuleManager.cpp - Module Manager -----------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
@@ -15,15 +15,30 @@
#ifndef LLVM_CLANG_SERIALIZATION_MODULEMANAGER_H
#define LLVM_CLANG_SERIALIZATION_MODULEMANAGER_H
-#include "clang/Basic/FileManager.h"
+#include "clang/Basic/LLVM.h"
+#include "clang/Basic/Module.h"
+#include "clang/Basic/SourceLocation.h"
#include "clang/Serialization/Module.h"
#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/IntrusiveRefCntPtr.h"
+#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallPtrSet.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/iterator.h"
+#include "llvm/ADT/iterator_range.h"
+#include <cstdint>
+#include <ctime>
+#include <memory>
+#include <string>
+#include <utility>
-namespace clang {
+namespace clang {
+class FileEntry;
+class FileManager;
class GlobalModuleIndex;
+class HeaderSearch;
class MemoryBufferCache;
class ModuleMap;
class PCHContainerReader;
@@ -58,6 +73,9 @@ class ModuleManager {
/// \brief Knows how to unwrap module containers.
const PCHContainerReader &PCHContainerRdr;
+ /// \brief Preprocessor's HeaderSearchInfo containing the module map.
+ const HeaderSearch &HeaderSearchInfo;
+
/// \brief A lookup of in-memory (virtual file) buffers
llvm::DenseMap<const FileEntry *, std::unique_ptr<llvm::MemoryBuffer>>
InMemoryBuffers;
@@ -79,14 +97,12 @@ class ModuleManager {
///
/// The global module index will actually be owned by the ASTReader; this is
/// just an non-owning pointer.
- GlobalModuleIndex *GlobalIndex;
+ GlobalModuleIndex *GlobalIndex = nullptr;
/// \brief State used by the "visit" operation to avoid malloc traffic in
/// calls to visit().
struct VisitState {
- explicit VisitState(unsigned N)
- : VisitNumber(N, 0), NextVisitNumber(1), NextState(nullptr)
- {
+ explicit VisitState(unsigned N) : VisitNumber(N, 0) {
Stack.reserve(N);
}
@@ -103,46 +119,47 @@ class ModuleManager {
SmallVector<unsigned, 4> VisitNumber;
/// \brief The next visit number to use to mark visited module files.
- unsigned NextVisitNumber;
+ unsigned NextVisitNumber = 1;
/// \brief The next visit state.
- VisitState *NextState;
+ VisitState *NextState = nullptr;
};
/// \brief The first visit() state in the chain.
- VisitState *FirstVisitState;
+ VisitState *FirstVisitState = nullptr;
VisitState *allocateVisitState();
void returnVisitState(VisitState *State);
public:
- typedef llvm::pointee_iterator<
- SmallVectorImpl<std::unique_ptr<ModuleFile>>::iterator>
- ModuleIterator;
- typedef llvm::pointee_iterator<
- SmallVectorImpl<std::unique_ptr<ModuleFile>>::const_iterator>
- ModuleConstIterator;
- typedef llvm::pointee_iterator<
- SmallVectorImpl<std::unique_ptr<ModuleFile>>::reverse_iterator>
- ModuleReverseIterator;
- typedef std::pair<uint32_t, StringRef> ModuleOffset;
+ using ModuleIterator = llvm::pointee_iterator<
+ SmallVectorImpl<std::unique_ptr<ModuleFile>>::iterator>;
+ using ModuleConstIterator = llvm::pointee_iterator<
+ SmallVectorImpl<std::unique_ptr<ModuleFile>>::const_iterator>;
+ using ModuleReverseIterator = llvm::pointee_iterator<
+ SmallVectorImpl<std::unique_ptr<ModuleFile>>::reverse_iterator>;
+ using ModuleOffset = std::pair<uint32_t, StringRef>;
explicit ModuleManager(FileManager &FileMgr, MemoryBufferCache &PCMCache,
- const PCHContainerReader &PCHContainerRdr);
+ const PCHContainerReader &PCHContainerRdr,
+ const HeaderSearch &HeaderSearchInfo);
~ModuleManager();
/// \brief Forward iterator to traverse all loaded modules.
ModuleIterator begin() { return Chain.begin(); }
+
/// \brief Forward iterator end-point to traverse all loaded modules
ModuleIterator end() { return Chain.end(); }
/// \brief Const forward iterator to traverse all loaded modules.
ModuleConstIterator begin() const { return Chain.begin(); }
+
/// \brief Const forward iterator end-point to traverse all loaded modules
ModuleConstIterator end() const { return Chain.end(); }
/// \brief Reverse iterator to traverse all loaded modules.
ModuleReverseIterator rbegin() { return Chain.rbegin(); }
+
/// \brief Reverse iterator end-point to traverse all loaded modules.
ModuleReverseIterator rend() { return Chain.rend(); }
@@ -163,8 +180,11 @@ public:
/// \brief Returns the module associated with the given index
ModuleFile &operator[](unsigned Index) const { return *Chain[Index]; }
- /// \brief Returns the module associated with the given name
- ModuleFile *lookup(StringRef Name) const;
+ /// \brief Returns the module associated with the given file name.
+ ModuleFile *lookupByFileName(StringRef FileName) const;
+
+ /// \brief Returns the module associated with the given module name.
+ ModuleFile *lookupByModuleName(StringRef ModName) const;
/// \brief Returns the module associated with the given module file.
ModuleFile *lookup(const FileEntry *File) const;
@@ -179,15 +199,18 @@ public:
enum AddModuleResult {
/// \brief The module file had already been loaded.
AlreadyLoaded,
+
/// \brief The module file was just loaded in response to this call.
NewlyLoaded,
+
/// \brief The module file is missing.
Missing,
+
/// \brief The module file is out-of-date.
OutOfDate
};
- typedef ASTFileSignature(*ASTFileSignatureReader)(StringRef);
+ using ASTFileSignatureReader = ASTFileSignature (*)(StringRef);
/// \brief Attempts to create a new module and add it to the list of known
/// modules.
@@ -298,6 +321,8 @@ public:
MemoryBufferCache &getPCMCache() const { return *PCMCache; }
};
-} } // end namespace clang::serialization
+} // namespace serialization
+
+} // namespace clang
-#endif
+#endif // LLVM_CLANG_SERIALIZATION_MODULEMANAGER_H