Fix demangling of destructors, and fix a minor indentation problem.

This commit is contained in:
Michael Tiemann 1992-01-20 16:55:45 +00:00
parent f3139e9366
commit 0eb0a82097
3 changed files with 18 additions and 5 deletions

View File

@ -1,3 +1,7 @@
Mon Jan 20 08:54:00 1992 Michael Tiemann (tiemann at cygnus.com)
* cplus-dem.c (cplus_demangle): Correctly demangle destructors.
Sat Jan 18 17:17:45 1992 Stu Grossman (grossman at cygnus.com) Sat Jan 18 17:17:45 1992 Stu Grossman (grossman at cygnus.com)
* Makefile.in (HFILES): Add partial-stab.h. * Makefile.in (HFILES): Add partial-stab.h.

View File

@ -2461,7 +2461,7 @@ read_struct_type (pp, type)
if (nfn_fields) if (nfn_fields)
{ {
TYPE_FN_FIELDLISTS (type) = (struct fn_fieldlist *) TYPE_FN_FIELDLISTS (type) = (struct fn_fieldlist *)
obstack_alloc (symbol_obstack, obstack_alloc (symbol_obstack,
sizeof (struct fn_fieldlist) * nfn_fields); sizeof (struct fn_fieldlist) * nfn_fields);
TYPE_NFN_FIELDS (type) = nfn_fields; TYPE_NFN_FIELDS (type) = nfn_fields;

View File

@ -290,11 +290,20 @@ cplus_demangle (type, arg_mode)
/* destructor */ /* destructor */
if (type[0] == '_' && type[1] == CPLUS_MARKER && type[2] == '_') if (type[0] == '_' && type[1] == CPLUS_MARKER && type[2] == '_')
{ {
int n = (strlen (type) - 3)*2 + 3 + 2 + 1; int n;
char *tem = (char *) xmalloc (n); char *tem;
strcpy (tem, type + 3);
type += 3; /* Get past _$_ at front. */
while (isdigit (*type))
/* If there are digits at the front, it's because
of new 2.0 name mangling. Just skip them. */
type++;
n = strlen (type)*2 + 3 + 2 + 1;
tem = (char *) xmalloc (n);
strcpy (tem, type);
strcat (tem, "::~"); strcat (tem, "::~");
strcat (tem, type + 3); strcat (tem, type);
if (print_arg_types) if (print_arg_types)
strcat (tem, "()"); strcat (tem, "()");
return tem; return tem;