typeinfo.cpp revision dea7f39af1ae5a71adfc0434b111962345193ef2
1804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik//===------------------------- typeinfo.cpp -------------------------------===// 2804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik// 3804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik// The LLVM Compiler Infrastructure 4804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik// 5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 7804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik// 8804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik//===----------------------------------------------------------------------===// 9804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik#include <stdlib.h> 101348fba3e2fc90f727ef88c17d9073a2b5e9686eHoward Hinnant#if __APPLE__ 11c7e4d82bc01d13ec7dbf7823fd38aea9873d0a21Nick Kledzik#include <cxxabi.h> 121348fba3e2fc90f727ef88c17d9073a2b5e9686eHoward Hinnant#endif 13804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik 14804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik#include "typeinfo" 15804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik 16dea7f39af1ae5a71adfc0434b111962345193ef2Howard Hinnant#ifndef _LIBCPPABI_VERSION 17dea7f39af1ae5a71adfc0434b111962345193ef2Howard Hinnant 18ed56921d6e491eb96f489cedf24fed393fdfc0bfHoward Hinnantstd::bad_cast::bad_cast() _NOEXCEPT 1916e6e1d72fd6a10fc165eba4ca4ed2fa7c45df78Howard Hinnant{ 20804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik} 21804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik 22ed56921d6e491eb96f489cedf24fed393fdfc0bfHoward Hinnantstd::bad_cast::~bad_cast() _NOEXCEPT 2316e6e1d72fd6a10fc165eba4ca4ed2fa7c45df78Howard Hinnant{ 24804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik} 25804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik 2616e6e1d72fd6a10fc165eba4ca4ed2fa7c45df78Howard Hinnantconst char* 27ed56921d6e491eb96f489cedf24fed393fdfc0bfHoward Hinnantstd::bad_cast::what() const _NOEXCEPT 28804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik{ 29804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik return "std::bad_cast"; 30804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik} 31804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik 32ed56921d6e491eb96f489cedf24fed393fdfc0bfHoward Hinnantstd::bad_typeid::bad_typeid() _NOEXCEPT 3316e6e1d72fd6a10fc165eba4ca4ed2fa7c45df78Howard Hinnant{ 34804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik} 35804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik 36ed56921d6e491eb96f489cedf24fed393fdfc0bfHoward Hinnantstd::bad_typeid::~bad_typeid() _NOEXCEPT 37804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik{ 38804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik} 39804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik 4016e6e1d72fd6a10fc165eba4ca4ed2fa7c45df78Howard Hinnantconst char* 41ed56921d6e491eb96f489cedf24fed393fdfc0bfHoward Hinnantstd::bad_typeid::what() const _NOEXCEPT 42804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik{ 43804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik return "std::bad_typeid"; 44804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik} 45c7e4d82bc01d13ec7dbf7823fd38aea9873d0a21Nick Kledzik 46c7e4d82bc01d13ec7dbf7823fd38aea9873d0a21Nick Kledzik#if __APPLE__ 47c7e4d82bc01d13ec7dbf7823fd38aea9873d0a21Nick Kledzik // On Darwin, the cxa_bad_* functions cannot be in the lower level library 48c7e4d82bc01d13ec7dbf7823fd38aea9873d0a21Nick Kledzik // because bad_cast and bad_typeid are defined in his higher level library 49c7e4d82bc01d13ec7dbf7823fd38aea9873d0a21Nick Kledzik void __cxxabiv1::__cxa_bad_typeid() { throw std::bad_typeid(); } 50c7e4d82bc01d13ec7dbf7823fd38aea9873d0a21Nick Kledzik void __cxxabiv1::__cxa_bad_cast() { throw std::bad_cast(); } 51c7e4d82bc01d13ec7dbf7823fd38aea9873d0a21Nick Kledzik#endif 52c7e4d82bc01d13ec7dbf7823fd38aea9873d0a21Nick Kledzik 53dea7f39af1ae5a71adfc0434b111962345193ef2Howard Hinnant#endif // _LIBCPPABI_VERSION 54