lua-users home
lua-l archive

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


This scheme works OK with MS VC6. It requires compilation flags
of '/GX /EHc-' for any modules

Note the minus sign.

DB
+++++++++++++++++++++++++++++++++
>I modified the 5.0 distribution to allow luaD_throw and luaD_rawrunprotected
>to be overriden. In my case it was to work with MacOS X's exception system
>in Cocoa, but the principle is the same. You basically need to throw
>exceptions of whatever type you are using in the luaD_throw equivalent --
>most of the work is actually in translating between exception types -- and
>implement an appropriate catching context in luaD_rawrunprotected.
>
>I remember being favorably impressed at the time at how easy this was to do.
>
>Summary:
>
>    void my_throw( lua_State *L, int errcode ) {
>
>        lua_unlock( L );
>            // Unlock because we're about to go into non Lua VM C code
>
>        // translate the error code and possibly the top of the stack into
>        // an exception
>
>        // raise/throw the exception
>
>    }
>
>    int my_rawrunprotected(
>            lua_State *L,
>            void (*f)( lua_State *L, void *ud ),
>            void *ud ) {
>
>        volatile int status = 0;
>
>        NS_DURING   // e.g., try
>
>            (*f)( L, ud );
>
>        NS_HANDLER  // e.g., catch
>
>            status = exceptionToLuaError( L, localException );
>                // Translate back to Lua. Note that if the exception
>                // did not originate with Lua, then we need to push
>                // something onto the stack to match what Lua would
>                // have done.
>
>            lua_lock( L );
>                // Restore the lock
>
>        NS_ENDHANDLER
>
>        return status;
>
>    }
>
>The unlock and the lock are important for matching Lua's lock state when
>executing non-Lua code.
>
>Implementing this allows exception handlers in C code to execute (or C++
>destructors if you do the C++ equivalent) and allows for exceptions to be
>thrown from C code and caught by Lua provided that you can do the
>appropriate translation back.
>
>Mark
>
>on 1/1/04 1:50 PM, D Burgess at db@werx4.com wrote:
>
>> I note that lhf in
>> http://lua-users.org/lists/lua-l/2003-06/msg00164.html
>> 
>> lhf says: The next version will contain macros that make this even
>> easier.
>> 
>> Any chance of a preview of this code?
>> DB
>> +++++++++++++++++++++++++++++++++
>>> Here's one example:
>>> 
>>> http://www.fensende.com/~mcuddy/ltn/luapp.html
>>> 
>>> Although it's lua 4.x, it shouldn't be much trouble to modify it for lua
>>> 5.x.
>>> 
>>> -Kevin
>>> 
>>>> -----Original Message-----
>>>> From: lua-bounces@bazar2.conectiva.com.br
>>>> [mailto:lua-bounces@bazar2.conectiva.com.br] On Behalf Of D Burgess
>>>> Sent: Friday, January 02, 2004 12:00 AM
>>>> To: Lua list
>>>> Subject: Exceptions
>>>> 
>>>> 
>>>> Would anyone like to share the code for replacing
>>>> setjmp/longjmp with C++ exceptions or Win32 structured
>>>> exception handling?
>>>> 
>>>> David B
>>>> 
>>>> 
>>>> 
>> 
>> 
>> 
>> 
>>