diff options
author | Sami Wagiaalla <swagiaal@redhat.com> | 2010-10-12 20:58:17 +0000 |
---|---|---|
committer | Sami Wagiaalla <swagiaal@redhat.com> | 2010-10-12 20:58:17 +0000 |
commit | 0526b37ab5b8f8ba89f8ea4d4d86522fc4bd807c (patch) | |
tree | fc7c6c34f0b33af883deca3990f190b585609e23 | |
parent | bb32aa18f665d94c71dbc358f1a39835c86796bf (diff) | |
download | gdb-0526b37ab5b8f8ba89f8ea4d4d86522fc4bd807c.zip gdb-0526b37ab5b8f8ba89f8ea4d4d86522fc4bd807c.tar.gz gdb-0526b37ab5b8f8ba89f8ea4d4d86522fc4bd807c.tar.bz2 |
Eliminate 'is_ancestor' redundant code.
2010-10-12 Sami Wagiaalla <swagiaal@redhat.com>
* gdbtypes.c (do_is_ancestor): New function.
(is_ancestor): Use do_is_ancestor.
(is_public_ancestor): Use do_is_ancestor.
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/gdbtypes.c | 48 |
2 files changed, 29 insertions, 25 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index a0765cd..5938dad 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2010-10-12 Sami Wagiaalla <swagiaal@redhat.com> + + * gdbtypes.c (do_is_ancestor): New function. + (is_ancestor): Use do_is_ancestor. + (is_public_ancestor): Use do_is_ancestor. + 2010-10-12 Pierre Muller <muller@ics.u-strasbg.fr> * ser-go32.c (struct dos_ops): Add missing fdopen field. diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index af28ca1..b4f3b77 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -1868,14 +1868,13 @@ class_types_same_p (const struct type *a, const struct type *b) && !strcmp (TYPE_NAME (a), TYPE_NAME (b)))); } -/* Check whether BASE is an ancestor or base class or DCLASS - Return 1 if so, and 0 if not. - Note: callers may want to check for identity of the types before - calling this function -- identical types are considered to satisfy - the ancestor relationship even if they're identical. */ +/* Check whether BASE is an ancestor or base class of DCLASS + Return 1 if so, and 0 if not. If PUBLIC is 1 then only public + ancestors are considered, and the function returns 1 only if + BASE is a public ancestor of DCLASS. */ -int -is_ancestor (struct type *base, struct type *dclass) +static int +do_is_ancestor (struct type *base, struct type *dclass, int public) { int i; @@ -1887,36 +1886,35 @@ is_ancestor (struct type *base, struct type *dclass) for (i = 0; i < TYPE_N_BASECLASSES (dclass); i++) { - if (is_ancestor (base, TYPE_BASECLASS (dclass, i))) + if (public && ! BASETYPE_VIA_PUBLIC (dclass, i)) + continue; + + if (do_is_ancestor (base, TYPE_BASECLASS (dclass, i), public)) return 1; } return 0; } +/* Check whether BASE is an ancestor or base class or DCLASS + Return 1 if so, and 0 if not. + Note: If BASE and DCLASS are of the same type, this function + will return 1. So for some class A, is_ancestor (A, A) will + return 1. */ + +int +is_ancestor (struct type *base, struct type *dclass) +{ + return do_is_ancestor (base, dclass, 0); +} + /* Like is_ancestor, but only returns true when BASE is a public ancestor of DCLASS. */ int is_public_ancestor (struct type *base, struct type *dclass) { - int i; - - CHECK_TYPEDEF (base); - CHECK_TYPEDEF (dclass); - - if (class_types_same_p (base, dclass)) - return 1; - - for (i = 0; i < TYPE_N_BASECLASSES (dclass); ++i) - { - if (! BASETYPE_VIA_PUBLIC (dclass, i)) - continue; - if (is_public_ancestor (base, TYPE_BASECLASS (dclass, i))) - return 1; - } - - return 0; + return do_is_ancestor (base, dclass, 1); } /* A helper function for is_unique_ancestor. */ |