-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathcurrent_exception.hh
44 lines (40 loc) · 1.27 KB
/
current_exception.hh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// Copyright (C) 2007 Zack Weinberg <[email protected]>
//
// This program is made available under the GNU GPL version 2.0 or
// greater. See the accompanying file COPYING for details.
//
// This program is distributed WITHOUT ANY WARRANTY; without even the
// implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
// PURPOSE.
#ifndef CURRENT_EXCEPTION_HH
#define CURRENT_EXCEPTION_HH
#include <typeinfo>
// Add #ifdeffage here as appropriate for other compiler-specific ways to
// get this information. Windows note: as best I can determine from poking
// around on MSDN, MSVC type_info.name() is already demangled, and there is
// no documented equivalent of __cxa_current_exception_type().
#ifdef HAVE_CXXABI_H
#include <cxxabi.h>
#ifdef HAVE___CXA_DEMANGLE
inline char const * demangle_typename(char const * name)
{
int status = -1;
char * dem = abi::__cxa_demangle(name, 0, 0, &status);
if (status == 0)
return dem;
else
return 0;
}
#else
#define demangle_typename(x) 0
#endif
#ifdef HAVE___CXA_CURRENT_EXCEPTION_TYPE
#define get_current_exception_type() abi::__cxa_current_exception_type()
#else
#define get_current_exception_type() 0
#endif
#else
#define demangle_typename(x) 0
#define get_current_exception_type() 0
#endif
#endif