From e10885312d62f4d7f09f90b9541d98904ef8c543 Mon Sep 17 00:00:00 2001 From: Frederic Riss Date: Fri, 24 Jul 2015 06:40:59 +0000 Subject: [PATCH] [dsymutil] Refactor BinaryHolder internals. NFC Call a helper that resets all the internal state of the BinaryHolder when we change the underlying memory buffer. Makes a followup patch a tiny bit smaller. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243094 91177308-0d34-0410-b5e6-96231b3b80d8 --- tools/dsymutil/BinaryHolder.cpp | 17 +++++++++++++---- tools/dsymutil/BinaryHolder.h | 2 ++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/tools/dsymutil/BinaryHolder.cpp b/tools/dsymutil/BinaryHolder.cpp index 49fe901b419..1774cf21e71 100644 --- a/tools/dsymutil/BinaryHolder.cpp +++ b/tools/dsymutil/BinaryHolder.cpp @@ -18,6 +18,14 @@ namespace llvm { namespace dsymutil { +void BinaryHolder::changeBackingMemoryBuffer( + std::unique_ptr &&Buf) { + CurrentArchive.reset(); + CurrentObjectFile.reset(); + + CurrentMemoryBuffer = std::move(Buf); +} + ErrorOr BinaryHolder::GetMemoryBufferForFile(StringRef Filename, sys::TimeValue Timestamp) { @@ -44,10 +52,9 @@ BinaryHolder::GetMemoryBufferForFile(StringRef Filename, if (auto Err = ErrOrFile.getError()) return Err; + changeBackingMemoryBuffer(std::move(*ErrOrFile)); if (Verbose) outs() << "\tloaded file.\n"; - CurrentArchive.reset(); - CurrentMemoryBuffer = std::move(ErrOrFile.get()); return CurrentMemoryBuffer->getMemBufferRef(); } @@ -93,12 +100,14 @@ BinaryHolder::MapArchiveAndGetMemberBuffer(StringRef Filename, if (Verbose) outs() << "\topened new archive '" << ArchiveFilename << "'\n"; - auto ErrOrArchive = object::Archive::create((*ErrOrBuff)->getMemBufferRef()); + + changeBackingMemoryBuffer(std::move(*ErrOrBuff)); + auto ErrOrArchive = + object::Archive::create(CurrentMemoryBuffer->getMemBufferRef()); if (auto Err = ErrOrArchive.getError()) return Err; CurrentArchive = std::move(*ErrOrArchive); - CurrentMemoryBuffer = std::move(*ErrOrBuff); return GetArchiveMemberBuffer(Filename, Timestamp); } diff --git a/tools/dsymutil/BinaryHolder.h b/tools/dsymutil/BinaryHolder.h index 84c07ce0c4b..c072acac2b2 100644 --- a/tools/dsymutil/BinaryHolder.h +++ b/tools/dsymutil/BinaryHolder.h @@ -67,6 +67,8 @@ class BinaryHolder { ErrorOr GetMemoryBufferForFile(StringRef Filename, sys::TimeValue Timestamp); + void changeBackingMemoryBuffer(std::unique_ptr &&MemBuf); + public: BinaryHolder(bool Verbose) : Verbose(Verbose) {} -- 2.34.1