mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-30 05:31:39 +00:00
winedump: Correctly unmangle qualified pointer to function/method.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
This commit is contained in:
parent
ecfe99af15
commit
d45cbca378
|
@ -887,14 +887,22 @@ static BOOL demangle_datatype(struct parsed_symbol* sym, struct datatype_t* ct,
|
|||
case 'B': /* volatile reference */
|
||||
if (!get_qualified_type(ct, sym, dt, flags)) goto done;
|
||||
break;
|
||||
case 'P': /* Pointer */
|
||||
case 'Q': /* const pointer */
|
||||
case 'R': /* volatile pointer */
|
||||
case 'S': /* const volatile pointer */
|
||||
if (!get_qualified_type(ct, sym, (flags & IN_ARGS) ? dt : 'P', flags)) goto done;
|
||||
break;
|
||||
case 'P': /* Pointer */
|
||||
if (!(flags & IN_ARGS)) dt = 'P';
|
||||
if (isdigit(*sym->current))
|
||||
{
|
||||
{
|
||||
const char *ptr_qualif;
|
||||
switch (dt)
|
||||
{
|
||||
default:
|
||||
case 'P': ptr_qualif = NULL; break;
|
||||
case 'Q': ptr_qualif = "const"; break;
|
||||
case 'R': ptr_qualif = "volatile"; break;
|
||||
case 'S': ptr_qualif = "const volatile"; break;
|
||||
}
|
||||
/* FIXME:
|
||||
* P6 = Function pointer
|
||||
* P8 = Member function pointer
|
||||
|
@ -912,10 +920,10 @@ static BOOL demangle_datatype(struct parsed_symbol* sym, struct datatype_t* ct,
|
|||
if (!get_function_qualifier(sym, &function_qualifier))
|
||||
goto done;
|
||||
if (!get_function_signature(sym, &fs))
|
||||
goto done;
|
||||
goto done;
|
||||
|
||||
ct->left = str_printf(sym, "%s%s (%s %s::*",
|
||||
fs.return_ct.left, fs.return_ct.right, fs.call_conv, class);
|
||||
ct->left = str_printf(sym, "%s%s (%s %s::*%s",
|
||||
fs.return_ct.left, fs.return_ct.right, fs.call_conv, class, ptr_qualif);
|
||||
ct->right = str_printf(sym, ")%s%s", fs.arguments, function_qualifier);
|
||||
}
|
||||
else if (*sym->current == '6')
|
||||
|
@ -927,14 +935,14 @@ static BOOL demangle_datatype(struct parsed_symbol* sym, struct datatype_t* ct,
|
|||
if (!get_function_signature(sym, &fs))
|
||||
goto done;
|
||||
|
||||
ct->left = str_printf(sym, "%s%s (%s*",
|
||||
fs.return_ct.left, fs.return_ct.right, fs.call_conv);
|
||||
ct->left = str_printf(sym, "%s%s (%s*%s",
|
||||
fs.return_ct.left, fs.return_ct.right, fs.call_conv, ptr_qualif);
|
||||
ct->flags = DT_NO_LEADING_WS;
|
||||
ct->right = str_printf(sym, ")%s", fs.arguments);
|
||||
}
|
||||
else goto done;
|
||||
}
|
||||
else if (!get_qualified_type(ct, sym, 'P', flags)) goto done;
|
||||
else if (!get_qualified_type(ct, sym, dt, flags)) goto done;
|
||||
break;
|
||||
case 'W':
|
||||
if (*sym->current == '4')
|
||||
|
|
Loading…
Reference in a new issue