From: Piotr Caban piotr@codeweavers.com
--- tools/winedump/msmangle.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-)
diff --git a/tools/winedump/msmangle.c b/tools/winedump/msmangle.c index 19ccc18f714..e49dd14ac2a 100644 --- a/tools/winedump/msmangle.c +++ b/tools/winedump/msmangle.c @@ -410,6 +410,28 @@ static BOOL get_qualified_type(struct datatype_t *ct, struct parsed_symbol* sym, ct->right = NULL; ct->flags = 0;
+ /* parse managed handle information */ + if (sym->current[0] == '$' && sym->current[1] == 'A') + { + sym->current += 2; + + switch (qualif) + { + case 'A': + case 'B': + ref = " %"; + break; + case 'P': + case 'Q': + case 'R': + case 'S': + ref = " ^"; + break; + default: + return FALSE; + } + } + if (get_qualifier(sym, &xdt2, &class)) { unsigned mark = sym->stack.num; @@ -482,7 +504,8 @@ static char* get_literal_string(struct parsed_symbol* sym) if (!((*sym->current >= 'A' && *sym->current <= 'Z') || (*sym->current >= 'a' && *sym->current <= 'z') || (*sym->current >= '0' && *sym->current <= '9') || - *sym->current == '_' || *sym->current == '$')) { + *sym->current == '_' || *sym->current == '$' || + *sym->current == '<' || *sym->current == '>')) { return NULL; } } while (*++sym->current != '@');