Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 0 additions & 15 deletions lldb/source/Core/Mangled.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
31 changes: 31 additions & 0 deletions lldb/source/Plugins/Language/Swift/SwiftMangled.h
Original file line number Diff line number Diff line change
Expand Up @@ -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<unsigned> parametersDepth;
Expand Down Expand Up @@ -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_
15 changes: 0 additions & 15 deletions lldb/unittests/Core/SwiftDemanglingPartsTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down