summaryrefslogtreecommitdiff
path: root/Tools/lua-snapshot/print_r.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/lua-snapshot/print_r.lua')
-rw-r--r--Tools/lua-snapshot/print_r.lua31
1 files changed, 31 insertions, 0 deletions
diff --git a/Tools/lua-snapshot/print_r.lua b/Tools/lua-snapshot/print_r.lua
new file mode 100644
index 0000000..3a4a710
--- /dev/null
+++ b/Tools/lua-snapshot/print_r.lua
@@ -0,0 +1,31 @@
+local print = print
+local tconcat = table.concat
+local tinsert = table.insert
+local srep = string.rep
+local type = type
+local pairs = pairs
+local tostring = tostring
+local next = next
+
+local function print_r(root)
+ local cache = { [root] = "." }
+ local function _dump(t,space,name)
+ local temp = {}
+ for k,v in pairs(t) do
+ local key = tostring(k)
+ if cache[v] then
+ tinsert(temp,"+" .. key .. " {" .. cache[v].."}")
+ elseif type(v) == "table" then
+ local new_key = name .. "." .. key
+ cache[v] = new_key
+ tinsert(temp,"+" .. key .. _dump(v,space .. (next(t,k) and "|" or " " ).. srep(" ",#key),new_key))
+ else
+ tinsert(temp,"+" .. key .. " [" .. tostring(v).."]")
+ end
+ end
+ return tconcat(temp,"\n"..space)
+ end
+ print(_dump(root, "",""))
+end
+
+return print_r \ No newline at end of file