Skip to content

Commit 7ecb0d0

Browse files
authored
[lldb][Mangled] Use early-return style in GetDemangledName (#130622)
This patch refactors `Mangled::GetDemangledName` to use LLVM's preferred early-return style. I'm planning on introducing a way to force re-demangling of names in a future patch, and this stylisitc cleanup makes that easier to reason about. Also performed small cleanups where I could: * we can handle `eManglingSchemeNone` inside the switch instead of a separate if-block * removed some redundant explicit StringRef<->C-string conversions
1 parent 8758e5f commit 7ecb0d0

File tree

1 file changed

+45
-44
lines changed

1 file changed

+45
-44
lines changed

lldb/source/Core/Mangled.cpp

Lines changed: 45 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -270,50 +270,51 @@ bool Mangled::GetRichManglingInfo(RichManglingContext &context,
270270
// name. The result is cached and will be kept until a new string value is
271271
// supplied to this object, or until the end of the object's lifetime.
272272
ConstString Mangled::GetDemangledName() const {
273-
// Check to make sure we have a valid mangled name and that we haven't
274-
// already decoded our mangled name.
275-
if (m_mangled && m_demangled.IsNull()) {
276-
// Don't bother running anything that isn't mangled
277-
const char *mangled_name = m_mangled.GetCString();
278-
ManglingScheme mangling_scheme =
279-
GetManglingScheme(m_mangled.GetStringRef());
280-
if (mangling_scheme != eManglingSchemeNone &&
281-
!m_mangled.GetMangledCounterpart(m_demangled)) {
282-
// We didn't already mangle this name, demangle it and if all goes well
283-
// add it to our map.
284-
char *demangled_name = nullptr;
285-
switch (mangling_scheme) {
286-
case eManglingSchemeMSVC:
287-
demangled_name = GetMSVCDemangledStr(mangled_name);
288-
break;
289-
case eManglingSchemeItanium: {
290-
demangled_name = GetItaniumDemangledStr(mangled_name);
291-
break;
292-
}
293-
case eManglingSchemeRustV0:
294-
demangled_name = GetRustV0DemangledStr(m_mangled);
295-
break;
296-
case eManglingSchemeD:
297-
demangled_name = GetDLangDemangledStr(m_mangled);
298-
break;
299-
case eManglingSchemeSwift:
300-
// Demangling a swift name requires the swift compiler. This is
301-
// explicitly unsupported on llvm.org.
302-
break;
303-
case eManglingSchemeNone:
304-
llvm_unreachable("eManglingSchemeNone was handled already");
305-
}
306-
if (demangled_name) {
307-
m_demangled.SetStringWithMangledCounterpart(
308-
llvm::StringRef(demangled_name), m_mangled);
309-
free(demangled_name);
310-
}
311-
}
312-
if (m_demangled.IsNull()) {
313-
// Set the demangled string to the empty string to indicate we tried to
314-
// parse it once and failed.
315-
m_demangled.SetCString("");
316-
}
273+
if (!m_mangled)
274+
return m_demangled;
275+
276+
// Re-use previously demangled names.
277+
if (!m_demangled.IsNull())
278+
return m_demangled;
279+
280+
if (m_mangled.GetMangledCounterpart(m_demangled) && !m_demangled.IsNull())
281+
return m_demangled;
282+
283+
// We didn't already mangle this name, demangle it and if all goes well
284+
// add it to our map.
285+
char *demangled_name = nullptr;
286+
switch (GetManglingScheme(m_mangled.GetStringRef())) {
287+
case eManglingSchemeMSVC:
288+
demangled_name = GetMSVCDemangledStr(m_mangled);
289+
break;
290+
case eManglingSchemeItanium: {
291+
demangled_name = GetItaniumDemangledStr(m_mangled.GetCString());
292+
break;
293+
}
294+
case eManglingSchemeRustV0:
295+
demangled_name = GetRustV0DemangledStr(m_mangled);
296+
break;
297+
case eManglingSchemeD:
298+
demangled_name = GetDLangDemangledStr(m_mangled);
299+
break;
300+
case eManglingSchemeSwift:
301+
// Demangling a swift name requires the swift compiler. This is
302+
// explicitly unsupported on llvm.org.
303+
break;
304+
case eManglingSchemeNone:
305+
// Don't bother demangling anything that isn't mangled.
306+
break;
307+
}
308+
309+
if (demangled_name) {
310+
m_demangled.SetStringWithMangledCounterpart(demangled_name, m_mangled);
311+
free(demangled_name);
312+
}
313+
314+
if (m_demangled.IsNull()) {
315+
// Set the demangled string to the empty string to indicate we tried to
316+
// parse it once and failed.
317+
m_demangled.SetCString("");
317318
}
318319

319320
return m_demangled;

0 commit comments

Comments
 (0)