gdb: Convert language la_iterate_over_symbols field to a method
authorAndrew Burgess <andrew.burgess@embecosm.com>
Fri, 1 May 2020 21:42:21 +0000 (22:42 +0100)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Tue, 2 Jun 2020 12:53:10 +0000 (13:53 +0100)
This commit changes the language_data::la_iterate_over_symbols
function pointer member variable into a member function of
language_defn.

There should be no user visible changes after this commit.

gdb/ChangeLog:

* ada-lang.c (ada_add_all_symbols): Update comment.
(ada_iterate_over_symbols): Delete, move implementation to...
(ada_language::iterate_over_symbols): ...here, a new member
function, rewrite to use range based for loop.
(ada_language_data): Delete la_iterate_over_symbols initializer.
* c-lang.c (c_language_data): Likewise.
(cplus_language_data): Likewise.
(asm_language_data): Likewise.
(minimal_language_data): Likewise.
* d-lang.c (d_language_data): Likewise.
* f-lang.c (f_language_data): Likewise.
* go-lang.c (go_language_data): Likewise.
* language.c (unknown_language_data): Likewise.
(auto_language_data): Likewise.
* language.h (language_data): Delete la_iterate_over_symbols field.
(language_defn::iterate_over_symbols): New member function.
(LA_ITERATE_OVER_SYMBOLS): Update.
* linespec.c (iterate_over_all_matching_symtabs): Update.
* m2-lang.c (m2_language_data): Delete la_iterate_over_symbols
initializer.
* objc-lang.c (objc_language_data): Likewise.
* opencl-lang.c (opencl_language_data): Likewise.
* p-lang.c (pascal_language_data): Likewise.
* rust-lang.c (rust_language_data): Likewise.

14 files changed:
gdb/ChangeLog
gdb/ada-lang.c
gdb/c-lang.c
gdb/d-lang.c
gdb/f-lang.c
gdb/go-lang.c
gdb/language.c
gdb/language.h
gdb/linespec.c
gdb/m2-lang.c
gdb/objc-lang.c
gdb/opencl-lang.c
gdb/p-lang.c
gdb/rust-lang.c

index d10a0db9c04ff46e309a424717636feaf7c62c3b..34c55810852d725b5f76ced39b0791f51ecf7f77 100644 (file)
@@ -1,3 +1,30 @@
+2020-06-02  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+       * ada-lang.c (ada_add_all_symbols): Update comment.
+       (ada_iterate_over_symbols): Delete, move implementation to...
+       (ada_language::iterate_over_symbols): ...here, a new member
+       function, rewrite to use range based for loop.
+       (ada_language_data): Delete la_iterate_over_symbols initializer.
+       * c-lang.c (c_language_data): Likewise.
+       (cplus_language_data): Likewise.
+       (asm_language_data): Likewise.
+       (minimal_language_data): Likewise.
+       * d-lang.c (d_language_data): Likewise.
+       * f-lang.c (f_language_data): Likewise.
+       * go-lang.c (go_language_data): Likewise.
+       * language.c (unknown_language_data): Likewise.
+       (auto_language_data): Likewise.
+       * language.h (language_data): Delete la_iterate_over_symbols field.
+       (language_defn::iterate_over_symbols): New member function.
+       (LA_ITERATE_OVER_SYMBOLS): Update.
+       * linespec.c (iterate_over_all_matching_symtabs): Update.
+       * m2-lang.c (m2_language_data): Delete la_iterate_over_symbols
+       initializer.
+       * objc-lang.c (objc_language_data): Likewise.
+       * opencl-lang.c (opencl_language_data): Likewise.
+       * p-lang.c (pascal_language_data): Likewise.
+       * rust-lang.c (rust_language_data): Likewise.
+
 2020-06-02  Andrew Burgess  <andrew.burgess@embecosm.com>
 
        * ada-lang.c (ada_language_data): Delete
index 7d23fd5d12309ea7fe4572f2dce05f6328d7ce14..762c124a654dae0339a179e729ea6e815e7970be 100644 (file)
@@ -5681,7 +5681,7 @@ ada_add_all_symbols (struct obstack *obstackp,
       else
        {
          /* In the !full_search case we're are being called by
-            ada_iterate_over_symbols, and we don't want to search
+            iterate_over_symbols, and we don't want to search
             superblocks.  */
          ada_add_block_symbols (obstackp, block, lookup_name, domain, NULL);
        }
@@ -5782,28 +5782,6 @@ ada_lookup_symbol_list (const char *name, const struct block *block,
   return ada_lookup_symbol_list_worker (lookup_name, block, domain, results, 1);
 }
 
-/* Implementation of the la_iterate_over_symbols method.  */
-
-static bool
-ada_iterate_over_symbols
-  (const struct block *block, const lookup_name_info &name,
-   domain_enum domain,
-   gdb::function_view<symbol_found_callback_ftype> callback)
-{
-  int ndefs, i;
-  std::vector<struct block_symbol> results;
-
-  ndefs = ada_lookup_symbol_list_worker (name, block, domain, &results, 0);
-
-  for (i = 0; i < ndefs; ++i)
-    {
-      if (!callback (&results[i]))
-       return false;
-    }
-
-  return true;
-}
-
 /* The result is as for ada_lookup_symbol_list with FULL_SEARCH set
    to 1, but choosing the first symbol found if there are multiple
    choices.
@@ -13999,7 +13977,6 @@ extern const struct language_data ada_language_data =
   ada_collect_symbol_completion_matches,
   ada_watch_location_expression,
   ada_get_symbol_name_matcher, /* la_get_symbol_name_matcher */
-  ada_iterate_over_symbols,
   default_search_name_hash,
   &ada_varobj_ops,
   NULL,
@@ -14114,6 +14091,25 @@ public:
     lai->bool_type_symbol = NULL;
     lai->bool_type_default = builtin->builtin_bool;
   }
+
+  /* See language.h.  */
+
+  bool iterate_over_symbols
+       (const struct block *block, const lookup_name_info &name,
+        domain_enum domain,
+        gdb::function_view<symbol_found_callback_ftype> callback) const override
+  {
+    std::vector<struct block_symbol> results;
+
+    ada_lookup_symbol_list_worker (name, block, domain, &results, 0);
+    for (block_symbol &sym : results)
+      {
+       if (!callback (&sym))
+         return false;
+      }
+
+    return true;
+  }
 };
 
 /* Single instance of the Ada language class.  */
index aa1efa0d806481e98fe83774419538d97d75a9d9..bfd45f433c6303fdc470fb11060a7c7929538fe9 100644 (file)
@@ -922,7 +922,6 @@ extern const struct language_data c_language_data =
   default_collect_symbol_completion_matches,
   c_watch_location_expression,
   NULL,                                /* la_get_symbol_name_matcher */
-  iterate_over_symbols,
   default_search_name_hash,
   &c_varobj_ops,
   c_get_compile_context,
@@ -1022,7 +1021,6 @@ extern const struct language_data cplus_language_data =
   default_collect_symbol_completion_matches,
   c_watch_location_expression,
   cp_get_symbol_name_matcher,
-  iterate_over_symbols,
   cp_search_name_hash,
   &cplus_varobj_ops,
   cplus_get_compile_context,
@@ -1164,7 +1162,6 @@ extern const struct language_data asm_language_data =
   default_collect_symbol_completion_matches,
   c_watch_location_expression,
   NULL,                                /* la_get_symbol_name_matcher */
-  iterate_over_symbols,
   default_search_name_hash,
   &default_varobj_ops,
   NULL,
@@ -1235,7 +1232,6 @@ extern const struct language_data minimal_language_data =
   default_collect_symbol_completion_matches,
   c_watch_location_expression,
   NULL,                                /* la_get_symbol_name_matcher */
-  iterate_over_symbols,
   default_search_name_hash,
   &default_varobj_ops,
   NULL,
index 8c4ee44ac97f84bcdc70ccd83605618478ca203c..5732778021499799f41d9696cc69a84c89aadebc 100644 (file)
@@ -176,7 +176,6 @@ extern const struct language_data d_language_data =
   default_collect_symbol_completion_matches,
   c_watch_location_expression,
   NULL,                                /* la_get_symbol_name_matcher */
-  iterate_over_symbols,
   default_search_name_hash,
   &default_varobj_ops,
   NULL,
index 32435fa856a7b373d5c164845d2ffc302fcaeefe..ae559dee812bfab81c01fe2a0c62f7751bfb846c 100644 (file)
@@ -633,7 +633,6 @@ extern const struct language_data f_language_data =
   f_collect_symbol_completion_matches,
   c_watch_location_expression,
   cp_get_symbol_name_matcher,  /* la_get_symbol_name_matcher */
-  iterate_over_symbols,
   cp_search_name_hash,
   &default_varobj_ops,
   NULL,
index 22dd02f10be826f65e3df640737cb0dee8a51499..c596279012d477c8af0af457c56a7eef77910d42 100644 (file)
@@ -561,7 +561,6 @@ extern const struct language_data go_language_data =
   default_collect_symbol_completion_matches,
   c_watch_location_expression,
   NULL,                                /* la_get_symbol_name_matcher */
-  iterate_over_symbols,
   default_search_name_hash,
   &default_varobj_ops,
   NULL,
index 227f26bc878e62c50547c916ea4691a003c2d8c0..33e8b16b11ab4008bb14849b3d00f0d734dd4d1a 100644 (file)
@@ -838,7 +838,6 @@ extern const struct language_data unknown_language_data =
   default_collect_symbol_completion_matches,
   c_watch_location_expression,
   NULL,                                /* la_get_symbol_name_matcher */
-  iterate_over_symbols,
   default_search_name_hash,
   &default_varobj_ops,
   NULL,
@@ -905,7 +904,6 @@ extern const struct language_data auto_language_data =
   default_collect_symbol_completion_matches,
   c_watch_location_expression,
   NULL,                                /* la_get_symbol_name_matcher */
-  iterate_over_symbols,
   default_search_name_hash,
   &default_varobj_ops,
   NULL,
index 505600aa957d7b02bdf262c63885a30b0bba53fe..0880ced3bcde8fa0399baca52155fe501c424d7b 100644 (file)
@@ -384,24 +384,6 @@ struct language_data
     symbol_name_matcher_ftype *(*la_get_symbol_name_matcher)
       (const lookup_name_info &);
 
-    /* Find all symbols in the current program space matching NAME in
-       DOMAIN, according to this language's rules.
-
-       The search is done in BLOCK only.
-       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.  */
-    bool (*la_iterate_over_symbols)
-      (const struct block *block, const lookup_name_info &name,
-       domain_enum domain,
-       gdb::function_view<symbol_found_callback_ftype> callback);
-
     /* Hash the given symbol search name.  Use
        default_search_name_hash if no special treatment is
        required.  */
@@ -508,6 +490,27 @@ struct language_defn : language_data
     return basic_lookup_transparent_type (name);
   }
 
+  /* Find all symbols in the current program space matching NAME in
+     DOMAIN, according to this language's rules.
+
+     The search is done in BLOCK only.
+     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
+       (const struct block *block, const lookup_name_info &name,
+        domain_enum domain,
+        gdb::function_view<symbol_found_callback_ftype> callback) const
+  {
+    return ::iterate_over_symbols (block, name, domain, callback);
+  }
+
   /* List of all known languages.  */
   static const struct language_defn *languages[nr_languages];
 };
@@ -617,7 +620,7 @@ extern enum language set_language (enum language);
                                       options))
 
 #define LA_ITERATE_OVER_SYMBOLS(BLOCK, NAME, DOMAIN, CALLBACK) \
-  (current_language->la_iterate_over_symbols (BLOCK, NAME, DOMAIN, CALLBACK))
+  (current_language->iterate_over_symbols (BLOCK, NAME, DOMAIN, CALLBACK))
 
 /* Test a character to decide whether it can be printed in literal form
    or needs to be printed in another representation.  For example,
index c59c30e262e1f1e1e24d9041ab352fc974cc6671..ddca05b3dbf6d0419a2676fc147da5cce65c593e 100644 (file)
@@ -1168,7 +1168,7 @@ iterate_over_all_matching_symtabs
                       i++)
                    {
                      block = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symtab), i);
-                     state->language->la_iterate_over_symbols
+                     state->language->iterate_over_symbols
                        (block, lookup_name, name_domain,
                         [&] (block_symbol *bsym)
                         {
index 9ce6f2a9e6819bf37e0b39f3e21e553e9c310de6..c83f9ef4c1efb15229a32b47e94f87f008c553a0 100644 (file)
@@ -386,7 +386,6 @@ extern const struct language_data m2_language_data =
   default_collect_symbol_completion_matches,
   c_watch_location_expression,
   NULL,                                /* la_get_symbol_name_matcher */
-  iterate_over_symbols,
   default_search_name_hash,
   &default_varobj_ops,
   NULL,
index 040226c81d5a971a7f14f4d3bc741b8aca56bf64..6cf8bbbe091b96f9c9ba8c948a7defb7cfdc5115 100644 (file)
@@ -401,7 +401,6 @@ extern const struct language_data objc_language_data =
   default_collect_symbol_completion_matches,
   c_watch_location_expression,
   NULL,                                /* la_get_symbol_name_matcher */
-  iterate_over_symbols,
   default_search_name_hash,
   &default_varobj_ops,
   NULL,
index 1c41ffd82273f5a84d2d2d1a67ce1d6bcb0e5c97..a548fe60a746449cdca8f8559af421dfc434d50f 100644 (file)
@@ -1061,7 +1061,6 @@ extern const struct language_data opencl_language_data =
   default_collect_symbol_completion_matches,
   c_watch_location_expression,
   NULL,                                /* la_get_symbol_name_matcher */
-  iterate_over_symbols,
   default_search_name_hash,
   &default_varobj_ops,
   NULL,
index d2d8b5e9d16f7bb4e818573171b4134d4b89339e..7956d879997e38120cee8f55c5e66892828baee3 100644 (file)
@@ -416,7 +416,6 @@ extern const struct language_data pascal_language_data =
   default_collect_symbol_completion_matches,
   c_watch_location_expression,
   NULL,                                /* la_compare_symbol_for_completion */
-  iterate_over_symbols,
   default_search_name_hash,
   &default_varobj_ops,
   NULL,
index 65f2324b671e98999f917bc6ead0d9eb4a82ab3c..966aa14a69e0a8ff9f6c3dee51022d87844fb01d 100644 (file)
@@ -2093,7 +2093,6 @@ extern const struct language_data rust_language_data =
   default_collect_symbol_completion_matches,
   rust_watch_location_expression,
   NULL,                                /* la_get_symbol_name_matcher */
-  iterate_over_symbols,
   default_search_name_hash,
   &default_varobj_ops,
   NULL,