From 95917e07d0c60a1842a7a58083b9a549989e264c Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Sat, 27 Jun 2009 14:23:47 +0000 Subject: [PATCH] * Fixed gcc3+ demangling. demangle_name_gcc3() already demangles the name completely, including parameters. * Whitespace cleanup. * Coding style fixes. * Keep variables as local as possible. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31266 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/apps/debugger/demangler/Demangler.cpp | 38 +++++++++++++---------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/src/apps/debugger/demangler/Demangler.cpp b/src/apps/debugger/demangler/Demangler.cpp index 4bfbbe6a17..7f696de5fb 100644 --- a/src/apps/debugger/demangler/Demangler.cpp +++ b/src/apps/debugger/demangler/Demangler.cpp @@ -13,38 +13,42 @@ /*static*/ BString Demangler::Demangle(const BString& mangledName) { - BString demangledName; char buffer[1024]; - const char* demangled; - + if (mangledName.Compare("_Z", 2) == 0) { - demangled = demangle_name_gcc3(mangledName.String(), buffer, + // probably a gcc3+ mangled symbol + const char* demangled = demangle_name_gcc3(mangledName.String(), buffer, sizeof(buffer)); - } else { - demangled = demangle_symbol_gcc2(mangledName.String(), buffer, - sizeof(buffer), NULL); + if (demangled != NULL) + return demangled; } - if (demangled == NULL) - // name not mangled - return mangledName; + // try gcc 2 demangling + const char* demangled = demangle_symbol_gcc2(mangledName.String(), buffer, + sizeof(buffer), NULL); + if (demangled == NULL) { + // name not mangled + return mangledName; + } + + BString demangledName(demangled); demangledName << demangled << "("; - + size_t length; - int32 type, i = 0; + int32 type; + int32 i = 0; uint32 cookie = 0; while (get_next_argument(&cookie, mangledName.String(), buffer, - sizeof(buffer), &type, &length) == B_OK) { - + sizeof(buffer), &type, &length) == B_OK) { if (i++ > 0) demangledName << ", "; - + if (buffer[0]) { demangledName << buffer; continue; } - + // unnamed argument: fallback to known type switch (type) { case B_ANY_TYPE: @@ -102,6 +106,6 @@ Demangler::Demangle(const BString& mangledName) } } - demangledName << ")"; + demangledName << ")"; return demangledName; }