Posted to tcl by sebres at Thu Apr 11 20:04:14 GMT 2019view raw

  1. set result {}
  2. proc foo args {}
  3. set BaseFrameLevel [info frame]
  4. eval {
  5. lappend result [expr {[info frame] - $BaseFrameLevel}] [regexp -inline {^\S+} [dict get [info frame -1] cmd]]
  6. trace add execution foo enter list
  7. lappend result [expr {[info frame] - $BaseFrameLevel}] [regexp -inline {^\S+} [dict get [info frame -1] cmd]]
  8. puts $result
  9. }
  10.  
  11. set result {}
  12. proc foo args {}
  13. set BaseFrameLevel [info frame]
  14. eval {
  15. lappend result [expr {[info frame] - $BaseFrameLevel}] [regexp -inline {^\S+} [dict get [info frame -1] cmd]]
  16. foo 1 2 3 4 5 6; ## ********** no interp traces active, just invokeStk1 get out from tebcresume.
  17. lappend result [expr {[info frame] - $BaseFrameLevel}] [regexp -inline {^\S+} [dict get [info frame -1] cmd]]
  18. puts $result
  19. }
  20.  
  21. set result {}
  22. proc foo args {return}; ## ********** note return!!
  23. set BaseFrameLevel [info frame]
  24. eval {
  25. lappend result [expr {[info frame] - $BaseFrameLevel}] [regexp -inline {^\S+} [dict get [info frame -1] cmd]]
  26. trace add execution foo enter list
  27. lappend result [expr {[info frame] - $BaseFrameLevel}] [regexp -inline {^\S+} [dict get [info frame -1] cmd]]
  28. puts $result
  29. }
  30. return
  31.  

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 }