On 02/23/12 20:58, H. S. Teoh wrote: > On Thu, Feb 23, 2012 at 01:51:31PM +0200, Manu wrote: > [...] >> I wonder if there are alternative ways to detect a foreign stack. And >> I'm not sure why it even matters, you can't depend on the extern ABI, >> how do you unwind the stack reliably in the first place? > [...] > > This is a bit off-topic, but what happens in the current implementation > if you pass a D callback to a C function, and then throw an exception > from the callback? Does it work? Or does it do something really nasty?
No, unless you consider a segfault to be really nasty. :) Actually, it mostly works - i just tried it in a gtk app, and it works as long as you catch the exception and only look at the error msg. If you don't catch it (or try writeln(e) etc), then the result is something like: action.Action!(int).Action.registerNS.MissingActionEx@action.d(54): Action "GUI" missing symbol 'int AppWindowClosed()' ---------------- ./gtkapp() [0x8054366] /usr/lib/i686/sse2/libgtk-x11-2.0.so.0(+0x153052) [0xf7375052] /usr/lib/i686/sse2/libgobject-2.0.so.0(g_closure_invoke+0x19b) [0xf71e25fd] /usr/lib/i686/sse2/libgobject-2.0.so.0(+0x1ddc8) [0xf71f2dc8] /usr/lib/i686/sse2/libgobject-2.0.so.0(g_signal_emit_valist+0x59a) [0xf71fa37f] /usr/lib/i686/sse2/libgobject-2.0.so.0(g_signal_emit+0x34) [0xf71fa61f] /usr/lib/i686/sse2/libgtk-x11-2.0.so.0(+0x2a17f3) [0xf74c37f3] /usr/lib/i686/sse2/libgtk-x11-2.0.so.0(gtk_main_do_event+0x8e6) [0xf7373856] Segmentation fault So something appears to get confused while walking the stack; another thing to investigate later, i guess... artur