Rewrite/enhance explicit locations completer, parse left->right
[binutils-gdb.git] / gdb / symtab.c
index b077369516e78a5a3e71f69f96cb1a1381b2133c..d4e107abf20fe9e8126cd452084d86c6b986c299 100644 (file)
@@ -4984,6 +4984,7 @@ add_symtab_completions (struct compunit_symtab *cust,
 void
 default_collect_symbol_completion_matches_break_on
   (completion_tracker &tracker,
+   complete_symbol_mode mode,
    const char *text, const char *word,
    const char *break_on, enum type_code code)
 {
@@ -5004,6 +5005,9 @@ default_collect_symbol_completion_matches_break_on
   int sym_text_len;
 
   /* Now look for the symbol we are supposed to complete on.  */
+  if (mode == complete_symbol_mode::LINESPEC)
+    sym_text = text;
+  else
   {
     const char *p;
     char quote_found;
@@ -5209,10 +5213,11 @@ default_collect_symbol_completion_matches_break_on
 
 void
 default_collect_symbol_completion_matches (completion_tracker &tracker,
+                                          complete_symbol_mode mode,
                                           const char *text, const char *word,
                                           enum type_code code)
 {
-  return default_collect_symbol_completion_matches_break_on (tracker,
+  return default_collect_symbol_completion_matches_break_on (tracker, mode,
                                                             text, word, "",
                                                             code);
 }
@@ -5222,9 +5227,10 @@ default_collect_symbol_completion_matches (completion_tracker &tracker,
 
 void
 collect_symbol_completion_matches (completion_tracker &tracker,
+                                  complete_symbol_mode mode,
                                   const char *text, const char *word)
 {
-  current_language->la_collect_symbol_completion_matches (tracker,
+  current_language->la_collect_symbol_completion_matches (tracker, mode,
                                                          text, word,
                                                          TYPE_CODE_UNDEF);
 }
@@ -5237,10 +5243,12 @@ collect_symbol_completion_matches_type (completion_tracker &tracker,
                                        const char *text, const char *word,
                                        enum type_code code)
 {
+  complete_symbol_mode mode = complete_symbol_mode::EXPRESSION;
+
   gdb_assert (code == TYPE_CODE_UNION
              || code == TYPE_CODE_STRUCT
              || code == TYPE_CODE_ENUM);
-  current_language->la_collect_symbol_completion_matches (tracker,
+  current_language->la_collect_symbol_completion_matches (tracker, mode,
                                                          text, word, code);
 }
 
@@ -5249,6 +5257,7 @@ collect_symbol_completion_matches_type (completion_tracker &tracker,
 
 void
 collect_file_symbol_completion_matches (completion_tracker &tracker,
+                                       complete_symbol_mode mode,
                                        const char *text, const char *word,
                                        const char *srcfile)
 {
@@ -5259,6 +5268,9 @@ collect_file_symbol_completion_matches (completion_tracker &tracker,
 
   /* Now look for the symbol we are supposed to complete on.
      FIXME: This should be language-specific.  */
+  if (mode == complete_symbol_mode::LINESPEC)
+    sym_text = text;
+  else
   {
     const char *p;
     char quote_found;