1249259Sdim//===- Error.h - system_error extensions for llvm-readobj -------*- C++ -*-===//
2249259Sdim//
3249259Sdim//                     The LLVM Compiler Infrastructure
4249259Sdim//
5249259Sdim// This file is distributed under the University of Illinois Open Source
6249259Sdim// License. See LICENSE.TXT for details.
7249259Sdim//
8249259Sdim//===----------------------------------------------------------------------===//
9249259Sdim//
10249259Sdim// This declares a new error_category for the llvm-readobj tool.
11249259Sdim//
12249259Sdim//===----------------------------------------------------------------------===//
13249259Sdim
14249259Sdim#ifndef LLVM_READOBJ_ERROR_H
15249259Sdim#define LLVM_READOBJ_ERROR_H
16249259Sdim
17249259Sdim#include "llvm/Support/system_error.h"
18249259Sdim
19249259Sdimnamespace llvm {
20249259Sdim
21249259Sdimconst error_category &readobj_category();
22249259Sdim
23249259Sdimstruct readobj_error {
24249259Sdim  enum _ {
25249259Sdim    success = 0,
26249259Sdim    file_not_found,
27249259Sdim    unsupported_file_format,
28249259Sdim    unrecognized_file_format,
29249259Sdim    unsupported_obj_file_format,
30249259Sdim    unknown_symbol
31249259Sdim  };
32249259Sdim  _ v_;
33249259Sdim
34249259Sdim  readobj_error(_ v) : v_(v) {}
35249259Sdim  explicit readobj_error(int v) : v_(_(v)) {}
36249259Sdim  operator int() const {return v_;}
37249259Sdim};
38249259Sdim
39249259Sdiminline error_code make_error_code(readobj_error e) {
40249259Sdim  return error_code(static_cast<int>(e), readobj_category());
41249259Sdim}
42249259Sdim
43249259Sdimtemplate <> struct is_error_code_enum<readobj_error> : true_type { };
44249259Sdimtemplate <> struct is_error_code_enum<readobj_error::_> : true_type { };
45249259Sdim
46249259Sdim} // namespace llvm
47249259Sdim
48249259Sdim#endif
49