smr/src/lua/global.lua

56 lines
1.5 KiB
Lua

-- Various global functions to cause less typing.
function assertf(bool, fmt, ...)
fmt = fmt or "Assetion Failed"
if not bool then
error(string.format(fmt,...),2)
end
end
function errorf(str, ...)
--try calling string.format, if it errors, try calling it with exactly
--1 less argument (the error level)
local args = {...}
local succ, ret = pcall(string.format,str,...)
if not succ and type(args[#args]) ~= "number" then
errorf("Failed displaying error that looks like %q",str)
elseif type(args[#args]) == "number" then
local errlevel = table.remove(args,#args)
local succ2, ret = pcall(string.format,str,unpack(args))
if not succ2 then
errorf("Failed displaying error that looks like %q",str)
end
error(ret, errlevel+1)
end
error(ret,2)
end
local oldtostring = tostring
function tostring(any)
--Pretty print tables by default
local printed_tables = {}
local function tostring_helper(a,tabs)
if type(a) ~= "table" then
return oldtostring(a)
end
if printed_tables[a] then
return oldtostring(a)
end
printed_tables[a] = true
local sbuilder = {"{\n"}
for k,v in pairs(a) do
table.insert(sbuilder,string.rep("\t",tabs))
table.insert(sbuilder,tostring_helper(k,tabs+1))
table.insert(sbuilder,":")
table.insert(sbuilder,tostring_helper(v,tabs+1))
table.insert(sbuilder,"\n")
end
table.insert(sbuilder,string.rep("\t",tabs-1))
table.insert(sbuilder,"}")
return table.concat(sbuilder)
end
return tostring_helper(any,1)
end