| /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- |
| * vim: sw=4 ts=4 et : |
| */ |
| /* This Source Code Form is subject to the terms of the Mozilla Public |
| * License, v. 2.0. If a copy of the MPL was not distributed with this |
| * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
| |
| #include <stdio.h> |
| |
| #include "mozalloc_abort.h" |
| |
| __declspec(noreturn) static void abort_from_exception(const char* const which, |
| const char* const what); |
| static void |
| abort_from_exception(const char* const which, const char* const what) |
| { |
| fprintf(stderr, "fatal: STL threw %s: ", which); |
| mozalloc_abort(what); |
| } |
| |
| namespace std { |
| |
| // NB: user code is not supposed to touch the std:: namespace. We're |
| // doing this after careful review because we want to define our own |
| // exception throwing semantics. Don't try this at home! |
| |
| MFBT_API __declspec(noreturn) void |
| moz_Xinvalid_argument(const char* what) |
| { |
| abort_from_exception("invalid_argument", what); |
| } |
| |
| MFBT_API __declspec(noreturn) void |
| moz_Xlength_error(const char* what) |
| { |
| abort_from_exception("length_error", what); |
| } |
| |
| MFBT_API __declspec(noreturn) void |
| moz_Xout_of_range(const char* what) |
| { |
| abort_from_exception("out_of_range", what); |
| } |
| |
| MFBT_API __declspec(noreturn) void |
| moz_Xoverflow_error(const char* what) |
| { |
| abort_from_exception("overflow_error", what); |
| } |
| |
| MFBT_API __declspec(noreturn) void |
| moz_Xruntime_error(const char* what) |
| { |
| abort_from_exception("runtime_error", what); |
| } |
| |
| } // namespace std |