msvcrt: Fixed symbol unmangling for template-parameter-?? form, as well as test.

Spotted by James Hawkins.
This commit is contained in:
Eric Pouech 2008-04-28 21:18:20 +02:00 committed by Alexandre Julliard
parent b9f8a81d8c
commit a940218c0b
2 changed files with 11 additions and 2 deletions

View File

@ -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 *)"},
};

View File

@ -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 */