Add symbol::matches method
authorTom Tromey <tom@tromey.com>
Tue, 14 Mar 2023 22:56:38 +0000 (16:56 -0600)
committerTom Tromey <tom@tromey.com>
Thu, 31 Aug 2023 18:41:02 +0000 (12:41 -0600)
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>
gdb/ada-lang.c
gdb/block.c
gdb/linespec.c
gdb/symtab.c
gdb/symtab.h

index 77140333ea5a169b1f1fc3ee326c7c8a5124c786..cc64e09e0155b8c73400b954d58831ff0875c261 100644 (file)
@@ -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;
 
index 4e40247b79c31e564f27c7574947e0e85cedb8a0..8e1b6ec88d4fcad7fdaa7c7ebad1e8815ef0137a 100644 (file)
@@ -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;
     }
index fd9f54d4afd70bd444cea2a46df11ed4dffe2103..fa733d880e38990b66b702d8b4cbe211923ca7f5 100644 (file)
@@ -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});
index 838d711587c89a2d364715718c7f5bcde09c8965..d8ce2bf8482f39ca9b0b39ca94df8b97b186f910 100644 (file)
@@ -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};
 
index fa77fc16d2fd9611493eb6faa760139e22556d68..ca3b1a4a0b6fc3dac6ca8c6ff7846b2b7219e55a 100644 (file)
@@ -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 *);