mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-05-31 10:09:16 +08:00
gdb: Convert language la_collect_symbol_completion_matches field to a method
This commit changes the language_data::la_collect_symbol_completion_matches 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_collect_symbol_completion_matches): Rename to ada_language::collect_symbol_completion_matches. (ada_language_data): Delete la_collect_symbol_completion_matches initializer. (ada_language::collect_symbol_completion_matches): New member function, implementation from ada_collect_symbol_completion_matches. * c-lang.c (c_language_data): Delete la_collect_symbol_completion_matches initializer. (cplus_language_data): Likewise. (asm_language_data): Likewise. (minimal_language_data): Likewise. * d-lang.c (d_language_data): Likewise. * f-lang.c (f_collect_symbol_completion_matches): Rename to f_language::collect_symbol_completion_matches. (f_language_data): Delete la_collect_symbol_completion_matches initializer. (f_language::collect_symbol_completion_matches) New member function, implementation from f_collect_symbol_completion_matches. * go-lang.c (go_language_data): Delete la_collect_symbol_completion_matches initializer. * language.c (unknown_language_data): Likewise. (auto_language_data): Likewise. * language.h (language_data): Delete la_collect_symbol_completion_matches field. (language_defn::collect_symbol_completion_matches): New member function. * m2-lang.c (m2_language_data): Delete la_collect_symbol_completion_matches 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. * symtab.c (default_collect_symbol_completion_matches): Delete. (collect_symbol_completion_matches): Update call to collect_symbol_completion_matches. (collect_symbol_completion_matches_type): Likewise. * symtab.h (default_collect_symbol_completion_matches): Delete declaration.
This commit is contained in:
255
gdb/ada-lang.c
255
gdb/ada-lang.c
@ -6272,134 +6272,6 @@ ada_lookup_name_info::matches
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Add the list of possible symbol names completing TEXT to TRACKER.
|
||||
WORD is the entire command on which completion is made. */
|
||||
|
||||
static void
|
||||
ada_collect_symbol_completion_matches (completion_tracker &tracker,
|
||||
complete_symbol_mode mode,
|
||||
symbol_name_match_type name_match_type,
|
||||
const char *text, const char *word,
|
||||
enum type_code code)
|
||||
{
|
||||
struct symbol *sym;
|
||||
const struct block *b, *surrounding_static_block = 0;
|
||||
struct block_iterator iter;
|
||||
|
||||
gdb_assert (code == TYPE_CODE_UNDEF);
|
||||
|
||||
lookup_name_info lookup_name (text, name_match_type, true);
|
||||
|
||||
/* First, look at the partial symtab symbols. */
|
||||
expand_symtabs_matching (NULL,
|
||||
lookup_name,
|
||||
NULL,
|
||||
NULL,
|
||||
ALL_DOMAIN);
|
||||
|
||||
/* At this point scan through the misc symbol vectors and add each
|
||||
symbol you find to the list. Eventually we want to ignore
|
||||
anything that isn't a text symbol (everything else will be
|
||||
handled by the psymtab code above). */
|
||||
|
||||
for (objfile *objfile : current_program_space->objfiles ())
|
||||
{
|
||||
for (minimal_symbol *msymbol : objfile->msymbols ())
|
||||
{
|
||||
QUIT;
|
||||
|
||||
if (completion_skip_symbol (mode, msymbol))
|
||||
continue;
|
||||
|
||||
language symbol_language = msymbol->language ();
|
||||
|
||||
/* Ada minimal symbols won't have their language set to Ada. If
|
||||
we let completion_list_add_name compare using the
|
||||
default/C-like matcher, then when completing e.g., symbols in a
|
||||
package named "pck", we'd match internal Ada symbols like
|
||||
"pckS", which are invalid in an Ada expression, unless you wrap
|
||||
them in '<' '>' to request a verbatim match.
|
||||
|
||||
Unfortunately, some Ada encoded names successfully demangle as
|
||||
C++ symbols (using an old mangling scheme), such as "name__2Xn"
|
||||
-> "Xn::name(void)" and thus some Ada minimal symbols end up
|
||||
with the wrong language set. Paper over that issue here. */
|
||||
if (symbol_language == language_auto
|
||||
|| symbol_language == language_cplus)
|
||||
symbol_language = language_ada;
|
||||
|
||||
completion_list_add_name (tracker,
|
||||
symbol_language,
|
||||
msymbol->linkage_name (),
|
||||
lookup_name, text, word);
|
||||
}
|
||||
}
|
||||
|
||||
/* Search upwards from currently selected frame (so that we can
|
||||
complete on local vars. */
|
||||
|
||||
for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
|
||||
{
|
||||
if (!BLOCK_SUPERBLOCK (b))
|
||||
surrounding_static_block = b; /* For elmin of dups */
|
||||
|
||||
ALL_BLOCK_SYMBOLS (b, iter, sym)
|
||||
{
|
||||
if (completion_skip_symbol (mode, sym))
|
||||
continue;
|
||||
|
||||
completion_list_add_name (tracker,
|
||||
sym->language (),
|
||||
sym->linkage_name (),
|
||||
lookup_name, text, word);
|
||||
}
|
||||
}
|
||||
|
||||
/* Go through the symtabs and check the externs and statics for
|
||||
symbols which match. */
|
||||
|
||||
for (objfile *objfile : current_program_space->objfiles ())
|
||||
{
|
||||
for (compunit_symtab *s : objfile->compunits ())
|
||||
{
|
||||
QUIT;
|
||||
b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), GLOBAL_BLOCK);
|
||||
ALL_BLOCK_SYMBOLS (b, iter, sym)
|
||||
{
|
||||
if (completion_skip_symbol (mode, sym))
|
||||
continue;
|
||||
|
||||
completion_list_add_name (tracker,
|
||||
sym->language (),
|
||||
sym->linkage_name (),
|
||||
lookup_name, text, word);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (objfile *objfile : current_program_space->objfiles ())
|
||||
{
|
||||
for (compunit_symtab *s : objfile->compunits ())
|
||||
{
|
||||
QUIT;
|
||||
b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), STATIC_BLOCK);
|
||||
/* Don't do this block twice. */
|
||||
if (b == surrounding_static_block)
|
||||
continue;
|
||||
ALL_BLOCK_SYMBOLS (b, iter, sym)
|
||||
{
|
||||
if (completion_skip_symbol (mode, sym))
|
||||
continue;
|
||||
|
||||
completion_list_add_name (tracker,
|
||||
sym->language (),
|
||||
sym->linkage_name (),
|
||||
lookup_name, text, word);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Field Access */
|
||||
|
||||
/* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
|
||||
@ -13911,7 +13783,6 @@ extern const struct language_data ada_language_data =
|
||||
ada_op_print_tab, /* expression operators for printing */
|
||||
0, /* c-style arrays */
|
||||
1, /* String lower bound */
|
||||
ada_collect_symbol_completion_matches,
|
||||
ada_watch_location_expression,
|
||||
&ada_varobj_ops,
|
||||
ada_is_string_type,
|
||||
@ -14105,6 +13976,132 @@ public:
|
||||
return ada_completer_word_break_characters;
|
||||
}
|
||||
|
||||
/* See language.h. */
|
||||
|
||||
void collect_symbol_completion_matches (completion_tracker &tracker,
|
||||
complete_symbol_mode mode,
|
||||
symbol_name_match_type name_match_type,
|
||||
const char *text, const char *word,
|
||||
enum type_code code) const override
|
||||
{
|
||||
struct symbol *sym;
|
||||
const struct block *b, *surrounding_static_block = 0;
|
||||
struct block_iterator iter;
|
||||
|
||||
gdb_assert (code == TYPE_CODE_UNDEF);
|
||||
|
||||
lookup_name_info lookup_name (text, name_match_type, true);
|
||||
|
||||
/* First, look at the partial symtab symbols. */
|
||||
expand_symtabs_matching (NULL,
|
||||
lookup_name,
|
||||
NULL,
|
||||
NULL,
|
||||
ALL_DOMAIN);
|
||||
|
||||
/* At this point scan through the misc symbol vectors and add each
|
||||
symbol you find to the list. Eventually we want to ignore
|
||||
anything that isn't a text symbol (everything else will be
|
||||
handled by the psymtab code above). */
|
||||
|
||||
for (objfile *objfile : current_program_space->objfiles ())
|
||||
{
|
||||
for (minimal_symbol *msymbol : objfile->msymbols ())
|
||||
{
|
||||
QUIT;
|
||||
|
||||
if (completion_skip_symbol (mode, msymbol))
|
||||
continue;
|
||||
|
||||
language symbol_language = msymbol->language ();
|
||||
|
||||
/* Ada minimal symbols won't have their language set to Ada. If
|
||||
we let completion_list_add_name compare using the
|
||||
default/C-like matcher, then when completing e.g., symbols in a
|
||||
package named "pck", we'd match internal Ada symbols like
|
||||
"pckS", which are invalid in an Ada expression, unless you wrap
|
||||
them in '<' '>' to request a verbatim match.
|
||||
|
||||
Unfortunately, some Ada encoded names successfully demangle as
|
||||
C++ symbols (using an old mangling scheme), such as "name__2Xn"
|
||||
-> "Xn::name(void)" and thus some Ada minimal symbols end up
|
||||
with the wrong language set. Paper over that issue here. */
|
||||
if (symbol_language == language_auto
|
||||
|| symbol_language == language_cplus)
|
||||
symbol_language = language_ada;
|
||||
|
||||
completion_list_add_name (tracker,
|
||||
symbol_language,
|
||||
msymbol->linkage_name (),
|
||||
lookup_name, text, word);
|
||||
}
|
||||
}
|
||||
|
||||
/* Search upwards from currently selected frame (so that we can
|
||||
complete on local vars. */
|
||||
|
||||
for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
|
||||
{
|
||||
if (!BLOCK_SUPERBLOCK (b))
|
||||
surrounding_static_block = b; /* For elmin of dups */
|
||||
|
||||
ALL_BLOCK_SYMBOLS (b, iter, sym)
|
||||
{
|
||||
if (completion_skip_symbol (mode, sym))
|
||||
continue;
|
||||
|
||||
completion_list_add_name (tracker,
|
||||
sym->language (),
|
||||
sym->linkage_name (),
|
||||
lookup_name, text, word);
|
||||
}
|
||||
}
|
||||
|
||||
/* Go through the symtabs and check the externs and statics for
|
||||
symbols which match. */
|
||||
|
||||
for (objfile *objfile : current_program_space->objfiles ())
|
||||
{
|
||||
for (compunit_symtab *s : objfile->compunits ())
|
||||
{
|
||||
QUIT;
|
||||
b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), GLOBAL_BLOCK);
|
||||
ALL_BLOCK_SYMBOLS (b, iter, sym)
|
||||
{
|
||||
if (completion_skip_symbol (mode, sym))
|
||||
continue;
|
||||
|
||||
completion_list_add_name (tracker,
|
||||
sym->language (),
|
||||
sym->linkage_name (),
|
||||
lookup_name, text, word);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (objfile *objfile : current_program_space->objfiles ())
|
||||
{
|
||||
for (compunit_symtab *s : objfile->compunits ())
|
||||
{
|
||||
QUIT;
|
||||
b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), STATIC_BLOCK);
|
||||
/* Don't do this block twice. */
|
||||
if (b == surrounding_static_block)
|
||||
continue;
|
||||
ALL_BLOCK_SYMBOLS (b, iter, sym)
|
||||
{
|
||||
if (completion_skip_symbol (mode, sym))
|
||||
continue;
|
||||
|
||||
completion_list_add_name (tracker,
|
||||
sym->language (),
|
||||
sym->linkage_name (),
|
||||
lookup_name, text, word);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected:
|
||||
/* See language.h. */
|
||||
|
||||
|
Reference in New Issue
Block a user