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:
Joel Brobecker 2012-01-26 04:20:36 +00:00
parent b8b196db1e
commit 74ccd7f58b
14 changed files with 86 additions and 35 deletions

View file

@ -136,6 +136,16 @@ struct language_arch_info
struct type *bool_type_default;
};
/* A pointer to a function expected to return nonzero if
SYMBOL_SEARCH_NAME matches the given LOOKUP_NAME.
SYMBOL_SEARCH_NAME should be a symbol's "search" name.
LOOKUP_NAME should be the name of an entity after it has been
transformed for lookup. */
typedef int (*symbol_name_match_p_ftype) (const char *symbol_search_name,
const char *lookup_name);
/* Structure tying together assorted information about a language. */
struct language_defn
@ -318,19 +328,14 @@ struct language_defn
void (*la_get_string) (struct value *value, gdb_byte **buffer, int *length,
struct type **chartype, const char **charset);
/* Compare two symbol names according to language rules. For
instance, in C++, we might want to ignore whitespaces in
the symbol name. Or some case-insensitive language might
want to ignore casing during the match.
/* Return a pointer to the function that should be used to match
a symbol name against LOOKUP_NAME. This is mostly for languages
such as Ada where the matching algorithm depends on LOOKUP_NAME.
Both STR1 and STR2 are expected to be demangled name, except
for Ada, where STR1 and STR2 are expected to be encoded names.
The latter is because searches are performed using the encoded
name in Ada.
The return value follows the same spirit as strcmp. */
int (*la_symbol_name_compare) (const char *str1, const char *str2);
This field may be NULL, in which case strcmp_iw will be used
to perform the matching. */
symbol_name_match_p_ftype (*la_get_symbol_name_match_p)
(const char *lookup_name);
/* Find all symbols in the current program space matching NAME in
DOMAIN, according to this language's rules.