Piotr Caban : msvcrt: Add support for $$B datatype description format in unDName.
Alexandre Julliard
julliard at winehq.org
Fri Oct 7 15:09:15 CDT 2016
Module: wine
Branch: stable
Commit: fe94dc9fe50d26ad9ab569c298c92dbd4466fc1e
URL: http://source.winehq.org/git/wine.git/?a=commit;h=fe94dc9fe50d26ad9ab569c298c92dbd4466fc1e
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>
(cherry picked from commit 6ac2acc34f266e2e59e1d1dd2de0f299e750ee01)
Signed-off-by: Michael Stefaniuc <mstefani 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 73011b0..18fe78e 100644
--- a/dlls/msvcrt/tests/cpp.c
+++ b/dlls/msvcrt/tests/cpp.c
@@ -1326,6 +1326,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 dd5e599..48ead68 100644
--- a/dlls/msvcrt/undname.c
+++ b/dlls/msvcrt/undname.c
@@ -992,7 +992,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