Commit 391cdef0 by Mark Mitchell Committed by Mark Mitchell

cplus-dem.c (demangle_template_value_parm): Handle pointers-to-members.

	* cplus-dem.c (demangle_template_value_parm): Handle
	pointers-to-members.
	(do_type): Handle template parameters as qualifiers.

From-SVN: r26350
parent c45df9c1
1999-04-11 Mark Mitchell <mark@codesourcery.com>
* cplus-dem.c (demangle_template_value_parm): Handle
pointers-to-members.
(do_type): Handle template parameters as qualifiers.
1999-04-01 Jim Blandy <jimb@zwingli.cygnus.com> 1999-04-01 Jim Blandy <jimb@zwingli.cygnus.com>
* cplus-dem.c: Attempt to handle overflows in counts with some * cplus-dem.c: Attempt to handle overflows in counts with some
......
...@@ -1505,36 +1505,43 @@ demangle_template_value_parm (work, mangled, s, tk) ...@@ -1505,36 +1505,43 @@ demangle_template_value_parm (work, mangled, s, tk)
} }
else if (tk == tk_pointer || tk == tk_reference) else if (tk == tk_pointer || tk == tk_reference)
{ {
int symbol_len = consume_count (mangled); if (**mangled == 'Q')
if (symbol_len == -1) success = demangle_qualified (work, mangled, s,
return -1; /*isfuncname=*/0,
if (symbol_len == 0) /*append=*/1);
string_appendn (s, "0", 1);
else else
{ {
char *p = xmalloc (symbol_len + 1), *q; int symbol_len = consume_count (mangled);
strncpy (p, *mangled, symbol_len); if (symbol_len == -1)
p [symbol_len] = '\0'; return -1;
/* We use cplus_demangle here, rather than if (symbol_len == 0)
internal_cplus_demangle, because the name of the entity string_appendn (s, "0", 1);
mangled here does not make use of any of the squangling else
or type-code information we have built up thus far; it is
mangled independently. */
q = cplus_demangle (p, work->options);
if (tk == tk_pointer)
string_appendn (s, "&", 1);
/* FIXME: Pointer-to-member constants should get a
qualifying class name here. */
if (q)
{ {
string_append (s, q); char *p = xmalloc (symbol_len + 1), *q;
free (q); strncpy (p, *mangled, symbol_len);
p [symbol_len] = '\0';
/* We use cplus_demangle here, rather than
internal_cplus_demangle, because the name of the entity
mangled here does not make use of any of the squangling
or type-code information we have built up thus far; it is
mangled independently. */
q = cplus_demangle (p, work->options);
if (tk == tk_pointer)
string_appendn (s, "&", 1);
/* FIXME: Pointer-to-member constants should get a
qualifying class name here. */
if (q)
{
string_append (s, q);
free (q);
}
else
string_append (s, p);
free (p);
} }
else *mangled += symbol_len;
string_append (s, p);
free (p);
} }
*mangled += symbol_len;
} }
return success; return success;
...@@ -3040,11 +3047,6 @@ do_type (work, mangled, result) ...@@ -3040,11 +3047,6 @@ do_type (work, mangled, result)
member = **mangled == 'M'; member = **mangled == 'M';
(*mangled)++; (*mangled)++;
if (!isdigit ((unsigned char)**mangled) && **mangled != 't')
{
success = 0;
break;
}
string_append (&decl, ")"); string_append (&decl, ")");
string_prepend (&decl, SCOPE_STRING (work)); string_prepend (&decl, SCOPE_STRING (work));
...@@ -3060,7 +3062,13 @@ do_type (work, mangled, result) ...@@ -3060,7 +3062,13 @@ do_type (work, mangled, result)
string_prependn (&decl, *mangled, n); string_prependn (&decl, *mangled, n);
*mangled += n; *mangled += n;
} }
else else if (**mangled == 'X' || **mangled == 'Y')
{
string temp;
do_type (work, mangled, &temp);
string_prepends (&decl, &temp);
}
else if (**mangled == 't')
{ {
string temp; string temp;
string_init (&temp); string_init (&temp);
...@@ -3074,6 +3082,12 @@ do_type (work, mangled, result) ...@@ -3074,6 +3082,12 @@ do_type (work, mangled, result)
else else
break; break;
} }
else
{
success = 0;
break;
}
string_prepend (&decl, "("); string_prepend (&decl, "(");
if (member) if (member)
{ {
......
...@@ -2466,3 +2466,7 @@ basic_string<char,string_char_traits<char>,allocator>::unLink(void) ...@@ -2466,3 +2466,7 @@ basic_string<char,string_char_traits<char>,allocator>::unLink(void)
_Utf390_1__1_9223372036854775807__9223372036854775 _Utf390_1__1_9223372036854775807__9223372036854775
_Utf390_1__1_9223372036854775807__9223372036854775 _Utf390_1__1_9223372036854775807__9223372036854775
#
--format=gnu
call__H1Z4Test_RX01_t1C2ZX01PMX01FPX01i_vQ2X016output
C<Test, Test::output> call<Test>(Test &)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment