|
|
|
@ -3037,7 +3037,6 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type, |
|
|
|
{ |
|
|
|
int nfn_fields = 0; |
|
|
|
int length = 0; |
|
|
|
int skip_method; |
|
|
|
/* Total number of member functions defined in this class. If the class
|
|
|
|
defines two `f' functions, and one `g' function, then this will have |
|
|
|
the value 3. */ |
|
|
|
@ -3077,36 +3076,6 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type, |
|
|
|
look_ahead_type = NULL; |
|
|
|
length = 0; |
|
|
|
|
|
|
|
skip_method = 0; |
|
|
|
if (p - *pp == strlen ("__base_ctor") |
|
|
|
&& strncmp (*pp, "__base_ctor", strlen ("__base_ctor")) == 0) |
|
|
|
skip_method = 1; |
|
|
|
else if (p - *pp == strlen ("__base_dtor") |
|
|
|
&& strncmp (*pp, "__base_dtor", strlen ("__base_dtor")) == 0) |
|
|
|
skip_method = 1; |
|
|
|
else if (p - *pp == strlen ("__deleting_dtor") |
|
|
|
&& strncmp (*pp, "__deleting_dtor", |
|
|
|
strlen ("__deleting_dtor")) == 0) |
|
|
|
skip_method = 1; |
|
|
|
|
|
|
|
if (skip_method) |
|
|
|
{ |
|
|
|
/* Skip past '::'. */ |
|
|
|
*pp = p + 2; |
|
|
|
/* Read the type. */ |
|
|
|
read_type (pp, objfile); |
|
|
|
/* Skip past the colon, mangled name, semicolon, flags, and final
|
|
|
|
semicolon. */ |
|
|
|
while (**pp != ';') |
|
|
|
(*pp) ++; |
|
|
|
(*pp) ++; |
|
|
|
while (**pp != ';') |
|
|
|
(*pp) ++; |
|
|
|
(*pp) ++; |
|
|
|
|
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
new_fnlist = (struct next_fnfieldlist *) |
|
|
|
xmalloc (sizeof (struct next_fnfieldlist)); |
|
|
|
make_cleanup (xfree, new_fnlist); |
|
|
|
@ -3332,7 +3301,18 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type, |
|
|
|
while (**pp != ';' && **pp != '\0'); |
|
|
|
|
|
|
|
(*pp)++; |
|
|
|
STABS_CONTINUE (pp, objfile); |
|
|
|
|
|
|
|
/* Skip GCC 3.X member functions which are duplicates of the callable
|
|
|
|
constructor/destructor. */ |
|
|
|
if (strcmp (main_fn_name, "__base_ctor") == 0 |
|
|
|
|| strcmp (main_fn_name, "__base_dtor") == 0 |
|
|
|
|| strcmp (main_fn_name, "__deleting_dtor") == 0) |
|
|
|
{ |
|
|
|
xfree (main_fn_name); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
new_fnlist->fn_fieldlist.fn_fields = (struct fn_field *) |
|
|
|
obstack_alloc (&objfile->type_obstack, |
|
|
|
sizeof (struct fn_field) * length); |
|
|
|
@ -3348,7 +3328,7 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type, |
|
|
|
fip->fnlist = new_fnlist; |
|
|
|
nfn_fields++; |
|
|
|
total_length += length; |
|
|
|
STABS_CONTINUE (pp, objfile); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (nfn_fields) |
|
|
|
|