summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSmallJoker <mk939@ymail.com>2014-10-04 19:23:15 +0200
committerCraig Robbins <kde.psych@gmail.com>2014-11-27 18:19:01 +1000
commit6a43b3af09944f1d218b20be034ccb9e6ea073ff (patch)
tree5d5fba1e0d7b93b2ffb375ae5fbf4dd9329e7981
parent77137a92cfc221b885b8eae68f13cede604fcac7 (diff)
downloadminetest-6a43b3af09944f1d218b20be034ccb9e6ea073ff.tar.gz
minetest-6a43b3af09944f1d218b20be034ccb9e6ea073ff.tar.bz2
minetest-6a43b3af09944f1d218b20be034ccb9e6ea073ff.zip
Add minetest.copy_table(table) To get rid off the "table references"
Signed-off-by: Craig Robbins <kde.psych@gmail.com>
-rw-r--r--builtin/common/misc_helpers.lua12
-rw-r--r--doc/lua_api.txt2
2 files changed, 14 insertions, 0 deletions
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
@@ -491,6 +491,18 @@ function core.pos_to_string(pos)
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
--------------------------------------------------------------------------------
if INIT == "mainmenu" then
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
-----------------------------