Skip to content

Commit 15070b3

Browse files
committed
Merge commit '7ecb0d03a4d7' from llvm.org/main into next
2 parents c1bfe57 + 7ecb0d0 commit 15070b3

File tree

1 file changed

+66
-68
lines changed

1 file changed

+66
-68
lines changed

lldb/source/Core/Mangled.cpp

Lines changed: 66 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -278,77 +278,75 @@ bool Mangled::GetRichManglingInfo(RichManglingContext &context,
278278
// class will need to use this accessor if it wishes to decode the demangled
279279
// name. The result is cached and will be kept until a new string value is
280280
// 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.
314312
#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);
346323
}
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);
351331
}
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("");
352350
}
353351

354352
return m_demangled;

0 commit comments

Comments
 (0)