This commit is contained in:
Starbeamrainbowlabs 2021-11-10 02:07:34 +00:00
parent e82440a096
commit 43ea6e34c1
Signed by: sbrl
GPG key ID: 1BE5172E637709C2

View file

@ -25,16 +25,16 @@
-- @param obj table The table to clone.
-- @returns table A deep copy of the given table.
local function deepcopy(obj, seen)
-- Handle non-tables and previously-seen tables.
if type(obj) ~= 'table' then return obj end
if seen and seen[obj] then return seen[obj] end
-- New table; mark it as seen and copy recursively.
local s = seen or {}
local res = {}
s[obj] = res
for k, v in pairs(obj) do res[deepcopy(k, s)] = deepcopy(v, s) end
return setmetatable(res, getmetatable(obj))
-- Handle non-tables and previously-seen tables.
if type(obj) ~= 'table' then return obj end
if seen and seen[obj] then return seen[obj] end
-- New table; mark it as seen and copy recursively.
local s = seen or {}
local res = {}
s[obj] = res
for k, v in pairs(obj) do res[deepcopy(k, s)] = deepcopy(v, s) end
return setmetatable(res, getmetatable(obj))
end
return deepcopy