| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 1 | //===------------------------ stdexcept.cpp -------------------------------===// |
| 2 | // | ||||
| Howard Hinnant | f5256e1 | 2010-05-11 21:36:01 +0000 | [diff] [blame] | 3 | // The LLVM Compiler Infrastructure |
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 4 | // |
| Howard Hinnant | b64f8b0 | 2010-11-16 22:09:02 +0000 | [diff] [blame] | 5 | // This file is dual licensed under the MIT and the University of Illinois Open |
| 6 | // Source Licenses. See LICENSE.TXT for details. | ||||
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 7 | // |
| 8 | //===----------------------------------------------------------------------===// | ||||
| 9 | |||||
| Joerg Sonnenberger | 5562207 | 2014-04-30 19:54:11 +0000 | [diff] [blame] | 10 | #include "__refstring" |
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 11 | #include "stdexcept" |
| 12 | #include "new" | ||||
| 13 | #include "string" | ||||
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 14 | #include "system_error" |
| Richard Smith | c756f5b | 2012-04-19 01:36:12 +0000 | [diff] [blame] | 15 | |
| Joerg Sonnenberger | 5562207 | 2014-04-30 19:54:11 +0000 | [diff] [blame] | 16 | /* For _LIBCPPABI_VERSION */ |
| Benjamin Kramer | 8f6e763 | 2015-10-16 11:26:26 +0000 | [diff] [blame] | 17 | #if defined(LIBCXX_BUILDING_LIBCXXABI) || defined(__APPLE__) || defined(LIBCXXRT) |
| Howard Hinnant | e1642e1 | 2012-02-17 19:24:42 +0000 | [diff] [blame] | 18 | #include <cxxabi.h> |
| Richard Smith | c756f5b | 2012-04-19 01:36:12 +0000 | [diff] [blame] | 19 | #endif |
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 20 | |
| Joerg Sonnenberger | 5562207 | 2014-04-30 19:54:11 +0000 | [diff] [blame] | 21 | static_assert(sizeof(std::__libcpp_refstring) == sizeof(const char *), ""); |
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 22 | |
| 23 | namespace std // purposefully not using versioning namespace | ||||
| 24 | { | ||||
| 25 | |||||
| Joerg Sonnenberger | 5562207 | 2014-04-30 19:54:11 +0000 | [diff] [blame] | 26 | logic_error::logic_error(const string& msg) : __imp_(msg.c_str()) |
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 27 | { |
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 28 | } |
| 29 | |||||
| Joerg Sonnenberger | 5562207 | 2014-04-30 19:54:11 +0000 | [diff] [blame] | 30 | logic_error::logic_error(const char* msg) : __imp_(msg) |
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 31 | { |
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 32 | } |
| 33 | |||||
| Joerg Sonnenberger | 5562207 | 2014-04-30 19:54:11 +0000 | [diff] [blame] | 34 | logic_error::logic_error(const logic_error& le) _NOEXCEPT : __imp_(le.__imp_) |
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 35 | { |
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 36 | } |
| 37 | |||||
| 38 | logic_error& | ||||
| Howard Hinnant | 1e15fd1 | 2011-05-26 19:48:01 +0000 | [diff] [blame] | 39 | logic_error::operator=(const logic_error& le) _NOEXCEPT |
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 40 | { |
| Joerg Sonnenberger | 5562207 | 2014-04-30 19:54:11 +0000 | [diff] [blame] | 41 | __imp_ = le.__imp_; |
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 42 | return *this; |
| 43 | } | ||||
| 44 | |||||
| Peter Collingbourne | d0d308f | 2013-10-06 22:13:19 +0000 | [diff] [blame] | 45 | #if !defined(_LIBCPPABI_VERSION) && !defined(LIBSTDCXX) |
| Howard Hinnant | e1642e1 | 2012-02-17 19:24:42 +0000 | [diff] [blame] | 46 | |
| Howard Hinnant | 1e15fd1 | 2011-05-26 19:48:01 +0000 | [diff] [blame] | 47 | logic_error::~logic_error() _NOEXCEPT |
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 48 | { |
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 49 | } |
| 50 | |||||
| 51 | const char* | ||||
| Howard Hinnant | 1e15fd1 | 2011-05-26 19:48:01 +0000 | [diff] [blame] | 52 | logic_error::what() const _NOEXCEPT |
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 53 | { |
| Joerg Sonnenberger | 5562207 | 2014-04-30 19:54:11 +0000 | [diff] [blame] | 54 | return __imp_.c_str(); |
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 55 | } |
| 56 | |||||
| Howard Hinnant | e1642e1 | 2012-02-17 19:24:42 +0000 | [diff] [blame] | 57 | #endif |
| 58 | |||||
| Joerg Sonnenberger | 5562207 | 2014-04-30 19:54:11 +0000 | [diff] [blame] | 59 | runtime_error::runtime_error(const string& msg) : __imp_(msg.c_str()) |
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 60 | { |
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 61 | } |
| 62 | |||||
| Joerg Sonnenberger | 5562207 | 2014-04-30 19:54:11 +0000 | [diff] [blame] | 63 | runtime_error::runtime_error(const char* msg) : __imp_(msg) |
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 64 | { |
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 65 | } |
| 66 | |||||
| Howard Hinnant | 1e15fd1 | 2011-05-26 19:48:01 +0000 | [diff] [blame] | 67 | runtime_error::runtime_error(const runtime_error& le) _NOEXCEPT |
| Joerg Sonnenberger | 5562207 | 2014-04-30 19:54:11 +0000 | [diff] [blame] | 68 | : __imp_(le.__imp_) |
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 69 | { |
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 70 | } |
| 71 | |||||
| 72 | runtime_error& | ||||
| Howard Hinnant | 1e15fd1 | 2011-05-26 19:48:01 +0000 | [diff] [blame] | 73 | runtime_error::operator=(const runtime_error& le) _NOEXCEPT |
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 74 | { |
| Joerg Sonnenberger | 5562207 | 2014-04-30 19:54:11 +0000 | [diff] [blame] | 75 | __imp_ = le.__imp_; |
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 76 | return *this; |
| 77 | } | ||||
| 78 | |||||
| Peter Collingbourne | d0d308f | 2013-10-06 22:13:19 +0000 | [diff] [blame] | 79 | #if !defined(_LIBCPPABI_VERSION) && !defined(LIBSTDCXX) |
| Howard Hinnant | e1642e1 | 2012-02-17 19:24:42 +0000 | [diff] [blame] | 80 | |
| Howard Hinnant | 1e15fd1 | 2011-05-26 19:48:01 +0000 | [diff] [blame] | 81 | runtime_error::~runtime_error() _NOEXCEPT |
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 82 | { |
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 83 | } |
| 84 | |||||
| 85 | const char* | ||||
| Howard Hinnant | 1e15fd1 | 2011-05-26 19:48:01 +0000 | [diff] [blame] | 86 | runtime_error::what() const _NOEXCEPT |
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 87 | { |
| Joerg Sonnenberger | 5562207 | 2014-04-30 19:54:11 +0000 | [diff] [blame] | 88 | return __imp_.c_str(); |
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 89 | } |
| 90 | |||||
| Howard Hinnant | 1e15fd1 | 2011-05-26 19:48:01 +0000 | [diff] [blame] | 91 | domain_error::~domain_error() _NOEXCEPT {} |
| 92 | invalid_argument::~invalid_argument() _NOEXCEPT {} | ||||
| 93 | length_error::~length_error() _NOEXCEPT {} | ||||
| 94 | out_of_range::~out_of_range() _NOEXCEPT {} | ||||
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 95 | |
| Howard Hinnant | 1e15fd1 | 2011-05-26 19:48:01 +0000 | [diff] [blame] | 96 | range_error::~range_error() _NOEXCEPT {} |
| 97 | overflow_error::~overflow_error() _NOEXCEPT {} | ||||
| 98 | underflow_error::~underflow_error() _NOEXCEPT {} | ||||
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 99 | |
| Howard Hinnant | e1642e1 | 2012-02-17 19:24:42 +0000 | [diff] [blame] | 100 | #endif |
| 101 | |||||
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 102 | } // std |