--------------------------- -- bp.lua --------------------------- local type=type local tostring=tostring local print=print local setmetatable=setmetatable local getfenv=getfenv local ipairs=ipairs local pairs=pairs local xpcall=xpcall local error=error local table_insert=table.insert local table_concat=table.concat local debug=debug module "bp" local nil_value={} local function traversal_r(tbl,num) num = num or 64 local ret={} local function insert(v) table_insert(ret,v) if #ret>num then error() end end local function traversal(e) if e==nil_value or e==nil then insert("nil,") elseif type(e)=="table" then insert("{") local maxn=0 for i,v in ipairs(e) do traversal(v) maxn=i end for k,v in pairs(e) do if not (type(k)=="number" and k>0 and k<=maxn) then if type(k)=="number" then insert("["..k.."]=") else insert(tostring(k).."=") end traversal(v) end end insert("}") elseif type(e)=="string" then insert('"'..e..'",') else insert(tostring(e)) insert(",") end end local err=xpcall( function() traversal(tbl) end, function() end ) if not err then table_insert(ret,"...") end return table_concat(ret) end function print_r(tbl,num) print(traversal_r(tbl,num)) end local function init_local(tbl,level) local n=1 local index={} while true do local name,value=debug.getlocal(level,n) if not name then break end if name~ ="(*temporary)" then if value==nil then value=nil_value end tbl[name]=value index["."..name]=n end n=n+1 end setmetatable(tbl,{__index=index}) return tbl end local function init_upvalue(tbl,func) local n=1 local index={} while true do local name,value=debug.getupvalue(func,n) if not name then break end if value==nil then value=nil_value end tbl[name]=value index["."..name]=n n=n+1 end setmetatable(tbl,{__index=index}) return tbl end function dbg(level) level=level and lev...