Tcl Source Code

View Ticket
Login
Ticket UUID: 3610400
Title: tailcall clashes with execution traces
Type: Bug Version: current: 8.6.0
Submitter: dgp Created on: 2013-04-09 18:05:52
Subsystem: 60. NRE and coroutines Assigned To: dkf
Priority: 5 Medium Severity: Minor
Status: Open Last Modified: 2019-12-20 16:17:28
Resolution: None Closed By: nobody
    Closed on:
Description:
working on 3610393, I constructed this script to
see how ensemble redirections play with execution
traces, and found an issue with [tailcall]:

namespace eval foo {
    namespace export *
    proc target {} {puts Hit!}
    proc bar {} {tailcall target}
    namespace ensemble create
}
proc harness {} {
    foo target
    foo bar
}
proc handle {cmd args} {
    puts "Command [lindex $cmd 0] resolves to:"
    puts "\t'[uplevel 1 [list ::namespace which -command [lindex $cmd 0]]]'"
    puts "\t\tResolved at level [uplevel 1 {info level}]"
}
trace add execution harness enterstep handle
harness


Output:

Command foo resolves to:
        '::foo'
                Resolved at level 1
Command ::foo::target resolves to:
        '::foo::target'
                Resolved at level 1
Command puts resolves to:
        '::puts'
                Resolved at level 2
Hit!
Command foo resolves to:
        '::foo'
                Resolved at level 1
Command ::foo::bar resolves to:
        '::foo::bar'
                Resolved at level 1
Command tailcall resolves to:
        '::tailcall'
                Resolved at level 2
Command target resolves to:
        ''
                Resolved at level 1
Command puts resolves to:
        '::puts'
                Resolved at level 2
Hit!

The commonality with oo forwards is that
tailcall also causes command name resolution
to be done early, in a context that may/does not
appear in a stack frame at the time the command
execution (and its execution traces) fire.
User Comments: dkf added on 2019-12-20 16:17:28:

I have no idea what to do with this.


dgp added on 2018-04-06 16:37:05:
ping

dgp added on 2014-09-14 18:16:43:
ping