lua-users home
lua-l archive

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

on 7/3/06 12:14 AM, Andreas Stenius at wrote:

> One way could be to call lua_error instead of longjmp in your hook, but
> then you have to remove pcall from the user environment, or he'll be
> able to catch it.

Or redefine pcall so that it looks for a particular error and always
propagates it. In Lua, I think the following is correct (untested):

    local kMagicError = { }

    local old_pcall = pcall

    function new_pcall

    function new_pcall_finish( success, ... )
        if not success then
            local message = ...
            if message == kMagicError then
                error( kMagicError )
        return success, ...

    pcall = function( ... )
        return new_pcall_finish( old_pcall( ... ) )

    function throwMagicError()
        error( kMagicError )

You would want to access throwMagicError from your hook proc.