gdb: add gdb_argv::as_array_view method
authorSimon Marchi <simon.marchi@polymtl.ca>
Fri, 14 Aug 2020 16:27:22 +0000 (12:27 -0400)
committerSimon Marchi <simon.marchi@efficios.com>
Fri, 14 Aug 2020 16:27:22 +0000 (12:27 -0400)
Introduce the gdb_argv::as_array_view method, as a way to easily pass
the parsed arguments array to a function taking an array view.  There is
currently one caller where we can use this (which prompted the
suggestion to implement this method).

Add some selftests for the new method, which at the same time test a
little bit gdb_argv.  As far as I know, it's not tested currently.

gdb/ChangeLog:

* utils.h (class gdb_argv) <as_array_view>: New method.
* utils.c (gdb_argv_as_array_view_test): New.
(_initialize_utils): Register selftest.
* maint.c (maintenance_selftest): Use the new method.

Change-Id: I0645037613ed6549aabe60f14a36f3494513b177

gdb/ChangeLog
gdb/maint.c
gdb/utils.c
gdb/utils.h

index 038d11702ab194e2f2e6fd57a5d1c662326c740c..63d1babeda51bbe70619d5b06a7681d37b08e9ad 100644 (file)
@@ -1,3 +1,10 @@
+2020-08-14  Simon Marchi  <simon.marchi@polymtl.ca>
+
+       * utils.h (class gdb_argv) <as_array_view>: New method.
+       * utils.c (gdb_argv_as_array_view_test): New.
+       (_initialize_utils): Register selftest.
+       * maint.c (maintenance_selftest): Use the new method.
+
 2020-08-13  Kamil Rytarowski  <n54@gmx.com>
 
        * target.h (supports_dumpcore, dumpcore): New
index fd37acce5226c18b0875930d56671df71b671987..3368769ad96f75ce7bb5edddc4598cc3b9c1b4b0 100644 (file)
@@ -1042,7 +1042,7 @@ maintenance_selftest (const char *args, int from_tty)
 {
 #if GDB_SELF_TEST
   gdb_argv argv (args);
-  selftests::run_tests (gdb::array_view<char *> (argv.get (), argv.count ()));
+  selftests::run_tests (argv.as_array_view ());
 #else
   printf_filtered (_("\
 Selftests have been disabled for this build.\n"));
index 102db28787fb66e55183d036714d596c370149df..fb1308ac9ae3720b8067a7a21eae32f3e8961404 100644 (file)
@@ -2991,6 +2991,31 @@ gdb_realpath_tests ()
   gdb_realpath_check_trailer ("", "");
 }
 
+/* Test the gdb_argv::as_array_view method.  */
+
+static void
+gdb_argv_as_array_view_test ()
+{
+  {
+    gdb_argv argv;
+
+    gdb::array_view<char *> view = argv.as_array_view ();
+
+    SELF_CHECK (view.data () == nullptr);
+    SELF_CHECK (view.size () == 0);
+  }
+  {
+    gdb_argv argv ("une bonne 50");
+
+    gdb::array_view<char *> view = argv.as_array_view ();
+
+    SELF_CHECK (view.size () == 3);
+    SELF_CHECK (strcmp (view[0], "une") == 0);
+    SELF_CHECK (strcmp (view[1], "bonne") == 0);
+    SELF_CHECK (strcmp (view[2], "50") == 0);
+  }
+}
+
 #endif /* GDB_SELF_TEST */
 
 /* Allocation function for the libiberty hash table which uses an
@@ -3489,5 +3514,6 @@ When set, debugging messages will be marked with seconds and microseconds."),
 
 #if GDB_SELF_TEST
   selftests::register_test ("gdb_realpath", gdb_realpath_tests);
+  selftests::register_test ("gdb_argv_array_view", gdb_argv_as_array_view_test);
 #endif
 }
index 3434ff1caa25046dd4a781701ccc22b247c054f6..9a235b963272f8e454fcd91ce99949d6d36d8fce 100644 (file)
@@ -22,6 +22,7 @@
 #define UTILS_H
 
 #include "exceptions.h"
+#include "gdbsupport/array-view.h"
 #include "gdbsupport/scoped_restore.h"
 #include <chrono>
 
@@ -210,6 +211,13 @@ public:
     return m_argv[arg];
   }
 
+  /* Return the arguments array as an array view.  */
+
+  gdb::array_view<char *> as_array_view ()
+  {
+    return gdb::array_view<char *> (this->get (), this->count ());
+  }
+
   /* The iterator type.  */
 
   typedef char **iterator;