From: SourceForge.net <no...@so...> - 2008-08-29 15:51:22
|
Bugs item #219387, was opened at 2000-10-26 06:12 Message generated for change (Comment added) made by phoinix77 You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=110894&aid=219387&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: 17. Commands I-L Group: obsolete: 8.3.2 Status: Open Resolution: Fixed Priority: 8 Private: No Submitted By: Nobody/Anonymous (nobody) Assigned to: Don Porter (dgp) Summary: info locals seems not to work properly Initial Comment: OriginalBugID: 6131 Bug Version: 8.3.2 SubmitDate: '2000-08-14' LastModified: '2000-10-25' Severity: MED Status: UnAssn Submitter: techsupp OS: Linux-SuSE OSVersion: SuSE 6.4 Machine: AMD K6 FixedDate: '2000-10-25' ClosedDate: '2000-10-25' Name: Christian Eva ReproducibleScript: proc xloc {args} { global Defaults LikeDictionaries env L1 global Dictionaries foreach m $args { set $m $m } puts "locals=[info locals]" set L1 [info locals] puts "L1=$L1" unset args foreach a [info locals {[a-zA-Z]?*}] { puts "a=$a" eval set v \$$a set Dictionaries($a) $v } } set L1 empty xloc a aA b Ba ccc puts "L1=$L1" parray Dictionaries # end bash-2.03$ tclsh8.0 localtest locals=args m L1 a ccc b aA Ba L1=args m L1 a ccc b aA Ba a=L1 a=ccc a=aA a=Ba L1=args m L1 a ccc b aA Ba Dictionaries(Ba) = Ba Dictionaries(L1) = args m L1 a ccc b aA Ba Dictionaries(aA) = aA Dictionaries(ccc) = ccc bash-2.03$ bash-2.03$ tclsh8.3 localtest locals=args m L1 a Dictionaries ccc b aA Ba L1=args m L1 a Dictionaries ccc b aA Ba a=L1 a=Dictionaries can't read "Dictionaries": variable is array while executing "set v $Dictionaries" ("eval" body line 1) invoked from within "eval set v \$$a" (procedure "xloc" line 18) invoked from within "xloc a aA b Ba ccc " (file "localtest" line 25) bash-2.03$ ObservedBehavior: First I do not understand why "info locals" does list the global variables. It seems to lists them as soon as they are referenced in the procedure. Second: The example works in tcl8.0 but not in 8.3. If I put the line global Dictionaries down into the foreach loop it works as a workaround: foreach a [info locals {[a-zA-Z]?*}] { global Dictionaries puts "a=$a" eval set v \$$a set Dictionaries($a) $v } This is an extract out of a running program since 7.6. In 8.0 the error does not cause trouble but under 8.3 it crashes. DesiredBehavior: I would expect the varables listed in the global statement not to be listed by "info locals" at all. ---------------------------------------------------------------------- Comment By: Christian Knoepfel Eva (phoinix77) Date: 2008-08-29 16:51 Message: Logged In: YES user_id=2176213 Originator: NO Please close this ticket. I was the original submitter of this ticket. I understand the philosophy behind the behaviour as you explain it. It is just annoying as we still have the mentioned program running on 8.0, but I will eventually change it as we have the most of our programs now converted to run on 8.5. Christian Eva ---------------------------------------------------------------------- Comment By: Donal K. Fellows (dkf) Date: 2008-08-29 15:20 Message: Logged In: YES user_id=79902 Originator: NO I've no idea; I've forgotten everything about this bug that I ever knew. At a guess, someone seems to be wanting [info locals] to not return linked variables. If they want stuff that's been brought in by [upvar] but not by [global], I don't want to know. I have no plans to do anything about this bug. The world hasn't ended. ---------------------------------------------------------------------- Comment By: Don Porter (dgp) Date: 2008-08-29 15:08 Message: Logged In: YES user_id=80530 Originator: NO The doc change noted here (from a 2000-11-21 commit!) has been flagged on comp.lang.tcl as incorrect. Is there any recollection beyond what's recorded here how that change came about, and how it came to be incorrect? ---------------------------------------------------------------------- Comment By: Donal K. Fellows (dkf) Date: 2000-12-01 13:56 Message: There is a difference when you consider passing in search patterns with namespace qualifiers. [info locals] only finds variables in the current naming context, [info globals] only finds variables in the global naming context, and [info vars] finds variables in either the current naming context or any named one (with qualifiers added.) The difference is admittedly slight, but it is significant. The current behaviour is also correct and documented correctly. ---------------------------------------------------------------------- Comment By: Marc Ziegenhagen (mzi) Date: 2000-12-01 12:19 Message: I have the same problem and can't understand the differences between info locals and info vars. In the release 8.3.2 there is not a difference. Marc Ziegenhagen ---------------------------------------------------------------------- Comment By: Donal K. Fellows (dkf) Date: 2000-11-15 14:58 Message: [info locals] lists the variables that are visible in the current context. All [global] does is create a local alias for each named global variable with the "same" name as the global variable (it doesn't work quite like that if you put in namespace qualifiers, but that's a separate story.) This is not a bug, or certainly not a functional one. Maybe a documentation change would help instead? ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=110894&aid=219387&group_id=10894 |