mirror of
https://github.com/intel/llvm.git
synced 2026-01-26 12:26:52 +08:00
Store std::unique_ptr in InMemoryBuffers. NFC.
llvm-svn: 215928
This commit is contained in:
@@ -1418,8 +1418,9 @@ public:
|
||||
void UpdateSema();
|
||||
|
||||
/// \brief Add in-memory (virtual file) buffer.
|
||||
void addInMemoryBuffer(StringRef &FileName, llvm::MemoryBuffer *Buffer) {
|
||||
ModuleMgr.addInMemoryBuffer(FileName, Buffer);
|
||||
void addInMemoryBuffer(StringRef &FileName,
|
||||
std::unique_ptr<llvm::MemoryBuffer> Buffer) {
|
||||
ModuleMgr.addInMemoryBuffer(FileName, std::move(Buffer));
|
||||
}
|
||||
|
||||
/// \brief Finalizes the AST reader's state before writing an AST file to
|
||||
|
||||
@@ -41,7 +41,8 @@ class ModuleManager {
|
||||
FileManager &FileMgr;
|
||||
|
||||
/// \brief A lookup of in-memory (virtual file) buffers
|
||||
llvm::DenseMap<const FileEntry *, llvm::MemoryBuffer *> InMemoryBuffers;
|
||||
llvm::DenseMap<const FileEntry *, std::unique_ptr<llvm::MemoryBuffer>>
|
||||
InMemoryBuffers;
|
||||
|
||||
/// \brief The visitation order.
|
||||
SmallVector<ModuleFile *, 4> VisitOrder;
|
||||
@@ -141,7 +142,7 @@ public:
|
||||
ModuleFile *lookup(const FileEntry *File);
|
||||
|
||||
/// \brief Returns the in-memory (virtual file) buffer with the given name
|
||||
llvm::MemoryBuffer *lookupBuffer(StringRef Name);
|
||||
std::unique_ptr<llvm::MemoryBuffer> lookupBuffer(StringRef Name);
|
||||
|
||||
/// \brief Number of modules loaded
|
||||
unsigned size() const { return Chain.size(); }
|
||||
@@ -199,7 +200,8 @@ public:
|
||||
ModuleMap *modMap);
|
||||
|
||||
/// \brief Add an in-memory buffer the list of known buffers
|
||||
void addInMemoryBuffer(StringRef FileName, llvm::MemoryBuffer *Buffer);
|
||||
void addInMemoryBuffer(StringRef FileName,
|
||||
std::unique_ptr<llvm::MemoryBuffer> Buffer);
|
||||
|
||||
/// \brief Set the global module index.
|
||||
void setGlobalIndex(GlobalModuleIndex *Index);
|
||||
|
||||
@@ -74,7 +74,7 @@ protected:
|
||||
|
||||
static ASTReader *
|
||||
createASTReader(CompilerInstance &CI, StringRef pchFile,
|
||||
SmallVectorImpl<llvm::MemoryBuffer *> &memBufs,
|
||||
SmallVectorImpl<std::unique_ptr<llvm::MemoryBuffer>> &MemBufs,
|
||||
SmallVectorImpl<std::string> &bufNames,
|
||||
ASTDeserializationListener *deserialListener = nullptr) {
|
||||
Preprocessor &PP = CI.getPreprocessor();
|
||||
@@ -83,7 +83,7 @@ createASTReader(CompilerInstance &CI, StringRef pchFile,
|
||||
/*DisableValidation=*/true));
|
||||
for (unsigned ti = 0; ti < bufNames.size(); ++ti) {
|
||||
StringRef sr(bufNames[ti]);
|
||||
Reader->addInMemoryBuffer(sr, memBufs[ti]);
|
||||
Reader->addInMemoryBuffer(sr, std::move(MemBufs[ti]));
|
||||
}
|
||||
Reader->setDeserializationListener(deserialListener);
|
||||
switch (Reader->ReadAST(pchFile, serialization::MK_PCH, SourceLocation(),
|
||||
@@ -118,7 +118,7 @@ IntrusiveRefCntPtr<ExternalSemaSource> clang::createChainedIncludesSource(
|
||||
IntrusiveRefCntPtr<ChainedIncludesSource> source(new ChainedIncludesSource());
|
||||
InputKind IK = CI.getFrontendOpts().Inputs[0].getKind();
|
||||
|
||||
SmallVector<llvm::MemoryBuffer *, 4> serialBufs;
|
||||
SmallVector<std::unique_ptr<llvm::MemoryBuffer>, 4> SerialBufs;
|
||||
SmallVector<std::string, 4> serialBufNames;
|
||||
|
||||
for (unsigned i = 0, e = includes.size(); i != e; ++i) {
|
||||
@@ -171,20 +171,22 @@ IntrusiveRefCntPtr<ExternalSemaSource> clang::createChainedIncludesSource(
|
||||
PP.getBuiltinInfo().InitializeBuiltins(PP.getIdentifierTable(),
|
||||
PP.getLangOpts());
|
||||
} else {
|
||||
assert(!serialBufs.empty());
|
||||
SmallVector<llvm::MemoryBuffer *, 4> bufs;
|
||||
assert(!SerialBufs.empty());
|
||||
SmallVector<std::unique_ptr<llvm::MemoryBuffer>, 4> Bufs;
|
||||
// TODO: Pass through the existing MemoryBuffer instances instead of
|
||||
// allocating new ones.
|
||||
for (auto *SB : serialBufs)
|
||||
bufs.push_back(llvm::MemoryBuffer::getMemBuffer(SB->getBuffer()));
|
||||
for (auto &SB : SerialBufs)
|
||||
Bufs.push_back(std::unique_ptr<llvm::MemoryBuffer>(
|
||||
llvm::MemoryBuffer::getMemBuffer(SB->getBuffer())));
|
||||
std::string pchName = includes[i-1];
|
||||
llvm::raw_string_ostream os(pchName);
|
||||
os << ".pch" << i-1;
|
||||
serialBufNames.push_back(os.str());
|
||||
|
||||
IntrusiveRefCntPtr<ASTReader> Reader;
|
||||
Reader = createASTReader(*Clang, pchName, bufs, serialBufNames,
|
||||
Clang->getASTConsumer().GetASTDeserializationListener());
|
||||
Reader = createASTReader(
|
||||
*Clang, pchName, Bufs, serialBufNames,
|
||||
Clang->getASTConsumer().GetASTDeserializationListener());
|
||||
if (!Reader)
|
||||
return nullptr;
|
||||
Clang->setModuleManager(Reader);
|
||||
@@ -196,14 +198,15 @@ IntrusiveRefCntPtr<ExternalSemaSource> clang::createChainedIncludesSource(
|
||||
|
||||
ParseAST(Clang->getSema());
|
||||
Clang->getDiagnosticClient().EndSourceFile();
|
||||
serialBufs.push_back(llvm::MemoryBuffer::getMemBufferCopy(OS.str()));
|
||||
SerialBufs.push_back(std::unique_ptr<llvm::MemoryBuffer>(
|
||||
llvm::MemoryBuffer::getMemBufferCopy(OS.str())));
|
||||
source->CIs.push_back(Clang.release());
|
||||
}
|
||||
|
||||
assert(!serialBufs.empty());
|
||||
assert(!SerialBufs.empty());
|
||||
std::string pchName = includes.back() + ".pch-final";
|
||||
serialBufNames.push_back(pchName);
|
||||
Reader = createASTReader(CI, pchName, serialBufs, serialBufNames);
|
||||
Reader = createASTReader(CI, pchName, SerialBufs, serialBufNames);
|
||||
if (!Reader)
|
||||
return nullptr;
|
||||
|
||||
|
||||
@@ -45,10 +45,11 @@ ModuleFile *ModuleManager::lookup(const FileEntry *File) {
|
||||
return Known->second;
|
||||
}
|
||||
|
||||
llvm::MemoryBuffer *ModuleManager::lookupBuffer(StringRef Name) {
|
||||
std::unique_ptr<llvm::MemoryBuffer>
|
||||
ModuleManager::lookupBuffer(StringRef Name) {
|
||||
const FileEntry *Entry = FileMgr.getFile(Name, /*openFile=*/false,
|
||||
/*cacheFailure=*/false);
|
||||
return InMemoryBuffers[Entry];
|
||||
return std::move(InMemoryBuffers[Entry]);
|
||||
}
|
||||
|
||||
ModuleManager::AddModuleResult
|
||||
@@ -98,10 +99,9 @@ ModuleManager::addModule(StringRef FileName, ModuleKind Type,
|
||||
}
|
||||
|
||||
// Load the contents of the module
|
||||
if (llvm::MemoryBuffer *Buffer = lookupBuffer(FileName)) {
|
||||
if (std::unique_ptr<llvm::MemoryBuffer> Buffer = lookupBuffer(FileName)) {
|
||||
// The buffer was already provided for us.
|
||||
assert(Buffer && "Passed null buffer");
|
||||
New->Buffer.reset(Buffer);
|
||||
New->Buffer = std::move(Buffer);
|
||||
} else {
|
||||
// Open the AST file.
|
||||
std::error_code ec;
|
||||
@@ -187,12 +187,13 @@ void ModuleManager::removeModules(
|
||||
Chain.erase(first, last);
|
||||
}
|
||||
|
||||
void ModuleManager::addInMemoryBuffer(StringRef FileName,
|
||||
llvm::MemoryBuffer *Buffer) {
|
||||
|
||||
const FileEntry *Entry = FileMgr.getVirtualFile(FileName,
|
||||
Buffer->getBufferSize(), 0);
|
||||
InMemoryBuffers[Entry] = Buffer;
|
||||
void
|
||||
ModuleManager::addInMemoryBuffer(StringRef FileName,
|
||||
std::unique_ptr<llvm::MemoryBuffer> Buffer) {
|
||||
|
||||
const FileEntry *Entry =
|
||||
FileMgr.getVirtualFile(FileName, Buffer->getBufferSize(), 0);
|
||||
InMemoryBuffers[Entry] = std::move(Buffer);
|
||||
}
|
||||
|
||||
ModuleManager::VisitState *ModuleManager::allocateVisitState() {
|
||||
|
||||
Reference in New Issue
Block a user