Return ErrorOr<std::unique_ptr<File>>. NFC.
authorRafael Espindola <rafael.espindola@gmail.com>
Fri, 24 Apr 2015 18:51:30 +0000 (18:51 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Fri, 24 Apr 2015 18:51:30 +0000 (18:51 +0000)
llvm-svn: 235744

lld/include/lld/Core/Reader.h
lld/lib/Core/Reader.cpp
lld/lib/Driver/DarwinLdDriver.cpp
lld/lib/Driver/Driver.cpp
lld/lib/ReaderWriter/FileArchive.cpp
lld/lib/ReaderWriter/MachO/MachOLinkingContext.cpp

index 0c9d67b..08a0933 100644 (file)
@@ -89,8 +89,8 @@ public:
 
   /// Walk the list of registered Readers and find one that can parse the
   /// supplied file and parse it.
-  std::error_code loadFile(std::unique_ptr<MemoryBuffer> mb,
-                           std::unique_ptr<File> &result) const;
+  ErrorOr<std::unique_ptr<File>>
+  loadFile(std::unique_ptr<MemoryBuffer> mb) const;
 
   /// Walk the list of registered kind tables to convert a Reference Kind
   /// name to a value.
index d27cc73..b64e7cf 100644 (file)
@@ -28,8 +28,8 @@ void Registry::add(std::unique_ptr<YamlIOTaggedDocumentHandler> handler) {
   _yamlHandlers.push_back(std::move(handler));
 }
 
-std::error_code Registry::loadFile(std::unique_ptr<MemoryBuffer> mb,
-                                   std::unique_ptr<File> &result) const {
+ErrorOr<std::unique_ptr<File>>
+Registry::loadFile(std::unique_ptr<MemoryBuffer> mb) const {
   // Get file magic.
   StringRef content(mb->getBufferStart(), mb->getBufferSize());
   llvm::sys::fs::file_magic fileType = llvm::sys::fs::identify_magic(content);
@@ -38,12 +38,7 @@ std::error_code Registry::loadFile(std::unique_ptr<MemoryBuffer> mb,
   for (const std::unique_ptr<Reader> &reader : _readers) {
     if (!reader->canParse(fileType, *mb))
       continue;
-    ErrorOr<std::unique_ptr<File>> fileOrErr =
-        reader->loadFile(std::move(mb), *this);
-    if (std::error_code ec = fileOrErr.getError())
-      return ec;
-    result = std::move(fileOrErr.get());
-    return std::error_code();
+    return reader->loadFile(std::move(mb), *this);
   }
 
   // No Reader could parse this file.
index ea46000..db097da 100644 (file)
@@ -80,12 +80,12 @@ loadFile(MachOLinkingContext &ctx, StringRef path,
   ErrorOr<std::unique_ptr<MemoryBuffer>> mbOrErr = ctx.getMemoryBuffer(path);
   if (std::error_code ec = mbOrErr.getError())
     return makeErrorFile(path, ec);
-  std::unique_ptr<File> file;
-  if (std::error_code ec =
-          ctx.registry().loadFile(std::move(mbOrErr.get()), file))
+  ErrorOr<std::unique_ptr<File>> fileOrErr =
+      ctx.registry().loadFile(std::move(mbOrErr.get()));
+  if (std::error_code ec = fileOrErr.getError())
     return makeErrorFile(path, ec);
   std::vector<std::unique_ptr<File>> files;
-  files.push_back(std::move(file));
+  files.push_back(std::move(fileOrErr.get()));
   for (std::unique_ptr<File> &pf : files) {
     // If file is a dylib, inform LinkingContext about it.
     if (SharedLibraryFile *shl = dyn_cast<SharedLibraryFile>(pf.get())) {
index 1314d91..3a19456 100644 (file)
@@ -54,11 +54,12 @@ FileVector loadFile(LinkingContext &ctx, StringRef path, bool wholeArchive) {
       = MemoryBuffer::getFileOrSTDIN(path);
   if (std::error_code ec = mb.getError())
     return makeErrorFile(path, ec);
-  std::unique_ptr<File> file;
-  if (std::error_code ec = ctx.registry().loadFile(std::move(mb.get()), file))
+  ErrorOr<std::unique_ptr<File>> fileOrErr =
+      ctx.registry().loadFile(std::move(mb.get()));
+  if (std::error_code ec = fileOrErr.getError())
     return makeErrorFile(path, ec);
   std::vector<std::unique_ptr<File>> files;
-  files.push_back(std::move(file));
+  files.push_back(std::move(fileOrErr.get()));
   if (wholeArchive)
     return parseMemberFiles(files);
   return files;
index 4f7863d..2128d85 100644 (file)
@@ -173,11 +173,12 @@ private:
     std::unique_ptr<MemoryBuffer> memberMB(MemoryBuffer::getMemBuffer(
         mb.getBuffer(), mb.getBufferIdentifier(), false));
 
-    std::unique_ptr<File> file;
-    if (std::error_code ec = _registry.loadFile(std::move(memberMB), file))
+    ErrorOr<std::unique_ptr<File>> fileOrErr =
+        _registry.loadFile(std::move(memberMB));
+    if (std::error_code ec = fileOrErr.getError())
       return ec;
     std::vector<std::unique_ptr<File>> files;
-    files.push_back(std::move(file));
+    files.push_back(std::move(fileOrErr.get()));
     assert(files.size() == 1);
     result = std::move(files[0]);
     if (std::error_code ec = result->parse())
index aff6c87..4408bea 100644 (file)
@@ -623,11 +623,12 @@ MachODylibFile* MachOLinkingContext::loadIndirectDylib(StringRef path) {
   if (mbOrErr.getError())
     return nullptr;
 
-  std::unique_ptr<File> file;
-  if (registry().loadFile(std::move(mbOrErr.get()), file))
+  ErrorOr<std::unique_ptr<File>> fileOrErr =
+      registry().loadFile(std::move(mbOrErr.get()));
+  if (!fileOrErr)
     return nullptr;
   std::vector<std::unique_ptr<File>> files;
-  files.push_back(std::move(file));
+  files.push_back(std::move(fileOrErr.get()));
   assert(files.size() == 1 && "expected one file in dylib");
   files[0]->parse();
   MachODylibFile* result = reinterpret_cast<MachODylibFile*>(files[0].get());