diff options
author | Michael Buch <michaelbuch12@gmail.com> | 2025-08-07 14:39:52 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-08-07 14:39:52 +0100 |
commit | fac7453d2ca7ebe33dec3d60211c0374a2bb69cd (patch) | |
tree | ffb0e198e63acc4f32ac78afe45fbded1521eb0b /lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp | |
parent | 900d20d0dc7b228cba9df98ed3ec713098c79342 (diff) | |
download | llvm-fac7453d2ca7ebe33dec3d60211c0374a2bb69cd.zip llvm-fac7453d2ca7ebe33dec3d60211c0374a2bb69cd.tar.gz llvm-fac7453d2ca7ebe33dec3d60211c0374a2bb69cd.tar.bz2 |
[lldb][Mangled] Move SuffixRange computation into TrackingOutputBuffer (#152483)
This way all the tracking is self-contained in `TrackingOutputBuffer`
and we can test the `SuffixRange` properly.
Diffstat (limited to 'lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp')
-rw-r--r-- | lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp index 3bc8708..3118ff1 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp @@ -392,13 +392,16 @@ GetDemangledScope(const SymbolContext &sc) { return CPlusPlusLanguage::GetDemangledScope(demangled_name, info); } -/// Handles anything printed after the FunctionEncoding ItaniumDemangle -/// node. Most notably the DotSuffix node. -/// -/// FIXME: the suffix should also have an associated -/// CPlusPlusLanguage::GetDemangledFunctionSuffix -/// once we start setting the `DemangledNameInfo::SuffixRange` -/// from inside the `TrackingOutputBuffer`. +llvm::Expected<llvm::StringRef> +CPlusPlusLanguage::GetDemangledFunctionSuffix(llvm::StringRef demangled, + const DemangledNameInfo &info) { + if (!info.hasSuffix()) + return llvm::createStringError("Suffix range for '%s' is invalid.", + demangled.data()); + + return demangled.slice(info.SuffixRange.first, info.SuffixRange.second); +} + static llvm::Expected<llvm::StringRef> GetDemangledFunctionSuffix(const SymbolContext &sc) { auto info_or_err = GetAndValidateInfo(sc); @@ -407,11 +410,7 @@ GetDemangledFunctionSuffix(const SymbolContext &sc) { auto [demangled_name, info] = *info_or_err; - if (!info.hasSuffix()) - return llvm::createStringError("Suffix range for '%s' is invalid.", - demangled_name.data()); - - return demangled_name.slice(info.SuffixRange.first, info.SuffixRange.second); + return CPlusPlusLanguage::GetDemangledFunctionSuffix(demangled_name, info); } llvm::Expected<llvm::StringRef> @@ -2424,7 +2423,7 @@ bool CPlusPlusLanguage::HandleFrameFormatVariable( return true; } case FormatEntity::Entry::Type::FunctionSuffix: { - auto suffix_or_err = GetDemangledFunctionSuffix(sc); + auto suffix_or_err = ::GetDemangledFunctionSuffix(sc); if (!suffix_or_err) { LLDB_LOG_ERROR( GetLog(LLDBLog::Language), suffix_or_err.takeError(), |