-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmerge.lua
More file actions
41 lines (20 loc) · 876 Bytes
/
merge.lua
File metadata and controls
41 lines (20 loc) · 876 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
-- Based off Astro implementation. It does not merge actor tables.
local astro = Astro.Type local isTable = astro.isTable
local isVector = Astro.Vector.isVector
-- This looks suspicious...
local function isObject(a)
local meta = getmetatable(a) local k = "__concat"
return meta and meta[k] == DefMetatable[k]
end
local function value( new, current )
local isNew = not isTable(new) or isObject(new)
if isNew or not isTable(current) then return new end
if isVector(new) then return new:copy() end current = current or {}
for k,v in pairs(new) do current[k] = value( v, current[k] ) end
return current
end
local function deepMerge( to, from )
if not from then return to end
for k,v in pairs(from) do to[k] = value( v, to[k] ) end return to
end
tapLua.deepMerge = deepMerge