Error.h revision 36b56886974eae4f9c5ebc96befd3e7bfe5de338
1d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer//===- Error.h - system_error extensions for Object -------------*- C++ -*-===//
2d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer//
3d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer//                     The LLVM Compiler Infrastructure
4d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer//
5d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer// This file is distributed under the University of Illinois Open Source
6d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer// License. See LICENSE.TXT for details.
7d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer//
8d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer//===----------------------------------------------------------------------===//
9d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer//
10d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer// This declares a new error_category for the Object library.
11d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer//
12d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer//===----------------------------------------------------------------------===//
13d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer
14d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer#ifndef LLVM_OBJECT_ERROR_H
15d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer#define LLVM_OBJECT_ERROR_H
16d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer
17d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer#include "llvm/Support/system_error.h"
18d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer
19d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencernamespace llvm {
20d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencernamespace object {
21d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer
22d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencerconst error_category &object_category();
23d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer
24d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencerstruct object_error {
2579ac9c8402d4113d42ff2d713c7acdfa800d2397Rafael Espindola  enum Impl {
2679ac9c8402d4113d42ff2d713c7acdfa800d2397Rafael Espindola    success = 0,
279c22f87b1374b06dc6c07f6e8047890e390bbe2dAlexey Samsonov    arch_not_found,
2879ac9c8402d4113d42ff2d713c7acdfa800d2397Rafael Espindola    invalid_file_type,
2979ac9c8402d4113d42ff2d713c7acdfa800d2397Rafael Espindola    parse_failed,
3079ac9c8402d4113d42ff2d713c7acdfa800d2397Rafael Espindola    unexpected_eof
3179ac9c8402d4113d42ff2d713c7acdfa800d2397Rafael Espindola  };
3279ac9c8402d4113d42ff2d713c7acdfa800d2397Rafael Espindola  Impl V;
3379ac9c8402d4113d42ff2d713c7acdfa800d2397Rafael Espindola
3479ac9c8402d4113d42ff2d713c7acdfa800d2397Rafael Espindola  object_error(Impl V) : V(V) {}
3579ac9c8402d4113d42ff2d713c7acdfa800d2397Rafael Espindola  operator Impl() const { return V; }
36d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer};
37d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer
38d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencerinline error_code make_error_code(object_error e) {
39d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer  return error_code(static_cast<int>(e), object_category());
40d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer}
41d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer
42d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer} // end namespace object.
43d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer
4436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinestemplate <> struct is_error_code_enum<object::object_error> : std::true_type {};
45d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer
4636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinestemplate <>
4736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesstruct is_error_code_enum<object::object_error::Impl> : std::true_type {};
48d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer
49d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer} // end namespace llvm.
50d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer
51d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer#endif
52