111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//===------------------------ stdexcept.cpp -------------------------------===//
211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//                     The LLVM Compiler Infrastructure
411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// This file is dual licensed under the MIT and the University of Illinois Open
611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Source Licenses. See LICENSE.TXT for details.
711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//===----------------------------------------------------------------------===//
911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include "__refstring"
1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include "stdexcept"
1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include "new"
1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include "string"
1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include "system_error"
1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* For _LIBCPPABI_VERSION */
1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined(LIBCXX_BUILDING_LIBCXXABI) || defined(__APPLE__) || defined(LIBCXXRT)
1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <cxxabi.h>
1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic_assert(sizeof(std::__libcpp_refstring) == sizeof(const char *), "");
2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertnamespace std  // purposefully not using versioning namespace
2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertlogic_error::logic_error(const string& msg) : __imp_(msg.c_str())
2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertlogic_error::logic_error(const char* msg) : __imp_(msg)
3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertlogic_error::logic_error(const logic_error& le) _NOEXCEPT : __imp_(le.__imp_)
3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertlogic_error&
3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertlogic_error::operator=(const logic_error& le) _NOEXCEPT
4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    __imp_ = le.__imp_;
4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    return *this;
4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if !defined(_LIBCPPABI_VERSION) && !defined(LIBSTDCXX)
4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertlogic_error::~logic_error() _NOEXCEPT
4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertconst char*
5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertlogic_error::what() const _NOEXCEPT
5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    return __imp_.c_str();
5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertruntime_error::runtime_error(const string& msg) : __imp_(msg.c_str())
6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertruntime_error::runtime_error(const char* msg) : __imp_(msg)
6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertruntime_error::runtime_error(const runtime_error& le) _NOEXCEPT
6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  : __imp_(le.__imp_)
6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertruntime_error&
7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertruntime_error::operator=(const runtime_error& le) _NOEXCEPT
7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    __imp_ = le.__imp_;
7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    return *this;
7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if !defined(_LIBCPPABI_VERSION) && !defined(LIBSTDCXX)
8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertruntime_error::~runtime_error() _NOEXCEPT
8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertconst char*
8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertruntime_error::what() const _NOEXCEPT
8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    return __imp_.c_str();
8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertdomain_error::~domain_error() _NOEXCEPT {}
9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinvalid_argument::~invalid_argument() _NOEXCEPT {}
9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertlength_error::~length_error() _NOEXCEPT {}
9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertout_of_range::~out_of_range() _NOEXCEPT {}
9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertrange_error::~range_error() _NOEXCEPT {}
9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertoverflow_error::~overflow_error() _NOEXCEPT {}
9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertunderflow_error::~underflow_error() _NOEXCEPT {}
9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}  // std
103