[llvm-commits] [llvm] r132909 - in /llvm/trunk: include/llvm/Object/Error.h lib/Object/CMakeLists.txt lib/Object/Error.cpp

Bill Wendling wendling at apple.com
Mon Jun 13 17:57:33 PDT 2011


On Jun 13, 2011, at 4:11 AM, Michael J. Spencer wrote:

> Author: mspencer
> Date: Mon Jun 13 06:11:59 2011
> New Revision: 132909
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=132909&view=rev
> Log:
> Add Object/Error.
> 
> Added:
>    llvm/trunk/include/llvm/Object/Error.h
>    llvm/trunk/lib/Object/Error.cpp
> Modified:
>    llvm/trunk/lib/Object/CMakeLists.txt
> 
> Added: llvm/trunk/include/llvm/Object/Error.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/Error.h?rev=132909&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/Object/Error.h (added)
> +++ llvm/trunk/include/llvm/Object/Error.h Mon Jun 13 06:11:59 2011
> @@ -0,0 +1,49 @@
> +//===- Error.h - system_error extensions for Object -------------*- C++ -*-===//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +//
> +// This declares a new error_category for the Object library.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_OBJECT_ERROR_H
> +#define LLVM_OBJECT_ERROR_H
> +
> +#include "llvm/Support/system_error.h"
> +
> +namespace llvm {
> +namespace object {
> +
> +const error_category &object_category();
> +
> +struct object_error {
> +enum _ {
> +  success = 0,
> +  invalid_file_type,
> +  parse_failed
> +};
> +  _ v_;
> +
Hi Michael,

This is almost painfully hard to read. Could you use a proper name for the enum? And rename "v_" to make it more meaningful?

-bw


> +  object_error(_ v) : v_(v) {}
> +  explicit object_error(int v) : v_(_(v)) {}
> +  operator int() const {return v_;}
> +};
> +
> +} // end namespace object.
> +
> +template <> struct is_error_code_enum<object::object_error> : true_type { };
> +
> +template <> struct is_error_code_enum<object::object_error::_> : true_type { };
> +
> +inline error_code make_error_code(object::object_error e) {
> +  return error_code(static_cast<int>(e), object::object_category());
> +}
> +
> +} // end namespace llvm.
> +
> +#endif
> 
> Modified: llvm/trunk/lib/Object/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/CMakeLists.txt?rev=132909&r1=132908&r2=132909&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Object/CMakeLists.txt (original)
> +++ llvm/trunk/lib/Object/CMakeLists.txt Mon Jun 13 06:11:59 2011
> @@ -1,6 +1,7 @@
> add_llvm_library(LLVMObject
>   COFFObjectFile.cpp
>   ELFObjectFile.cpp
> +  Error.cpp
>   MachOObject.cpp
>   MachOObjectFile.cpp
>   Object.cpp
> 
> Added: llvm/trunk/lib/Object/Error.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/Error.cpp?rev=132909&view=auto
> ==============================================================================
> --- llvm/trunk/lib/Object/Error.cpp (added)
> +++ llvm/trunk/lib/Object/Error.cpp Mon Jun 13 06:11:59 2011
> @@ -0,0 +1,55 @@
> +//===- Error.cpp - system_error extensions for Object -----------*- C++ -*-===//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +//
> +// This defines a new error_category for the Object library.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#include "llvm/Object/Error.h"
> +#include "llvm/Support/ErrorHandling.h"
> +
> +using namespace llvm;
> +using namespace object;
> +
> +namespace {
> +class _object_error_category : public _do_message {
> +public:
> +  virtual const char* name() const;
> +  virtual std::string message(int ev) const;
> +  virtual error_condition default_error_condition(int ev) const;
> +};
> +}
> +
> +const char *_object_error_category::name() const {
> +  return "llvm.object";
> +}
> +
> +std::string _object_error_category::message(int ev) const {
> +  switch (ev) {
> +  case object_error::success: return "Success";
> +  case object_error::invalid_file_type:
> +    return "The file was not recognized as a valid object file";
> +  case object_error::parse_failed:
> +    return "Invalid data was encountered while parsing the file";
> +  default:
> +    llvm_unreachable("An enumerator of object_error does not have a message "
> +                     "defined.");
> +  }
> +}
> +
> +error_condition _object_error_category::default_error_condition(int ev) const {
> +  if (ev == object_error::success)
> +    return errc::success;
> +  return errc::invalid_argument;
> +}
> +
> +const error_category &object::object_category() {
> +  static _object_error_category o;
> +  return o;
> +}
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list