[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