From 911e1e795e2496e1a5315601ab89e56afcd10fb0 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Tue, 14 Mar 2023 16:56:38 -0600 Subject: [PATCH] Add symbol::matches method This adds symbol::matches, a wrapper for symbol_matches_domain. Most places calling symbol_matches_domain can call this method instead, which is a bit less wordy and also (IMO) clearer. Approved-By: Simon Marchi --- gdb/ada-lang.c | 5 ++--- gdb/block.c | 12 +++++------- gdb/linespec.c | 3 +-- gdb/symtab.c | 5 ++--- gdb/symtab.h | 15 +++++++++++---- 5 files changed, 21 insertions(+), 19 deletions(-) diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 77140333ea5..cc64e09e015 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -6051,7 +6051,7 @@ ada_add_block_symbols (std::vector &result, found_sym = false; for (struct symbol *sym : block_iterator_range (block, &lookup_name)) { - if (symbol_matches_domain (sym->language (), sym->domain (), domain)) + if (sym->matches (domain)) { if (sym->aclass () != LOC_UNRESOLVED) { @@ -6086,8 +6086,7 @@ ada_add_block_symbols (std::vector &result, for (struct symbol *sym : block_iterator_range (block)) { - if (symbol_matches_domain (sym->language (), - sym->domain (), domain)) + if (sym->matches (domain)) { int cmp; diff --git a/gdb/block.c b/gdb/block.c index 4e40247b79c..8e1b6ec88d4 100644 --- a/gdb/block.c +++ b/gdb/block.c @@ -680,8 +680,7 @@ block_lookup_symbol (const struct block *block, const char *name, STRUCT vs VAR domain symbols. So if a matching symbol is found, make sure there is no "better" matching symbol, i.e., one with exactly the same domain. PR 16253. */ - if (symbol_matches_domain (sym->language (), - sym->domain (), domain)) + if (sym->matches (domain)) other = better_symbol (other, sym, domain); } return other; @@ -701,8 +700,7 @@ block_lookup_symbol (const struct block *block, const char *name, for (struct symbol *sym : block_iterator_range (block, &lookup_name)) { - if (symbol_matches_domain (sym->language (), - sym->domain (), domain)) + if (sym->matches (domain)) { sym_found = sym; if (!sym->is_argument ()) @@ -766,11 +764,11 @@ block_lookup_symbol_primary (const struct block *block, const char *name, if (best_symbol (sym, domain)) return sym; - /* This is a bit of a hack, but symbol_matches_domain might ignore + /* This is a bit of a hack, but 'matches' might ignore STRUCT vs VAR domain symbols. So if a matching symbol is found, make sure there is no "better" matching symbol, i.e., one with exactly the same domain. PR 16253. */ - if (symbol_matches_domain (sym->language (), sym->domain (), domain)) + if (sym->matches (domain)) other = better_symbol (other, sym, domain); } @@ -794,7 +792,7 @@ block_find_symbol (const struct block *block, const char *name, { /* MATCHER is deliberately called second here so that it never sees a non-domain-matching symbol. */ - if (symbol_matches_domain (sym->language (), sym->domain (), domain) + if (sym->matches (domain) && matcher (sym, data)) return sym; } diff --git a/gdb/linespec.c b/gdb/linespec.c index fd9f54d4afd..fa733d880e3 100644 --- a/gdb/linespec.c +++ b/gdb/linespec.c @@ -3908,8 +3908,7 @@ find_label_symbols_in_block (const struct block *block, for (struct symbol *sym : block_iterator_range (block)) { - if (symbol_matches_domain (sym->language (), - sym->domain (), LABEL_DOMAIN) + if (sym->matches (LABEL_DOMAIN) && cmp (sym->search_name (), name, name_len) == 0) { result->push_back ({sym, block}); diff --git a/gdb/symtab.c b/gdb/symtab.c index 838d711587c..d8ce2bf8482 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -2288,8 +2288,7 @@ lookup_symbol_in_objfile_symtabs (struct objfile *objfile, other = result; break; } - if (symbol_matches_domain (result.symbol->language (), - result.symbol->domain (), domain)) + if (result.symbol->matches (domain)) { struct symbol *better = better_symbol (other.symbol, result.symbol, domain); @@ -2777,7 +2776,7 @@ iterate_over_symbols (const struct block *block, { for (struct symbol *sym : block_iterator_range (block, &name)) { - if (symbol_matches_domain (sym->language (), sym->domain (), domain)) + if (sym->matches (domain)) { struct block_symbol block_sym = {sym, block}; diff --git a/gdb/symtab.h b/gdb/symtab.h index fa77fc16d2f..ca3b1a4a0b6 100644 --- a/gdb/symtab.h +++ b/gdb/symtab.h @@ -1226,6 +1226,10 @@ enum symbol_subclass_kind extern gdb::array_view symbol_impls; +bool symbol_matches_domain (enum language symbol_language, + domain_enum symbol_domain, + domain_enum domain); + /* This structure is space critical. See space comments at the top. */ struct symbol : public general_symbol_info, public allocate_on_obstack @@ -1272,6 +1276,13 @@ struct symbol : public general_symbol_info, public allocate_on_obstack return this->impl ().aclass; } + /* Call symbol_matches_domain on this symbol, using the symbol's + domain. */ + bool matches (domain_enum d) const + { + return symbol_matches_domain (language (), domain (), d); + } + domain_enum domain () const { return m_domain; @@ -2021,10 +2032,6 @@ extern const char multiple_symbols_cancel[]; const char *multiple_symbols_select_mode (void); -bool symbol_matches_domain (enum language symbol_language, - domain_enum symbol_domain, - domain_enum domain); - /* lookup a symbol table by source file name. */ extern struct symtab *lookup_symtab (const char *); -- 2.30.2