2003-03-03 David Carlton <carlton@math.stanford.edu>
authorDavid Carlton <carlton@bactrian.org>
Mon, 3 Mar 2003 17:20:24 +0000 (17:20 +0000)
committerDavid Carlton <carlton@bactrian.org>
Mon, 3 Mar 2003 17:20:24 +0000 (17:20 +0000)
* linespec.c (find_method): Extract code into collect_methods.
(collect_methods): New.

gdb/ChangeLog
gdb/linespec.c

index d6de92eedb5738d4f4cf01cf180165a9d5782ebe..41c49883114f468a53afd58d068d365c05582256 100644 (file)
@@ -1,3 +1,8 @@
+2003-03-03  David Carlton  <carlton@math.stanford.edu>
+
+       * linespec.c (find_method): Extract code into collect_methods.
+       (collect_methods): New.
+
 2003-03-02  Mark Kettenis  <kettenis@gnu.org>
 
        * i386bsd-tdep.c (i386bsd_sigcontext_addr): Use get_next_frame and
index 088c2e63d8138cc5223998620f61f4a77578e866..2738b1e1decad03d4abc752b1f8de3db741657ae 100644 (file)
@@ -64,6 +64,9 @@ static struct symtabs_and_lines find_method (int funfirstline,
                                             struct type *t,
                                             struct symbol *sym_class);
 
+static int collect_methods (char *copy, struct type *t,
+                           struct symbol **sym_arr);
+
 static NORETURN void cplusplus_error (const char *name,
                                      const char *fmt, ...)
      ATTR_NORETURN ATTR_FORMAT (printf, 2, 3);
@@ -1135,29 +1138,15 @@ find_method (int funfirstline, char ***canonical, char *saved_arg,
 {
   struct symtabs_and_lines values;
   struct symbol *sym = 0;
-  int i1 = 0;  /*  Counter for the symbol array.  */
+  int i1;      /*  Counter for the symbol array.  */
   struct symbol **sym_arr =  alloca (total_number_of_methods (t)
                                     * sizeof (struct symbol *));
 
-  if (destructor_name_p (copy, t))
-    {
-      /* Destructors are a special case.  */
-      int m_index, f_index;
+  /* Find all methods with a matching name, and put them in
+     sym_arr.  */
 
-      if (get_destructor_fn_field (t, &m_index, &f_index))
-       {
-         struct fn_field *f = TYPE_FN_FIELDLIST1 (t, m_index);
+  i1 = collect_methods (copy, t, sym_arr);
 
-         sym_arr[i1] =
-           lookup_symbol (TYPE_FN_FIELD_PHYSNAME (f, f_index),
-                          NULL, VAR_NAMESPACE, (int *) NULL,
-                          (struct symtab **) NULL);
-         if (sym_arr[i1])
-           i1++;
-       }
-    }
-  else
-    i1 = find_methods (t, copy, sym_arr);
   if (i1 == 1)
     {
       /* There is exactly one field with that name.  */
@@ -1206,6 +1195,38 @@ find_method (int funfirstline, char ***canonical, char *saved_arg,
     }
 }
 
+/* Find all methods named COPY in the class whose type is T, and put
+   them in SYM_ARR.  Return the number of methods found.  */
+
+static int
+collect_methods (char *copy, struct type *t,
+                struct symbol **sym_arr)
+{
+  int i1 = 0;  /*  Counter for the symbol array.  */
+
+  if (destructor_name_p (copy, t))
+    {
+      /* Destructors are a special case.  */
+      int m_index, f_index;
+
+      if (get_destructor_fn_field (t, &m_index, &f_index))
+       {
+         struct fn_field *f = TYPE_FN_FIELDLIST1 (t, m_index);
+
+         sym_arr[i1] =
+           lookup_symbol (TYPE_FN_FIELD_PHYSNAME (f, f_index),
+                          NULL, VAR_NAMESPACE, (int *) NULL,
+                          (struct symtab **) NULL);
+         if (sym_arr[i1])
+           i1++;
+       }
+    }
+  else
+    i1 = find_methods (t, copy, sym_arr);
+
+  return i1;
+}
+
 \f
 
 /* Return the symtab associated to the filename given by the substring