aboutsummaryrefslogtreecommitdiff
path: root/gdb/language.c
diff options
context:
space:
mode:
authorAndrew Burgess <andrew.burgess@embecosm.com>2020-06-01 11:46:54 +0100
committerAndrew Burgess <andrew.burgess@embecosm.com>2020-06-17 09:25:09 +0100
commitc9debfb97e052c32cf0308157cae529ce2059f48 (patch)
treeb1aa4df0a0b049c766e6b29eac377655ed77adbd /gdb/language.c
parent9a49ad8c522a1ce83645d477bf6ced574c3bf651 (diff)
downloadbinutils-c9debfb97e052c32cf0308157cae529ce2059f48.zip
binutils-c9debfb97e052c32cf0308157cae529ce2059f48.tar.gz
binutils-c9debfb97e052c32cf0308157cae529ce2059f48.tar.bz2
gdb: Convert language la_get_symbol_name_matcher field to a method
This commit changes the language_data::la_get_symbol_name_matcher function pointer member variable into a member function of language_defn. There should be no user visible changes after this commit. Before this commit access to the la_get_symbol_name_matcher function pointer was through the get_symbol_name_matcher function, which looked something like this (is pseudo-code): <return-type> get_symbol_name_matcher (language_defn *lang, <other args>) { if (current_language == ada) current_language->la_get_symbol_name_matcher (<other args>); else lang->la_get_symbol_name_matcher (<other args>); } In this commit I moved the get_symbol_name_matcher as a non-virtual function in the language_defn base class, I then add a new virtual method that is only used from within get_symbol_name_matcher, this can then be overridden by specific languages as needed. So we now have: class language_defn { <return-type> get_symbol_name_matcher (<args>) { if (current_language == ada) return current_language->get_symbol_name_matcher_inner (<args>); else return this->get_symbol_name_matcher_inner (<args>); } virtual <return-type> get_symbol_name_matcher_inner (<args>) { .... } } gdb/ChangeLog: * ada-lang.c (ada_get_symbol_name_matcher): Update header comment. (ada_language_data): Delete la_get_symbol_name_matcher initializer. (language_defn::get_symbol_name_matcher_inner): New member function. * c-lang.c (c_language_data): Delete la_get_symbol_name_matcher initializer. (cplus_language_data): Likewise. (cplus_language::get_symbol_name_matcher_inner): New member function. (asm_language_data): Delete la_get_symbol_name_matcher initializer. (minimal_language_data): Likewise. * cp-support.h (cp_get_symbol_name_matcher): Update header comment. * d-lang.c (d_language_data): Delete la_get_symbol_name_matcher initializer. * dictionary.c (iter_match_first_hashed): Update call to get_symbol_name_matcher. (iter_match_next_hashed): Likewise. (iter_match_next_linear): Likewise. * dwarf2/read.c (dw2_expand_symtabs_matching_symbol): Likewise. * f-lang.c (f_language_data): Delete la_get_symbol_name_matcher initializer. (f_language::get_symbol_name_matcher_inner): New member function. * go-lang.c (go_language_data): Delete la_get_symbol_name_matcher initializer. * language.c (default_symbol_name_matcher): Update header comment, make static. (language_defn::get_symbol_name_matcher): New definition. (language_defn::get_symbol_name_matcher_inner): Likewise. (get_symbol_name_matcher): Delete. (unknown_language_data): Delete la_get_symbol_name_matcher initializer. (auto_language_data): Likewise. * language.h (language_data): Delete la_get_symbol_name_matcher field. (language_defn::get_symbol_name_matcher): New member function. (language_defn::get_symbol_name_matcher_inner): Likewise. (default_symbol_name_matcher): Delete declaration. * linespec.c (find_methods): Update call to get_symbol_name_matcher. * m2-lang.c (m2_language_data): Delete la_get_symbol_name_matcher initializer. * minsyms.c (lookup_minimal_symbol): Update call to get_symbol_name_matcher. (iterate_over_minimal_symbols): Likewise. * objc-lang.c (objc_language_data): Delete la_get_symbol_name_matcher initializer. * opencl-lang.c (opencl_language_data): Likewise. * p-lang.c (pascal_language_data): Likewise. * psymtab.c (psymbol_name_matches): Update call to get_symbol_name_matcher. * rust-lang.c (rust_language_data): Delete la_get_symbol_name_matcher initializer. * symtab.c (symbol_matches_search_name): Update call to get_symbol_name_matcher. (compare_symbol_name): Likewise.
Diffstat (limited to 'gdb/language.c')
-rw-r--r--gdb/language.c50
1 files changed, 28 insertions, 22 deletions
diff --git a/gdb/language.c b/gdb/language.c
index 2b2584f..363481b 100644
--- a/gdb/language.c
+++ b/gdb/language.c
@@ -622,9 +622,10 @@ language_defn::print_array_index (struct type *index_type, LONGEST index,
fprintf_filtered (stream, "] = ");
}
-/* See language.h. */
+/* The default implementation of the get_symbol_name_matcher_inner method
+ from the language_defn class. Matches with strncmp_iw. */
-bool
+static bool
default_symbol_name_matcher (const char *symbol_search_name,
const lookup_name_info &lookup_name,
completion_match_result *comp_match_res)
@@ -649,6 +650,31 @@ default_symbol_name_matcher (const char *symbol_search_name,
/* See language.h. */
+symbol_name_matcher_ftype *
+language_defn::get_symbol_name_matcher
+ (const lookup_name_info &lookup_name) const
+{
+ /* If currently in Ada mode, and the lookup name is wrapped in
+ '<...>', hijack all symbol name comparisons using the Ada
+ matcher, which handles the verbatim matching. */
+ if (current_language->la_language == language_ada
+ && lookup_name.ada ().verbatim_p ())
+ return current_language->get_symbol_name_matcher_inner (lookup_name);
+
+ return this->get_symbol_name_matcher_inner (lookup_name);
+}
+
+/* See language.h. */
+
+symbol_name_matcher_ftype *
+language_defn::get_symbol_name_matcher_inner
+ (const lookup_name_info &lookup_name) const
+{
+ return default_symbol_name_matcher;
+}
+
+/* See language.h. */
+
bool
default_is_string_type_p (struct type *type)
{
@@ -661,24 +687,6 @@ default_is_string_type_p (struct type *type)
return (type->code () == TYPE_CODE_STRING);
}
-/* See language.h. */
-
-symbol_name_matcher_ftype *
-get_symbol_name_matcher (const language_defn *lang,
- const lookup_name_info &lookup_name)
-{
- /* If currently in Ada mode, and the lookup name is wrapped in
- '<...>', hijack all symbol name comparisons using the Ada
- matcher, which handles the verbatim matching. */
- if (current_language->la_language == language_ada
- && lookup_name.ada ().verbatim_p ())
- return current_language->la_get_symbol_name_matcher (lookup_name);
-
- if (lang->la_get_symbol_name_matcher != nullptr)
- return lang->la_get_symbol_name_matcher (lookup_name);
- return default_symbol_name_matcher;
-}
-
/* Define the language that is no language. */
static int
@@ -774,7 +782,6 @@ extern const struct language_data unknown_language_data =
default_word_break_characters,
default_collect_symbol_completion_matches,
c_watch_location_expression,
- NULL, /* la_get_symbol_name_matcher */
&default_varobj_ops,
default_is_string_type_p,
"{...}" /* la_struct_too_deep_ellipsis */
@@ -848,7 +855,6 @@ extern const struct language_data auto_language_data =
default_word_break_characters,
default_collect_symbol_completion_matches,
c_watch_location_expression,
- NULL, /* la_get_symbol_name_matcher */
&default_varobj_ops,
default_is_string_type_p,
"{...}" /* la_struct_too_deep_ellipsis */