From: Tom Tromey Date: Mon, 29 Sep 2025 15:31:59 +0000 (-0600) Subject: Remove linespec.c:symtab_collector class X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f8e7ce792fb3e7b30de60c11b5d155af01dad78c;p=thirdparty%2Fbinutils-gdb.git Remove linespec.c:symtab_collector class 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 --- diff --git a/gdb/linespec.c b/gdb/linespec.c index bc14a21640a..e87bac37005 100644 --- a/gdb/linespec.c +++ b/gdb/linespec.c @@ -3602,43 +3602,6 @@ find_method (struct linespec_state *self, -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 &&release_symtabs () - { - return std::move (m_symtabs); - } - -private: - /* The result vector of symtabs. */ - std::vector m_symtabs; - - /* This is used to ensure the symtabs are unique. */ - gdb::unordered_set 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 collect_symtabs_from_filename (const char *file, struct program_space *search_pspace) { - symtab_collector collector; + /* The result vector of symtabs. */ + std::vector symtabs; + /* This is used to ensure the symtabs are unique. */ + gdb::unordered_set 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