From 6a43b3af09944f1d218b20be034ccb9e6ea073ff Mon Sep 17 00:00:00 2001 From: SmallJoker 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 --- 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 ----------------------------- -- 2.25.1