@@ -278,77 +278,75 @@ bool Mangled::GetRichManglingInfo(RichManglingContext &context,
278
278
// class will need to use this accessor if it wishes to decode the demangled
279
279
// name. The result is cached and will be kept until a new string value is
280
280
// supplied to this object, or until the end of the object's lifetime.
281
- ConstString Mangled::GetDemangledName (// BEGIN SWIFT
282
- const SymbolContext *sc
283
- // END SWIFT
284
- ) const {
285
- // Check to make sure we have a valid mangled name and that we haven't
286
- // already decoded our mangled name.
287
- if (m_mangled && m_demangled.IsNull ()) {
288
- // Don't bother running anything that isn't mangled
289
- const char *mangled_name = m_mangled.GetCString ();
290
- ManglingScheme mangling_scheme =
291
- GetManglingScheme (m_mangled.GetStringRef ());
292
- if (mangling_scheme != eManglingSchemeNone &&
293
- !m_mangled.GetMangledCounterpart (m_demangled)) {
294
- // We didn't already mangle this name, demangle it and if all goes well
295
- // add it to our map.
296
- char *demangled_name = nullptr ;
297
- switch (mangling_scheme) {
298
- case eManglingSchemeMSVC:
299
- demangled_name = GetMSVCDemangledStr (mangled_name);
300
- break ;
301
- case eManglingSchemeItanium: {
302
- demangled_name = GetItaniumDemangledStr (mangled_name);
303
- break ;
304
- }
305
- case eManglingSchemeRustV0:
306
- demangled_name = GetRustV0DemangledStr (m_mangled);
307
- break ;
308
- case eManglingSchemeD:
309
- demangled_name = GetDLangDemangledStr (m_mangled);
310
- break ;
311
- case eManglingSchemeSwift:
312
- // Demangling a swift name requires the swift compiler. This is
313
- // explicitly unsupported on llvm.org.
281
+ ConstString Mangled::GetDemangledName () const {
282
+ if (!m_mangled)
283
+ return m_demangled;
284
+
285
+ // Re-use previously demangled names.
286
+ if (!m_demangled.IsNull ())
287
+ return m_demangled;
288
+
289
+ if (m_mangled.GetMangledCounterpart (m_demangled) && !m_demangled.IsNull ())
290
+ return m_demangled;
291
+
292
+ // We didn't already mangle this name, demangle it and if all goes well
293
+ // add it to our map.
294
+ char *demangled_name = nullptr ;
295
+ switch (GetManglingScheme (m_mangled.GetStringRef ())) {
296
+ case eManglingSchemeMSVC:
297
+ demangled_name = GetMSVCDemangledStr (m_mangled);
298
+ break ;
299
+ case eManglingSchemeItanium: {
300
+ demangled_name = GetItaniumDemangledStr (m_mangled.GetCString ());
301
+ break ;
302
+ }
303
+ case eManglingSchemeRustV0:
304
+ demangled_name = GetRustV0DemangledStr (m_mangled);
305
+ break ;
306
+ case eManglingSchemeD:
307
+ demangled_name = GetDLangDemangledStr (m_mangled);
308
+ break ;
309
+ case eManglingSchemeSwift:
310
+ // Demangling a swift name requires the swift compiler. This is
311
+ // explicitly unsupported on llvm.org.
314
312
#ifdef LLDB_ENABLE_SWIFT
315
- {
316
- Log *log = GetLog (LLDBLog::Demangle);
317
- LLDB_LOGF (log , " demangle swift: %s" , mangled_name);
318
- std::string demangled (SwiftLanguageRuntime::DemangleSymbolAsString (
319
- mangled_name, SwiftLanguageRuntime::eTypeName, sc));
320
- // Don't cache the demangled name the function isn't available yet.
321
- if (!sc || !sc->function ) {
322
- LLDB_LOGF (log , " demangle swift: %s -> \" %s\" (not cached)" ,
323
- mangled_name, demangled.c_str ());
324
- return ConstString (demangled);
325
- }
326
- if (demangled.empty ()) {
327
- LLDB_LOGF (log , " demangle swift: %s -> error: failed to demangle" ,
328
- mangled_name);
329
- } else {
330
- LLDB_LOGF (log , " demangle swift: %s -> \" %s\" " , mangled_name,
331
- demangled.c_str ());
332
- m_demangled.SetStringWithMangledCounterpart (demangled, m_mangled);
333
- }
334
- return m_demangled;
335
- }
336
- #endif // LLDB_ENABLE_SWIFT
337
- break ;
338
- case eManglingSchemeNone:
339
- llvm_unreachable (" eManglingSchemeNone was handled already" );
340
- }
341
- if (demangled_name) {
342
- m_demangled.SetStringWithMangledCounterpart (
343
- llvm::StringRef (demangled_name), m_mangled);
344
- free (demangled_name);
345
- }
313
+ {
314
+ Log *log = GetLog (LLDBLog::Demangle);
315
+ LLDB_LOGF (log , " demangle swift: %s" , mangled_name);
316
+ std::string demangled (SwiftLanguageRuntime::DemangleSymbolAsString (
317
+ mangled_name, SwiftLanguageRuntime::eTypeName, sc));
318
+ // Don't cache the demangled name the function isn't available yet.
319
+ if (!sc || !sc->function ) {
320
+ LLDB_LOGF (log , " demangle swift: %s -> \" %s\" (not cached)" ,
321
+ mangled_name, demangled.c_str ());
322
+ return ConstString (demangled);
346
323
}
347
- if (m_demangled.IsNull ()) {
348
- // Set the demangled string to the empty string to indicate we tried to
349
- // parse it once and failed.
350
- m_demangled.SetCString (" " );
324
+ if (demangled.empty ()) {
325
+ LLDB_LOGF (log , " demangle swift: %s -> error: failed to demangle" ,
326
+ mangled_name);
327
+ } else {
328
+ LLDB_LOGF (log , " demangle swift: %s -> \" %s\" " , mangled_name,
329
+ demangled.c_str ());
330
+ m_demangled.SetStringWithMangledCounterpart (demangled, m_mangled);
351
331
}
332
+ return m_demangled;
333
+ }
334
+ #endif // LLDB_ENABLE_SWIFT
335
+ break ;
336
+ case eManglingSchemeNone:
337
+ // Don't bother demangling anything that isn't mangled.
338
+ break ;
339
+ }
340
+
341
+ if (demangled_name) {
342
+ m_demangled.SetStringWithMangledCounterpart (demangled_name, m_mangled);
343
+ free (demangled_name);
344
+ }
345
+
346
+ if (m_demangled.IsNull ()) {
347
+ // Set the demangled string to the empty string to indicate we tried to
348
+ // parse it once and failed.
349
+ m_demangled.SetCString (" " );
352
350
}
353
351
354
352
return m_demangled;
0 commit comments