[Prev][Next][Index][Thread]

Re: Using old C++ libraries with Dylan




--- Rob Myers <robmyers@mac.com> wrote:
> On Wednesday, September 12, 2001, at 07:00  pm, Mark
> Jordan wrote:
> 
> > Here's my problem. I like Dylan and want to use
> it,
> > but I have a huge investment in C++ libraries that
> > I want to retain.
> 
> Are you on PC or another platform? Fun-Dev and
> Gwydion Dylan have 
> different strengths in dealing with C code.
> 
> > My ideal solution would be to somehow be able to
> catch
> > any exceptions thrown by the C++ code in Dylan,
> but I
> > don't know if it's technically possible.
> >
> > Any suggestions as to what to do?
> 
> Assuming you have access to the code:
> 
> You could #define throw() to call a Dylan callback
> that would then 
> signal() the error to Dylan. This is probably best
> as it doesn't touch 
> the stack or put the C++ runtime into any strange
> state.

This usually won't work. C++ semantics demand that all
pending destructors to be called when the stack gets
unwound. This will not take place with your appoach
unfortunately, \signal does not know about pending
destructors.

	Gabor

> Or you can wrap the public API methods in try/catch
> blocks and call 
> Dylan in the catch() section. This could be scripted
> to make it bearable.
> set_unexpected() could be used to add an unexpected
> exception handler 
> that again could get a Dylan callback to signal.
> This may require 
> modifying the function declarations to have empty
> exception 
> specifications, but again could be scripted.
> std::set_terminate() is 
> less useful as it means the C++ runtime is being
> shut down.
> 
> So basically some means of intercepting the
> exception and translating it 
> to a Dylan condition. But I don't know what the
> stack's like when an 
> exception is being handled and how this would affect
> Dylan or the GC.
> 
> - Rob.
> 
> 


__________________________________________________
Terrorist Attacks on U.S. - How can you help?
Donate cash, emergency relief information
http://dailynews.yahoo.com/fc/US/Emergency_Information/


References: