@ -2581,9 +2581,10 @@ y" {return quirkykeyscript}
#eval_base has been set by previous source or proc
#It can also be set by previous eval - *if* a non default offset was returned by _cmdtrace_get_eval_offset
set eval_base [dict get $linedict $target eval_base]
set eval_offset [dict get $linedict $target eval_offset]
set line [expr {$prevlin e + ($eval_offset-1) + ($traceline-1)}]
# puts "stack-- $callinfo"
set line [expr {$eval_bas e + ($eval_offset-1) + ($traceline-1)}]
puts "stack-- $callinfo"
puts " step type: eval traceline: $traceline -- "
if {[dict exists $callinfo cmd]} {
#set cmd [string trim [dict get $callinfo cmd]]
@ -2653,9 +2654,11 @@ y" {return quirkykeyscript}
}
#puts "-- $callinfo"
} else {
puts ">>step type: $type (nontargeted proc)>> $callinfo"
::tcl::dict::incr tinfo($target) subcmds
#puts ">>step type: $type (nontargeted proc)>> $callinfo"
}
} else {
::tcl::dict::incr tinfo($target) subcmds
#todo - handle type 'source' and type 'eval' with keys 'method' 'class' (oo)
#puts -------------------------
#puts ">[dict get $callinfo cmd]"
@ -2708,7 +2711,6 @@ y" {return quirkykeyscript}
variable tinfo
array unset tinfo
variable _cmdtrace_disabled
set _cmdtrace_disabled false
set argd [punk::args::parse $args -cache 1 withid ::punk::ns::cmdtrace]
lassign [dict values $argd] leaders opts values received
@ -2718,6 +2720,8 @@ y" {return quirkykeyscript}
set cinfo [uplevel 1 [list ::punk::ns::cmdinfo {*}$cmdargs]]
set origin [dict get $cinfo origin]
set arglist [dict get $cinfo args_remaining]
set origin_nscmd [nstail $origin]
set origin_ns [nsprefix $origin]
if {[dict exists $received -target]} {
set targets [dict get $opts -target]
@ -2740,15 +2744,16 @@ y" {return quirkykeyscript}
}
#don't raise the error when no -target supplied - as our launch command can contain extra arguments
}
lappend resolved_targets $tgt_cmd
set nscmd [nstail $tgt_cmd]
set ns [nsprefix $tgt_cmd]
lappend resolved_targets $tgt_cmd $ns $nscmd
::tcl::dict::set ::punk::ns::linedict $tgt_cmd [::tcl::dict::create eval_base 1 eval_offset 1 lines {} cmdtype $tgt_type successcalls 0 errorcalls 0]
}
#if the target command has a leading colon (e.g expr alternative :) we can't put a trace directly on a fully qualified name with a triple colon such as :::
#we will need to evaluate in the namespace
foreach tgt_cmd $resolved_targets {
set nscmd [nstail $tgt_cmd]
set ns [nsprefix $tgt_cmd]
foreach {tgt_cmd ns nscmd} $resolved_targets {
puts "tracing target: $tgt_cmd whilst running: $origin $arglist"
::tcl::namespace::eval $ns [list ::trace add execution $nscmd enter [list ::punk::ns::_cmdtrace_enter ::punk::ns::linedict $tgt_cmd]]
@ -2758,17 +2763,17 @@ y" {return quirkykeyscript}
try {
set origin_nscmd [nstail $origin]
set origin_ns [nsprefix $origin]
#uplevel 1 [list $origin {*}$arglist]
set _cmdtrace_disabled false
::tcl::namespace::eval $origin_ns [list $origin_nscmd {*}$arglist]
} trap {} {errMsg errOptions} {
set _cmdtrace_disabled true
#(even a puts can involve function calls - e.g in contexts where there are stacked channels)
puts stderr "command error $errMsg"
} finally {
foreach tgt_cmd $resolved_targets {
set nscmd [nstail $tgt_cmd]
set ns [nsprefix $tgt_cmd]
set _cmdtrace_disabled true
foreach {tgt_cmd ns nscmd} $resolved_targets {
::tcl::namespace::eval $ns [list ::trace remove execution $nscmd enterstep [list ::punk::ns::_cmdtrace_enterstep ::punk::ns::linedict $tgt_cmd]]
::tcl::namespace::eval $ns [list ::trace remove execution $nscmd enter [list ::punk::ns::_cmdtrace_enter ::punk::ns::linedict $tgt_cmd]]
::tcl::namespace::eval $ns [list ::trace remove execution $nscmd leave [list ::punk::ns::_cmdtrace_leave ::punk::ns::linedict $tgt_cmd]]
@ -2780,7 +2785,7 @@ y" {return quirkykeyscript}
append final_display \n
#todo - foreach tgt_cmd in resolved_targets?
foreach tgt_cmd $resolved_targets {
foreach { tgt_cmd _ _} $resolved_targets {
set lines [dict get $linedict $tgt_cmd lines]
if {[llength $lines]} {
set procbody [punk::ns::corp -n $tgt_cmd]