[PATCHv2 07/13] gdb: Convert language la_iterate_over_symbols field to a method
Andrew Burgess
andrew.burgess@embecosm.com
Fri May 15 15:06:46 GMT 2020
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.
---
gdb/ChangeLog | 27 +++++++++++++++++++++++++++
gdb/ada-lang.c | 44 ++++++++++++++++++++------------------------
gdb/c-lang.c | 4 ----
gdb/d-lang.c | 1 -
gdb/f-lang.c | 1 -
gdb/go-lang.c | 1 -
gdb/language.c | 2 --
gdb/language.h | 41 ++++++++++++++++++++++-------------------
gdb/linespec.c | 2 +-
gdb/m2-lang.c | 1 -
gdb/objc-lang.c | 1 -
gdb/opencl-lang.c | 1 -
gdb/p-lang.c | 1 -
gdb/rust-lang.c | 1 -
14 files changed, 70 insertions(+), 58 deletions(-)
diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index e2d9aa7ab3a..ede6f90b422 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -5686,7 +5686,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);
}
@@ -5787,28 +5787,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.
@@ -13996,7 +13974,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,
@@ -14108,6 +14085,25 @@ class ada_language : public language_defn
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. */
diff --git a/gdb/c-lang.c b/gdb/c-lang.c
index 2eead3d8305..f6fd3b3d287 100644
--- a/gdb/c-lang.c
+++ b/gdb/c-lang.c
@@ -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,
diff --git a/gdb/d-lang.c b/gdb/d-lang.c
index 8c4ee44ac97..57327780214 100644
--- a/gdb/d-lang.c
+++ b/gdb/d-lang.c
@@ -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,
diff --git a/gdb/f-lang.c b/gdb/f-lang.c
index 32435fa856a..ae559dee812 100644
--- a/gdb/f-lang.c
+++ b/gdb/f-lang.c
@@ -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,
diff --git a/gdb/go-lang.c b/gdb/go-lang.c
index edd4e7f167e..7e0bd5d0934 100644
--- a/gdb/go-lang.c
+++ b/gdb/go-lang.c
@@ -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,
diff --git a/gdb/language.c b/gdb/language.c
index d06cf4ac71a..7670db7d3ce 100644
--- a/gdb/language.c
+++ b/gdb/language.c
@@ -836,7 +836,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,
@@ -903,7 +902,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,
diff --git a/gdb/language.h b/gdb/language.h
index a5ca641194f..73d7f7a3edb 100644
--- a/gdb/language.h
+++ b/gdb/language.h
@@ -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. */
@@ -507,6 +489,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];
};
@@ -615,7 +618,7 @@ extern enum language set_language (enum language);
(current_language->print_array_index(index_value, stream, 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,
diff --git a/gdb/linespec.c b/gdb/linespec.c
index 1e70cdb0dca..d891e05ab7d 100644
--- a/gdb/linespec.c
+++ b/gdb/linespec.c
@@ -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)
{
diff --git a/gdb/m2-lang.c b/gdb/m2-lang.c
index 71e26869424..128d236f880 100644
--- a/gdb/m2-lang.c
+++ b/gdb/m2-lang.c
@@ -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,
diff --git a/gdb/objc-lang.c b/gdb/objc-lang.c
index 040226c81d5..6cf8bbbe091 100644
--- a/gdb/objc-lang.c
+++ b/gdb/objc-lang.c
@@ -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,
diff --git a/gdb/opencl-lang.c b/gdb/opencl-lang.c
index 55baac56b8c..ebb07eb5c00 100644
--- a/gdb/opencl-lang.c
+++ b/gdb/opencl-lang.c
@@ -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,
diff --git a/gdb/p-lang.c b/gdb/p-lang.c
index 287c01f2009..52d202786c0 100644
--- a/gdb/p-lang.c
+++ b/gdb/p-lang.c
@@ -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,
diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c
index e12a941afe2..2268ac3daf7 100644
--- a/gdb/rust-lang.c
+++ b/gdb/rust-lang.c
@@ -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,
--
2.25.4
More information about the Gdb-patches
mailing list