cosmonarchy-bw-prerelease/mpq/lua/melee/deepcopy.lua

21 lines
480 B
Lua
Raw Permalink Normal View History

---@param original any
---@param seen? table
---@return any
function deepcopy(original, seen)
if type(original) ~= "table" then
return original
end
seen = seen or {}
if seen[original] then
return seen[original]
end
local copy = {}
seen[original] = copy
for key, value in pairs(original) do
copy[deepcopy(key, seen)] = deepcopy(value, seen)
end
return setmetatable(copy, deepcopy(getmetatable(original), seen))
end