C++/D interface: exceptions
Sean Kelly via Digitalmars-d
digitalmars-d at puremagic.com
Fri Sep 12 08:55:37 PDT 2014
On Friday, 12 September 2014 at 06:56:29 UTC, Jacob Carlborg
wrote:
> On 12/09/14 05:25, deadalnix wrote:
>
>> Yes, that is pretty why I limited myself to the "unwind
>> properly but do
>> not catch" option. This one would require to mess with the
>> innards of
>> various C++ runtime.
>
> On 64bit Objective-C can catch C++ exceptions. But I don't
> think you can do anything with the exception, i.e. it uses the
> following catch syntax:
>
> @catch(...) {}
>
> Would that be easier?
I think the trick is setting up the stack frame in such a way
that the C++ exception mechanism knows there's a catch block
available at all. From there, we should be able to use the
standard interface-to-class method to call virtual functions on
the exception object, and hopefully the C++ runtime will handle
cleanup for us.
I imagine the easiest thing would be to find a platform where we
already know how exceptions are thrown in C++ (DMC on Windows?)
and figure out how to make it work in D. With inner functions
and inline asm, I'm sure it's possible to make this work without
compiler changes. I don't know whether the unwinding mechanism
differs across compilers or even compiler versions for a
particular platform though. This may all end up being a bit
brittle.
More information about the Digitalmars-d
mailing list