]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Remove linespec.c:symtab_collector class
authorTom Tromey <tom@tromey.com>
Mon, 29 Sep 2025 15:31:59 +0000 (09:31 -0600)
committerTom Tromey <tom@tromey.com>
Thu, 9 Oct 2025 21:43:43 +0000 (15:43 -0600)
linespec.c has a symtab_collector class that is readily replaced by a
lambda.  I think the result is more clear.

I considered using the unordered_dense 'extract' method as well, to
make the code a bit more efficient -- but it wasn't clear to me if the
ordering of the vector mattered, and so I've just added a comment.

Reviewed-By: Guinevere Larsen <guinevere@redhat.com>
gdb/linespec.c

index bc14a21640ab20c970864b2e037bc909d4bdcd06..e87bac370054653cd70049091f3be803592dda73 100644 (file)
@@ -3602,43 +3602,6 @@ find_method (struct linespec_state *self,
 
 \f
 
-namespace {
-
-/* This function object is a callback for iterate_over_symtabs, used
-   when collecting all matching symtabs.  */
-
-class symtab_collector
-{
-public:
-  symtab_collector () = default;
-
-  DISABLE_COPY_AND_ASSIGN (symtab_collector);
-
-  /* Callable as a symbol_found_callback_ftype callback.  */
-  bool operator () (struct symtab *symtab)
-  {
-    if (m_symtab_table.insert (symtab).second)
-      m_symtabs.push_back (symtab);
-
-    return false;
-  }
-
-  /* Return an rvalue reference to the collected symtabs.  */
-  std::vector<symtab *> &&release_symtabs ()
-  {
-    return std::move (m_symtabs);
-  }
-
-private:
-  /* The result vector of symtabs.  */
-  std::vector<symtab *> m_symtabs;
-
-  /* This is used to ensure the symtabs are unique.  */
-  gdb::unordered_set<const symtab *> m_symtab_table;
-};
-
-} // namespace
-
 /* Given a file name, return a list of all matching symtabs.  If
    SEARCH_PSPACE is not NULL, the search is restricted to just that
    program space.  */
@@ -3647,7 +3610,17 @@ static std::vector<symtab *>
 collect_symtabs_from_filename (const char *file,
                               struct program_space *search_pspace)
 {
-  symtab_collector collector;
+  /* The result vector of symtabs.  */
+  std::vector<symtab *> symtabs;
+  /* This is used to ensure the symtabs are unique.  */
+  gdb::unordered_set<const symtab *> symtab_table;
+
+  auto collector = [&] (struct symtab *symtab)
+    {
+      if (symtab_table.insert (symtab).second)
+       symtabs.push_back (symtab);
+      return false;
+    };
 
   /* Find that file's data.  */
   if (search_pspace == NULL)
@@ -3663,7 +3636,10 @@ collect_symtabs_from_filename (const char *file,
   else
     iterate_over_symtabs (search_pspace, file, collector);
 
-  return collector.release_symtabs ();
+  /* It is tempting to use the unordered_dense 'extract' method here,
+     and remove the separate vector -- but it's unclear if ordering
+     matters.  */
+  return symtabs;
 }
 
 /* Return all the symtabs associated to the FILENAME.  If SEARCH_PSPACE is