* 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
This commit is contained in:
Ingo Weinhold
2009-06-27 14:23:47 +00:00
parent 9a9e660b03
commit 95917e07d0
+21 -17
View File
@@ -13,38 +13,42 @@
/*static*/ BString /*static*/ BString
Demangler::Demangle(const BString& mangledName) Demangler::Demangle(const BString& mangledName)
{ {
BString demangledName;
char buffer[1024]; char buffer[1024];
const char* demangled;
if (mangledName.Compare("_Z", 2) == 0) { 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)); sizeof(buffer));
} else { if (demangled != NULL)
demangled = demangle_symbol_gcc2(mangledName.String(), buffer, return demangled;
sizeof(buffer), NULL);
} }
if (demangled == NULL) // try gcc 2 demangling
// name not mangled const char* demangled = demangle_symbol_gcc2(mangledName.String(), buffer,
return mangledName; sizeof(buffer), NULL);
if (demangled == NULL) {
// name not mangled
return mangledName;
}
BString demangledName(demangled);
demangledName << demangled << "("; demangledName << demangled << "(";
size_t length; size_t length;
int32 type, i = 0; int32 type;
int32 i = 0;
uint32 cookie = 0; uint32 cookie = 0;
while (get_next_argument(&cookie, mangledName.String(), buffer, while (get_next_argument(&cookie, mangledName.String(), buffer,
sizeof(buffer), &type, &length) == B_OK) { sizeof(buffer), &type, &length) == B_OK) {
if (i++ > 0) if (i++ > 0)
demangledName << ", "; demangledName << ", ";
if (buffer[0]) { if (buffer[0]) {
demangledName << buffer; demangledName << buffer;
continue; continue;
} }
// unnamed argument: fallback to known type // unnamed argument: fallback to known type
switch (type) { switch (type) {
case B_ANY_TYPE: case B_ANY_TYPE:
@@ -102,6 +106,6 @@ Demangler::Demangle(const BString& mangledName)
} }
} }
demangledName << ")"; demangledName << ")";
return demangledName; return demangledName;
} }