Piotr Caban : msvcrt: Add support for $$B datatype description format in unDName.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Jan 21 11:22:05 CST 2016
Module: wine
Branch: master
Commit: 6ac2acc34f266e2e59e1d1dd2de0f299e750ee01
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6ac2acc34f266e2e59e1d1dd2de0f299e750ee01
Author: Piotr Caban <piotr at codeweavers.com>
Date: Wed Jan 20 22:01:23 2016 +0100
msvcrt: Add support for $$B datatype description format in unDName.
Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/msvcrt/tests/cpp.c | 2 ++
dlls/msvcrt/undname.c | 32 +++++++++++++++++++++++++++++++-
2 files changed, 33 insertions(+), 1 deletion(-)
diff --git a/dlls/msvcrt/tests/cpp.c b/dlls/msvcrt/tests/cpp.c
index fac1ab5..e67e344 100644
--- a/dlls/msvcrt/tests/cpp.c
+++ b/dlls/msvcrt/tests/cpp.c
@@ -1321,6 +1321,8 @@ static void test_demangle(void)
/* 129 */ {"??$run at XVTask_Render_Preview@@@QtConcurrent@@YA?AV?$QFuture at X@@PEAVTask_Render_Preview@@P82 at EAAXXZ@Z",
"class QFuture<void> __cdecl QtConcurrent::run<void,class Task_Render_Preview>(class Task_Render_Preview * __ptr64,void (__cdecl Task_Render_Preview::*)(void) __ptr64)",
"??$run at XVTask_Render_Preview@@@QtConcurrent@@YA?AV?$QFuture at X@@PEAVTask_Render_Preview@@P82 at EAAXXZ@Z"},
+/* 130 */ {"??_E?$TStrArray@$$BY0BAA at D$0BA@@@UAEPAXI at Z",
+ "public: virtual void * __thiscall TStrArray<char [256],16>::`vector deleting destructor'(unsigned int)"},
};
int i, num_test = (sizeof(test)/sizeof(test[0]));
char* name;
diff --git a/dlls/msvcrt/undname.c b/dlls/msvcrt/undname.c
index 587a602..e6cb61f 100644
--- a/dlls/msvcrt/undname.c
+++ b/dlls/msvcrt/undname.c
@@ -991,7 +991,37 @@ static BOOL demangle_datatype(struct parsed_symbol* sym, struct datatype_t* ct,
}
break;
case '$':
- if (*sym->current == 'C')
+ if (*sym->current == 'B')
+ {
+ unsigned mark = sym->stack.num;
+ struct datatype_t sub_ct;
+ const char* arr = NULL;
+ sym->current++;
+
+ /* multidimensional arrays */
+ if (*sym->current == 'Y')
+ {
+ const char* n1;
+ int num;
+
+ sym->current++;
+ if (!(n1 = get_number(sym))) goto done;
+ num = atoi(n1);
+
+ while (num--)
+ arr = str_printf(sym, "%s[%s]", arr, get_number(sym));
+ }
+
+ if (!demangle_datatype(sym, &sub_ct, pmt_ref, FALSE)) goto done;
+
+ if (arr)
+ ct->left = str_printf(sym, "%s %s", sub_ct.left, arr);
+ else
+ ct->left = sub_ct.left;
+ ct->right = sub_ct.right;
+ sym->stack.num = mark;
+ }
+ else if (*sym->current == 'C')
{
const char *ptr, *ptr_modif;
More information about the wine-cvs
mailing list