4141using namespace lldb_private ;
4242
4343static inline bool cstring_is_mangled (llvm::StringRef s) {
44- return Mangled::GetManglingScheme (s) != Mangled::eManglingSchemeNone
45- #ifdef LLDB_ENABLE_SWIFT
46- || SwiftLanguageRuntime::IsSwiftMangledName (s)
47- #endif // LLDB_ENABLE_SWIFT
48- ;
44+ return Mangled::GetManglingScheme (s) != Mangled::eManglingSchemeNone;
4945}
5046
5147// BEGIN SWIFT
@@ -91,6 +87,11 @@ Mangled::ManglingScheme Mangled::GetManglingScheme(llvm::StringRef const name) {
9187 if (name.startswith (" ___Z" ))
9288 return Mangled::eManglingSchemeItanium;
9389
90+ #ifdef LLDB_ENABLE_SWIFT
91+ if (SwiftLanguageRuntime::IsSwiftMangledName (name))
92+ return Mangled::eManglingSchemeSwift;
93+ #endif // LLDB_ENABLE_SWIFT
94+
9495 return Mangled::eManglingSchemeNone;
9596}
9697
@@ -278,6 +279,9 @@ bool Mangled::GetRichManglingInfo(RichManglingContext &context,
278279
279280 case eManglingSchemeRustV0:
280281 case eManglingSchemeD:
282+ #ifdef LLDB_ENABLE_SWIFT
283+ case eManglingSchemeSwift:
284+ #endif
281285 // Rich demangling scheme is not supported
282286 return false ;
283287 }
@@ -318,6 +322,29 @@ ConstString Mangled::GetDemangledName(// BEGIN SWIFT
318322 case eManglingSchemeD:
319323 demangled_name = GetDLangDemangledStr (mangled_name);
320324 break ;
325+ #ifdef LLDB_ENABLE_SWIFT
326+ case eManglingSchemeSwift: {
327+ Log *log = GetLog (LLDBLog::Demangle);
328+ LLDB_LOGF (log, " demangle swift: %s" , mangled_name);
329+ std::string demangled (SwiftLanguageRuntime::DemangleSymbolAsString (
330+ mangled_name, SwiftLanguageRuntime::eTypeName, sc));
331+ // Don't cache the demangled name the function isn't available yet.
332+ if (!sc || !sc->function ) {
333+ LLDB_LOGF (log, " demangle swift: %s -> \" %s\" (not cached)" ,
334+ mangled_name, demangled.c_str ());
335+ return ConstString (demangled);
336+ }
337+ if (demangled.empty ()) {
338+ LLDB_LOGF (log, " demangle swift: %s -> error: failed to demangle" ,
339+ mangled_name);
340+ } else {
341+ LLDB_LOGF (log, " demangle swift: %s -> \" %s\" " , mangled_name,
342+ demangled.c_str ());
343+ m_demangled.SetStringWithMangledCounterpart (demangled, m_mangled);
344+ }
345+ return m_demangled;
346+ }
347+ #endif // LLDB_ENABLE_SWIFT
321348 case eManglingSchemeNone:
322349 llvm_unreachable (" eManglingSchemeNone was handled already" );
323350 }
@@ -327,31 +354,6 @@ ConstString Mangled::GetDemangledName(// BEGIN SWIFT
327354 free (demangled_name);
328355 }
329356 }
330- #ifdef LLDB_ENABLE_SWIFT
331- else if (mangling_scheme == eManglingSchemeNone &&
332- !m_mangled.GetMangledCounterpart (m_demangled) &&
333- SwiftLanguageRuntime::IsSwiftMangledName (m_mangled.GetStringRef ())) {
334- Log *log = GetLog (LLDBLog::Demangle);
335- if (log)
336- log->Printf (" demangle swift: %s" , mangled_name);
337- std::string demangled (SwiftLanguageRuntime::DemangleSymbolAsString (
338- mangled_name, SwiftLanguageRuntime::eTypeName, sc));
339- // Don't cache the demangled name the function isn't available yet.
340- if (!sc || !sc->function )
341- return ConstString (demangled);
342- if (!demangled.empty ()) {
343- m_demangled.SetStringWithMangledCounterpart (demangled,
344- m_mangled);
345- if (log)
346- log->Printf (" demangle swift: %s -> \" %s\" " , mangled_name,
347- demangled.c_str ());
348- } else {
349- if (log)
350- log->Printf (" demangle swift: %s -> error: failed to demangle" ,
351- mangled_name);
352- }
353- }
354- #endif // LLDB_ENABLE_SWIFT
355357 if (m_demangled.IsNull ()) {
356358 // Set the demangled string to the empty string to indicate we tried to
357359 // parse it once and failed.
0 commit comments