// ------------------------------------------------------------------ // Object parent $root object $parse method html_traceback arg status, t; var line, out, x; out = "<h2>" + t[1][2] + "</h2>"; out = [out, "<i><b>Thrown by " + ._html_traceback(@t[2]) + "</b></i>", "<p>"]; for x in [3 .. listlen(t)] { line = "<code><i>" + toliteral(t[x][1]) + "</i>: "; out = out + [line + ._traceback(@t[x]) + "</code><br>"]; } return .response(status, [@out, "</p>"]); . method traceback arg t; var line, out, x; out = "=> " + t[1][2]; out = [out, "Thrown by " + ._traceback(@t[2])]; for x in [3 .. listlen(t)] { line = toliteral(t[x][1]) + ": "; line = line + ._traceback(@t[x]); out = [@out, line]; } return out; . method _html_traceback arg type, what, [more]; var line; switch (type) { case 'function: return "function <tt>" + tostr(what) + "()</tt>"; case 'opcode: return "operator <tt>" + toliteral(what) + "</tt>"; default: line = toliteral(more[2]) + "." + tostr(what) + "()"; if (more[1] != more[2]) line = line + " (" + toliteral(more[1]) + ") "; line = line + " line " + tostr(more[3]); return line; } . method _traceback arg type, what, [more]; var line; switch (type) { case 'function: return "function " + tostr(what) + "()"; case 'opcode: return "operator " + toliteral(what); default: line = toliteral(more[1]) + "." + tostr(what) + "()"; if (more[1] != more[2]) line = line + " (" + toliteral(more[2]) + ") "; line = line + " line " + tostr(more[3]); return line; } . method get_name arg obj; if (!valid(obj)) return "*** invalid object (" + toliteral(obj) + ") ***"; return toliteral(obj); . method unparse arg data; var str, element, association, pos, method; switch (type(data)) { case 'integer: return tostr(data); case 'string: return toliteral(data); case 'symbol: return toliteral(data); case 'error: return toliteral(data); case 'buffer: return toliteral(data); case 'dbref: return .get_name(data); case 'list: if (!data) return "[]"; str = "["; for element in (sublist(data, 1, listlen(data) - 1)) { str = str + .unparse(element); str = str + ", "; } str = str + .unparse(data[listlen(data)]); return str + "]"; case 'dictionary: if (!data) return "#[]"; str = "#["; for association in (data) { str = str + .unparse(association); str = str + ", "; } return substr(str, 1, strlen(str) - 2) + "]"; case 'frob: return data.unparse(); } .