diff options
author | Steve Bennett <steveb@workware.net.au> | 2023-05-04 12:20:59 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2023-05-06 12:43:47 +1000 |
commit | 4e0e776b2b722302c9e3d622340599ea1f9e4fe0 (patch) | |
tree | f1db98efef0ed9e3cca4ce6fbc9f28ed4d608cfd /tests | |
parent | fcbb4499a6b46ef69e7a95da53e30796e20817f0 (diff) | |
download | jimtcl-4e0e776b2b722302c9e3d622340599ea1f9e4fe0.zip jimtcl-4e0e776b2b722302c9e3d622340599ea1f9e4fe0.tar.gz jimtcl-4e0e776b2b722302c9e3d622340599ea1f9e4fe0.tar.bz2 |
jim: info frame improvements
always include 'proc' even if introspection disabled
correctly set 'proc' at the eval frame level that is currently running
in the given proc. This makes it easier to produce an accurate level stacktrace
even across uplevel, etc.
Update stacktrace to use the new info frame.
Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/infoframe.test | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/tests/infoframe.test b/tests/infoframe.test index 9490589..e8544b1 100644 --- a/tests/infoframe.test +++ b/tests/infoframe.test @@ -1,11 +1,14 @@ source [file dirname [info script]]/testing.tcl -needs constraint jim + proc a {n} { if {$n eq "trace"} { - # strip the frame levels for test and uplevel - return [basename-stacktrace [lrange [stacktrace] 0 end-6]] + return [basename-stacktrace [stacktrace]] + } + set frame [info frame $n] + if {![dict exists $frame proc]} { + dict set frame proc {} } - set frame [info frame $n]; list [dict getdef $frame proc {}] [file tail [dict get $frame file]] [dict get $frame line] + basename-stacktrace [list [dict get $frame proc] [file tail [dict get $frame file]] [dict get $frame line]] } proc b {n} { @@ -18,24 +21,24 @@ proc c {n} { # --- Don't change line numbers above -test info-frame-1.1 "Current command" { +test info-frame-1.1 {Current command} -body { c 0 -} {a infoframe.test 8} +} -result {a infoframe.test 7} -test info-frame-1.2 "Current Proc" { +test info-frame-1.2 {Current Proc} -body { c -1 -} {b infoframe.test 12} +} -result {b infoframe.test 15} -test info-frame-1.3 "Caller" { +test info-frame-1.3 Caller -body { c -2 -} {c infoframe.test 16} +} -result {c infoframe.test 19} -test info-frame-1.4 "Caller of Caller" { +test info-frame-1.4 {Caller of Caller} -body { c -3 -} {test infoframe.test 34} +} -result {test infoframe.test 37} -test stacktrace-1.1 "Full stack trace" { +test stacktrace-1.1 {Full stack trace} -body { c trace -} {a infoframe.test 12 b infoframe.test 16 c infoframe.test 38} +} -result {a infoframe.test 5 b infoframe.test 15 c infoframe.test 19 test infoframe.test 41} testreport |