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