util.debug: Remove 'white' from boundary style (leave at default colour)
[prosody.git] / util / debug.lua
index 3736dd3498c08b88fe6cbb45569766a1e2fc9061..1d3b56481323010ef3da06108e95e8c594f07da3 100644 (file)
@@ -15,15 +15,16 @@ local styles;
 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
@@ -34,7 +35,7 @@ local function get_locals_table(level)
        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
@@ -46,7 +47,7 @@ local function get_upvalues_table(func)
        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;
@@ -87,9 +88,9 @@ function get_traceback_table(thread, start_level)
        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
                
@@ -103,8 +104,8 @@ function get_traceback_table(thread, start_level)
        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
@@ -116,7 +117,8 @@ local function build_source_boundary_marker(last_source_desc)
        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
@@ -126,13 +128,13 @@ function debug._traceback(thread, message, level)
                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;
        
@@ -178,3 +180,9 @@ function debug._traceback(thread, message, level)
 
        return message.."stack traceback:\n"..table.concat(lines, "\n");
 end
+
+function use()
+       debug.traceback = traceback;
+end
+
+return _M;