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 |