diff --git a/stepmania/Themes/default/Scripts/Debug.lua b/stepmania/Themes/default/Scripts/Debug.lua new file mode 100644 index 0000000000..1cf247a375 --- /dev/null +++ b/stepmania/Themes/default/Scripts/Debug.lua @@ -0,0 +1,88 @@ +if not debug then + -- stubs + debug = {} + debug.traceback = function() return "" end + return +end + +-- Override debug.traceback. +function debug.traceback(...) + local thread = coroutine.running() + local msg = "" + local level = 1 + local args = {...}; + + if type(args[1]) == "thread" then thread = args[1]; table.remove(args) end + if type(args[1]) == "string" then msg = args[1]; table.remove(args) end + if type(args[1]) == "number" then level = args[1]; table.remove(args) end + + if thread == coroutine.running() then + level = level + 1 -- skip this function + end + + local stack = {} + repeat + local info = debug.getinfo(level, "Sln"); + table.insert( stack, info ); + level = level + 1 + until not info + + if #stack == 0 then + return ""; + end + + -- The original caller is usually C; remove it. + if( stack[#stack].what == "C" ) then + table.remove( stack ); + end + local function FormatFrame(level, frame) + local sFrameInfo = "" + sFrameInfo = sFrameInfo .. "#" .. level .. " "; + if( frame.what == "tail" ) then + -- sFrameInfo = sFrameInfo .. "(tail call)" + -- return sFrameInfo + elseif( frame.what == "main" ) then + sFrameInfo = sFrameInfo .. "main in " + elseif frame.name then + sFrameInfo = sFrameInfo .. frame.name .. "() in " + else + sFrameInfo = sFrameInfo .. "... in "; + end + sFrameInfo = sFrameInfo .. frame.short_src + + if frame.currentline ~= -1 then + sFrameInfo = sFrameInfo .. ":" .. frame.currentline + end + + return sFrameInfo + end + + local FrameInfo = {} + for level, frame in ipairs(stack) do + FrameInfo[level] = FormatFrame(level, frame) + end + return table.concat( FrameInfo, "\n" ); +end + +-- (c) 2006 Glenn Maynard +-- All rights reserved. +-- +-- Permission is hereby granted, free of charge, to any person obtaining a +-- copy of this software and associated documentation files (the +-- "Software"), to deal in the Software without restriction, including +-- without limitation the rights to use, copy, modify, merge, publish, +-- distribute, and/or sell copies of the Software, and to permit persons to +-- whom the Software is furnished to do so, provided that the above +-- copyright notice(s) and this permission notice appear in all copies of +-- the Software and that both the above copyright notice(s) and this +-- permission notice appear in supporting documentation. +-- +-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +-- THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS +-- INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT +-- OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +-- OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +-- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +-- PERFORMANCE OF THIS SOFTWARE.