Unfortunately it doesn't provide the function's address anymore (maybe some code used that to uniquely identify functions or perform black magic) since there's no "rawtostring" function.
You can get function's address by temporarily disabling __tostring option in functions' metatable ;-)
local meta local doc = {}
local function get_func_info(func) meta.__tostring = nil local addr = tostring(func):match'%X(%x+)%X*$' meta.__tostring = get_func_info local info, params = debug.getinfo(func, 'u'), {}
for i = 1, info.nparams do params[i] = debug.getlocal(func, i) end if info.isvararg then params[#params+1] = '...' end return 'function@'..addr..'('..table.concat(params, ', ')..')'..(doc[func] or '')
end
meta = debug.getmetatable(get_func_info) or {} meta.__tostring = debug.setmetatable(get_func_info, meta)
local x = 1 local function f(a, b, c, ...) return x end doc[f] = " -> number"
print(f) print(print)
-- output with vanilla Lua function@004132C0(a, b, c, ...) -> number function@10004570(...)
-- output with LuaJIT function@00999218(a, b, c, ...) -> number function@30(...)