From 6a43b3af09944f1d218b20be034ccb9e6ea073ff Mon Sep 17 00:00:00 2001
From: SmallJoker <mk939@ymail.com>
Date: Sat, 4 Oct 2014 19:23:15 +0200
Subject: [PATCH] Add minetest.copy_table(table) To get rid off the "table
 references"

Signed-off-by: Craig Robbins <kde.psych@gmail.com>
---
 builtin/common/misc_helpers.lua | 12 ++++++++++++
 doc/lua_api.txt                 |  2 ++
 2 files changed, 14 insertions(+)

diff --git a/builtin/common/misc_helpers.lua b/builtin/common/misc_helpers.lua
index 48488ab62..0b608126e 100644
--- a/builtin/common/misc_helpers.lua
+++ b/builtin/common/misc_helpers.lua
@@ -490,6 +490,18 @@ function core.pos_to_string(pos)
 	return "(" .. pos.x .. "," .. pos.y .. "," .. pos.z .. ")"
 end
 
+--------------------------------------------------------------------------------
+function table.copy(t, seen)
+	local n = {}
+	seen = seen or {}
+	seen[t] = n
+	for k, v in pairs(t) do
+		n[type(k) ~= "table" and k or seen[k] or table.copy(k, seen)] =
+			type(v) ~= "table" and v or seen[v] or table.copy(v, seen)
+	end
+	return n
+end
+
 --------------------------------------------------------------------------------
 -- mainmenu only functions
 --------------------------------------------------------------------------------
diff --git a/doc/lua_api.txt b/doc/lua_api.txt
index e4a016b1a..f51d215ed 100644
--- a/doc/lua_api.txt
+++ b/doc/lua_api.txt
@@ -1310,6 +1310,8 @@ minetest.is_yes(arg)
 ^ returns whether arg can be interpreted as yes
 minetest.get_us_time()
 ^ returns time with microsecond precision
+table.copy(table) -> table
+^ returns a deep copy of a table
 
 minetest namespace reference
 -----------------------------
-- 
GitLab