2007-08-17 Michael Snyder <msnyder@access-company.com>
authorMichael Snyder <msnyder@vmware.com>
Fri, 17 Aug 2007 23:12:47 +0000 (23:12 +0000)
committerMichael Snyder <msnyder@vmware.com>
Fri, 17 Aug 2007 23:12:47 +0000 (23:12 +0000)
* gdbtypes.h (virtual_base_list): Remove export decl.
* gdbtypes.c (virtual_base_list): Make static.  Not called outside.
(virtual_base_index): Memory leak.
(virtual_base_index_skip_primaries): Ditto.

gdb/ChangeLog
gdb/gdbtypes.c
gdb/gdbtypes.h

index db010325518eaa2b67e731ec5ac3d9739ac06632..908a3c8727ac3293dfb6416fcf6f1f86fd231e05 100644 (file)
@@ -1,3 +1,10 @@
+2007-08-17  Michael Snyder  <msnyder@access-company.com>
+
+       * gdbtypes.h (virtual_base_list): Remove export decl.
+       * gdbtypes.c (virtual_base_list): Make static.  Not called outside.
+       (virtual_base_index): Memory leak.
+       (virtual_base_index_skip_primaries): Ditto.
+
 2007-08-17  Maxim Grigoriev  <maxim2405@gmail.com>
 
        * xtensa-tdep.c (ARG_NOF, ARG_1ST, PS_WOE, PS_EXC, C0_MAXOPDS)
index 672be70fb0b489903e84236c9f969d340a94220a..64964e97d2d5d3374301a13cf6e3a93e395d53b3 100644 (file)
@@ -2024,7 +2024,7 @@ virtual_base_list_aux (struct type *dclass)
    This routine merely hands off the argument to virtual_base_list_aux()
    and then copies the result into an array to save space.  */
 
-struct type **
+static struct type **
 virtual_base_list (struct type *dclass)
 {
   struct vbase *tmp_vbase;
@@ -2112,7 +2112,6 @@ virtual_base_list_length_skip_primaries (struct type *dclass)
   return i;
 }
 
-
 /* Return the index (position) of type BASE, which is a virtual base
    class of DCLASS, in the latter's virtual base list.  A return of -1
    indicates "not found" or a problem.  */
@@ -2120,27 +2119,24 @@ virtual_base_list_length_skip_primaries (struct type *dclass)
 int
 virtual_base_index (struct type *base, struct type *dclass)
 {
-  struct type *vbase;
+  struct type *vbase, **vbase_list;
   int i;
 
   if ((TYPE_CODE (dclass) != TYPE_CODE_CLASS) 
       || (TYPE_CODE (base) != TYPE_CODE_CLASS))
     return -1;
 
-  i = 0;
-  vbase = virtual_base_list (dclass)[0];
-  while (vbase)
-    {
-      if (vbase == base)
-       break;
-      vbase = virtual_base_list (dclass)[++i];
-    }
+  vbase_list = virtual_base_list (dclass);
+  for (i = 0, vbase = vbase_list[0];
+       vbase != NULL;
+       vbase = vbase_list[++i])
+    if (vbase == base)
+      break;
 
+  xfree (vbase_list);
   return vbase ? i : -1;
 }
 
-
-
 /* Return the index (position) of type BASE, which is a virtual base
    class of DCLASS, in the latter's virtual base list.  Skip over all
    bases that may appear in the virtual base list of the primary base
@@ -2151,7 +2147,7 @@ int
 virtual_base_index_skip_primaries (struct type *base, 
                                   struct type *dclass)
 {
-  struct type *vbase;
+  struct type *vbase, **vbase_list;
   int i, j;
   struct type *primary;
 
@@ -2161,19 +2157,18 @@ virtual_base_index_skip_primaries (struct type *base,
 
   primary = TYPE_RUNTIME_PTR (dclass) ? TYPE_PRIMARY_BASE (dclass) : NULL;
 
-  j = -1;
-  i = 0;
-  vbase = virtual_base_list (dclass)[0];
-  while (vbase)
+  vbase_list = virtual_base_list (dclass);
+  for (i = 0, j = -1, vbase = vbase_list[0];
+       vbase != NULL;
+       vbase = vbase_list[++i])
     {
       if (!primary 
          || (virtual_base_index_skip_primaries (vbase, primary) < 0))
        j++;
       if (vbase == base)
        break;
-      vbase = virtual_base_list (dclass)[++i];
     }
-
+  xfree (vbase_list);
   return vbase ? j : -1;
 }
 
index 8d60894fc413e66d92ebf1ef5668320c0491b48a..c397c3204c638a48a95ac3a19ddf7ce6aa83680b 100644 (file)
@@ -1346,8 +1346,6 @@ extern int has_vtable (struct type *);
 
 extern struct type *primary_base_class (struct type *);
 
-extern struct type **virtual_base_list (struct type *);
-
 extern int virtual_base_list_length (struct type *);
 extern int virtual_base_list_length_skip_primaries (struct type *);