msvcrt: Fixed symbol unmangling for template-parameter-?? form, as well as test.
Spotted by James Hawkins.
This commit is contained in:
parent
b9f8a81d8c
commit
a940218c0b
|
@ -982,7 +982,7 @@ static void test_demangle(void)
|
|||
{ "?Qux@Bar@@0PAP6AHPAV1@AAH1PAH@ZA", "private: static int (__cdecl** Bar::Qux)(class Bar *,int &,int &,int *)" },
|
||||
{ "?Qux@Bar@@0PAP6AHPAV1@AAH1PAH@ZA", "Bar::Qux", 0x1800},
|
||||
{"?$AAA@$DBAB@", "AAA<`template-parameter257'>"},
|
||||
{"?$AAA@$D?4@", "AAA<`template-parameter-5'>"},
|
||||
{"?$AAA@?C@", "AAA<`template-parameter-2'>"},
|
||||
{"?$AAA@PAUBBB@@", "AAA<struct BBB *>"},
|
||||
{"??$ccccc@PAVaaa@@@bar@bb@foo@@DGPAV0@PAV0@PAVee@@IPAPAVaaa@@1@Z", "private: static class bar * __stdcall foo::bb::bar::ccccc<class aaa *>(class bar *,class ee *,unsigned int,class aaa **,class ee *)"},
|
||||
};
|
||||
|
|
|
@ -759,7 +759,16 @@ static BOOL demangle_datatype(struct parsed_symbol* sym, struct datatype_t* ct,
|
|||
break;
|
||||
case '?':
|
||||
/* not all the time is seems */
|
||||
if (!get_modified_type(ct, sym, pmt_ref, '?')) goto done;
|
||||
if (in_args)
|
||||
{
|
||||
const char* ptr;
|
||||
if (!(ptr = get_number(sym))) goto done;
|
||||
ct->left = str_printf(sym, "`template-parameter-%s'", ptr);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!get_modified_type(ct, sym, pmt_ref, '?')) goto done;
|
||||
}
|
||||
break;
|
||||
case 'A': /* reference */
|
||||
case 'B': /* volatile reference */
|
||||
|
|
Loading…
Reference in New Issue