From: <no...@so...> - 2001-08-30 13:43:26
|
Bugs item #449279, was opened at 2001-08-08 13:35 You can respond by visiting: http://sourceforge.net/tracker/?func=detail&atid=110894&aid=449279&group_id=10894 Category: 20. [namespace] Group: 8.4a3 Status: Open Resolution: None Priority: 5 Submitted By: Don Porter (dgp) >Assigned to: miguel sofer (msofer) Summary: [namespace which -var] ignores aliases Initial Comment: % namespace eval foo variable x 1 % namespace eval bar variable x 2 % proc bar::test {} { variable ::foo::x ;# 'x' is now an alias for ;# ::foo::x set x 3 ;# sets ::foo::x puts "x is [namespace which -variable x]" } % bar::test x is ::bar::x % set bar::x 2 % set foo::x 3 This is not what I expect. I expect [namespace which -variable x] to tell me something about what "x" refers to in the current context. But [namespace which] is completely ignoring the local alias "x" and telling me how it would resolve "x" looking in the current and global namespaces only. That has nothing to do with how operations on "x" will behave, which is what I really want to know. Here the local variable alias was created with [variable], but the same problem exists when local variables are created with [upvar] or just by creating a local variable. As is, [namespace which] is not the tool I need. The tool I need appears to be missing. What I need is the analog of [namespace origin] for variables. ---------------------------------------------------------------------- Comment By: Don Porter (dgp) Date: 2001-08-08 16:36 Message: Logged In: YES user_id=80530 After chat discussions with Miguel, it seems there's both a bug and a feature request here. [namespace which -variable] should reflect the actual resolution rules. As is, when called inside a proc, it doesn't examine the local context at all. Also, when the variable name does not contain any namespace qualifiers, it's resolution will not involve other namespaces at all, yet [namespace which -var] will still act like it does. In the example, it would be better to see % bar::test x is x Indicating that in the context of the body of proc [bar::test], "x" is a local variable, and won't be resolved in other namespaces. In addition, we need the ability to determine the ultimate reference of local variables that are really aliases created by [upvar], [variable], etc. That's the Feature Request part, and will need some thinking. (What about references to other proc contexts?, etc.) ---------------------------------------------------------------------- You can respond by visiting: http://sourceforge.net/tracker/?func=detail&atid=110894&aid=449279&group_id=10894 |