Simplify parseMemberFiles to take a single file.
authorRafael Espindola <rafael.espindola@gmail.com>
Fri, 24 Apr 2015 19:08:51 +0000 (19:08 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Fri, 24 Apr 2015 19:08:51 +0000 (19:08 +0000)
llvm-svn: 235751

lld/include/lld/Driver/Driver.h
lld/lib/Driver/DarwinLdDriver.cpp
lld/lib/Driver/Driver.cpp

index 300d235..7696307 100644 (file)
@@ -35,7 +35,7 @@ class ELFLinkingContext;
 typedef std::vector<std::unique_ptr<File>> FileVector;
 
 FileVector makeErrorFile(StringRef path, std::error_code ec);
-FileVector parseMemberFiles(FileVector &files);
+FileVector parseMemberFiles(std::unique_ptr<File> File);
 FileVector loadFile(LinkingContext &ctx, StringRef path, bool wholeArchive);
 
 /// Base class for all Drivers.
index 86df20a..e86731e 100644 (file)
@@ -93,10 +93,10 @@ loadFile(MachOLinkingContext &ctx, StringRef path,
     ctx.registerDylib(reinterpret_cast<mach_o::MachODylibFile *>(shl),
                       upwardDylib);
   }
+  if (wholeArchive)
+    return parseMemberFiles(std::move(file));
   std::vector<std::unique_ptr<File>> files;
   files.push_back(std::move(file));
-  if (wholeArchive)
-    return parseMemberFiles(files);
   return files;
 }
 
index 3a19456..9f796de 100644 (file)
@@ -36,15 +36,13 @@ FileVector makeErrorFile(StringRef path, std::error_code ec) {
   return result;
 }
 
-FileVector parseMemberFiles(FileVector &files) {
+FileVector parseMemberFiles(std::unique_ptr<File> file) {
   std::vector<std::unique_ptr<File>> members;
-  for (std::unique_ptr<File> &file : files) {
-    if (auto *archive = dyn_cast<ArchiveLibraryFile>(file.get())) {
-      if (std::error_code ec = archive->parseAllMembers(members))
-        return makeErrorFile(file->path(), ec);
-    } else {
-      members.push_back(std::move(file));
-    }
+  if (auto *archive = dyn_cast<ArchiveLibraryFile>(file.get())) {
+    if (std::error_code ec = archive->parseAllMembers(members))
+      return makeErrorFile(file->path(), ec);
+  } else {
+    members.push_back(std::move(file));
   }
   return members;
 }
@@ -58,10 +56,11 @@ FileVector loadFile(LinkingContext &ctx, StringRef path, bool wholeArchive) {
       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(fileOrErr.get()));
+  std::unique_ptr<File> &file = fileOrErr.get();
   if (wholeArchive)
-    return parseMemberFiles(files);
+    return parseMemberFiles(std::move(file));
+  std::vector<std::unique_ptr<File>> files;
+  files.push_back(std::move(file));
   return files;
 }