From a940218c0b5b64f638b0e1678024659cd77e2089 Mon Sep 17 00:00:00 2001 From: Eric Pouech Date: Mon, 28 Apr 2008 21:18:20 +0200 Subject: [PATCH] msvcrt: Fixed symbol unmangling for template-parameter-?? form, as well as test. Spotted by James Hawkins. --- dlls/msvcrt/tests/cpp.c | 2 +- dlls/msvcrt/undname.c | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/dlls/msvcrt/tests/cpp.c b/dlls/msvcrt/tests/cpp.c index 2788a5672b9..5daa4ccd7a1 100644 --- a/dlls/msvcrt/tests/cpp.c +++ b/dlls/msvcrt/tests/cpp.c @@ -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"}, {"??$ccccc@PAVaaa@@@bar@bb@foo@@DGPAV0@PAV0@PAVee@@IPAPAVaaa@@1@Z", "private: static class bar * __stdcall foo::bb::bar::ccccc(class bar *,class ee *,unsigned int,class aaa **,class ee *)"}, }; diff --git a/dlls/msvcrt/undname.c b/dlls/msvcrt/undname.c index 93030b2fa67..f115dca6a2d 100644 --- a/dlls/msvcrt/undname.c +++ b/dlls/msvcrt/undname.c @@ -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 */