public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] Add symbol::matches method
@ 2023-08-29 20:00 Tom Tromey
  2023-08-31 17:13 ` Simon Marchi
  0 siblings, 1 reply; 2+ messages in thread
From: Tom Tromey @ 2023-08-29 20:00 UTC (permalink / raw)
  To: gdb-patches; +Cc: Tom Tromey

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.
---
 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 575568cffb5..6c6eaf203c0 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -6050,7 +6050,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)
 	    {
@@ -6085,8 +6085,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 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 0117a2a59d7..d055f594c8c 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -2278,8 +2278,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);
@@ -2767,7 +2766,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 ee4729b14cd..95b9bfa016b 100644
--- a/gdb/symtab.h
+++ b/gdb/symtab.h
@@ -1225,6 +1225,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
@@ -1271,6 +1275,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;
@@ -2020,10 +2031,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.41.0


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] Add symbol::matches method
  2023-08-29 20:00 [PATCH] Add symbol::matches method Tom Tromey
@ 2023-08-31 17:13 ` Simon Marchi
  0 siblings, 0 replies; 2+ messages in thread
From: Simon Marchi @ 2023-08-31 17:13 UTC (permalink / raw)
  To: Tom Tromey, gdb-patches

On 8/29/23 16:00, Tom Tromey wrote:
> 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.

This looks nicer indeed.  I checked if we could get rid of
symbol_matches_domain (just put the implementation in symbol::matches),
but that doesn't seem possible, other things use symbol_matches_domain
without a struct symbol.

Approved-By: Simon Marchi <simon.marchi@efficios.com>

Simon

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2023-08-31 17:13 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-08-29 20:00 [PATCH] Add symbol::matches method Tom Tromey
2023-08-31 17:13 ` Simon Marchi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).