On 29/07/2011, at 8:45 PM, Jie Zhang <jzhang...@gmail.com> wrote:

> Hi,
> 
> OpenOCD uses script command to execute config file passed through "-f"
> option. script command is defined as a function
> 
> proc script {filename} {
>        source [find $filename]
> }
> 
> Thus when executing the config file, global variables defined in that
> config file is not global any more. If I define a global variable
> 
> set foo 1
> 
> in target config file, then trying to read its value by
> 
> obj = Jim_GetGlobalVariableStr (interp, "foo", 0);
> Jim_GetLong(interp, obj, &foo);
> 
> in OpenOCD will fail because "foo" is not defined in global namespace.
> And the following code in a target config file will not work as
> expected:
> 
> set foo 1
> proc test { } {
>    puts $::foo
> }
> test
> 
> It's counterintuitive.
> 
> Is this effect is by design or by accident? I can see that using
> "script" command can avoid name conflicts between config files. But it
> prevents config files from sharing global variables. It also prevents
> OpenOCD from accessing global variables defined in config files by
> Jim_GetGlobalVariableStr.
> 
> Regards,
> Jie

Makes sense to me to change it to:

proc script {filename} {
       uplevel #0 source [find $filename]
}

> 
_______________________________________________
Openocd-development mailing list
Openocd-development@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/openocd-development

Reply via email to