aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2023-03-14 16:56:38 -0600
committerTom Tromey <tom@tromey.com>2023-08-31 12:41:02 -0600
commit911e1e795e2496e1a5315601ab89e56afcd10fb0 (patch)
tree6238e7783a5cf642c10652b3651c85768781c22a /gdb
parent8c329d5c651e671f9aa9ed87224dc9943a7f76e6 (diff)
downloadgdb-911e1e795e2496e1a5315601ab89e56afcd10fb0.zip
gdb-911e1e795e2496e1a5315601ab89e56afcd10fb0.tar.gz
gdb-911e1e795e2496e1a5315601ab89e56afcd10fb0.tar.bz2
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 <simon.marchi@efficios.com>
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ada-lang.c5
-rw-r--r--gdb/block.c12
-rw-r--r--gdb/linespec.c3
-rw-r--r--gdb/symtab.c5
-rw-r--r--gdb/symtab.h15
5 files changed, 21 insertions, 19 deletions
diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index 7714033..cc64e09 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -6051,7 +6051,7 @@ ada_add_block_symbols (std::vector<struct block_symbol> &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<struct block_symbol> &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 4e40247..8e1b6ec 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 fd9f54d..fa733d8 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 838d711..d8ce2bf 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 fa77fc1..ca3b1a4 100644
--- a/gdb/symtab.h
+++ b/gdb/symtab.h
@@ -1226,6 +1226,10 @@ enum symbol_subclass_kind
extern gdb::array_view<const struct symbol_impl> 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 *);