do
_ = termcolours.getstyle;
styles = {
- boundary_padding = _("bright", "white");
+ boundary_padding = _("bright");
filename = _("bright", "blue");
level_num = _("green");
funcname = _("yellow");
location = _("yellow");
};
end
+module("debugx", package.seeall);
-local function get_locals_table(level)
+function get_locals_table(level)
level = level + 1; -- Skip this function itself
local locals = {};
for local_num = 1, math.huge do
return locals;
end
-local function get_upvalues_table(func)
+function get_upvalues_table(func)
local upvalues = {};
if func then
for upvalue_num = 1, math.huge do
return upvalues;
end
-local function string_from_var_table(var_table, max_line_len, indent_str)
+function string_from_var_table(var_table, max_line_len, indent_str)
local var_string = {};
local col_pos = 0;
max_line_len = max_line_len or math.huge;
for level = start_level, math.huge do
local info;
if thread then
- info = debug.getinfo(thread, level);
+ info = debug.getinfo(thread, level+1);
else
- info = debug.getinfo(level);
+ info = debug.getinfo(level+1);
end
if not info then break; end
return levels;
end
-function debug.traceback(...)
- local ok, ret = pcall(debug._traceback, ...);
+function traceback(...)
+ local ok, ret = pcall(_traceback, ...);
if not ok then
return "Error in error handling: "..ret;
end
return getstring(styles.boundary_padding, "v"..padding).." "..getstring(styles.filename, last_source_desc).." "..getstring(styles.boundary_padding, padding..(#last_source_desc%2==0 and "-v" or "v "));
end
-function debug._traceback(thread, message, level)
+function _traceback(thread, message, level)
+
if type(thread) ~= "thread" then
thread, message, level = coroutine.running(), thread, message;
end
if type(message) == "number" then
level, message = message, nil;
else
- level = 2;
+ level = 1;
end
end
message = message and (message.."\n") or "";
- local levels = get_traceback_table(thread, level+2);
+ local levels = get_traceback_table(thread, level+3);
local last_source_desc;
return message.."stack traceback:\n"..table.concat(lines, "\n");
end
+
+function use()
+ debug.traceback = traceback;
+end
+
+return _M;