* 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:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user