gdb_init argument ARGS is a string rather than a list
Commit Message
On 05/16/2014 02:17 AM, Tom Tromey wrote:
> The "args" parameter is special in Tcl. It signals a "rest" parameter
> and so causes a single argument to be list-ified by the interpreter:
>
> % proc l {args} { return [llength $args] }
> % l {a b c}
> 1
> % proc r {a} { return [llength $a] }
> % r {a b c}
> 3
>
> So while the current code is a bit odd, I think it is also
> correct-enough.
Tom,
I didn't realize "args" is a special one. Thanks for pointing this out.
The code is correct, but using "args" isn't necessary, because caller
(proc runtest) only passes one string to it.
>
> Yao> - return [eval default_gdb_init $args]
> Yao> + return [eval default_gdb_init $test_file_name]
>
> If you want to proceed with this you will need to remove the "eval"
> here.
I want to proceed with this since it simplifies code in default_gdb_init.
"eval" is removed in the updated patch.
Comments
Yao> 2014-05-19 Yao Qi <yao@codesourcery.com>
Yao> * lib/gdb.exp (default_gdb_init): Rename argument 'args' by
Yao> 'test_file_name'. Treat args as a string instead of a list.
Yao> (gdb_init): Rename argument 'args' by 'test_file_name'.
Thanks, this is ok.
Tom
On 05/19/2014 09:59 PM, Tom Tromey wrote:
> Yao> 2014-05-19 Yao Qi <yao@codesourcery.com>
>
> Yao> * lib/gdb.exp (default_gdb_init): Rename argument 'args' by
> Yao> 'test_file_name'. Treat args as a string instead of a list.
> Yao> (gdb_init): Rename argument 'args' by 'test_file_name'.
>
> Thanks, this is ok.
Patch is pushed in.
@@ -3519,17 +3519,18 @@ proc gdb_continue { function } {
return [gdb_test "continue" ".*Breakpoint $decimal, $function .*" "continue to $function"]
}
-proc default_gdb_init { args } {
+proc default_gdb_init { test_file_name } {
global gdb_wrapper_initialized
global gdb_wrapper_target
global gdb_test_file_name
global cleanfiles
+ global pf_prefix
set cleanfiles {}
gdb_clear_suppressed
- set gdb_test_file_name [file rootname [file tail [lindex $args 0]]]
+ set gdb_test_file_name [file rootname [file tail $test_file_name]]
# Make sure that the wrapper is rebuilt
# with the appropriate multilib option.
@@ -3545,13 +3546,8 @@ proc default_gdb_init { args } {
match_max [match_max -d]
# We want to add the name of the TCL testcase to the PASS/FAIL messages.
- if { [llength $args] > 0 } {
- global pf_prefix
+ set pf_prefix "[file tail [file dirname $test_file_name]]/[file tail $test_file_name]:"
- set file [lindex $args 0]
-
- set pf_prefix "[file tail [file dirname $file]]/[file tail $file]:"
- }
global gdb_prompt
if [target_info exists gdb_prompt] {
set gdb_prompt [target_info gdb_prompt]
@@ -3687,7 +3683,7 @@ set banned_procedures { strace }
# if the banned variables and procedures are already traced.
set banned_traced 0
-proc gdb_init { args } {
+proc gdb_init { test_file_name } {
# Reset the timeout value to the default. This way, any testcase
# that changes the timeout value without resetting it cannot affect
# the timeout used in subsequent testcases.
@@ -3766,7 +3762,7 @@ proc gdb_init { args } {
set gdbserver_reconnect_p 1
unset gdbserver_reconnect_p
- return [eval default_gdb_init $args]
+ return [default_gdb_init $test_file_name]
}
proc gdb_finish { } {