#include <exception>
#include <cxxabi.h>
namespace std {
exception::~exception() throw()
{
}
bad_exception::~bad_exception() throw()
{
}
const char* exception::what() const throw()
{
return "std::exception";
}
const char* bad_exception::what() const throw()
{
return "std::bad_exception";
}
class exception_ptr current_exception();
void rethrow_exception(class exception_ptr) __attribute__((noreturn));
class exception_ptr
{
void* __ptr_;
public:
exception_ptr() : __ptr_() {}
exception_ptr(const exception_ptr&);
exception_ptr& operator=(const exception_ptr&);
~exception_ptr();
friend exception_ptr current_exception();
friend void rethrow_exception(exception_ptr) __attribute__((noreturn));
};
exception_ptr current_exception()
{
exception_ptr ptr;
ptr.__ptr_ = __cxxabiapple::__cxa_current_primary_exception();
return ptr;
}
void rethrow_exception(exception_ptr p)
{
__cxxabiapple::__cxa_rethrow_primary_exception(p.__ptr_);
terminate();
}
exception_ptr::~exception_ptr()
{
__cxxabiapple::__cxa_decrement_exception_refcount(__ptr_);
}
exception_ptr::exception_ptr(const exception_ptr& other)
: __ptr_(other.__ptr_)
{
__cxxabiapple::__cxa_increment_exception_refcount(__ptr_);
}
exception_ptr& exception_ptr::operator=(const exception_ptr& other)
{
if (__ptr_ != other.__ptr_)
{
__cxxabiapple::__cxa_increment_exception_refcount(other.__ptr_);
__cxxabiapple::__cxa_decrement_exception_refcount(__ptr_);
__ptr_ = other.__ptr_;
}
return *this;
}
}