Catching C++ std::exception in D
Elie Morisse via Digitalmars-d
digitalmars-d at puremagic.com
Sat Nov 14 16:04:55 PST 2015
Sorry for the delay, here's the initial commit for C++ exception
catching in Calypso:
https://github.com/Syniurge/Calypso/commit/8b55ec1f013c29df86455ab055fbba91a72d92af
https://github.com/Syniurge/druntime/commit/d33d8bf32c739bf9a30705dfc764718c817f16b1
The main files of interest are:
https://github.com/Syniurge/druntime/blob/release-0.16.1/src/ldc/eh/cpp/gnu.d
https://github.com/Syniurge/Calypso/blob/master/gen/cpp/cppeh.cpp
And a basic example which segfaults at e.what() because
__cxa_begin_catch returns null:
https://github.com/Syniurge/Calypso/blob/master/tests/calypso/eh/std_exception.d
Resulting IR : https://paste.kde.org/pvi2bokqx
catch (C++) were added to be able to catch any type, and that's
the only cost for being able to catch any C++ exception and not
just std::exception I think, Clang and the libstdc++ makes
working with std::type_info very easy.
For the time the handler uses unwind-cxx.h copied from GNU's
libstdc++ (it's an internal header which doesn't ship with any
Ubuntu package). Its license is more permissive than the GPL, but
if it isn't compatible it could be replaced by its libc++
equivalent.
More information about the Digitalmars-d
mailing list