Posted to tcl by sebres at Thu Apr 11 20:04:14 GMT 2019view raw
- 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 }