Refactor dap_launch
authorTom Tromey <tromey@adacore.com>
Mon, 24 Jul 2023 16:12:17 +0000 (10:12 -0600)
committerTom Tromey <tromey@adacore.com>
Tue, 1 Aug 2023 18:52:26 +0000 (12:52 -0600)
This patch refactors dap_launch to make it more extensible and also
easier to use.

gdb/testsuite/gdb.dap/args-env.exp
gdb/testsuite/gdb.dap/stop-at-main.exp
gdb/testsuite/lib/dap-support.exp

index 96fbb28d9cedbb9ee950a431b7dd3bd420534e88..ae6cf2e66a6cf27f672cbc28e2e62d24c0b16171 100644 (file)
@@ -25,7 +25,7 @@ if {[build_executable ${testfile}.exp $testfile] == -1} {
     return
 }
 
-if {[dap_launch $testfile {a "b c"} {{DEI something}}] == ""} {
+if {[dap_launch $testfile arguments {a "b c"} env {{DEI something}}] == ""} {
     return
 }
 
index 80a9b81e15283b7b107700ff95f883aa008d513f..3f22f4a0154af0052c2c84f9c406852e1c1257c6 100644 (file)
@@ -25,7 +25,7 @@ if {[build_executable ${testfile}.exp $testfile $srcfile] == -1} {
     return
 }
 
-if {[dap_launch $testfile {} {} 1] == ""} {
+if {[dap_launch $testfile stop_at_main 1] == ""} {
     return
 }
 
index e3750e1d0162e59b7f1c0431429491a8bd0a4527..4a1a288e7ae3ceb69a764a3f1e70486b159b5167 100644 (file)
@@ -239,40 +239,55 @@ proc _dap_initialize {name} {
 # Start gdb, send a DAP initialize request, and then a launch request
 # specifying FILE as the program to use for the inferior.  Returns the
 # empty string on failure, or the response object from the launch
-# request.  If specified, ARGS is a list of command-line arguments,
-# and ENV is a list of pairs of the form {VAR VALUE} that is used to
-# populate the inferior's environment.  After this is called, gdb will
-# be ready to accept breakpoint requests.  If STOP_AT_MAIN is nonzero,
-# pass "stopAtBeginningOfMainSubprogram" to the launch request.
-proc dap_launch {file {args {}} {env {}} {stop_at_main 0}} {
+# request.  If specified, ARGS is a dictionary of key-value pairs,
+# each passed to the launch request.  Valid keys are:
+# * arguments - value is a list of strings passed as command-line
+#   arguments to the inferior
+# * env - value is a list of pairs of the form {VAR VALUE} that is
+#   used to populate the inferior's environment.
+# * stop_at_main - value is ignored, the presence of this means that
+#   "stopAtBeginningOfMainSubprogram" will be passed to the launch
+#   request.
+#
+# After this proc is called, gdb will be ready to accept breakpoint
+# requests.
+proc dap_launch {file {args {}}} {
     if {[_dap_initialize "startup - initialize"] == ""} {
        return ""
     }
     set params "o program"
     append params " [format {[%s]} [list s [standard_output_file $file]]]"
 
-    if {[llength $args] > 0} {
-       append params " args"
-       set arglist ""
-       foreach arg $args {
-           append arglist " \[s [list $arg]\]"
-       }
-       append params " \[a $arglist\]"
-    }
+    foreach {key value} $args {
+       switch -exact -- $key {
+           arguments {
+               append params " args"
+               set arglist ""
+               foreach arg $value {
+                   append arglist " \[s [list $arg]\]"
+               }
+               append params " \[a $arglist\]"
+           }
 
-    if {[llength $env] > 0} {
-       append params " env"
-       set envlist ""
-       foreach pair $env {
-           lassign $pair var value
-           append envlist " $var"
-           append envlist " [format {[%s]} [list s $value]]"
-       }
-       append params " \[o $envlist\]"
-    }
+           env {
+               append params " env"
+               set envlist ""
+               foreach pair $value {
+                   lassign $pair var value
+                   append envlist " $var"
+                   append envlist " [format {[%s]} [list s $value]]"
+               }
+               append params " \[o $envlist\]"
+           }
+
+           stop_at_main {
+               append params { stopAtBeginningOfMainSubprogram [l true]}
+           }
 
-    if {$stop_at_main} {
-       append params { stopAtBeginningOfMainSubprogram [l true]}
+           default {
+               error "unrecognized parameter $key"
+           }
+       }
     }
 
     return [dap_check_request_and_response "startup - launch" launch $params]