// ------------------------------------------------------------------
// 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();
}
.