From 0df8b0a0209f9f99bce5d001e56937af9e2c82d0 Mon Sep 17 00:00:00 2001 From: Michael Stefaniuc Date: Tue, 7 Feb 2006 12:27:35 +0100 Subject: [PATCH] msvcrt: Handle data types B,R,S in C++ symbol demangling. --- dlls/msvcrt/undname.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/dlls/msvcrt/undname.c b/dlls/msvcrt/undname.c index 222ce7e72d5..5c2f47f2565 100644 --- a/dlls/msvcrt/undname.c +++ b/dlls/msvcrt/undname.c @@ -374,8 +374,11 @@ static const char* get_modified_type(struct parsed_symbol* sym, char modif) switch (modif) { case 'A': str_modif = " &"; break; + case 'B': str_modif = " & volatile"; break; case 'P': str_modif = " *"; break; case 'Q': str_modif = " * const"; break; + case 'R': str_modif = " * volatile"; break; + case 'S': str_modif = " * const volatile"; break; case '?': str_modif = ""; break; default: return NULL; } @@ -645,11 +648,14 @@ static BOOL demangle_datatype(struct parsed_symbol* sym, struct datatype_t* ct, /* not all the time is seems */ if (!(ct->left = get_modified_type(sym, '?'))) goto done; break; - case 'A': - if (!(ct->left = get_modified_type(sym, 'A'))) goto done; + case 'A': /* reference */ + case 'B': /* volatile reference */ + if (!(ct->left = get_modified_type(sym, dt))) goto done; break; - case 'Q': - if (!(ct->left = get_modified_type(sym, in_args ? 'Q' : 'P'))) goto done; + case 'Q': /* const pointer */ + case 'R': /* volatile pointer */ + case 'S': /* const volatile pointer */ + if (!(ct->left = get_modified_type(sym, in_args ? dt : 'P'))) goto done; break; case 'P': /* Pointer */ if (isdigit(*sym->current))