__namecall is a hidden optimisation might I add. With the update of LuaVM a couple of years ago, method name is no longer passed as a consequence of further optimisation efforts. Even before, Roblox didn’t approve of it in production code because of possible breaking changes.
__index can mimic it just fine.
local proxy = newproxy(true)
local meta = getmetatable(proxy)
function meta:__index(key)
if key == "print" then
return function(self, ...)
print(...)
end
end
return self[key]
end
proxy.print(proxy, "OK") --> OK
proxy:print("OK") --> OK
print(proxy.print) --> function: 0x...