@@ -225,34 +225,43 @@ Out parse(ProgramInfo &programInfo)
225225 }
226226 else
227227 {
228- auto functionDemangledName = demangleSymbol (functionSymbolName.c_str ());
229- auto functionName = std::string (functionDemangledName.get ());
230- auto functionShortName = functionName;
228+ auto demangledSymbolPtr = demangleSymbol (functionSymbolName.c_str ());
229+ auto demangledSymbol = std::string (demangledSymbolPtr.get ());
230+ std::string name = demangledSymbol;
231+ std::string shortName = demangledSymbol;
232+ std::string nameSpace = demangledSymbol;
231233
232- auto functionNameSpace = functionShortName;
233-
234- auto startOfName = functionShortName.rfind (" ::" );
234+ auto startOfName = demangledSymbol.rfind (" ::" );
235235 if (startOfName != std::string::npos)
236236 {
237- functionShortName = functionShortName.substr (startOfName + 2 );
238- functionNameSpace = functionNameSpace.substr (0 , startOfName);
237+ name = name.substr (startOfName + 2 );
238+ }
239+
240+ auto startOfArgs = demangledSymbol.rfind (' (' );
241+ if (startOfArgs != std::string::npos)
242+ {
243+ shortName = shortName.substr (startOfName + 2 , startOfArgs - startOfName - 2 );
239244 }
240245
246+
247+ nameSpace = nameSpace.substr (0 , startOfName);
248+
241249 FunctionInfo functionInfo;
242250
243251 functionInfo.id = functionAddress;
244- functionInfo.name = functionName;
245252 functionInfo.symbol = functionSymbol;
246- functionInfo.shortName = functionShortName;
247- functionInfo.nameSpace = functionNameSpace;
253+ functionInfo.demangledSymbol = demangledSymbol;
254+ functionInfo.name = name;
255+ functionInfo.shortName = shortName;
256+ functionInfo.nameSpace = nameSpace;
248257 functionInfo.isThunk = false ;
249258 functionInfo.isMulti = functionSymbols.size () > 1 ;
250259 functionInfo.classes .push_back (&classInfo);
251260
252261 if (functionSymbol.name .starts_with (" _ZTh" ))
253262 {
254263 functionInfo.isThunk = true ;
255- functionInfo.name = functionName .substr (21 ); // remove "non-virtual thunk to" substring
264+ functionInfo.name = demangledSymbol .substr (21 ); // remove "non-virtual thunk to" substring
256265 }
257266
258267 out.functions .push_back (functionInfo);
0 commit comments