You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
local cmsgpack = require("cmsgpack")
local function to_readonly_table(input_table)
if input_table == nil then
return nil
end
assert(type(input_table) == 'table')
local travelled_tables = {}
local function __read_only(tbl)
if not travelled_tables[tbl] then
local tbl_mt = getmetatable(tbl)
if not tbl_mt then
tbl_mt = {}
setmetatable(tbl, tbl_mt)
end
local proxy = tbl_mt.__read_only_proxy
if not proxy then
proxy = {}
tbl_mt.__read_only_proxy = proxy
local proxy_mt = {
__index = tbl,
__newindex = function(t, k, v)
error("error write to a read-only table with key = " .. tostring(k))
end,
__pairs = function(t)
return pairs(tbl)
end,
__len = function(t)
return #tbl
end,
__read_only_proxy = proxy
}
setmetatable(proxy, proxy_mt)
end
travelled_tables[tbl] = proxy
for k, v in pairs(tbl) do
if type(v) == "table" then
tbl[k] = __read_only(v)
end
end
end
return travelled_tables[tbl]
end
return __read_only(input_table)
end
local t = to_readonly_table({
a = 1,
b = 2
})
local tmp = cmsgpack.pack(t)
local origin = cmsgpack.unpack(tmp) -- this one become empty
The text was updated successfully, but these errors were encountered:
The text was updated successfully, but these errors were encountered: