diff --git a/lualib/snax/hotfix.lua b/lualib/snax/hotfix.lua index 3262dafd..a73d680e 100644 --- a/lualib/snax/hotfix.lua +++ b/lualib/snax/hotfix.lua @@ -68,10 +68,10 @@ local function find_func(funcs, group , name) end local dummy_env = {} +for k,v in pairs(_ENV) do dummy_env[k] = v end -local function patch_func(funcs, global, group, name, f) - local desc = assert(find_func(funcs, group, name) , string.format("Patch mismatch %s.%s", group, name)) - local i = 1 +local function _patch(global, f) + local i = 1 while true do local name, value = debug.getupvalue(f, i) if name == nil then @@ -81,9 +81,18 @@ local function patch_func(funcs, global, group, name, f) if old_uv then debug.upvaluejoin(f, i, old_uv.func, old_uv.index) end + else + if type(value) == "function" then + _patch(global, value) + end end i = i + 1 end +end + +local function patch_func(funcs, global, group, name, f) + local desc = assert(find_func(funcs, group, name) , string.format("Patch mismatch %s.%s", group, name)) + _patch(global, f) desc[4] = f end