Method code for $parse_lib.traceback()

[Turn on line numbering]
arg traceback, @args;
var line, out, pre, lines, cur, x, error;

// $parse_lib.traceback(traceback(), lines, pre);
// -1 lines represents the full error
// pre is set to "! " unless otherwise specified.
[(lines ?= -1), (pre ?= "! "), (error ?= 0)] = args;
out = [pre + "=> " + traceback[1][2]];
pre += "   ";

// The primary error
if (error == 0)
    out += [pre + "Thrown by " + ._traceback(@traceback[2].subrange(2))];
else
    out += [pre + "Error " + error + " caused by " + ._traceback(@traceback[2].subrange(2))];

// The rest of it
for x in [1 .. traceback.length() - 2] {
    if (x <= lines || lines == -1) {
        line = traceback[x + 2][1] + ": ";
        line += ._traceback(@traceback[x + 2].subrange(2));
        out += [pre + line];
    }
}
if (user())
    user().set_last_traceback([time(), traceback, out]);
return out;

["// Created 26-Mar-1995 as a part of ColdCore, see: @help Credit"]

the Cold Dark