Update (de)mangle_class_name() functions to be compiler version aware.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37750 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
d66fde128b
commit
c216fe9d13
@ -57,6 +57,23 @@ demangle_class_name(const char* name, BString& out)
|
|||||||
|
|
||||||
out = "";
|
out = "";
|
||||||
|
|
||||||
|
#if __GNUC__ >= 4
|
||||||
|
if (name[0] == 'N')
|
||||||
|
name++;
|
||||||
|
int nameLen;
|
||||||
|
bool first = true;
|
||||||
|
while ((nameLen = strtoul(name, (char**)&name, 10))) {
|
||||||
|
if (!first)
|
||||||
|
out += "::";
|
||||||
|
else
|
||||||
|
first = false;
|
||||||
|
out.Append(name, nameLen);
|
||||||
|
name += nameLen;
|
||||||
|
}
|
||||||
|
if (first)
|
||||||
|
return B_BAD_VALUE;
|
||||||
|
|
||||||
|
#else
|
||||||
if (name[0] == 'Q') {
|
if (name[0] == 'Q') {
|
||||||
// The name is in a namespace
|
// The name is in a namespace
|
||||||
int namespaceCount = 0;
|
int namespaceCount = 0;
|
||||||
@ -87,6 +104,7 @@ demangle_class_name(const char* name, BString& out)
|
|||||||
|
|
||||||
int nameLength = strtoul(name, (char**)&name, 10);
|
int nameLength = strtoul(name, (char**)&name, 10);
|
||||||
out.Append(name, nameLength);
|
out.Append(name, nameLength);
|
||||||
|
#endif
|
||||||
|
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
@ -116,8 +134,19 @@ mangle_class_name(const char* name, BString& out)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Now mangle it into this:
|
// Now mangle it into this:
|
||||||
|
// 9testthree8testfour9Testthree8Testfour
|
||||||
|
// (for __GNUC__ > 2)
|
||||||
|
// this isn't always the proper mangled class name, it should
|
||||||
|
// actually have an 'N' prefix and 'E' suffix if the name is
|
||||||
|
// in > 0 namespaces, but these would have to be removed in
|
||||||
|
// build_function_name() (the only place this function is called)
|
||||||
|
// so we don't add them.
|
||||||
|
// or this:
|
||||||
// Q49testthree8testfour9Testthree8Testfour
|
// Q49testthree8testfour9Testthree8Testfour
|
||||||
|
// (for __GNUC__ == 2)
|
||||||
|
|
||||||
out = "";
|
out = "";
|
||||||
|
#if __GNUC__ == 2
|
||||||
if (count > 1) {
|
if (count > 1) {
|
||||||
out += 'Q';
|
out += 'Q';
|
||||||
if (count > 10)
|
if (count > 10)
|
||||||
@ -126,6 +155,7 @@ mangle_class_name(const char* name, BString& out)
|
|||||||
if (count > 10)
|
if (count > 10)
|
||||||
out += '_';
|
out += '_';
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
for (unsigned int i = 0; i < spacenames.size(); ++i) {
|
for (unsigned int i = 0; i < spacenames.size(); ++i) {
|
||||||
out << (int)spacenames[i].length();
|
out << (int)spacenames[i].length();
|
||||||
|
Loading…
Reference in New Issue
Block a user