Introduce a PCHContainerOperations interface (NFC).
A PCHContainerOperations abstract interface provides operations for creating and unwrapping containers for serialized ASTs (precompiled headers and clang modules). The default implementation is RawPCHContainerOperations, which uses a flat file for the output. The main application for this interface will be an ObjectFilePCHContainerOperations implementation that uses LLVM to wrap the module in an ELF/Mach-O/COFF container to store debug info alongside the AST. rdar://problem/20091852 llvm-svn: 240225
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
// modules for the ASTReader.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
#include "clang/Frontend/PCHContainerOperations.h"
|
||||
#include "clang/Lex/HeaderSearch.h"
|
||||
#include "clang/Lex/ModuleMap.h"
|
||||
#include "clang/Serialization/GlobalModuleIndex.h"
|
||||
@@ -136,10 +137,9 @@ ModuleManager::addModule(StringRef FileName, ModuleKind Type,
|
||||
|
||||
New->Buffer = std::move(*Buf);
|
||||
}
|
||||
|
||||
// Initialize the stream
|
||||
New->StreamFile.init((const unsigned char *)New->Buffer->getBufferStart(),
|
||||
(const unsigned char *)New->Buffer->getBufferEnd());
|
||||
|
||||
// Initialize the stream.
|
||||
PCHContainerOps.ExtractPCH(New->Buffer->getMemBufferRef(), New->StreamFile);
|
||||
}
|
||||
|
||||
if (ExpectedSignature) {
|
||||
@@ -289,8 +289,10 @@ void ModuleManager::moduleFileAccepted(ModuleFile *MF) {
|
||||
ModulesInCommonWithGlobalIndex.push_back(MF);
|
||||
}
|
||||
|
||||
ModuleManager::ModuleManager(FileManager &FileMgr)
|
||||
: FileMgr(FileMgr), GlobalIndex(), FirstVisitState(nullptr) {}
|
||||
ModuleManager::ModuleManager(FileManager &FileMgr,
|
||||
const PCHContainerOperations &PCHContainerOps)
|
||||
: FileMgr(FileMgr), PCHContainerOps(PCHContainerOps), GlobalIndex(),
|
||||
FirstVisitState(nullptr) {}
|
||||
|
||||
ModuleManager::~ModuleManager() {
|
||||
for (unsigned i = 0, e = Chain.size(); i != e; ++i)
|
||||
|
||||
Reference in New Issue
Block a user