gdb_init argument ARGS is a string rather than a list

Message ID 53797C8A.5080902@codesourcery.com
State Committed
Headers

Commit Message

Yao Qi May 19, 2014, 3:37 a.m. UTC
  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

Tom Tromey May 19, 2014, 1:59 p.m. UTC | #1
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
  
Yao Qi May 20, 2014, 6:06 a.m. UTC | #2
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.
  

Patch

diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index 3125e7a..a34ab3a 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -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 { } {