Comparison

util/debug.lua @ 6777:5de6b93d0190

util.*: Remove use of module() function, make all module functions local and return them in a table at the end
author Kim Alvefur <zash@zash.se>
date Sat, 21 Feb 2015 10:36:37 +0100
parent 5787:9a22586f67eb
child 7182:858ccafbd823
comparison
equal deleted inserted replaced
6774:3965662ae091 6777:5de6b93d0190
11 11
12 local termcolours = require "util.termcolours"; 12 local termcolours = require "util.termcolours";
13 local getstring = termcolours.getstring; 13 local getstring = termcolours.getstring;
14 local styles; 14 local styles;
15 do 15 do
16 _ = termcolours.getstyle; 16 local _ = termcolours.getstyle;
17 styles = { 17 styles = {
18 boundary_padding = _("bright"); 18 boundary_padding = _("bright");
19 filename = _("bright", "blue"); 19 filename = _("bright", "blue");
20 level_num = _("green"); 20 level_num = _("green");
21 funcname = _("yellow"); 21 funcname = _("yellow");
22 location = _("yellow"); 22 location = _("yellow");
23 }; 23 };
24 end 24 end
25 module("debugx", package.seeall); 25
26 26 local function get_locals_table(thread, level)
27 function get_locals_table(thread, level)
28 local locals = {}; 27 local locals = {};
29 for local_num = 1, math.huge do 28 for local_num = 1, math.huge do
30 local name, value; 29 local name, value;
31 if thread then 30 if thread then
32 name, value = debug.getlocal(thread, level, local_num); 31 name, value = debug.getlocal(thread, level, local_num);
37 table.insert(locals, { name = name, value = value }); 36 table.insert(locals, { name = name, value = value });
38 end 37 end
39 return locals; 38 return locals;
40 end 39 end
41 40
42 function get_upvalues_table(func) 41 local function get_upvalues_table(func)
43 local upvalues = {}; 42 local upvalues = {};
44 if func then 43 if func then
45 for upvalue_num = 1, math.huge do 44 for upvalue_num = 1, math.huge do
46 local name, value = debug.getupvalue(func, upvalue_num); 45 local name, value = debug.getupvalue(func, upvalue_num);
47 if not name then break; end 46 if not name then break; end
49 end 48 end
50 end 49 end
51 return upvalues; 50 return upvalues;
52 end 51 end
53 52
54 function string_from_var_table(var_table, max_line_len, indent_str) 53 local function string_from_var_table(var_table, max_line_len, indent_str)
55 local var_string = {}; 54 local var_string = {};
56 local col_pos = 0; 55 local col_pos = 0;
57 max_line_len = max_line_len or math.huge; 56 max_line_len = max_line_len or math.huge;
58 indent_str = "\n"..(indent_str or ""); 57 indent_str = "\n"..(indent_str or "");
59 for _, var in ipairs(var_table) do 58 for _, var in ipairs(var_table) do
85 else 84 else
86 return "{ "..table.concat(var_string, ", "):gsub(indent_str..", ", indent_str).." }"; 85 return "{ "..table.concat(var_string, ", "):gsub(indent_str..", ", indent_str).." }";
87 end 86 end
88 end 87 end
89 88
90 function get_traceback_table(thread, start_level) 89 local function get_traceback_table(thread, start_level)
91 local levels = {}; 90 local levels = {};
92 for level = start_level, math.huge do 91 for level = start_level, math.huge do
93 local info; 92 local info;
94 if thread then 93 if thread then
95 info = debug.getinfo(thread, level); 94 info = debug.getinfo(thread, level);
106 }; 105 };
107 end 106 end
108 return levels; 107 return levels;
109 end 108 end
110 109
111 function traceback(...)
112 local ok, ret = pcall(_traceback, ...);
113 if not ok then
114 return "Error in error handling: "..ret;
115 end
116 return ret;
117 end
118
119 local function build_source_boundary_marker(last_source_desc) 110 local function build_source_boundary_marker(last_source_desc)
120 local padding = string.rep("-", math.floor(((optimal_line_length - 6) - #last_source_desc)/2)); 111 local padding = string.rep("-", math.floor(((optimal_line_length - 6) - #last_source_desc)/2));
121 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 ")); 112 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 "));
122 end 113 end
123 114
124 function _traceback(thread, message, level) 115 local function _traceback(thread, message, level)
125 116
126 -- Lua manual says: debug.traceback ([thread,] [message [, level]]) 117 -- Lua manual says: debug.traceback ([thread,] [message [, level]])
127 -- I fathom this to mean one of: 118 -- I fathom this to mean one of:
128 -- () 119 -- ()
129 -- (thread) 120 -- (thread)
190 -- table.insert(lines, "\t "..build_source_boundary_marker(last_source_desc)); 181 -- table.insert(lines, "\t "..build_source_boundary_marker(last_source_desc));
191 182
192 return message.."stack traceback:\n"..table.concat(lines, "\n"); 183 return message.."stack traceback:\n"..table.concat(lines, "\n");
193 end 184 end
194 185
195 function use() 186 local function traceback(...)
187 local ok, ret = pcall(_traceback, ...);
188 if not ok then
189 return "Error in error handling: "..ret;
190 end
191 return ret;
192 end
193
194 local function use()
196 debug.traceback = traceback; 195 debug.traceback = traceback;
197 end 196 end
198 197
199 return _M; 198 return {
199 get_locals_table = get_locals_table;
200 get_upvalues_table = get_upvalues_table;
201 string_from_var_table = string_from_var_table;
202 get_traceback_table = get_traceback_table;
203 traceback = traceback;
204 use = use;
205 };