File tree

1 file changed

+36
-30
lines changed

1 file changed

+36
-30
lines changed
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,41 @@ void Mangled::SetValue(ConstString name) {
148148
}
149149
}
150150

151+
// BEGIN SWIFT
152+
#ifdef LLDB_ENABLE_SWIFT
153+
static ConstString GetSwiftDemangledStr(ConstString m_mangled,
154+
const SymbolContext *sc,
155+
ConstString &m_demangled) {
156+
const char *mangled_name = m_mangled.GetCString();
157+
Log *log = GetLog(LLDBLog::Demangle);
158+
LLDB_LOGF(log, "demangle swift: %s", mangled_name);
159+
auto [demangled, info] = SwiftLanguageRuntime::TrackedDemangleSymbolAsString(
160+
mangled_name, SwiftLanguageRuntime::eSimplified, sc);
161+
info.PrefixRange.second =
162+
std::min(info.BasenameRange.first, info.ArgumentsRange.first);
163+
info.SuffixRange.first =
164+
std::max(info.BasenameRange.second, info.ArgumentsRange.second);
165+
info.SuffixRange.second = demangled.length();
166+
167+
// Don't cache the demangled name the function isn't available yet.
168+
if (!sc || !sc->function) {
169+
LLDB_LOGF(log, "demangle swift: %s -> \"%s\" (not cached)", mangled_name,
170+
demangled.c_str());
171+
return ConstString(demangled);
172+
}
173+
if (demangled.empty()) {
174+
LLDB_LOGF(log, "demangle swift: %s -> error: failed to demangle",
175+
mangled_name);
176+
} else {
177+
LLDB_LOGF(log, "demangle swift: %s -> \"%s\"", mangled_name,
178+
demangled.c_str());
179+
m_demangled.SetStringWithMangledCounterpart(demangled, m_mangled);
180+
}
181+
return m_demangled;
182+
}
183+
#endif // LLDB_ENABLE_SWIFT
184+
// END SWIFT
185+
151186
// Local helpers for different demangling implementations.
152187
static char *GetMSVCDemangledStr(llvm::StringRef M) {
153188
char *demangled_cstr = llvm::microsoftDemangle(
@@ -349,36 +384,7 @@ ConstString Mangled::GetDemangledNameImpl(bool force, // BEGIN SWIFT
349384
// Demangling a swift name requires the swift compiler. This is
350385
// explicitly unsupported on llvm.org.
351386
#ifdef LLDB_ENABLE_SWIFT
352-
{
353-
const char *mangled_name = m_mangled.GetCString();
354-
Log *log = GetLog(LLDBLog::Demangle);
355-
LLDB_LOGF(log, "demangle swift: %s", mangled_name);
356-
auto [demangled, info] =
357-
SwiftLanguageRuntime::TrackedDemangleSymbolAsString(
358-
mangled_name, SwiftLanguageRuntime::eSimplified, sc);
359-
info.PrefixRange.second =
360-
std::min(info.BasenameRange.first, info.ArgumentsRange.first);
361-
info.SuffixRange.first =
362-
std::max(info.BasenameRange.second, info.ArgumentsRange.second);
363-
info.SuffixRange.second = demangled.length();
364-
m_demangled_info.emplace(info);
365-
366-
// Don't cache the demangled name the function isn't available yet.
367-
if (!sc || !sc->function) {
368-
LLDB_LOGF(log, "demangle swift: %s -> \"%s\" (not cached)", mangled_name,
369-
demangled.c_str());
370-
return ConstString(demangled);
371-
}
372-
if (demangled.empty()) {
373-
LLDB_LOGF(log, "demangle swift: %s -> error: failed to demangle",
374-
mangled_name);
375-
} else {
376-
LLDB_LOGF(log, "demangle swift: %s -> \"%s\"", mangled_name,
377-
demangled.c_str());
378-
m_demangled.SetStringWithMangledCounterpart(demangled, m_mangled);
379-
}
380-
return m_demangled;
381-
}
387+
return GetSwiftDemangledStr(m_mangled, sc, m_demangled);
382388
#endif // LLDB_ENABLE_SWIFT
383389
break;
384390
case eManglingSchemeNone:

0 commit comments

Comments
 (0)