Fix up some formatting.
[deliverable/binutils-gdb.git] / gdb / completer.c
index b1b0cf3a94c2bb146fefc9f4236dcc988330417d..43fcf7a8405944c406c38497eac3c3281cc7e65a 100644 (file)
@@ -105,14 +105,14 @@ readline_line_completion_function (const char *text, int matches)
 /* This can be used for functions which don't want to complete on symbols
    but don't want to complete on anything else either.  */
 char **
-noop_completer (char *text, char *prefix)
+noop_completer (struct cmd_list_element *ignore, char *text, char *prefix)
 {
   return NULL;
 }
 
 /* Complete on filenames.  */
 char **
-filename_completer (char *text, char *word)
+filename_completer (struct cmd_list_element *ignore, char *text, char *word)
 {
   int subsequent_name;
   char **return_val;
@@ -195,7 +195,7 @@ filename_completer (char *text, char *word)
 
    This is intended to be used in commands that set breakpoints etc.  */
 char **
-location_completer (char *text, char *word)
+location_completer (struct cmd_list_element *ignore, char *text, char *word)
 {
   int n_syms = 0, n_files = 0;
   char ** fn_list = NULL;
@@ -339,7 +339,7 @@ location_completer (char *text, char *word)
 }
 
 /* Helper for expression_completer which recursively counts the number
-   of named fields in a structure or union type.  */
+   of named fields and methods in a structure or union type.  */
 static int
 count_struct_fields (struct type *type)
 {
@@ -353,17 +353,26 @@ count_struct_fields (struct type *type)
       else if (TYPE_FIELD_NAME (type, i))
        ++result;
     }
+
+  for (i = TYPE_NFN_FIELDS (type) - 1; i >= 0; --i)
+    {
+      if (TYPE_FN_FIELDLIST_NAME (type, i))
+       ++result;
+    }
+
   return result;
 }
 
-/* Helper for expression_completer which recursively adds field names
-   from TYPE, a struct or union type, to the array OUTPUT.  This
-   function assumes that OUTPUT is correctly-sized.  */
+/* Helper for expression_completer which recursively adds field and
+   method names from TYPE, a struct or union type, to the array
+   OUTPUT.  This function assumes that OUTPUT is correctly-sized.  */
 static void
 add_struct_fields (struct type *type, int *nextp, char **output,
                   char *fieldname, int namelen)
 {
   int i;
+  int computed_type_name = 0;
+  char *type_name = NULL;
 
   CHECK_TYPEDEF (type);
   for (i = 0; i < TYPE_NFIELDS (type); ++i)
@@ -378,13 +387,32 @@ add_struct_fields (struct type *type, int *nextp, char **output,
          ++*nextp;
        }
     }
+
+  for (i = TYPE_NFN_FIELDS (type) - 1; i >= 0; --i)
+    {
+      char *name = TYPE_FN_FIELDLIST_NAME (type, i);
+      if (name && ! strncmp (name, fieldname, namelen))
+       {
+         if (!computed_type_name)
+           {
+             type_name = type_name_no_tag (type);
+             computed_type_name = 1;
+           }
+         /* Omit constructors from the completion list.  */
+         if (type_name && strcmp (type_name, name))
+           {
+             output[*nextp] = xstrdup (name);
+             ++*nextp;
+           }
+       }
+    }
 }
 
 /* Complete on expressions.  Often this means completing on symbol
    names, but some language parsers also have support for completing
    field names.  */
 char **
-expression_completer (char *text, char *word)
+expression_completer (struct cmd_list_element *ignore, char *text, char *word)
 {
   struct type *type;
   char *fieldname, *p;
@@ -428,7 +456,7 @@ expression_completer (char *text, char *word)
     ;
 
   /* Not ideal but it is what we used to do before... */
-  return location_completer (p, word);
+  return location_completer (ignore, p, word);
 }
 
 /* Here are some useful test cases for completion.  FIXME: These should
@@ -623,7 +651,7 @@ complete_line_internal (const char *text, char *line_buffer, int point,
                           p--)
                        ;
                    }
-                 list = (*c->completer) (p, word);
+                 list = (*c->completer) (c, p, word);
                }
            }
          else
@@ -691,7 +719,7 @@ complete_line_internal (const char *text, char *line_buffer, int point,
                       p--)
                    ;
                }
-             list = (*c->completer) (p, word);
+             list = (*c->completer) (c, p, word);
            }
        }
     }
@@ -709,7 +737,7 @@ complete_line (const char *text, char *line_buffer, int point)
 
 /* Complete on command names.  Used by "help".  */
 char **
-command_completer (char *text, char *word)
+command_completer (struct cmd_list_element *ignore, char *text, char *word)
 {
   return complete_line_internal (word, text, strlen (text), 1);
 }
This page took 0.025002 seconds and 4 git commands to generate.