|
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- |
|
2 * vim: sw=4 ts=4 et : |
|
3 */ |
|
4 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
5 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
6 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
7 |
|
8 #include <stdio.h> |
|
9 |
|
10 #if defined(XP_WIN) |
|
11 # define MOZALLOC_EXPORT __declspec(dllexport) |
|
12 #endif |
|
13 |
|
14 #include "mozalloc_abort.h" |
|
15 |
|
16 #define MOZALLOC_DONT_WRAP_RAISE_FUNCTIONS |
|
17 #include "mozilla/throw_msvc.h" |
|
18 |
|
19 __declspec(noreturn) static void abort_from_exception(const char* const which, |
|
20 const char* const what); |
|
21 static void |
|
22 abort_from_exception(const char* const which, const char* const what) |
|
23 { |
|
24 fprintf(stderr, "fatal: STL threw %s: ", which); |
|
25 mozalloc_abort(what); |
|
26 } |
|
27 |
|
28 namespace std { |
|
29 |
|
30 // NB: user code is not supposed to touch the std:: namespace. We're |
|
31 // doing this after careful review because we want to define our own |
|
32 // exception throwing semantics. Don't try this at home! |
|
33 |
|
34 void |
|
35 moz_Xinvalid_argument(const char* what) |
|
36 { |
|
37 abort_from_exception("invalid_argument", what); |
|
38 } |
|
39 |
|
40 void |
|
41 moz_Xlength_error(const char* what) |
|
42 { |
|
43 abort_from_exception("length_error", what); |
|
44 } |
|
45 |
|
46 void |
|
47 moz_Xout_of_range(const char* what) |
|
48 { |
|
49 abort_from_exception("out_of_range", what); |
|
50 } |
|
51 |
|
52 void |
|
53 moz_Xoverflow_error(const char* what) |
|
54 { |
|
55 abort_from_exception("overflow_error", what); |
|
56 } |
|
57 |
|
58 void |
|
59 moz_Xruntime_error(const char* what) |
|
60 { |
|
61 abort_from_exception("runtime_error", what); |
|
62 } |
|
63 |
|
64 } // namespace std |