Posted to tcl by dgp at Thu Aug 08 14:58:48 GMT 2013view pretty

% proc report args {
    set frame [info frame]
    set i 1
    while {$i <= $frame} {
        puts "FRAME $i: [info frame $i]"
        incr i
    }
    catch error m o
    puts "STACK: [dict get $o -errorstack]"
}
% proc demo {} {uplevel 1 report}
% demo
FRAME 1: type eval line 1 cmd demo level 1
FRAME 2: type proc line 1 cmd {uplevel 1 report} proc ::demo
FRAME 3: type eval line 1 cmd report proc ::demo
FRAME 4: type proc line 5 cmd {info frame $i} proc ::report level 0
STACK: INNER {invokeStk1 error} CALL report
% namespace unknown report
report
% nosuch
FRAME 1: type eval line 1 cmd nosuch level 1
FRAME 2: type proc line 5 cmd {info frame $i} proc ::report level 0
STACK: INNER {invokeStk1 error} CALL {report nosuch}

The -errorstack doesn't hide away the command [report] in the
history.

Strange (and something of a shame) there's not a common foundation.