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