@@ -1906,50 +1906,46 @@ SwiftLanguage::GetDemangledFunctionNameWithoutArguments(Mangled mangled) const {
19061906 return mangled_name;
19071907}
19081908
1909- static llvm::Expected<std::pair<std::string , DemangledNameInfo>>
1909+ static llvm::Expected<std::pair<llvm::StringRef , DemangledNameInfo>>
19101910GetAndValidateInfo (const SymbolContext &sc) {
19111911 Mangled mangled = sc.GetPossiblyInlinedFunctionName ();
19121912 if (!mangled)
19131913 return llvm::createStringError (" Function does not have a mangled name." );
19141914
1915- const char *mangled_name = mangled.GetMangledName ().AsCString (" " );
1916- auto [demangled_name, info] =
1917- SwiftLanguageRuntime::TrackedDemangleSymbolAsString (
1918- mangled_name, SwiftLanguageRuntime::eSimplified, &sc);
1919- info.PrefixRange .second =
1920- std::min (info.BasenameRange .first , info.ArgumentsRange .first );
1921- info.SuffixRange .first =
1922- std::max (info.BasenameRange .second , info.ArgumentsRange .second );
1923- info.SuffixRange .second = demangled_name.length ();
1924-
1915+ auto demangled_name =
1916+ mangled.GetDemangledName (nullptr , Mangled::eCompactName).GetStringRef ();
19251917 if (demangled_name.empty ())
19261918 return llvm::createStringError (
19271919 " Function '%s' does not have a demangled name." ,
19281920 mangled.GetMangledName ().AsCString (" " ));
19291921
1922+ const std::optional<DemangledNameInfo> &info = mangled.GetDemangledInfo ();
1923+ if (!info)
1924+ return llvm::createStringError (
1925+ " Function '%s' does not have demangled info." , demangled_name.data ());
1926+
19301927 // Function without a basename is nonsense.
1931- if (!info. hasBasename ())
1928+ if (!info-> hasBasename ())
19321929 return llvm::createStringError (
19331930 " DemangledInfo for '%s does not have basename range." ,
19341931 demangled_name.data ());
19351932
1936- return std::make_pair (demangled_name, info);
1933+ return std::make_pair (demangled_name, * info);
19371934}
19381935
1939- static llvm::Expected<std::string >
1936+ static llvm::Expected<llvm::StringRef >
19401937GetDemangledBasename (const SymbolContext &sc) {
19411938 auto info_or_err = GetAndValidateInfo (sc);
19421939 if (!info_or_err)
19431940 return info_or_err.takeError ();
19441941
19451942 auto [demangled_name, info] = *info_or_err;
19461943
1947- return demangled_name.substr (info.BasenameRange .first ,
1948- info.BasenameRange .second -
1949- info.BasenameRange .first );
1944+ return demangled_name.slice (info.BasenameRange .first ,
1945+ info.BasenameRange .second );
19501946}
19511947
1952- static llvm::Expected<std::string >
1948+ static llvm::Expected<llvm::StringRef >
19531949GetDemangledFunctionPrefix (const SymbolContext &sc) {
19541950 auto info_or_err = GetAndValidateInfo (sc);
19551951 if (!info_or_err)
@@ -1962,11 +1958,10 @@ GetDemangledFunctionPrefix(const SymbolContext &sc) {
19621958 " DemangledInfo for '%s does not have suffix range." ,
19631959 demangled_name.data ());
19641960
1965- return demangled_name.substr (
1966- info.PrefixRange .first , info.PrefixRange .second - info.PrefixRange .first );
1961+ return demangled_name.slice (info.PrefixRange .first , info.PrefixRange .second );
19671962}
19681963
1969- static llvm::Expected<std::string >
1964+ static llvm::Expected<llvm::StringRef >
19701965GetDemangledFunctionSuffix (const SymbolContext &sc) {
19711966 auto info_or_err = GetAndValidateInfo (sc);
19721967 if (!info_or_err)
@@ -1979,8 +1974,7 @@ GetDemangledFunctionSuffix(const SymbolContext &sc) {
19791974 " DemangledInfo for '%s does not have suffix range." ,
19801975 demangled_name.data ());
19811976
1982- return demangled_name.substr (
1983- info.SuffixRange .first , info.SuffixRange .second - info.SuffixRange .first );
1977+ return demangled_name.slice (info.SuffixRange .first , info.SuffixRange .second );
19841978}
19851979
19861980static bool PrintDemangledArgumentList (Stream &s, const SymbolContext &sc) {
@@ -1998,9 +1992,8 @@ static bool PrintDemangledArgumentList(Stream &s, const SymbolContext &sc) {
19981992 if (!info.hasArguments ())
19991993 return false ;
20001994
2001- s << demangled_name.substr (info.ArgumentsRange .first ,
2002- info.ArgumentsRange .second -
2003- info.ArgumentsRange .first );
1995+ s << demangled_name.slice (info.ArgumentsRange .first ,
1996+ info.ArgumentsRange .second );
20041997
20051998 return true ;
20061999}
0 commit comments