pass = true;
pwd = true;
};
+ local optimal_line_length = 65;
+ local termcolours = require "util.termcolours";
+ local getstring = termcolours.getstring;
+ local styles;
+ do
+ _ = termcolours.getstyle;
+ styles = {
+ boundary_padding = _("bright", "white");
+ 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 levels;
end
- function traceback(thread, message, level)
-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 ret;
+ end
+
+ local function build_source_boundary_marker(last_source_desc)
+ local padding = string.rep("-", math.floor(((optimal_line_length - 6) - #last_source_desc)/2));
+ 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
table.insert(lines, "\t "..npadding.."Upvals: "..upvalues_str);
end
end
+
+ -- table.insert(lines, "\t "..build_source_boundary_marker(last_source_desc));
+
return message.."stack traceback:\n"..table.concat(lines, "\n");
end
+
+function use()
+ debug.traceback = traceback;
+end
+
+return _M;