public void print(PrintLN out, Throwable trigger){ print(out, trigger, null, 0);
public void print(PrintLN out, Throwable trigger, Throwable effect, int depth) { boolean printed = false; try { VM.sysWriteln("VM_StackTrace.print(): Printing Stack Trace # ", traceIndex); if (alsoStackTraceToSysWrite) { if (! out.isSysWrite()) { VM.sysWriteln("[ VM_StackTrace.print(#", traceIndex, "): Here's the copy to sysWrite:"); print(PrintContainer.readyPrinter, trigger, effect, depth); VM.sysWriteln("... END VM_StackTrace.print():" + " sysWrote Stack Trace # ", traceIndex, "]"); } } if (showPrintingContext) { VM.disableGC(); VM.sysWriteln("[Here is the context of the attempt" + " to print stack trace #:", traceIndex); VM_Scheduler.dumpStack(); VM.sysWriteln("... END context of the attempt" + " to print Stack Trace # ", traceIndex, "]"); VM.enableGC(); }  print4Real(out, trigger, depth); printed = true; } catch (OutOfMemoryError e) { trigger.tallyOutOfMemoryError(); VM.sysWriteln("VM_StackTrace.print(): OutOfMemoryError while printing stack trace # ", traceIndex); } catch (Throwable e) { trigger.tallyWeirdError(); VM.sysWriteln("VM_StackTrace.print(): *UNEXPECTED* Throwable while displaying stack trace # ", traceIndex); VM.sysWrite("    The Throwable was: "); e.sysWrite(depth + 1); VM.sysWriteln("VM_StackTrace.print(): And its stack trace was:"); e.sysWriteStackTrace(depth + 1); } finally { if (printed) return; if (out.isSysWrite()) { VM.sysWriteln("[ Aborting stack trace # ",  traceIndex, " ; already was printing with sysWrite()]"); return; } VM.sysWriteln("[ Retrying printing stack trace # ", traceIndex, "; using sysWrite(), this time ]"); print4Real(PrintContainer.readyPrinter, trigger, depth); }
  public void print(PrintLN out, Throwable trigger){    print(out, trigger, null, 0);  }