aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog42
-rw-r--r--gdb/ada-lang.c255
-rw-r--r--gdb/c-lang.c4
-rw-r--r--gdb/d-lang.c1
-rw-r--r--gdb/f-lang.c33
-rw-r--r--gdb/go-lang.c1
-rw-r--r--gdb/language.c2
-rw-r--r--gdb/language.h31
-rw-r--r--gdb/m2-lang.c1
-rw-r--r--gdb/objc-lang.c1
-rw-r--r--gdb/opencl-lang.c1
-rw-r--r--gdb/p-lang.c1
-rw-r--r--gdb/rust-lang.c1
-rw-r--r--gdb/symtab.c27
-rw-r--r--gdb/symtab.h7
15 files changed, 210 insertions, 198 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 18c608b..52cfc4c 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,47 @@
2020-06-17 Andrew Burgess <andrew.burgess@embecosm.com>
+ * 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.
+
+2020-06-17 Andrew Burgess <andrew.burgess@embecosm.com>
+
* ada-lang.c (ada_get_gdb_completer_word_break_characters): Delete.
(ada_language_data): Delete la_word_break_characters initializer.
(ada_language::word_break_characters): New member function.
diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index 137f4a9..306cf3a 100644
--- a/gdb/ada-lang.c
+++ b/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. */
diff --git a/gdb/c-lang.c b/gdb/c-lang.c
index 79c4839..3d1116b 100644
--- a/gdb/c-lang.c
+++ b/gdb/c-lang.c
@@ -914,7 +914,6 @@ extern const struct language_data c_language_data =
c_op_print_tab, /* expression operators for printing */
1, /* c-style arrays */
0, /* String lower bound */
- default_collect_symbol_completion_matches,
c_watch_location_expression,
&c_varobj_ops,
c_is_string_type_p,
@@ -1027,7 +1026,6 @@ extern const struct language_data cplus_language_data =
c_op_print_tab, /* expression operators for printing */
1, /* c-style arrays */
0, /* String lower bound */
- default_collect_symbol_completion_matches,
c_watch_location_expression,
&cplus_varobj_ops,
c_is_string_type_p,
@@ -1228,7 +1226,6 @@ extern const struct language_data asm_language_data =
c_op_print_tab, /* expression operators for printing */
1, /* c-style arrays */
0, /* String lower bound */
- default_collect_symbol_completion_matches,
c_watch_location_expression,
&default_varobj_ops,
c_is_string_type_p,
@@ -1296,7 +1293,6 @@ extern const struct language_data minimal_language_data =
c_op_print_tab, /* expression operators for printing */
1, /* c-style arrays */
0, /* String lower bound */
- default_collect_symbol_completion_matches,
c_watch_location_expression,
&default_varobj_ops,
c_is_string_type_p,
diff --git a/gdb/d-lang.c b/gdb/d-lang.c
index 56feda1..67c82e4 100644
--- a/gdb/d-lang.c
+++ b/gdb/d-lang.c
@@ -157,7 +157,6 @@ extern const struct language_data d_language_data =
d_op_print_tab, /* Expression operators for printing. */
1, /* C-style arrays. */
0, /* String lower bound. */
- default_collect_symbol_completion_matches,
c_watch_location_expression,
&default_varobj_ops,
c_is_string_type_p,
diff --git a/gdb/f-lang.c b/gdb/f-lang.c
index 27495cf..0540ab2 100644
--- a/gdb/f-lang.c
+++ b/gdb/f-lang.c
@@ -165,21 +165,6 @@ enum f_primitive_types {
nr_f_primitive_types
};
-/* Consider the modules separator :: as a valid symbol name character
- class. */
-
-static void
-f_collect_symbol_completion_matches (completion_tracker &tracker,
- complete_symbol_mode mode,
- symbol_name_match_type compare_name,
- const char *text, const char *word,
- enum type_code code)
-{
- default_collect_symbol_completion_matches_break_on (tracker, mode,
- compare_name,
- text, word, ":", code);
-}
-
/* Special expression evaluation cases for Fortran. */
static struct value *
@@ -593,7 +578,6 @@ extern const struct language_data f_language_data =
f_op_print_tab, /* expression operators for printing */
0, /* arrays are first-class (not c-style) */
1, /* String lower bound */
- f_collect_symbol_completion_matches,
c_watch_location_expression,
&default_varobj_ops,
f_is_string_type_p,
@@ -698,6 +682,23 @@ public:
return retval;
}
+
+ /* 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
+ {
+ /* Consider the modules separator :: as a valid symbol name character
+ class. */
+ default_collect_symbol_completion_matches_break_on (tracker, mode,
+ name_match_type,
+ text, word, ":",
+ code);
+ }
+
protected:
/* See language.h. */
diff --git a/gdb/go-lang.c b/gdb/go-lang.c
index 1b3372a..c060ad5 100644
--- a/gdb/go-lang.c
+++ b/gdb/go-lang.c
@@ -542,7 +542,6 @@ extern const struct language_data go_language_data =
go_op_print_tab, /* Expression operators for printing. */
1, /* C-style arrays. */
0, /* String lower bound. */
- default_collect_symbol_completion_matches,
c_watch_location_expression,
&default_varobj_ops,
go_is_string_type_p,
diff --git a/gdb/language.c b/gdb/language.c
index 167a68c..f4e99fc 100644
--- a/gdb/language.c
+++ b/gdb/language.c
@@ -779,7 +779,6 @@ extern const struct language_data unknown_language_data =
unk_op_print_tab, /* expression operators for printing */
1, /* c-style arrays */
0, /* String lower bound */
- default_collect_symbol_completion_matches,
c_watch_location_expression,
&default_varobj_ops,
default_is_string_type_p,
@@ -851,7 +850,6 @@ extern const struct language_data auto_language_data =
unk_op_print_tab, /* expression operators for printing */
1, /* c-style arrays */
0, /* String lower bound */
- default_collect_symbol_completion_matches,
c_watch_location_expression,
&default_varobj_ops,
default_is_string_type_p,
diff --git a/gdb/language.h b/gdb/language.h
index 8c6f7e3..5872db3 100644
--- a/gdb/language.h
+++ b/gdb/language.h
@@ -319,19 +319,6 @@ struct language_data
/* Index to use for extracting the first element of a string. */
char string_lower_bound;
- /* Add to the completion tracker all symbols which are possible
- completions for TEXT. WORD is the entire command on which the
- completion is being made. If CODE is TYPE_CODE_UNDEF, then all
- symbols should be examined; otherwise, only STRUCT_DOMAIN
- symbols whose type has a code of CODE should be matched. */
- void (*la_collect_symbol_completion_matches)
- (completion_tracker &tracker,
- complete_symbol_mode mode,
- symbol_name_match_type match_type,
- const char *text,
- const char *word,
- enum type_code code);
-
/* Return an expression that can be used for a location
watchpoint. TYPE is a pointer type that points to the memory
to watch, and ADDR is the address of the watched memory. */
@@ -535,6 +522,24 @@ struct language_defn : language_data
return default_word_break_characters ();
}
+ /* Add to the completion tracker all symbols which are possible
+ completions for TEXT. WORD is the entire command on which the
+ completion is being made. If CODE is TYPE_CODE_UNDEF, then all
+ symbols should be examined; otherwise, only STRUCT_DOMAIN symbols
+ whose type has a code of CODE should be matched. */
+
+ virtual 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
+ {
+ return default_collect_symbol_completion_matches_break_on
+ (tracker, mode, name_match_type, text, word, "", code);
+ }
+
/* List of all known languages. */
static const struct language_defn *languages[nr_languages];
diff --git a/gdb/m2-lang.c b/gdb/m2-lang.c
index 331ad5a..d21a5c9 100644
--- a/gdb/m2-lang.c
+++ b/gdb/m2-lang.c
@@ -376,7 +376,6 @@ extern const struct language_data m2_language_data =
m2_op_print_tab, /* expression operators for printing */
0, /* arrays are first-class (not c-style) */
0, /* String lower bound */
- default_collect_symbol_completion_matches,
c_watch_location_expression,
&default_varobj_ops,
m2_is_string_type_p,
diff --git a/gdb/objc-lang.c b/gdb/objc-lang.c
index 3bd7189..5f9e9710 100644
--- a/gdb/objc-lang.c
+++ b/gdb/objc-lang.c
@@ -351,7 +351,6 @@ extern const struct language_data objc_language_data =
objc_op_print_tab, /* Expression operators for printing */
1, /* C-style arrays */
0, /* String lower bound */
- default_collect_symbol_completion_matches,
c_watch_location_expression,
&default_varobj_ops,
c_is_string_type_p,
diff --git a/gdb/opencl-lang.c b/gdb/opencl-lang.c
index 3f0fb1f..d93ce0b 100644
--- a/gdb/opencl-lang.c
+++ b/gdb/opencl-lang.c
@@ -1030,7 +1030,6 @@ extern const struct language_data opencl_language_data =
c_op_print_tab, /* expression operators for printing */
1, /* c-style arrays */
0, /* String lower bound */
- default_collect_symbol_completion_matches,
c_watch_location_expression,
&default_varobj_ops,
c_is_string_type_p,
diff --git a/gdb/p-lang.c b/gdb/p-lang.c
index 22ed912..f94f4c5 100644
--- a/gdb/p-lang.c
+++ b/gdb/p-lang.c
@@ -407,7 +407,6 @@ extern const struct language_data pascal_language_data =
pascal_op_print_tab, /* expression operators for printing */
1, /* c-style arrays */
0, /* String lower bound */
- default_collect_symbol_completion_matches,
c_watch_location_expression,
&default_varobj_ops,
pascal_is_string_type_p,
diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c
index 53d1ee2..47fc3db 100644
--- a/gdb/rust-lang.c
+++ b/gdb/rust-lang.c
@@ -2062,7 +2062,6 @@ extern const struct language_data rust_language_data =
c_op_print_tab, /* expression operators for printing */
1, /* c-style arrays */
0, /* String lower bound */
- default_collect_symbol_completion_matches,
rust_watch_location_expression,
&default_varobj_ops,
rust_is_string_type_p,
diff --git a/gdb/symtab.c b/gdb/symtab.c
index ec0d94b..b0e22ee 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -5806,19 +5806,6 @@ default_collect_symbol_completion_matches_break_on
}
}
-void
-default_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)
-{
- return default_collect_symbol_completion_matches_break_on (tracker, mode,
- name_match_type,
- text, word, "",
- code);
-}
-
/* Collect all symbols (regardless of class) which begin by matching
TEXT. */
@@ -5828,10 +5815,10 @@ collect_symbol_completion_matches (completion_tracker &tracker,
symbol_name_match_type name_match_type,
const char *text, const char *word)
{
- current_language->la_collect_symbol_completion_matches (tracker, mode,
- name_match_type,
- text, word,
- TYPE_CODE_UNDEF);
+ current_language->collect_symbol_completion_matches (tracker, mode,
+ name_match_type,
+ text, word,
+ TYPE_CODE_UNDEF);
}
/* Like collect_symbol_completion_matches, but only collect
@@ -5848,9 +5835,9 @@ collect_symbol_completion_matches_type (completion_tracker &tracker,
gdb_assert (code == TYPE_CODE_UNION
|| code == TYPE_CODE_STRUCT
|| code == TYPE_CODE_ENUM);
- current_language->la_collect_symbol_completion_matches (tracker, mode,
- name_match_type,
- text, word, code);
+ current_language->collect_symbol_completion_matches (tracker, mode,
+ name_match_type,
+ text, word, code);
}
/* Like collect_symbol_completion_matches, but collects a list of
diff --git a/gdb/symtab.h b/gdb/symtab.h
index 9972e81..bf02828 100644
--- a/gdb/symtab.h
+++ b/gdb/symtab.h
@@ -1952,13 +1952,6 @@ extern void default_collect_symbol_completion_matches_break_on
symbol_name_match_type name_match_type,
const char *text, const char *word, const char *break_on,
enum type_code code);
-extern void default_collect_symbol_completion_matches
- (completion_tracker &tracker,
- complete_symbol_mode,
- symbol_name_match_type name_match_type,
- const char *,
- const char *,
- enum type_code);
extern void collect_symbol_completion_matches
(completion_tracker &tracker,
complete_symbol_mode mode,