summaryrefslogtreecommitdiff
path: root/xmake/core/base/table.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2016-03-18 10:40:57 +0800
committerruki <[email protected]>2016-03-18 10:40:57 +0800
commit8f5125ae1329d24b5265c4cb45b1890c3f175e60 (patch)
tree9c66f71fe62c5232c1ce93a35195377bae46f130 /xmake/core/base/table.lua
parentdbb2fe806d1e3232c418fb47351dd8d8354e2ca2 (diff)
rename utils.dump
Diffstat (limited to 'xmake/core/base/table.lua')
-rw-r--r--xmake/core/base/table.lua92
1 files changed, 92 insertions, 0 deletions
diff --git a/xmake/core/base/table.lua b/xmake/core/base/table.lua
index 363f6efe0..940a05f50 100644
--- a/xmake/core/base/table.lua
+++ b/xmake/core/base/table.lua
@@ -154,5 +154,97 @@ function table.is_dictionary(self)
return false
end
+-- dump it with the level
+function table._dump(self, exclude, level)
+
+ -- dump string
+ if type(self) == "string" then
+ io.write(string.format("%q", self))
+ -- dump boolean
+ elseif type(self) == "boolean" then
+ io.write(tostring(self))
+ -- dump number
+ elseif type(self) == "number" then
+ io.write(self)
+ -- dump function
+ elseif type(self) == "function" then
+ io.write("<function>")
+ -- dump table
+ elseif type(self) == "table" then
+
+ -- dump head
+ io.write("\n")
+ for l = 1, level do
+ io.write(" ")
+ end
+ io.write("{\n")
+
+ -- dump body
+ local i = 0
+ for k, v in pairs(self) do
+
+ -- exclude some keys
+ if not exclude or type(k) ~= "string" or not k:find(exclude) then
+
+ -- dump spaces and separator
+ for l = 1, level do
+ io.write(" ")
+ end
+
+ if i == 0 then
+ io.write(" ")
+ else
+ io.write(", ")
+ end
+
+ -- dump key
+ if type(k) == "string" then
+ io.write(k, " = ")
+ end
+
+ -- dump value
+ if not table._dump(v, exclude, level + 1) then
+ return false
+ end
+
+ -- dump newline
+ io.write("\n")
+ i = i + 1
+ end
+ end
+
+ -- dump tail
+ for l = 1, level do
+ io.write(" ")
+ end
+ io.write("}\n")
+ -- dump userdata
+ elseif type(self) == "userdata" then
+ io.write("<userdata>")
+ else
+ -- error
+ print("error: invalid object type: %s", type(self))
+ return false
+ end
+
+ -- ok
+ return true
+end
+
+-- dump it
+function table.dump(self, exclude, prefix)
+
+ -- dump prefix
+ if prefix then
+ io.write(prefix)
+ end
+
+ -- dump it
+ table._dump(self, exclude, 0)
+
+ -- return it
+ return self
+end
+
-- return module: table
return table