Fix demangling of destructors, and fix a minor indentation problem.
authorMichael Tiemann <tiemann@cygnus>
Mon, 20 Jan 1992 16:55:45 +0000 (16:55 +0000)
committerMichael Tiemann <tiemann@cygnus>
Mon, 20 Jan 1992 16:55:45 +0000 (16:55 +0000)
gdb/ChangeLog
gdb/buildsym.c
gdb/cplus-dem.c

index ae583edcbfc8f14ae2084d6a0da8c7c7bbecfb06..12ce372ed0faeaffc0a0652440c6a96cf8e99407 100644 (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)
 
        * Makefile.in (HFILES):  Add partial-stab.h.
index 37baacd094d734206a3ddc242a54ea8e420886b3..ae1d9f93e66583adc7cc7baeb22f10ba523defd9 100644 (file)
@@ -2461,7 +2461,7 @@ read_struct_type (pp, type)
 
   if (nfn_fields)
     {
-       TYPE_FN_FIELDLISTS (type) = (struct fn_fieldlist *)
+      TYPE_FN_FIELDLISTS (type) = (struct fn_fieldlist *)
            obstack_alloc (symbol_obstack,
                           sizeof (struct fn_fieldlist) * nfn_fields);
       TYPE_NFN_FIELDS (type) = nfn_fields;
index e58a9552e7153c0d3d177f83974c42bcb249f874..626b756f7f49729b2f8d7859edefd5f883a17c18 100644 (file)
@@ -290,11 +290,20 @@ cplus_demangle (type, arg_mode)
       /* destructor */
       if (type[0] == '_' && type[1] == CPLUS_MARKER && type[2] == '_')
        {
-         int n = (strlen (type) - 3)*2 + 3 + 2 + 1;
-         char *tem = (char *) xmalloc (n);
-         strcpy (tem, type + 3);
+         int n;
+         char *tem;
+
+         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, type + 3);
+         strcat (tem, type);
          if (print_arg_types)
            strcat (tem, "()");
          return tem;