@@ -209,13 +209,17 @@ static bool PrettyPrintFunctionNameWithArgs(Stream &out_stream,
209209 return true ;
210210}
211211
212- static std::optional<llvm::StringRef> GetDemangledBasename (Function &function) {
213- auto demangled_name = function.GetName ().GetStringRef ();
212+ static std::optional<llvm::StringRef>
213+ GetDemangledBasename (const SymbolContext &sc) {
214+ Mangled mangled = sc.GetPossiblyInlinedFunctionName ();
215+ if (!mangled)
216+ return std::nullopt ;
217+
218+ auto demangled_name = mangled.GetDemangledName ().GetStringRef ();
214219 if (demangled_name.empty ())
215220 return std::nullopt ;
216221
217- const std::optional<DemangledNameInfo> &info =
218- function.GetMangled ().GetDemangledInfo ();
222+ const std::optional<DemangledNameInfo> &info = mangled.GetDemangledInfo ();
219223 if (!info)
220224 return std::nullopt ;
221225
@@ -226,19 +230,21 @@ static std::optional<llvm::StringRef> GetDemangledBasename(Function &function) {
226230 assert (info->BasenameRange .first < demangled_name.size ());
227231 assert (info->BasenameRange .second < demangled_name.size ());
228232
229- return demangled_name.substr (info->BasenameRange .first ,
230- info->BasenameRange .second -
231- info->BasenameRange .first );
233+ return demangled_name.slice (info->BasenameRange .first ,
234+ info->BasenameRange .second );
232235}
233236
234237static std::optional<llvm::StringRef>
235- GetDemangledTemplateArguments (Function &function) {
236- auto demangled_name = function.GetName ().GetStringRef ();
238+ GetDemangledTemplateArguments (const SymbolContext &sc) {
239+ Mangled mangled = sc.GetPossiblyInlinedFunctionName ();
240+ if (!mangled)
241+ return std::nullopt ;
242+
243+ auto demangled_name = mangled.GetDemangledName ().GetStringRef ();
237244 if (demangled_name.empty ())
238245 return std::nullopt ;
239246
240- const std::optional<DemangledNameInfo> &info =
241- function.GetMangled ().GetDemangledInfo ();
247+ const std::optional<DemangledNameInfo> &info = mangled.GetDemangledInfo ();
242248 if (!info)
243249 return std::nullopt ;
244250
@@ -250,19 +256,21 @@ GetDemangledTemplateArguments(Function &function) {
250256 assert (info->ArgumentsRange .first < demangled_name.size ());
251257 assert (info->ArgumentsRange .first >= info->BasenameRange .second );
252258
253- return demangled_name.substr (info->BasenameRange .second ,
254- info->ArgumentsRange .first -
255- info->BasenameRange .second );
259+ return demangled_name.slice (info->BasenameRange .second ,
260+ info->ArgumentsRange .first );
256261}
257262
258263static std::optional<llvm::StringRef>
259- GetDemangledReturnTypeLHS (Function &function) {
260- auto demangled_name = function.GetName ().GetStringRef ();
264+ GetDemangledReturnTypeLHS (const SymbolContext &sc) {
265+ Mangled mangled = sc.GetPossiblyInlinedFunctionName ();
266+ if (!mangled)
267+ return std::nullopt ;
268+
269+ auto demangled_name = mangled.GetDemangledName ().GetStringRef ();
261270 if (demangled_name.empty ())
262271 return std::nullopt ;
263272
264- const std::optional<DemangledNameInfo> &info =
265- function.GetMangled ().GetDemangledInfo ();
273+ const std::optional<DemangledNameInfo> &info = mangled.GetDemangledInfo ();
266274 if (!info)
267275 return std::nullopt ;
268276
@@ -276,13 +284,16 @@ GetDemangledReturnTypeLHS(Function &function) {
276284}
277285
278286static std::optional<llvm::StringRef>
279- GetDemangledFunctionQualifiers (Function &function) {
280- auto demangled_name = function.GetName ().GetStringRef ();
287+ GetDemangledFunctionQualifiers (const SymbolContext &sc) {
288+ Mangled mangled = sc.GetPossiblyInlinedFunctionName ();
289+ if (!mangled)
290+ return std::nullopt ;
291+
292+ auto demangled_name = mangled.GetDemangledName ().GetStringRef ();
281293 if (demangled_name.empty ())
282294 return std::nullopt ;
283295
284- const std::optional<DemangledNameInfo> &info =
285- function.GetMangled ().GetDemangledInfo ();
296+ const std::optional<DemangledNameInfo> &info = mangled.GetDemangledInfo ();
286297 if (!info)
287298 return std::nullopt ;
288299
@@ -294,19 +305,21 @@ GetDemangledFunctionQualifiers(Function &function) {
294305 assert (info->QualifiersRange .second <= demangled_name.size ());
295306 assert (info->QualifiersRange .second >= info->QualifiersRange .first );
296307
297- return demangled_name.substr (info->QualifiersRange .first ,
298- info->QualifiersRange .second -
299- info->QualifiersRange .first );
308+ return demangled_name.slice (info->QualifiersRange .first ,
309+ info->QualifiersRange .second );
300310}
301311
302312static std::optional<llvm::StringRef>
303- GetDemangledReturnTypeRHS (Function &function) {
304- auto demangled_name = function.GetName ().GetStringRef ();
313+ GetDemangledReturnTypeRHS (const SymbolContext &sc) {
314+ Mangled mangled = sc.GetPossiblyInlinedFunctionName ();
315+ if (!mangled)
316+ return std::nullopt ;
317+
318+ auto demangled_name = mangled.GetDemangledName ().GetStringRef ();
305319 if (demangled_name.empty ())
306320 return std::nullopt ;
307321
308- const std::optional<DemangledNameInfo> &info =
309- function.GetMangled ().GetDemangledInfo ();
322+ const std::optional<DemangledNameInfo> &info = mangled.GetDemangledInfo ();
310323 if (!info)
311324 return std::nullopt ;
312325
@@ -318,18 +331,21 @@ GetDemangledReturnTypeRHS(Function &function) {
318331 assert (info->ArgumentsRange .second <= demangled_name.size ());
319332 assert (info->QualifiersRange .first >= info->ArgumentsRange .second );
320333
321- return demangled_name.substr (info->ArgumentsRange .second ,
322- info->QualifiersRange .first -
323- info->ArgumentsRange .second );
334+ return demangled_name.slice (info->ArgumentsRange .second ,
335+ info->QualifiersRange .first );
324336}
325337
326- static std::optional<llvm::StringRef> GetDemangledScope (Function &function) {
327- auto demangled_name = function.GetName ().GetStringRef ();
338+ static std::optional<llvm::StringRef>
339+ GetDemangledScope (const SymbolContext &sc) {
340+ Mangled mangled = sc.GetPossiblyInlinedFunctionName ();
341+ if (!mangled)
342+ return std::nullopt ;
343+
344+ auto demangled_name = mangled.GetDemangledName ().GetStringRef ();
328345 if (demangled_name.empty ())
329346 return std::nullopt ;
330347
331- const std::optional<DemangledNameInfo> &info =
332- function.GetMangled ().GetDemangledInfo ();
348+ const std::optional<DemangledNameInfo> &info = mangled.GetDemangledInfo ();
333349 if (!info)
334350 return std::nullopt ;
335351
@@ -341,8 +357,7 @@ static std::optional<llvm::StringRef> GetDemangledScope(Function &function) {
341357 assert (info->ScopeRange .second < demangled_name.size ());
342358 assert (info->ScopeRange .second >= info->ScopeRange .first );
343359
344- return demangled_name.substr (
345- info->ScopeRange .first , info->ScopeRange .second - info->ScopeRange .first );
360+ return demangled_name.slice (info->ScopeRange .first , info->ScopeRange .second );
346361}
347362
348363bool CPlusPlusLanguage::MethodName::TrySimplifiedParse () {
@@ -1852,8 +1867,9 @@ static bool PrintFunctionNameWithArgs(Stream &s,
18521867 ExecutionContextScope *exe_scope =
18531868 exe_ctx ? exe_ctx->GetBestExecutionContextScope () : nullptr ;
18541869
1855- const char *cstr = sc.GetPossiblyInlinedFunctionName (
1856- Mangled::NamePreference::ePreferDemangled);
1870+ const char *cstr = sc.GetPossiblyInlinedFunctionName ()
1871+ .GetName (Mangled::NamePreference::ePreferDemangled)
1872+ .AsCString ();
18571873 if (!cstr)
18581874 return false ;
18591875
@@ -1906,7 +1922,7 @@ bool CPlusPlusLanguage::HandleFrameFormatVariable(
19061922
19071923 switch (type) {
19081924 case FormatEntity::Entry::Type::FunctionScope: {
1909- std::optional<llvm::StringRef> scope = GetDemangledScope (*sc. function );
1925+ std::optional<llvm::StringRef> scope = GetDemangledScope (sc );
19101926 if (!scope)
19111927 return false ;
19121928
@@ -1916,7 +1932,7 @@ bool CPlusPlusLanguage::HandleFrameFormatVariable(
19161932 }
19171933
19181934 case FormatEntity::Entry::Type::FunctionBasename: {
1919- std::optional<llvm::StringRef> name = GetDemangledBasename (*sc. function );
1935+ std::optional<llvm::StringRef> name = GetDemangledBasename (sc );
19201936 if (!name)
19211937 return false ;
19221938
@@ -1927,7 +1943,7 @@ bool CPlusPlusLanguage::HandleFrameFormatVariable(
19271943
19281944 case FormatEntity::Entry::Type::FunctionTemplateArguments: {
19291945 std::optional<llvm::StringRef> template_args =
1930- GetDemangledTemplateArguments (*sc. function );
1946+ GetDemangledTemplateArguments (sc );
19311947 if (!template_args)
19321948 return false ;
19331949
@@ -1952,8 +1968,7 @@ bool CPlusPlusLanguage::HandleFrameFormatVariable(
19521968 return true ;
19531969 }
19541970 case FormatEntity::Entry::Type::FunctionReturnRight: {
1955- std::optional<llvm::StringRef> return_rhs =
1956- GetDemangledReturnTypeRHS (*sc.function );
1971+ std::optional<llvm::StringRef> return_rhs = GetDemangledReturnTypeRHS (sc);
19571972 if (!return_rhs)
19581973 return false ;
19591974
@@ -1962,8 +1977,7 @@ bool CPlusPlusLanguage::HandleFrameFormatVariable(
19621977 return true ;
19631978 }
19641979 case FormatEntity::Entry::Type::FunctionReturnLeft: {
1965- std::optional<llvm::StringRef> return_lhs =
1966- GetDemangledReturnTypeLHS (*sc.function );
1980+ std::optional<llvm::StringRef> return_lhs = GetDemangledReturnTypeLHS (sc);
19671981 if (!return_lhs)
19681982 return false ;
19691983
@@ -1972,8 +1986,7 @@ bool CPlusPlusLanguage::HandleFrameFormatVariable(
19721986 return true ;
19731987 }
19741988 case FormatEntity::Entry::Type::FunctionQualifiers: {
1975- std::optional<llvm::StringRef> quals =
1976- GetDemangledFunctionQualifiers (*sc.function );
1989+ std::optional<llvm::StringRef> quals = GetDemangledFunctionQualifiers (sc);
19771990 if (!quals)
19781991 return false ;
19791992
0 commit comments