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 { 25d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencerenum _ { 26d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer success = 0, 27d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer invalid_file_type, 2825b15777df42d5d608810f6881b6c98107481d69Michael J. Spencer parse_failed, 2925b15777df42d5d608810f6881b6c98107481d69Michael J. Spencer unexpected_eof 30d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer}; 31d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer _ v_; 32d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer 33d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer object_error(_ v) : v_(v) {} 34d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer explicit object_error(int v) : v_(_(v)) {} 35d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer operator int() 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 44d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencertemplate <> struct is_error_code_enum<object::object_error> : true_type { }; 45d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer 46d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencertemplate <> struct is_error_code_enum<object::object_error::_> : true_type { }; 47d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer 48d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer} // end namespace llvm. 49d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer 50d2a02f409e20f64a33e5dc55926e97bd710386c8Michael J. Spencer#endif 51