summaryrefslogtreecommitdiffhomepage
path: root/include/LibNectar/base_exception.h
blob: b5c6a8883b7ebc4d5156ac6c2e5ea1a6af971d72 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org)
// Licensed under the Apache License, Version 2.0 (See accompanying
// file LICENSE or copy at http://www.apache.org/licenses/LICENSE-2.0)
// Official repository: https://github.com/nekernel-org/nectar

#ifndef NECTAR_LIBCXX_BASE_EXCEPTION_H
#define NECTAR_LIBCXX_BASE_EXCEPTION_H

#include <LibNectar/__abi.h>
#include <LibNectar/base_process.h>
#include <LibNectar/defines.h>

/// @author Amlal El Mahrouss (amlal@nekernel.org)

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) {
  __unwind_object_list();
  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.
}

#endif  // NECTAR_LIBCXX_BASE_EXCEPTION_H