]> granicus.if.org Git - llvm/commitdiff
Convert a few methods to use ErrorOr.
authorRafael Espindola <rafael.espindola@gmail.com>
Mon, 23 Jun 2014 20:41:02 +0000 (20:41 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Mon, 23 Jun 2014 20:41:02 +0000 (20:41 +0000)
It used to be inconvenient to mix ErrorOr and UniquePtr, but with c++11
they work OK together.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211532 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Object/MachOUniversal.h
lib/Object/MachOUniversal.cpp
tools/llvm-nm/llvm-nm.cpp
tools/llvm-size/llvm-size.cpp
tools/llvm-symbolizer/LLVMSymbolize.cpp

index 74448f973b2ed3dda5ebc007e99dd25006f033a0..94fe99deec52947f224325588775b9abbad51b59 100644 (file)
@@ -57,7 +57,7 @@ public:
       return Triple::getArchTypeName(MachOObjectFile::getArch(Header.cputype));
     }
 
-    std::error_code getAsObjectFile(std::unique_ptr<ObjectFile> &Result) const;
+    ErrorOr<std::unique_ptr<ObjectFile>> getAsObjectFile() const;
 
     std::error_code getAsArchive(std::unique_ptr<Archive> &Result) const;
   };
@@ -100,8 +100,8 @@ public:
     return V->isMachOUniversalBinary();
   }
 
-  std::error_code getObjectForArch(Triple::ArchType Arch,
-                                   std::unique_ptr<ObjectFile> &Result) const;
+  ErrorOr<std::unique_ptr<ObjectFile>>
+  getObjectForArch(Triple::ArchType Arch) const;
 };
 
 }
index 887e2bd0a34b90619355fe0445eef530717fa436..1f867046eba256bac4d5f0f1fe5e6a12ba3f0978 100644 (file)
@@ -67,19 +67,15 @@ MachOUniversalBinary::ObjectForArch::ObjectForArch(
   }
 }
 
-std::error_code MachOUniversalBinary::ObjectForArch::getAsObjectFile(
-    std::unique_ptr<ObjectFile> &Result) const {
+ErrorOr<std::unique_ptr<ObjectFile>>
+MachOUniversalBinary::ObjectForArch::getAsObjectFile() const {
   if (Parent) {
     StringRef ParentData = Parent->getData();
     StringRef ObjectData = ParentData.substr(Header.offset, Header.size);
     std::string ObjectName = Parent->getFileName().str();
     MemoryBuffer *ObjBuffer = MemoryBuffer::getMemBuffer(
         ObjectData, ObjectName, false);
-    ErrorOr<ObjectFile *> Obj = ObjectFile::createMachOObjectFile(ObjBuffer);
-    if (std::error_code EC = Obj.getError())
-      return EC;
-    Result.reset(Obj.get());
-    return object_error::success;
+    return ObjectFile::createMachOObjectFile(ObjBuffer);
   }
   return object_error::parse_failed;
 }
@@ -145,14 +141,14 @@ static bool getCTMForArch(Triple::ArchType Arch, MachO::CPUType &CTM) {
   }
 }
 
-std::error_code MachOUniversalBinary::getObjectForArch(
-    Triple::ArchType Arch, std::unique_ptr<ObjectFile> &Result) const {
+ErrorOr<std::unique_ptr<ObjectFile>>
+MachOUniversalBinary::getObjectForArch(Triple::ArchType Arch) const {
   MachO::CPUType CTM;
   if (!getCTMForArch(Arch, CTM))
     return object_error::arch_not_found;
   for (object_iterator I = begin_objects(), E = end_objects(); I != E; ++I) {
     if (I->getCPUType() == static_cast<uint32_t>(CTM))
-      return I->getAsObjectFile(Result);
+      return I->getAsObjectFile();
   }
   return object_error::arch_not_found;
 }
index f706bcdc2b3eb90584d88196eb93af04ed9b9582..aeb7ba10724fb39d8377ccefbe2249114076c81b 100644 (file)
@@ -773,9 +773,10 @@ static void dumpSymbolNamesFromFile(std::string &Filename) {
     for (MachOUniversalBinary::object_iterator I = UB->begin_objects(),
                                                E = UB->end_objects();
          I != E; ++I) {
-      std::unique_ptr<ObjectFile> Obj;
+      ErrorOr<std::unique_ptr<ObjectFile>> ObjOrErr = I->getAsObjectFile();
       std::unique_ptr<Archive> A;
-      if (!I->getAsObjectFile(Obj)) {
+      if (ObjOrErr) {
+        std::unique_ptr<ObjectFile> Obj = std::move(ObjOrErr.get());
         if (moreThanOneArch)
           outs() << "\n";
         outs() << Obj->getFileName();
index b71380dcaa4aafef78168192d7e2055350e5620b..48614d8176b6e3c790cbb877cb99090add7ee235 100644 (file)
@@ -466,9 +466,9 @@ static void PrintFileSectionSizes(StringRef file) {
     for (MachOUniversalBinary::object_iterator I = UB->begin_objects(),
                                                E = UB->end_objects();
          I != E; ++I) {
-      std::unique_ptr<ObjectFile> UO;
+      ErrorOr<std::unique_ptr<ObjectFile>> UO = I->getAsObjectFile();
       std::unique_ptr<Archive> UA;
-      if (!I->getAsObjectFile(UO)) {
+      if (UO) {
         if (ObjectFile *o = dyn_cast<ObjectFile>(&*UO.get())) {
           MachOObjectFile *MachO = dyn_cast<MachOObjectFile>(o);
           if (OutputFormat == sysv)
index dd9ffc1fb8ed3e9496ce3d3446ecc92bb163a8b7..ebbae39a57aa170d3e55d2f267aed6c644e12e84 100644 (file)
@@ -349,10 +349,11 @@ LLVMSymbolizer::getObjectFileFromBinary(Binary *Bin, const std::string &ArchName
         std::make_pair(UB, ArchName));
     if (I != ObjectFileForArch.end())
       return I->second;
-    std::unique_ptr<ObjectFile> ParsedObj;
-    if (!UB->getObjectForArch(Triple(ArchName).getArch(), ParsedObj)) {
-      Res = ParsedObj.get();
-      ParsedBinariesAndObjects.push_back(std::move(ParsedObj));
+    ErrorOr<std::unique_ptr<ObjectFile>> ParsedObj =
+        UB->getObjectForArch(Triple(ArchName).getArch());
+    if (ParsedObj) {
+      Res = ParsedObj.get().get();
+      ParsedBinariesAndObjects.push_back(std::move(ParsedObj.get()));
     }
     ObjectFileForArch[std::make_pair(UB, ArchName)] = Res;
   } else if (Bin->isObject()) {