gdb: make iterate_over_symbols return void, rename to for_each_symbol

Nothing really uses the return value of iterate_over_symbols and
language::iterate_over_symbols.  Also, all provided callback always
return true, iterating on all matching symbols.  Simplify them to not
return a value and not have the "stop iterating" feature.

Rename to for_each_symbol, just to be consistent with previous patches.

Also rename symbol_found_callback_ftype to
for_each_symbol_callback_ftype for consistency.

Change-Id: I55ff3162098bb069dc1de1afca10dd9abfc05c34
Approved-By: Andrew Burgess <aburgess@redhat.com>
This commit is contained in:
Simon Marchi 2026-04-16 16:16:21 -04:00 committed by Simon Marchi
parent e80c346010
commit 594acddca7
7 changed files with 48 additions and 83 deletions

View file

@ -5427,7 +5427,7 @@ struct match_data
}
DISABLE_COPY_AND_ASSIGN (match_data);
bool operator() (struct block_symbol *bsym);
void operator() (struct block_symbol *bsym);
void finish (const block *block);
@ -5452,14 +5452,14 @@ match_data::finish (const block *block)
/* A callback for add_nonlocal_symbols that adds symbol, found in
BSYM, to a list of symbols. */
bool
void
match_data::operator() (struct block_symbol *bsym)
{
const struct block *block = bsym->block;
struct symbol *sym = bsym->symbol;
if (sym->loc_class () == LOC_UNRESOLVED)
return true;
return;
else if (sym->is_argument ())
arg_sym = sym;
else
@ -5467,8 +5467,6 @@ match_data::operator() (struct block_symbol *bsym)
found_sym = true;
add_defn_to_vec (*resultp, sym, block);
}
return true;
}
/* Helper for add_nonlocal_symbols. Find symbols in DOMAIN which are
@ -5563,10 +5561,7 @@ map_matching_symbols (struct objfile *objfile,
{
const struct block *block
= symtab->blockvector ()->block (block_kind);
/* match_data::operator() always returns true; we ignore the
result but assert just to be future-proof. */
bool result = iterate_over_symbols (block, lookup_name, domain, data);
gdb_assert (result);
for_each_symbol (block, lookup_name, domain, data);
data.finish (block);
return iteration_status::keep_going;
};
@ -5664,9 +5659,8 @@ ada_add_all_symbols (std::vector<struct block_symbol> &result,
ada_add_local_symbols (result, lookup_name, block, domain);
else
{
/* In the !full_search case we're are being called by
iterate_over_symbols, and we don't want to search
superblocks. */
/* In the !full_search case we're being called by for_each_symbol, and
we don't want to search superblocks. */
ada_add_block_symbols (result, block, lookup_name, domain, NULL);
}
if (!result.empty () || !full_search)
@ -13702,20 +13696,15 @@ public:
/* See language.h. */
bool iterate_over_symbols
void for_each_symbol
(const struct block *block, const lookup_name_info &name,
domain_search_flags domain,
symbol_found_callback_ftype callback) const override
for_each_symbol_callback_ftype callback) const override
{
std::vector<struct block_symbol> results
= ada_lookup_symbol_list_worker (name, block, domain, 0);
for (block_symbol &sym : results)
{
if (!callback (&sym))
return false;
}
return true;
callback (&sym);
}
/* See language.h. */

View file

@ -353,18 +353,13 @@ struct language_defn
The caller is responsible for iterating up through superblocks
if desired.
For each one, call CALLBACK with the symbol. If CALLBACK
returns false, the iteration ends at that point.
This field may not be NULL. If the language does not need any
special processing here, 'iterate_over_symbols' should be
used as the definition. */
virtual bool iterate_over_symbols
For each one, call CALLBACK with the symbol. */
virtual void for_each_symbol
(const struct block *block, const lookup_name_info &name,
domain_search_flags domain,
symbol_found_callback_ftype callback) const
for_each_symbol_callback_ftype callback) const
{
return ::iterate_over_symbols (block, name, domain, callback);
::for_each_symbol (block, name, domain, callback);
}
/* Return a pointer to the function that should be used to match a

View file

@ -237,17 +237,14 @@ struct collect_info
std::vector<bound_minimal_symbol> *minimal_symbols;
/* Possibly add a symbol to the results. */
bool add_symbol (block_symbol *bsym);
void add_symbol (block_symbol *bsym);
};
bool
void
collect_info::add_symbol (block_symbol *bsym)
{
if (record_all || bsym->symbol->loc_class () == LOC_BLOCK)
this->symbols->push_back (*bsym);
/* Continue iterating. */
return true;
}
/* Token types */
@ -363,7 +360,7 @@ struct linespec_parser
static void iterate_over_file_blocks
(struct symtab *symtab, const lookup_name_info &name,
domain_search_flags domain,
symbol_found_callback_ftype callback);
for_each_symbol_callback_ftype callback);
static void initialize_defaults (struct symtab **default_symtab,
int *default_line);
@ -1128,7 +1125,7 @@ iterate_over_all_matching_symtabs
const lookup_name_info &lookup_name,
const domain_search_flags domain,
struct program_space *search_pspace, bool include_inline,
symbol_found_callback_ftype callback)
for_each_symbol_callback_ftype callback)
{
for (struct program_space *pspace : program_spaces)
{
@ -1156,15 +1153,14 @@ iterate_over_all_matching_symtabs
for (i = FIRST_LOCAL_BLOCK; i < bv->num_blocks (); i++)
{
block = bv->block (i);
state->language->iterate_over_symbols
state->language->for_each_symbol
(block, lookup_name, domain,
[&] (block_symbol *bsym)
{
/* Restrict calls to CALLBACK to symbols
representing inline symbols only. */
if (bsym->symbol->is_inlined ())
return callback (bsym);
return true;
callback (bsym);
});
}
}
@ -1196,14 +1192,14 @@ static void
iterate_over_file_blocks
(struct symtab *symtab, const lookup_name_info &name,
domain_search_flags domain,
symbol_found_callback_ftype callback)
for_each_symbol_callback_ftype callback)
{
const struct block *block;
for (block = symtab->compunit ()->blockvector ()->static_block ();
block != NULL;
block = block->superblock ())
current_language->iterate_over_symbols (block, name, domain, callback);
current_language->for_each_symbol (block, name, domain, callback);
}
/* A helper for find_method. This finds all methods in type T of
@ -3325,8 +3321,8 @@ decode_objc (struct linespec_state *self, linespec *ls, const char *arg)
namespace {
/* A function object that serves as symbol_found_callback_ftype
callback for iterate_over_symbols. This is used by
/* A function object that serves as for_each_symbol_callback_ftype
callback for for_each_symbol. This is used by
lookup_prefix_sym to collect type symbols. */
class decode_compound_collector
{
@ -3341,8 +3337,8 @@ public:
return std::move (m_symbols);
}
/* Callable as a symbol_found_callback_ftype callback. */
bool operator () (block_symbol *bsym);
/* Callable as a for_each_symbol_callback_ftype callback. */
void operator () (block_symbol *bsym);
private:
/* A hash table of all symbols we found. We use this to avoid
@ -3353,26 +3349,24 @@ private:
std::vector<block_symbol> m_symbols;
};
bool
void
decode_compound_collector::operator () (block_symbol *bsym)
{
struct type *t;
struct symbol *sym = bsym->symbol;
if (sym->loc_class () != LOC_TYPEDEF)
return true; /* Continue iterating. */
return;
t = sym->type ();
t = check_typedef (t);
if (t->code () != TYPE_CODE_STRUCT
&& t->code () != TYPE_CODE_UNION
&& t->code () != TYPE_CODE_NAMESPACE)
return true; /* Continue iterating. */
return;
if (m_unique_syms.insert (sym).second)
m_symbols.push_back (*bsym);
return true; /* Continue iterating. */
}
} // namespace
@ -4245,7 +4239,7 @@ add_matching_symbols_to_info (const char *name,
auto add_symbol = [&] (block_symbol *bsym)
{
return info->add_symbol (bsym);
info->add_symbol (bsym);
};
for (const auto &elt : info->file_symtabs)

View file

@ -939,7 +939,7 @@ for_each_lwp (int pid, for_each_lwp_ftype callback)
/* Iterate over all LWPs, calling CALLBACK for every LWP.
Only consider the LWPs matching FILTER. */
Only consider the LWPs that match FILTER. */
static void
for_each_lwp (ptid_t filter, for_each_lwp_ftype callback)
@ -2951,7 +2951,7 @@ select_event_lwp (ptid_t filter, struct lwp_info **orig_lp, int *status)
(*orig_lp)->status = 0;
}
/* Return non-zero if LP has been resumed. */
/* Return true if LP has been resumed. */
static bool
resumed_callback (struct lwp_info *lp)

View file

@ -52,7 +52,7 @@ using for_each_lwp_ftype = gdb::function_view<void (lwp_info *lwp)>;
/* Iterate over all LWPs, calling CALLBACK for every LWP.
Only consider the LWPs with that pid. */
Only consider the LWPs that match PID. */
extern void for_each_lwp (int pid, for_each_lwp_ftype callback);

View file

@ -2697,23 +2697,18 @@ lookup_transparent_type (const char *name, domain_search_flags flags)
/* See symtab.h. */
bool
iterate_over_symbols (const struct block *block,
const lookup_name_info &name,
const domain_search_flags domain,
symbol_found_callback_ftype callback)
void
for_each_symbol (const struct block *block, const lookup_name_info &name,
const domain_search_flags domain,
for_each_symbol_callback_ftype callback)
{
for (struct symbol *sym : block_iterator_range (block, &name))
{
if (sym->matches (domain))
{
struct block_symbol block_sym = {sym, block};
if (sym->matches (domain))
{
block_symbol block_sym = { sym, block };
if (!callback (&block_sym))
return false;
}
}
return true;
callback (&block_sym);
}
}
/* Find the compunit symtab associated with PC and SECTION.

View file

@ -2808,26 +2808,18 @@ using find_symtab_callback_ftype = std::function<bool (symtab *)>;
std::vector<const linetable_entry *> find_linetable_entries_for_symtab_line
(struct symtab *symtab, int line, const linetable_entry **best_entry);
/* Prototype for callbacks for LA_ITERATE_OVER_SYMBOLS. The callback
is called once per matching symbol SYM. The callback should return
true to indicate that LA_ITERATE_OVER_SYMBOLS should continue
iterating, or false to indicate that the iteration should end. */
/* Callback type for function for_each_symbol. */
using symbol_found_callback_ftype = gdb::function_view<bool (block_symbol *)>;
using for_each_symbol_callback_ftype
= gdb::function_view<void (block_symbol *)>;
/* Iterate over the symbols named NAME, matching DOMAIN, in BLOCK.
For each symbol that matches, CALLBACK is called. The symbol is
passed to the callback.
For each symbol that matches, call CALLBACK with the symbol. */
If CALLBACK returns false, the iteration ends and this function
returns false. Otherwise, the search continues, and the function
eventually returns true. */
bool iterate_over_symbols (const struct block *block,
const lookup_name_info &name,
const domain_search_flags domain,
symbol_found_callback_ftype callback);
void for_each_symbol (const struct block *block, const lookup_name_info &name,
const domain_search_flags domain,
for_each_symbol_callback_ftype callback);
/* Storage type used by demangle_for_lookup. demangle_for_lookup
either returns a const char * pointer that points to either of the