Ticket UUID: | 1590483 | |||
Title: | alias can break [uplevel 1 [info level 0]] idiom | |||
Type: | Bug | Version: | obsolete: 8.4.15 | |
Submitter: | msofer | Created on: | 2006-11-04 14:08:29 | |
Subsystem: | 45. Parsing and Eval | Assigned To: | dgp | |
Priority: | 5 Medium | Severity: | Minor | |
Status: | Open | Last Modified: | 2016-07-24 18:12:01 | |
Resolution: | None | Closed By: | nobody | |
Closed on: | ||||
Description: |
The idiom uplevel 1 [info level 0] to cause a renewed call to the same proc can be broken by interp aliases: mig@ice:/tmp$ cat /tmp/test set res {} proc x {} { if {![llength $::res]} { set ::res [list [info level 0] :: [uplevel 1 [info level 0]]] } else { return :: } } namespace eval a { proc x {} {return ::a} } interp alias {} y {} x namespace eval a y puts $res mig@ice:/tmp$ /home/CVS/tcl8.3.4/unix/tclsh test x :: ::a In order for it to break 1. the alias target is not fully qualified 2. the alias target is shadowed in the namespace from which the alias is invoked It is relatively easy to fix this: as interp aliases are always looked up in the global namespace anyway, the target could be fully qualified at alias creation time. This would also simplify TEOVI, allowing to remove all the namespace gymnastics performed by TCL_EVAL_INVOKE. The only change seen by current scripts would be in error traces, and in the actual return of [info level n] (now fully qualified). | |||
User Comments: |
dkf added on 2016-07-24 18:12:01:
Do we really want to support this sort of thing by policy? And how does this interact with the rewrite stuff that's been worked on recently? msofer added on 2006-11-04 22:31:11: Logged In: YES user_id=148712 Doh ... infinite loop after the fix. Replace in the test code proc x {} { if {![llength $::res]} { set ::res [list [info level 0] ::] lappend ::res [uplevel 1 [info level 0]] } else { return :: } } msofer added on 2006-11-04 21:54:51: File Added - 201382: alias-8.4.patch Logged In: YES user_id=148712 Attaching an 8.4 patch to make alias call its target with a fully qualified name. The patch almost applies to HEAD too (one failure in interp.test) msofer added on 2006-11-04 21:47:45: Logged In: YES user_id=148712 Mmhh ... no, the gymnastics are needed for unknown processing too; thank you parse-8.11 |
Attachments:
- alias-8.4.patch [download] added by msofer on 2006-11-04 21:54:51. [details]