memory/mozalloc/msvc_raise_wrappers.cpp

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:b89c2ceb50d2
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

mercurial