From: Eric Pouech eric.pouech@gmail.com
Signed-off-by: Eric Pouech eric.pouech@gmail.com --- dlls/msvcrt/tests/cpp.c | 1 + dlls/msvcrt/undname.c | 14 ++++++++++++++ 2 files changed, 15 insertions(+)
diff --git a/dlls/msvcrt/tests/cpp.c b/dlls/msvcrt/tests/cpp.c index 8c6b059e788..3487dba1318 100644 --- a/dlls/msvcrt/tests/cpp.c +++ b/dlls/msvcrt/tests/cpp.c @@ -1292,6 +1292,7 @@ static void test_demangle(void) /* 130 */ {"??_E?$TStrArray@$$BY0BAA@D$0BA@@@UAEPAXI@Z", "public: virtual void * __thiscall TStrArray<char [256],16>::`vector deleting destructor'(unsigned int)"}, /* 131 */ {"??_R0?AVCC@DD@@@8", "class DD::CC `RTTI Type Descriptor'"}, +/* 132 */ {"??__K_l@@YA?AUCC@@I@Z", "struct CC __cdecl operator "" _l(unsigned int)"}, }; int i, num_test = ARRAY_SIZE(test); char* name; diff --git a/dlls/msvcrt/undname.c b/dlls/msvcrt/undname.c index d71738efd5f..04da631ead5 100644 --- a/dlls/msvcrt/undname.c +++ b/dlls/msvcrt/undname.c @@ -1488,6 +1488,20 @@ static BOOL symbol_demangle(struct parsed_symbol* sym) case 'V': function_name = "operator delete[]"; break; case 'X': function_name = "`placement delete closure'"; break; case 'Y': function_name = "`placement delete[] closure'"; break; + case '_': + switch (*++sym->current) + { + /* likely many others missing here */ + case 'K': + sym->current++; + function_name = str_printf(sym, "operator "" %s", get_literal_string(sym)); + --sym->current; + break; + default: + ERR("Unknown operator: __%c\n", *sym->current); + return FALSE; + } + break; default: ERR("Unknown operator: _%c\n", *sym->current); return FALSE;