Replace ECRAII class with a function.
authorRui Ueyama <ruiu@google.com>
Thu, 3 Mar 2016 06:22:29 +0000 (06:22 +0000)
committerRui Ueyama <ruiu@google.com>
Thu, 3 Mar 2016 06:22:29 +0000 (06:22 +0000)
RCRAII class was a bit tricky. This patch removes that.

llvm-svn: 262586

lld/ELF/InputFiles.cpp

index 8b8cf02..393c52b 100644 (file)
@@ -25,19 +25,17 @@ using namespace llvm::sys::fs;
 using namespace lld;
 using namespace lld::elf;
 
-namespace {
-class ECRAII {
+template <class ELFT>
+static ELFFile<ELFT> createELFObj(MemoryBufferRef MB) {
   std::error_code EC;
-
-public:
-  std::error_code &getEC() { return EC; }
-  ~ECRAII() { fatal(EC); }
-};
+  ELFFile<ELFT> F(MB.getBuffer(), EC);
+  fatal(EC);
+  return F;
 }
 
 template <class ELFT>
-ELFFileBase<ELFT>::ELFFileBase(Kind K, MemoryBufferRef M)
-    : InputFile(K, M), ELFObj(MB.getBuffer(), ECRAII().getEC()) {}
+ELFFileBase<ELFT>::ELFFileBase(Kind K, MemoryBufferRef MB)
+    : InputFile(K, MB), ELFObj(createELFObj<ELFT>(MB)) {}
 
 template <class ELFT>
 ELFKind ELFFileBase<ELFT>::getELFKind() {