From 24400c06e64aa2b6d80bcd84064886803ac6c87b Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Fri, 15 Mar 2013 05:01:34 -0400 Subject: [PATCH] add LvDEBUG so we can get rid of stack overflow when dumping a widget --- frontend/dbg.lua | 8 +++++--- frontend/settings.lua | 18 +++++++++++++----- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/frontend/dbg.lua b/frontend/dbg.lua index f8e970bfa..3d373685b 100644 --- a/frontend/dbg.lua +++ b/frontend/dbg.lua @@ -21,10 +21,14 @@ function Dbg:logEv(ev) end function DEBUG(...) + LvDEBUG(math.huge, ...) +end + +function LvDEBUG(lv, ...) local line = "" for i,v in ipairs({...}) do if type(v) == "table" then - line = line .. " " .. dump(v) + line = line .. " " .. dump(v, lv) else line = line .. " " .. tostring(v) end @@ -32,5 +36,3 @@ function DEBUG(...) print("#"..line) end - - diff --git a/frontend/settings.lua b/frontend/settings.lua index 4c6c50141..2354e7658 100644 --- a/frontend/settings.lua +++ b/frontend/settings.lua @@ -64,14 +64,22 @@ function DocSettings:delSetting(key) self.data[key] = nil end -function dump(data) +function dump(data, max_lv) local out = {} - DocSettings:_serialize(data, out, 0) + DocSettings:_serialize(data, out, 0, max_lv) return table.concat(out) end -- simple serialization function, won't do uservalues, functions, loops -function DocSettings:_serialize(what, outt, indent) +function DocSettings:_serialize(what, outt, indent, max_lv) + if not max_lv then + max_lv = math.huge + end + + if indent > max_lv then + return + end + if type(what) == "table" then local didrun = false table.insert(outt, "{") @@ -82,9 +90,9 @@ function DocSettings:_serialize(what, outt, indent) table.insert(outt, "\n") table.insert(outt, string.rep("\t", indent+1)) table.insert(outt, "[") - self:_serialize(k, outt, indent+1) + self:_serialize(k, outt, indent+1, max_lv) table.insert(outt, "] = ") - self:_serialize(v, outt, indent+1) + self:_serialize(v, outt, indent+1, max_lv) didrun = true end if didrun then