msvcrt: add some demangle features
André Hentschel
nerv at dawncrow.de
Sun Dec 27 13:01:39 CST 2009
---
dlls/msvcrt/tests/cpp.c | 1 +
dlls/msvcrt/undname.c | 4 +++-
2 files changed, 4 insertions(+), 1 deletions(-)
diff --git a/dlls/msvcrt/tests/cpp.c b/dlls/msvcrt/tests/cpp.c
index 106ef73..1a121f8 100644
--- a/dlls/msvcrt/tests/cpp.c
+++ b/dlls/msvcrt/tests/cpp.c
@@ -1034,6 +1034,7 @@ static void test_demangle(void)
/* 113 */ {"?f at T@@QAEHQAY1BE at BO@$$CBD at Z", "public: int __thiscall T::f(char const (* const)[20][30])"},
/* 114 */ {"??0?$Foo at U?$vector_c at H$00$01$0?1$0A@$0A@$0HPPPPPPP@$0HPPPPPPP@$0HPPPPPPP@$0HPPPPPPP@$0HPPPPPPP@$0HPPPPPPP@$0HPPPPPPP@$0HPPPPPPP@$0HPPPPPPP@$0HPPPPPPP@$0HPPPPPPP@$0HPPPPPPP@$0HPPPPPPP@$0HPPPPPPP@$0HPPPPPPP@@mpl at boost@@@@QAE at XZ",
"public: __thiscall Foo<struct boost::mpl::vector_c<int,1,2,-2,0,0,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647> >::Foo<struct boost::mpl::vector_c<int,1,2,-2,0,0,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647> >(void)"},
+/* 115 */ {"??2 at YAPFAX_K@Z", "void __unaligned * __cdecl operator new(unsigned __int64)", "void * __ptr64 __cdecl operator new(unsigned __int64)"}
};
int i, num_test = (sizeof(test)/sizeof(test[0]));
diff --git a/dlls/msvcrt/undname.c b/dlls/msvcrt/undname.c
index 670873d..f08e11b 100644
--- a/dlls/msvcrt/undname.c
+++ b/dlls/msvcrt/undname.c
@@ -426,6 +426,8 @@ static BOOL get_modifier(char ch, const char** ret)
case 'B': *ret = "const"; break;
case 'C': *ret = "volatile"; break;
case 'D': *ret = "const volatile"; break;
+ case 'E': *ret = "__ptr64"; break;
+ case 'F': *ret = "__unaligned"; break;
default: return FALSE;
}
return TRUE;
@@ -478,7 +480,7 @@ static BOOL get_modified_type(struct datatype_t *ct, struct parsed_symbol* sym,
while (num--)
str_modif = str_printf(sym, "%s[%s]", str_modif, get_number(sym));
}
-
+ if (*sym->current == 'A') sym->current++;
/* Recurse to get the referred-to type */
if (!demangle_datatype(sym, &sub_ct, pmt_ref, FALSE))
return FALSE;
--
Best Regards, André Hentschel
More information about the wine-patches
mailing list