From 0e1f40ad308a2020801dbc9aa91ac6f6d24e6226 Mon Sep 17 00:00:00 2001 From: Ishaan Bhardwaj Date: Fri, 27 Aug 2021 17:18:06 -0400 Subject: [PATCH] Amend the copying functions --- funcs.lua | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/funcs.lua b/funcs.lua index 5de574b..70697f3 100644 --- a/funcs.lua +++ b/funcs.lua @@ -1,10 +1,20 @@ function copy(t) - -- returns deep copy of t (as opposed to the shallow copy you get from var = t) + -- returns top-layer shallow copy of t if type(t) ~= "table" then return t end - local meta = getmetatable(t) local target = {} - for k, v in pairs(t) do target[k] = v end - setmetatable(target, meta) + for k, v in next, t do target[k] = v end + setmetatable(target, getmetatable(t)) + return target +end + +function deepcopy(t) + -- returns infinite-layer deep copy of t + if type(t) ~= "table" then return t end + local target = {} + for k, v in next, t do + target[deepcopy(k)] = deepcopy(v) + end + setmetatable(target, deepcopy(getmetatable(t))) return target end