[Lldb-commits] [lldb] [lldb][Mangled][NFCI] Use early-return style in GetDemangledName (PR #130622)
Michael Buch via lldb-commits
lldb-commits at lists.llvm.org
Mon Mar 10 08:13:20 PDT 2025
https://github.com/Michael137 created https://github.com/llvm/llvm-project/pull/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
>From abe0489d30f4784606039ba7b3d189c99ff691a7 Mon Sep 17 00:00:00 2001
From: Michael Buch <michaelbuch12 at gmail.com>
Date: Mon, 10 Mar 2025 15:00:24 +0000
Subject: [PATCH] [lldb][Mangled][NFCI] Use early-return style in
GetDemangledName
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
---
lldb/source/Core/Mangled.cpp | 89 ++++++++++++++++++------------------
1 file changed, 45 insertions(+), 44 deletions(-)
diff --git a/lldb/source/Core/Mangled.cpp b/lldb/source/Core/Mangled.cpp
index 51c22495a16d7..ddaaedea04183 100644
--- a/lldb/source/Core/Mangled.cpp
+++ b/lldb/source/Core/Mangled.cpp
@@ -270,50 +270,51 @@ bool Mangled::GetRichManglingInfo(RichManglingContext &context,
// name. The result is cached and will be kept until a new string value is
// supplied to this object, or until the end of the object's lifetime.
ConstString Mangled::GetDemangledName() const {
- // Check to make sure we have a valid mangled name and that we haven't
- // already decoded our mangled name.
- if (m_mangled && m_demangled.IsNull()) {
- // Don't bother running anything that isn't mangled
- const char *mangled_name = m_mangled.GetCString();
- ManglingScheme mangling_scheme =
- GetManglingScheme(m_mangled.GetStringRef());
- if (mangling_scheme != eManglingSchemeNone &&
- !m_mangled.GetMangledCounterpart(m_demangled)) {
- // We didn't already mangle this name, demangle it and if all goes well
- // add it to our map.
- char *demangled_name = nullptr;
- switch (mangling_scheme) {
- case eManglingSchemeMSVC:
- demangled_name = GetMSVCDemangledStr(mangled_name);
- break;
- case eManglingSchemeItanium: {
- demangled_name = GetItaniumDemangledStr(mangled_name);
- break;
- }
- case eManglingSchemeRustV0:
- demangled_name = GetRustV0DemangledStr(m_mangled);
- break;
- case eManglingSchemeD:
- demangled_name = GetDLangDemangledStr(m_mangled);
- break;
- case eManglingSchemeSwift:
- // Demangling a swift name requires the swift compiler. This is
- // explicitly unsupported on llvm.org.
- break;
- case eManglingSchemeNone:
- llvm_unreachable("eManglingSchemeNone was handled already");
- }
- if (demangled_name) {
- m_demangled.SetStringWithMangledCounterpart(
- llvm::StringRef(demangled_name), m_mangled);
- free(demangled_name);
- }
- }
- if (m_demangled.IsNull()) {
- // Set the demangled string to the empty string to indicate we tried to
- // parse it once and failed.
- m_demangled.SetCString("");
- }
+ if (!m_mangled)
+ return m_demangled;
+
+ // Re-use previously demangled names.
+ if (!m_demangled.IsNull())
+ return m_demangled;
+
+ if (m_mangled.GetMangledCounterpart(m_demangled) && !m_demangled.IsNull())
+ return m_demangled;
+
+ // We didn't already mangle this name, demangle it and if all goes well
+ // add it to our map.
+ char *demangled_name = nullptr;
+ switch (GetManglingScheme(m_mangled.GetStringRef())) {
+ case eManglingSchemeMSVC:
+ demangled_name = GetMSVCDemangledStr(m_mangled);
+ break;
+ case eManglingSchemeItanium: {
+ demangled_name = GetItaniumDemangledStr(m_mangled.GetCString());
+ break;
+ }
+ case eManglingSchemeRustV0:
+ demangled_name = GetRustV0DemangledStr(m_mangled);
+ break;
+ case eManglingSchemeD:
+ demangled_name = GetDLangDemangledStr(m_mangled);
+ break;
+ case eManglingSchemeSwift:
+ // Demangling a swift name requires the swift compiler. This is
+ // explicitly unsupported on llvm.org.
+ break;
+ case eManglingSchemeNone:
+ // Don't bother demangling anything that isn't mangled.
+ break;
+ }
+
+ if (demangled_name) {
+ m_demangled.SetStringWithMangledCounterpart(demangled_name, m_mangled);
+ free(demangled_name);
+ }
+
+ if (m_demangled.IsNull()) {
+ // Set the demangled string to the empty string to indicate we tried to
+ // parse it once and failed.
+ m_demangled.SetCString("");
}
return m_demangled;
More information about the lldb-commits
mailing list