diff options
Diffstat (limited to 'dev/LibC++')
| -rw-r--r-- | dev/LibC++/base_exception.h | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/dev/LibC++/base_exception.h b/dev/LibC++/base_exception.h index 17b41e3..db4b863 100644 --- a/dev/LibC++/base_exception.h +++ b/dev/LibC++/base_exception.h @@ -8,19 +8,29 @@ #include <LibC++/defines.h> #include <LibC++/base_process.h> +#include <iostream> -namespace std::base_exception { -inline void __throw_general(void) { - base_process::exit(33); +/// @author Amlal El Mahrouss (amlal@nekernel.org) + +namespace std::base_exception::abi { +inline constexpr int __terminate_id = 33; + +/// @note This function is internal, don't call it. +extern void __unwind_object_list(); + +inline void __throw_general(const char* what) { + std::cout << "LibC++: Unwinding exception of kind: " << what << ", aborting here..." << std::endl; + __unwind_object_list(); + base_process::exit(__terminate_id); } -inline void __throw_domain_error(const char* error) { - __throw_general(); +inline void __throw_domain_error(const char* what) { + __throw_general(what); __builtin_unreachable(); // prevent from continuing. } -inline void __throw_bad_array_new_length(void) { - __throw_general(); +inline void __throw_bad_array_new_length(const char* what) { + __throw_general(what); __builtin_unreachable(); // prevent from continuing. } } // namespace std::base_exception |
