(demangle_template): Fix handling of address args.
authorJason Merrill <merrill@gnu.org>
Thu, 19 Sep 1996 00:47:43 +0000 (00:47 +0000)
committerJason Merrill <merrill@gnu.org>
Thu, 19 Sep 1996 00:47:43 +0000 (00:47 +0000)
        (gnu_special): Handle type_info stuff.

From-SVN: r12746

gcc/cplus-dem.c

index 3ac168089312317265038683b262dc44e9e7eb05..90969a9faed493f7a6d509b19e7e232ed6f31fe2 100644 (file)
@@ -1055,7 +1055,8 @@ demangle_template (work, mangled, tname, trawname)
            }
          else if (is_pointer)
            {
-             if (!get_count (mangled, &symbol_len))
+             symbol_len = consume_count (mangled);
+             if (symbol_len == 0)
                {
                  success = 0;
                  break;
@@ -1596,6 +1597,29 @@ gnu_special (work, mangled, declp)
          success = 0;
        }
     }
+  else if (strncmp (*mangled, "__t", 3) == 0
+          && ((*mangled)[3] == 'i' || (*mangled)[3] == 'f'))
+    {
+      p = (*mangled)[3] == 'i' ? " type_info node" : " type_info function";
+      (*mangled) += 4;
+      switch (**mangled)
+       {
+         case 'Q':
+           success = demangle_qualified (work, mangled, declp, 0, 1);
+           break;
+         case 't':
+           success = demangle_template (work, mangled, declp, 0);
+           break;
+         default:
+           n = consume_count (mangled);
+           string_appendn (declp, *mangled, n);
+           (*mangled) += n;
+       }
+      if (success && **mangled != '\0')
+       success = 0;
+      if (success)
+       string_append (declp, p);
+    }
   else
     {
       success = 0;