Ada: allow unqualified function names in linespecs
This is the meat, where we replace the old la_symbol_name_compare language method with the new ada_get_symbol_name_match_p. It fixes the problem when trying to insert a breakpoint on "+". gdb/ChangeLog: * language.h (symbol_name_match_p_ftype): New typedef. (struct language_defn): Replace field la_symbol_name_compare by la_get_symbol_name_match_p. * ada-lang.c (ada_get_symbol_name_match_p): New function. (ada_language_defn): Use it. * linespec.c (struct symbol_matcher_data): New type. (iterate_name_matcher): Rewrite. (iterate_over_all_matching_symtabs): Pass a pointer to a symbol_matcher_data struct to expand_symtabs_matching instead of just the lookup name. * c-lang.c, d-lang.c, jv-lang.c, m2-lang.c, objc-lang.c, opencl-lang.c, p-lang.c, language.c: Delete field la_symbol_name_compare, and replace by NULL for new field la_get_symbol_name_match_p. * symfile.h (struct quick_symbol_functions): Update comment.
This commit is contained in:
parent
b8b196db1e
commit
74ccd7f58b
14 changed files with 86 additions and 35 deletions
|
@ -321,6 +321,17 @@ cplusplus_error (const char *name, const char *fmt, ...)
|
|||
throw_error (NOT_FOUND_ERROR, "%s", message);
|
||||
}
|
||||
|
||||
/* Some data for the expand_symtabs_matching callback. */
|
||||
|
||||
struct symbol_matcher_data
|
||||
{
|
||||
/* The lookup name against which symbol name should be compared. */
|
||||
const char *lookup_name;
|
||||
|
||||
/* The routine to be used for comparison. */
|
||||
symbol_name_match_p_ftype symbol_name_match_p;
|
||||
};
|
||||
|
||||
/* A helper for iterate_over_all_matching_symtabs that is passed as a
|
||||
callback to the expand_symtabs_matching method. */
|
||||
|
||||
|
@ -328,9 +339,9 @@ static int
|
|||
iterate_name_matcher (const struct language_defn *language,
|
||||
const char *name, void *d)
|
||||
{
|
||||
const char **dname = d;
|
||||
const struct symbol_matcher_data *data = d;
|
||||
|
||||
if (language->la_symbol_name_compare (name, *dname) == 0)
|
||||
if (data->symbol_name_match_p (name, data->lookup_name))
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
@ -349,6 +360,13 @@ iterate_over_all_matching_symtabs (const char *name,
|
|||
{
|
||||
struct objfile *objfile;
|
||||
struct program_space *pspace;
|
||||
struct symbol_matcher_data matcher_data;
|
||||
|
||||
matcher_data.lookup_name = name;
|
||||
matcher_data.symbol_name_match_p =
|
||||
current_language->la_get_symbol_name_match_p != NULL
|
||||
? current_language->la_get_symbol_name_match_p (name)
|
||||
: strcmp_iw;
|
||||
|
||||
ALL_PSPACES (pspace)
|
||||
{
|
||||
|
@ -367,7 +385,7 @@ iterate_over_all_matching_symtabs (const char *name,
|
|||
objfile->sf->qf->expand_symtabs_matching (objfile, NULL,
|
||||
iterate_name_matcher,
|
||||
ALL_DOMAIN,
|
||||
&name);
|
||||
&matcher_data);
|
||||
|
||||
ALL_OBJFILE_SYMTABS (objfile, symtab)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue