@@ -148,6 +148,41 @@ void Mangled::SetValue(ConstString name) {
|
148 | 148 | }
|
149 | 149 | }
|
150 | 150 |
|
| 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 | + |
151 | 186 | // Local helpers for different demangling implementations.
|
152 | 187 | static char *GetMSVCDemangledStr(llvm::StringRef M) {
|
153 | 188 | char *demangled_cstr = llvm::microsoftDemangle(
|
@@ -349,36 +384,7 @@ ConstString Mangled::GetDemangledNameImpl(bool force, // BEGIN SWIFT
|
349 | 384 | // Demangling a swift name requires the swift compiler. This is
|
350 | 385 | // explicitly unsupported on llvm.org.
|
351 | 386 | #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); |
382 | 388 | #endif // LLDB_ENABLE_SWIFT
|
383 | 389 | break;
|
384 | 390 | case eManglingSchemeNone:
|
|
0 commit comments