Method code for $parse_lib.traceback()

[Turn off line numbering]
  1: arg traceback, @args;
  2: var line, out, pre, lines, cur, x, error;
  3: 
  4: // $parse_lib.traceback(traceback(), lines, pre);
  5: // -1 lines represents the full error
  6: // pre is set to "! " unless otherwise specified.
  7: [(lines ?= -1), (pre ?= "! "), (error ?= 0)] = args;
  8: out = [pre + "=> " + traceback[1][2]];
  9: pre += "   ";
 10: 
 11: // The primary error
 12: if (error == 0)
 13:     out += [pre + "Thrown by " + ._traceback(@traceback[2].subrange(2))];
 14: else
 15:     out += [pre + "Error " + error + " caused by " + ._traceback(@traceback[2].subrange(2))];
 16: 
 17: // The rest of it
 18: for x in [1 .. traceback.length() - 2] {
 19:     if (x <= lines || lines == -1) {
 20:         line = traceback[x + 2][1] + ": ";
 21:         line += ._traceback(@traceback[x + 2].subrange(2));
 22:         out += [pre + line];
 23:     }
 24: }
 25: if (user())
 26:     user().set_last_traceback([time(), traceback, out]);
 27: return out;

// Created 27-Mar-1995 as a part of ColdCore, see: @help Credit

Tlon