diff options
Diffstat (limited to 'xmake/core/base/dump.lua')
| -rw-r--r-- | xmake/core/base/dump.lua | 41 |
1 files changed, 31 insertions, 10 deletions
diff --git a/xmake/core/base/dump.lua b/xmake/core/base/dump.lua index cfa25918b..42ec2df17 100644 --- a/xmake/core/base/dump.lua +++ b/xmake/core/base/dump.lua @@ -23,7 +23,6 @@ local dump = dump or {} -- load modules local colors = require("base/colors") -local table = require("base/table") -- format string with theme colors function dump._format(fmtkey, fmtdefault, ...) @@ -37,7 +36,12 @@ end -- translate string with theme formats function dump._translate(str) - return colors.translate(str, { patch_reset = false, ignore_unknown = true }) + local theme = colors.theme() + if theme then + return colors.translate(str, { patch_reset = false, ignore_unknown = true }) + else + return colors.ignore(str) + end end -- print string @@ -205,10 +209,26 @@ function dump._print_metatable(value, metatable, inner_indent, printed_set, prin return has_record end +-- returns printed_set, is_first_level +function dump._init_printed_set(printed_set) + local first_level = not printed_set + if type(printed_set) ~= "table" then + printed_set = { len = 0 } + end + return printed_set, first_level +end + -- print udata -function dump._print_udata(value, first_indent, remain_indent) +function dump._print_udata(value, first_indent, remain_indent, printed_set) + local first_level + printed_set, first_level = dump._init_printed_set(printed_set) io.write(first_indent) + + if not first_level then + return dump._print_udata_scalar(value) + end + local metatable = getmetatable(value) local inner_indent = remain_indent .. " " @@ -216,7 +236,7 @@ function dump._print_udata(value, first_indent, remain_indent) io.write(dump._translate("${reset}${color.dump.udata}[${reset}")) -- print metatable - local no_value = not dump._print_metatable(value, metatable, inner_indent, { len = 0 }, false) + local no_value = not dump._print_metatable(value, metatable, inner_indent, printed_set, false) -- print close brackets if no_value then @@ -229,7 +249,8 @@ end -- print table function dump._print_table(value, first_indent, remain_indent, printed_set) - local first_level = not printed_set + local first_level + printed_set, first_level = dump._init_printed_set(printed_set) io.write(first_indent) local metatable = getmetatable(value) local tostringmethod = metatable and rawget(metatable, "__tostring") @@ -239,7 +260,7 @@ function dump._print_table(value, first_indent, remain_indent, printed_set) return dump._print_table_scalar(strrep) end end - printed_set = printed_set or { len = 0 } + local inner_indent = remain_indent .. " " local first_value = true @@ -260,7 +281,7 @@ function dump._print_table(value, first_indent, remain_indent, printed_set) end -- print array items - local is_arr = table.is_array(value) and (table.maxn(value) < 2 * #value) + local is_arr = (value[1] ~= nil) and (table.maxn(value) < 2 * #value) if is_arr then for i = 1,table.maxn(value) do print_newline() @@ -306,12 +327,12 @@ function dump._print_table(value, first_indent, remain_indent, printed_set) end -- print value -function dump._print(value, indent) +function dump._print(value, indent, verbose) indent = tostring(indent or "") if type(value) == "table" then - dump._print_table(value, indent, indent:gsub(".", " "), nil) + dump._print_table(value, indent, indent:gsub(".", " "), not verbose) elseif type(value) == "userdata" then - dump._print_udata(value, indent, indent:gsub(".", " ")) + dump._print_udata(value, indent, indent:gsub(".", " "), not verbose) else io.write(indent) dump._print_scalar(value) |
