Delete unnecessary generality in loadFile.

loadFile could load mulitple files just because yaml has a feature for
putting multiple documents in one file.

Designing a linker around what yaml can do seems like a bad idea to
me. This patch changes it to read a single file.

There are further improvements to be done to the api and they
will follow shortly.

llvm-svn: 235724
diff --git a/lld/lib/ReaderWriter/ELF/ELFReader.h b/lld/lib/ReaderWriter/ELF/ELFReader.h
index 723109f..76f3823 100644
--- a/lld/lib/ReaderWriter/ELF/ELFReader.h
+++ b/lld/lib/ReaderWriter/ELF/ELFReader.h
@@ -28,12 +28,12 @@
     return FileT::canParse(magic);
   }
 
-  std::error_code
-  loadFile(std::unique_ptr<MemoryBuffer> mb, const class Registry &,
-           std::vector<std::unique_ptr<File>> &result) const override {
+  std::error_code loadFile(std::unique_ptr<MemoryBuffer> mb,
+                           const class Registry &,
+                           std::unique_ptr<File> &result) const override {
     if (std::error_code ec = FileT::isCompatible(*mb, _ctx))
       return ec;
-    result.push_back(llvm::make_unique<FileT>(std::move(mb), _ctx));
+    result = llvm::make_unique<FileT>(std::move(mb), _ctx);
     return std::error_code();
   }
 
diff --git a/lld/lib/ReaderWriter/FileArchive.cpp b/lld/lib/ReaderWriter/FileArchive.cpp
index 9e3e317..23a2cb5 100644
--- a/lld/lib/ReaderWriter/FileArchive.cpp
+++ b/lld/lib/ReaderWriter/FileArchive.cpp
@@ -173,9 +173,11 @@
     std::unique_ptr<MemoryBuffer> memberMB(MemoryBuffer::getMemBuffer(
         mb.getBuffer(), mb.getBufferIdentifier(), false));
 
-    std::vector<std::unique_ptr<File>> files;
-    if (std::error_code ec = _registry.loadFile(std::move(memberMB), files))
+    std::unique_ptr<File> file;
+    if (std::error_code ec = _registry.loadFile(std::move(memberMB), file))
       return ec;
+    std::vector<std::unique_ptr<File>> files;
+    files.push_back(std::move(file));
     assert(files.size() == 1);
     result = std::move(files[0]);
     if (std::error_code ec = result->parse())
@@ -265,13 +267,12 @@
     return magic == llvm::sys::fs::file_magic::archive;
   }
 
-  std::error_code
-  loadFile(std::unique_ptr<MemoryBuffer> mb, const Registry &reg,
-           std::vector<std::unique_ptr<File>> &result) const override {
+  std::error_code loadFile(std::unique_ptr<MemoryBuffer> mb,
+                           const Registry &reg,
+                           std::unique_ptr<File> &result) const override {
     StringRef path = mb->getBufferIdentifier();
-    std::unique_ptr<FileArchive> file(
-        new FileArchive(std::move(mb), reg, path, _logLoading));
-    result.push_back(std::move(file));
+    result =
+        llvm::make_unique<FileArchive>(std::move(mb), reg, path, _logLoading);
     return std::error_code();
   }
 
diff --git a/lld/lib/ReaderWriter/MachO/MachOLinkingContext.cpp b/lld/lib/ReaderWriter/MachO/MachOLinkingContext.cpp
index 9b5837c..aff6c87 100644
--- a/lld/lib/ReaderWriter/MachO/MachOLinkingContext.cpp
+++ b/lld/lib/ReaderWriter/MachO/MachOLinkingContext.cpp
@@ -623,9 +623,11 @@
   if (mbOrErr.getError())
     return nullptr;
 
-  std::vector<std::unique_ptr<File>> files;
-  if (registry().loadFile(std::move(mbOrErr.get()), files))
+  std::unique_ptr<File> file;
+  if (registry().loadFile(std::move(mbOrErr.get()), file))
     return nullptr;
+  std::vector<std::unique_ptr<File>> files;
+  files.push_back(std::move(file));
   assert(files.size() == 1 && "expected one file in dylib");
   files[0]->parse();
   MachODylibFile* result = reinterpret_cast<MachODylibFile*>(files[0].get());
diff --git a/lld/lib/ReaderWriter/MachO/MachONormalizedFileBinaryReader.cpp b/lld/lib/ReaderWriter/MachO/MachONormalizedFileBinaryReader.cpp
index b05f431..45757ee 100644
--- a/lld/lib/ReaderWriter/MachO/MachONormalizedFileBinaryReader.cpp
+++ b/lld/lib/ReaderWriter/MachO/MachONormalizedFileBinaryReader.cpp
@@ -30,6 +30,7 @@
 #include "llvm/ADT/SmallString.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/ADT/StringSwitch.h"
+#include "llvm/ADT/STLExtras.h"
 #include "llvm/ADT/Twine.h"
 #include "llvm/Object/MachO.h"
 #include "llvm/Support/Casting.h"
@@ -521,11 +522,10 @@
             mb.getBufferSize() > 32);
   }
 
-  std::error_code
-  loadFile(std::unique_ptr<MemoryBuffer> mb, const Registry &registry,
-           std::vector<std::unique_ptr<File>> &result) const override {
-    auto *file = new MachOFile(std::move(mb), &_ctx);
-    result.push_back(std::unique_ptr<MachOFile>(file));
+  std::error_code loadFile(std::unique_ptr<MemoryBuffer> mb,
+                           const Registry &registry,
+                           std::unique_ptr<File> &result) const override {
+    result = llvm::make_unique<MachOFile>(std::move(mb), &_ctx);
     return std::error_code();
   }
 
@@ -547,11 +547,10 @@
     }
   }
 
-  std::error_code
-  loadFile(std::unique_ptr<MemoryBuffer> mb, const Registry &registry,
-           std::vector<std::unique_ptr<File>> &result) const override {
-    auto *file = new MachODylibFile(std::move(mb), &_ctx);
-    result.push_back(std::unique_ptr<MachODylibFile>(file));
+  std::error_code loadFile(std::unique_ptr<MemoryBuffer> mb,
+                           const Registry &registry,
+                           std::unique_ptr<File> &result) const override {
+    result = llvm::make_unique<MachODylibFile>(std::move(mb), &_ctx);
     return std::error_code();
   }
 
diff --git a/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp b/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp
index f7c9c7e..aa053bc 100644
--- a/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp
+++ b/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp
@@ -1052,12 +1052,10 @@
     return magic == llvm::sys::fs::file_magic::coff_object;
   }
 
-  std::error_code
-  loadFile(std::unique_ptr<MemoryBuffer> mb, const Registry &,
-           std::vector<std::unique_ptr<File>> &result) const override {
+  std::error_code loadFile(std::unique_ptr<MemoryBuffer> mb, const Registry &,
+                           std::unique_ptr<File> &result) const override {
     // Parse the memory buffer as PECOFF file.
-    auto *file = new FileCOFF(std::move(mb), _ctx);
-    result.push_back(std::unique_ptr<File>(file));
+    result = llvm::make_unique<FileCOFF>(std::move(mb), _ctx);
     return std::error_code();
   }
 
diff --git a/lld/lib/ReaderWriter/PECOFF/ReaderImportHeader.cpp b/lld/lib/ReaderWriter/PECOFF/ReaderImportHeader.cpp
index 76e3734..75d5807 100644
--- a/lld/lib/ReaderWriter/PECOFF/ReaderImportHeader.cpp
+++ b/lld/lib/ReaderWriter/PECOFF/ReaderImportHeader.cpp
@@ -367,11 +367,11 @@
     return magic == llvm::sys::fs::file_magic::coff_import_library;
   }
 
-  std::error_code
-  loadFile(std::unique_ptr<MemoryBuffer> mb, const class Registry &,
-           std::vector<std::unique_ptr<File> > &result) const override {
-    auto *file = new FileImportLibrary(std::move(mb), _ctx.getMachineType());
-    result.push_back(std::unique_ptr<File>(file));
+  std::error_code loadFile(std::unique_ptr<MemoryBuffer> mb,
+                           const class Registry &,
+                           std::unique_ptr<File> &result) const override {
+    result = llvm::make_unique<FileImportLibrary>(std::move(mb),
+                                                  _ctx.getMachineType());
     return std::error_code();
   }
 
diff --git a/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp b/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp
index eccb099..d6863f3 100644
--- a/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp
+++ b/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp
@@ -1294,9 +1294,9 @@
     return ext.equals(".objtxt") || ext.equals(".yaml");
   }
 
-  std::error_code
-  loadFile(std::unique_ptr<MemoryBuffer> mb, const class Registry &,
-           std::vector<std::unique_ptr<File>> &result) const override {
+  std::error_code loadFile(std::unique_ptr<MemoryBuffer> mb,
+                           const class Registry &,
+                           std::unique_ptr<File> &result) const override {
     // Create YAML Input Reader.
     YamlContext yamlContext;
     yamlContext._registry = &_registry;
@@ -1306,19 +1306,19 @@
     // Fill vector with File objects created by parsing yaml.
     std::vector<const lld::File *> createdFiles;
     yin >> createdFiles;
+    assert(createdFiles.size() == 1);
 
     // Error out now if there were parsing errors.
     if (yin.error())
       return make_error_code(lld::YamlReaderError::illegal_value);
 
     std::shared_ptr<MemoryBuffer> smb(mb.release());
-    for (const File *file : createdFiles) {
-      // Note: loadFile() should return vector of *const* File
-      File *f = const_cast<File *>(file);
-      f->setLastError(std::error_code());
-      f->setSharedMemoryBuffer(smb);
-      result.emplace_back(f);
-    }
+    const File *file = createdFiles[0];
+    // Note: loadFile() should return vector of *const* File
+    File *f = const_cast<File *>(file);
+    f->setLastError(std::error_code());
+    f->setSharedMemoryBuffer(smb);
+    result = std::unique_ptr<File>(f);
     return make_error_code(lld::YamlReaderError::success);
   }