EinsDreiDreiSieben/mods/futil/util/exception.lua

29 lines
701 B
Lua

function futil.safe_wrap(func, rv_on_fail, error_callback)
-- wrap a function w/ logic to avoid crashing
return function(...)
local rvs = { xpcall(func, debug.traceback, ...) }
if rvs[1] then
return unpack(rvs, 2)
else
if error_callback then
error_callback(debug.getinfo(func), { ... }, rvs[2])
else
futil.log(
"error",
"(check_call): %s args: %s out: %s",
dump(debug.getinfo(func)),
dump({ ... }),
rvs[2]
)
end
return rv_on_fail
end
end
end
function futil.safe_call(func, rv_on_fail, error_callback, ...)
return futil.safe_wrap(func, rv_on_fail, error_callback)(...)
end
futil.check_call = futil.safe_wrap -- backwards compatibility