[Haiku-commits] r31266 - haiku/trunk/src/apps/debugger/demangler
bonefish at BerliOS
bonefish at mail.berlios.de
Sat Jun 27 16:23:47 CEST 2009
Author: bonefish
Date: 2009-06-27 16:23:47 +0200 (Sat, 27 Jun 2009)
New Revision: 31266
ViewCVS: http://svn.berlios.de/viewcvs/haiku?rev=31266&view=rev
Modified:
haiku/trunk/src/apps/debugger/demangler/Demangler.cpp
Log:
* Fixed gcc3+ demangling. demangle_name_gcc3() already demangles the name
completely, including parameters.
* Whitespace cleanup.
* Coding style fixes.
* Keep variables as local as possible.
Modified: haiku/trunk/src/apps/debugger/demangler/Demangler.cpp
===================================================================
--- haiku/trunk/src/apps/debugger/demangler/Demangler.cpp 2009-06-27 13:19:18 UTC (rev 31265)
+++ haiku/trunk/src/apps/debugger/demangler/Demangler.cpp 2009-06-27 14:23:47 UTC (rev 31266)
@@ -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)
+ // try gcc 2 demangling
+ const char* demangled = demangle_symbol_gcc2(mangledName.String(), buffer,
+ sizeof(buffer), NULL);
+
+ if (demangled == NULL) {
// name not mangled
- return mangledName;
+ 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 @@
}
}
- demangledName << ")";
+ demangledName << ")";
return demangledName;
}
More information about the Haiku-commits
mailing list