From d89e864d97926e1fc2f6e40a4a8aef112ab467e6 Mon Sep 17 00:00:00 2001 From: Charles Zablit Date: Tue, 9 Sep 2025 14:45:12 +0100 Subject: [PATCH] [NFC][lldb] de duplicate TrackingNodePrinter finalize logic --- lldb/source/Core/Mangled.cpp | 15 --------- .../Plugins/Language/Swift/SwiftMangled.h | 31 +++++++++++++++++++ .../Core/SwiftDemanglingPartsTest.cpp | 15 --------- 3 files changed, 31 insertions(+), 30 deletions(-) diff --git a/lldb/source/Core/Mangled.cpp b/lldb/source/Core/Mangled.cpp index 799d079e1bfca..6d679e63af3d8 100644 --- a/lldb/source/Core/Mangled.cpp +++ b/lldb/source/Core/Mangled.cpp @@ -168,21 +168,6 @@ GetSwiftDemangledStr(ConstString m_mangled, const SymbolContext *sc, } auto [demangled, info] = SwiftLanguageRuntime::TrackedDemangleSymbolAsString( mangled_name, demangle_mode, sc); - // TODO: The logic below should be in the NodePrinter. - info.PrefixRange.second = - std::min(info.BasenameRange.first, info.ArgumentsRange.first); - info.SuffixRange.first = - std::max(info.BasenameRange.second, info.ArgumentsRange.second); - info.SuffixRange.second = demangled.length(); - if (info.hasBasename() && info.hasArguments()) { - if (info.hasTemplateArguments() && info.TemplateArgumentsRange.first > 0) { - info.NameQualifiersRange.second = std::min( - info.ArgumentsRange.first, info.TemplateArgumentsRange.first); - } else { - info.NameQualifiersRange.second = info.ArgumentsRange.first; - } - info.NameQualifiersRange.first = info.BasenameRange.second; - } // Don't cache the demangled name if the function isn't available yet. // Only cache eFullName demangled functions to keep the cache consistent. diff --git a/lldb/source/Plugins/Language/Swift/SwiftMangled.h b/lldb/source/Plugins/Language/Swift/SwiftMangled.h index 2ebbc2ec57c9d..85b893e32ddfc 100644 --- a/lldb/source/Plugins/Language/Swift/SwiftMangled.h +++ b/lldb/source/Plugins/Language/Swift/SwiftMangled.h @@ -29,6 +29,13 @@ class TrackingNodePrinter : public NodePrinter { lldb_private::DemangledNameInfo getInfo() { return info; } + void printRoot(NodePointer root) override { + NodePrinter::printRoot(root); + finalizePrefixRange(); + finalizeSuffixRange(); + finalizeNameQualifiersRange(); + } + private: lldb_private::DemangledNameInfo info; std::optional parametersDepth; @@ -118,6 +125,30 @@ class TrackingNodePrinter : public NodePrinter { showTypes); endParameters(depth); } + + void finalizePrefixRange() { + info.PrefixRange.second = + std::min(info.BasenameRange.first, info.ArgumentsRange.first); + } + + void finalizeSuffixRange() { + info.SuffixRange.first = + std::max(info.BasenameRange.second, info.ArgumentsRange.second); + info.SuffixRange.second = Printer.getStreamLength(); + } + + void finalizeNameQualifiersRange() { + if (!info.hasBasename() || !info.hasArguments()) + return; + + if (info.hasTemplateArguments() && info.TemplateArgumentsRange.first > 0) { + info.NameQualifiersRange.second = std::min( + info.ArgumentsRange.first, info.TemplateArgumentsRange.first); + } else { + info.NameQualifiersRange.second = info.ArgumentsRange.first; + } + info.NameQualifiersRange.first = info.BasenameRange.second; + } }; #endif // liblldb_SwiftMangled_h_ diff --git a/lldb/unittests/Core/SwiftDemanglingPartsTest.cpp b/lldb/unittests/Core/SwiftDemanglingPartsTest.cpp index b8c9f203fe8ba..16618f2cc97ad 100644 --- a/lldb/unittests/Core/SwiftDemanglingPartsTest.cpp +++ b/lldb/unittests/Core/SwiftDemanglingPartsTest.cpp @@ -1580,21 +1580,6 @@ TEST_P(SwiftDemanglingPartsTestFixture, SwiftDemanglingParts) { swift::Demangle::demangleSymbolAsString(std::string(mangled), printer); std::string demangled = printer.takeString(); DemangledNameInfo nameInfo = printer.getInfo(); - nameInfo.PrefixRange.second = - std::min(nameInfo.BasenameRange.first, nameInfo.ArgumentsRange.first); - nameInfo.SuffixRange.first = - std::max(nameInfo.BasenameRange.second, nameInfo.ArgumentsRange.second); - nameInfo.SuffixRange.second = demangled.length(); - if (nameInfo.hasBasename() && nameInfo.hasArguments()) { - if (nameInfo.hasTemplateArguments() && - nameInfo.TemplateArgumentsRange.first > 0) { - nameInfo.NameQualifiersRange.second = std::min( - nameInfo.ArgumentsRange.first, nameInfo.TemplateArgumentsRange.first); - } else { - nameInfo.NameQualifiersRange.second = info.ArgumentsRange.first; - } - nameInfo.NameQualifiersRange.first = info.BasenameRange.second; - } EXPECT_EQ(nameInfo.BasenameRange, info.BasenameRange); EXPECT_EQ(nameInfo.NameQualifiersRange, info.NameQualifiersRange);