summaryrefslogtreecommitdiffhomepage
path: root/include/LibC++/base_exception.h
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-12-05 11:49:28 -0500
committerAmlal El Mahrouss <amlal@nekernel.org>2025-12-05 11:50:39 -0500
commit037ac38824623c13070384e8fc0e70c4770dcdbd (patch)
tree19d7286c5d226b33f10743c76436dace0cf42112 /include/LibC++/base_exception.h
parent5535f22998bf991eeb75a56c9e147f0fd4bd23b2 (diff)
chore! new project filesystem structure.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'include/LibC++/base_exception.h')
-rw-r--r--include/LibC++/base_exception.h37
1 files changed, 37 insertions, 0 deletions
diff --git a/include/LibC++/base_exception.h b/include/LibC++/base_exception.h
new file mode 100644
index 0000000..8747688
--- /dev/null
+++ b/include/LibC++/base_exception.h
@@ -0,0 +1,37 @@
+/* ========================================
+
+ Copyright (C) 2024-2025 Amlal El Mahrouss, Licensed under the Apache 2.0 license.
+
+======================================== */
+
+#pragma once
+
+#include <LibC++/__abi.h>
+#include <LibC++/base_process.h>
+#include <LibC++/defines.h>
+#include <iostream>
+
+/// @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* what) {
+ __throw_general(what);
+ __builtin_unreachable(); // prevent from continuing.
+}
+
+inline void __throw_bad_array_new_length(const char* what) {
+ __throw_general(what);
+ __builtin_unreachable(); // prevent from continuing.
+}
+} // namespace std::base_exception::abi