@@ -1906,50 +1906,46 @@ SwiftLanguage::GetDemangledFunctionNameWithoutArguments(Mangled mangled) const {
1906
1906
return mangled_name;
1907
1907
}
1908
1908
1909
- static llvm::Expected<std::pair<std::string , DemangledNameInfo>>
1909
+ static llvm::Expected<std::pair<llvm::StringRef , DemangledNameInfo>>
1910
1910
GetAndValidateInfo (const SymbolContext &sc) {
1911
1911
Mangled mangled = sc.GetPossiblyInlinedFunctionName ();
1912
1912
if (!mangled)
1913
1913
return llvm::createStringError (" Function does not have a mangled name." );
1914
1914
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 ();
1925
1917
if (demangled_name.empty ())
1926
1918
return llvm::createStringError (
1927
1919
" Function '%s' does not have a demangled name." ,
1928
1920
mangled.GetMangledName ().AsCString (" " ));
1929
1921
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
+
1930
1927
// Function without a basename is nonsense.
1931
- if (!info. hasBasename ())
1928
+ if (!info-> hasBasename ())
1932
1929
return llvm::createStringError (
1933
1930
" DemangledInfo for '%s does not have basename range." ,
1934
1931
demangled_name.data ());
1935
1932
1936
- return std::make_pair (demangled_name, info);
1933
+ return std::make_pair (demangled_name, * info);
1937
1934
}
1938
1935
1939
- static llvm::Expected<std::string >
1936
+ static llvm::Expected<llvm::StringRef >
1940
1937
GetDemangledBasename (const SymbolContext &sc) {
1941
1938
auto info_or_err = GetAndValidateInfo (sc);
1942
1939
if (!info_or_err)
1943
1940
return info_or_err.takeError ();
1944
1941
1945
1942
auto [demangled_name, info] = *info_or_err;
1946
1943
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 );
1950
1946
}
1951
1947
1952
- static llvm::Expected<std::string >
1948
+ static llvm::Expected<llvm::StringRef >
1953
1949
GetDemangledFunctionPrefix (const SymbolContext &sc) {
1954
1950
auto info_or_err = GetAndValidateInfo (sc);
1955
1951
if (!info_or_err)
@@ -1962,11 +1958,10 @@ GetDemangledFunctionPrefix(const SymbolContext &sc) {
1962
1958
" DemangledInfo for '%s does not have suffix range." ,
1963
1959
demangled_name.data ());
1964
1960
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 );
1967
1962
}
1968
1963
1969
- static llvm::Expected<std::string >
1964
+ static llvm::Expected<llvm::StringRef >
1970
1965
GetDemangledFunctionSuffix (const SymbolContext &sc) {
1971
1966
auto info_or_err = GetAndValidateInfo (sc);
1972
1967
if (!info_or_err)
@@ -1979,8 +1974,7 @@ GetDemangledFunctionSuffix(const SymbolContext &sc) {
1979
1974
" DemangledInfo for '%s does not have suffix range." ,
1980
1975
demangled_name.data ());
1981
1976
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 );
1984
1978
}
1985
1979
1986
1980
static bool PrintDemangledArgumentList (Stream &s, const SymbolContext &sc) {
@@ -1998,9 +1992,8 @@ static bool PrintDemangledArgumentList(Stream &s, const SymbolContext &sc) {
1998
1992
if (!info.hasArguments ())
1999
1993
return false ;
2000
1994
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 );
2004
1997
2005
1998
return true ;
2006
1999
}
0 commit comments