From: SourceForge.net <no...@so...> - 2006-08-25 18:58:52
|
Bugs item #1546833, was opened at 2006-08-25 15:52 Message generated for change (Comment added) made by msofer You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=110894&aid=1546833&group_id=10894 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: 21. [namespace] Group: development: 8.5a5 Status: Open Resolution: None Priority: 5 Submitted By: miguel sofer (msofer) Assigned to: miguel sofer (msofer) Summary: wrong varname resolution in [namespace upvar] Initial Comment: Will Duquette reports by mail that varname resolution of [namespace upvar] is failing to do the right thing in the (non-fully) qualified case. <quote> Please consider the code: namespace eval ::cat:: { } namespace eval dog:: { set dogInfo(a) "A" set dogInfo(b) "B" } proc ::cat::TestProc {type} { if {![info exists ${type}::dogInfo]} { error "no such type: \"$type\"" } upvar ${type}::dogInfo dogInfo1 parray dogInfo1 namespace upvar $type dogInfo dogInfo2 parray dogInfo2 } ::cat::TestProc dog What happens when I run this is it prints the content of dogInfo1, but then says there is no array dogInfo2; [namespace upvar] is failing to alias dogInfo2 to ::dog::dogInfo. Now, the behavior of [namespace upvar] doesn't surprise me; since TestProc is in ::cat::, [namespace upvar] is presumably trying to alias dogInfo2 to ::cat::dog::dogInfo. That makes sense to me. [info exists] and [upvar], on the other hand, are finding ::dog::dogInfo; this surprises me. Do lookups of partially-qualified variable names fall back to :: if the variable isn't found in the current namespace? If so, [namespace upvar] should undoubtedly do the same thing. I must say, I wasn't expecting them to do that, though. </quote> ---------------------------------------------------------------------- >Comment By: miguel sofer (msofer) Date: 2006-08-25 15:58 Message: Logged In: YES user_id=148712 According to the docs, "[namespace upvar $ns a b] has the same behaviour as [upvar 0 $ns::a b]. Event though Will's example does not test this directly, further tests show that this is failing to occur. The code is buggy, and the testsuite incomplete. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=110894&aid=1546833&group_id=10894 |