Posted to tcl by sebres at Thu Apr 11 20:04:14 GMT 2019view pretty
set result {} proc foo args {} set BaseFrameLevel [info frame] eval { lappend result [expr {[info frame] - $BaseFrameLevel}] [regexp -inline {^\S+} [dict get [info frame -1] cmd]] trace add execution foo enter list lappend result [expr {[info frame] - $BaseFrameLevel}] [regexp -inline {^\S+} [dict get [info frame -1] cmd]] puts $result } set result {} proc foo args {} set BaseFrameLevel [info frame] eval { lappend result [expr {[info frame] - $BaseFrameLevel}] [regexp -inline {^\S+} [dict get [info frame -1] cmd]] foo 1 2 3 4 5 6; ## ********** no interp traces active, just invokeStk1 get out from tebcresume. lappend result [expr {[info frame] - $BaseFrameLevel}] [regexp -inline {^\S+} [dict get [info frame -1] cmd]] puts $result } set result {} proc foo args {return}; ## ********** note return!! set BaseFrameLevel [info frame] eval { lappend result [expr {[info frame] - $BaseFrameLevel}] [regexp -inline {^\S+} [dict get [info frame -1] cmd]] trace add execution foo enter list lappend result [expr {[info frame] - $BaseFrameLevel}] [regexp -inline {^\S+} [dict get [info frame -1] cmd]] puts $result } return
Comments
Posted by sebres at Thu Apr 11 20:28:24 GMT 2019 [text] [code]
## so forget trace... ## if it is replaced with something else causing change of compileEpoch, ## e.g. `rename bar buz`... you'd see the same result (1 eval 2 lappend): set result {} proc bar args {} proc foo args {} set BaseFrameLevel [info frame] eval { lappend result [expr {[info frame] - $BaseFrameLevel}] [regexp -inline {^\S+} [dict get [info frame -1] cmd]] rename bar buz; ## ********** cause change of compileEpoch. lappend result [expr {[info frame] - $BaseFrameLevel}] [regexp -inline {^\S+} [dict get [info frame -1] cmd]] puts $result }