[llvm] r269264 - [obj2yaml] Adding Error/Expected to macho2yaml

Chris Bieneman via llvm-commits llvm-commits at lists.llvm.org
Wed May 11 18:52:33 PDT 2016


Author: cbieneman
Date: Wed May 11 20:52:33 2016
New Revision: 269264

URL: http://llvm.org/viewvc/llvm-project?rev=269264&view=rev
Log:
[obj2yaml] Adding Error/Expected to macho2yaml

I figure if I'm adding Mach support I may as well use the new fancy Error model.

Modified:
    llvm/trunk/tools/obj2yaml/Error.cpp
    llvm/trunk/tools/obj2yaml/Error.h
    llvm/trunk/tools/obj2yaml/macho2yaml.cpp

Modified: llvm/trunk/tools/obj2yaml/Error.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/obj2yaml/Error.cpp?rev=269264&r1=269263&r2=269264&view=diff
==============================================================================
--- llvm/trunk/tools/obj2yaml/Error.cpp (original)
+++ llvm/trunk/tools/obj2yaml/Error.cpp Wed May 11 20:52:33 2016
@@ -42,8 +42,18 @@ std::string _obj2yaml_error_category::me
 }
 
 namespace llvm {
-  const std::error_category &obj2yaml_category() {
+
+const std::error_category &obj2yaml_category() {
   static _obj2yaml_error_category o;
   return o;
 }
+
+char Obj2YamlError::ID = 0;
+
+void Obj2YamlError::log(raw_ostream &OS) const { OS << ErrMsg << "\n"; }
+
+std::error_code Obj2YamlError::convertToErrorCode() const {
+  return std::error_code(static_cast<int>(Code), obj2yaml_category());
+}
+
 } // namespace llvm

Modified: llvm/trunk/tools/obj2yaml/Error.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/obj2yaml/Error.h?rev=269264&r1=269263&r2=269264&view=diff
==============================================================================
--- llvm/trunk/tools/obj2yaml/Error.h (original)
+++ llvm/trunk/tools/obj2yaml/Error.h Wed May 11 20:52:33 2016
@@ -10,6 +10,8 @@
 #ifndef LLVM_TOOLS_OBJ2YAML_ERROR_H
 #define LLVM_TOOLS_OBJ2YAML_ERROR_H
 
+#include "llvm/Support/Error.h"
+
 #include <system_error>
 
 namespace llvm {
@@ -27,6 +29,22 @@ inline std::error_code make_error_code(o
   return std::error_code(static_cast<int>(e), obj2yaml_category());
 }
 
+class Obj2YamlError : public ErrorInfo<Obj2YamlError> {
+public:
+  static char ID;
+  Obj2YamlError(obj2yaml_error C) : Code(C) {}
+  Obj2YamlError(const std::string &ErrMsg) : ErrMsg(std::move(ErrMsg)) {}
+  Obj2YamlError(obj2yaml_error C, std::string ErrMsg)
+      : ErrMsg(std::move(ErrMsg)), Code(C) {}
+  void log(raw_ostream &OS) const override;
+  const std::string &getErrorMessage() const { return ErrMsg; }
+  std::error_code convertToErrorCode() const override;
+
+private:
+  std::string ErrMsg;
+  obj2yaml_error Code;
+};
+
 } // namespace llvm
 
 namespace std {

Modified: llvm/trunk/tools/obj2yaml/macho2yaml.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/obj2yaml/macho2yaml.cpp?rev=269264&r1=269263&r2=269264&view=diff
==============================================================================
--- llvm/trunk/tools/obj2yaml/macho2yaml.cpp (original)
+++ llvm/trunk/tools/obj2yaml/macho2yaml.cpp Wed May 11 20:52:33 2016
@@ -14,22 +14,28 @@
 
 using namespace llvm;
 
-std::error_code macho2yaml(raw_ostream &Out,
-                           const object::MachOObjectFile &Obj) {
-  return obj2yaml_error::not_implemented;
+Error macho2yaml(raw_ostream &Out, const object::MachOObjectFile &Obj) {
+  return make_error<Obj2YamlError>(obj2yaml_error::not_implemented);
 }
 
-std::error_code macho2yaml(raw_ostream &Out,
-                           const object::MachOUniversalBinary &Obj) {
-  return obj2yaml_error::not_implemented;
+Error macho2yaml(raw_ostream &Out, const object::MachOUniversalBinary &Obj) {
+  return make_error<Obj2YamlError>(obj2yaml_error::not_implemented);
 }
 
 std::error_code macho2yaml(raw_ostream &Out, const object::ObjectFile &Obj) {
-  if (const auto *MachOObj = dyn_cast<object::MachOUniversalBinary>(&Obj))
-    return macho2yaml(Out, *MachOObj);
-
-  if (const auto *MachOObj = dyn_cast<object::MachOObjectFile>(&Obj))
-    return macho2yaml(Out, *MachOObj);
+  if (const auto *MachOObj = dyn_cast<object::MachOUniversalBinary>(&Obj)) {
+    if (auto Err = macho2yaml(Out, *MachOObj)) {
+      return errorToErrorCode(std::move(Err));
+    }
+    return obj2yaml_error::success;
+  }
+
+  if (const auto *MachOObj = dyn_cast<object::MachOObjectFile>(&Obj)) {
+    if (auto Err = macho2yaml(Out, *MachOObj)) {
+      return errorToErrorCode(std::move(Err));
+    }
+    return obj2yaml_error::success;
+  }
 
   return obj2yaml_error::unsupported_obj_file_format;
 }




More information about the llvm-commits mailing list