Skip to content

Commit 1457b7d

Browse files
committed
Merge commit '993220a99cce' from llvm.org/main into next
This implements the SwiftLanguage version of the function. Conflicts: lldb/source/Core/Mangled.cpp
2 parents e1e0c38 + 993220a commit 1457b7d

File tree

6 files changed

+69
-52
lines changed

6 files changed

+69
-52
lines changed

lldb/include/lldb/Target/Language.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,14 @@ class Language : public PluginInterface {
243243
FunctionNameRepresentation representation,
244244
Stream &s);
245245

246+
virtual ConstString
247+
GetDemangledFunctionNameWithoutArguments(Mangled mangled) const {
248+
if (ConstString demangled = mangled.GetDemangledName())
249+
return demangled;
250+
251+
return mangled.GetMangledName();
252+
}
253+
246254
virtual void GetExceptionResolverDescription(bool catch_on, bool throw_on,
247255
Stream &s);
248256

lldb/source/Core/Mangled.cpp

Lines changed: 7 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,14 @@
99
#include "lldb/Core/Mangled.h"
1010

1111
#include "lldb/Core/RichManglingContext.h"
12+
#include "lldb/Target/Language.h"
1213
#include "lldb/Utility/ConstString.h"
1314
#include "lldb/Utility/Log.h"
1415
#include "lldb/Utility/Logging.h"
1516
#include "lldb/Utility/RegularExpression.h"
1617
#include "lldb/Utility/Stream.h"
1718
#include "lldb/lldb-enumerations.h"
1819

19-
#include "Plugins/Language/CPlusPlus/CPlusPlusLanguage.h"
20-
2120
#include "llvm/ADT/StringRef.h"
2221
#include "llvm/Demangle/Demangle.h"
2322
#include "llvm/Support/Compiler.h"
@@ -47,49 +46,6 @@ static inline bool cstring_is_mangled(llvm::StringRef s) {
4746
;
4847
}
4948

50-
static ConstString GetDemangledNameWithoutArguments(ConstString mangled,
51-
ConstString demangled) {
52-
const char *mangled_name_cstr = mangled.GetCString();
53-
54-
if (demangled && mangled_name_cstr && mangled_name_cstr[0]) {
55-
if (mangled_name_cstr[0] == '_' && mangled_name_cstr[1] == 'Z' &&
56-
(mangled_name_cstr[2] != 'T' && // avoid virtual table, VTT structure,
57-
// typeinfo structure, and typeinfo
58-
// mangled_name
59-
mangled_name_cstr[2] != 'G' && // avoid guard variables
60-
mangled_name_cstr[2] != 'Z')) // named local entities (if we eventually
61-
// handle eSymbolTypeData, we will want
62-
// this back)
63-
{
64-
CPlusPlusLanguage::MethodName cxx_method(demangled);
65-
if (!cxx_method.GetBasename().empty()) {
66-
std::string shortname;
67-
if (!cxx_method.GetContext().empty())
68-
shortname = cxx_method.GetContext().str() + "::";
69-
shortname += cxx_method.GetBasename().str();
70-
return ConstString(shortname);
71-
}
72-
}
73-
#ifdef LLDB_ENABLE_SWIFT
74-
else if (SwiftLanguageRuntime::IsSwiftMangledName(demangled.GetStringRef())) {
75-
lldb_private::ConstString basename;
76-
bool is_method = false;
77-
if (SwiftLanguageRuntime::MethodName::ExtractFunctionBasenameFromMangled(
78-
mangled, basename, is_method)) {
79-
if (basename && basename != mangled) {
80-
g_most_recent_mangled_to_name_sans_args.first = mangled;
81-
g_most_recent_mangled_to_name_sans_args.second = basename;
82-
return (g_most_recent_mangled_to_name_sans_args.second);
83-
}
84-
}
85-
}
86-
#endif // LLDB_ENABLE_SWIFT
87-
}
88-
if (demangled)
89-
return demangled;
90-
return mangled;
91-
}
92-
9349
// BEGIN SWIFT
9450
#pragma mark DisplayDemangledNamesCache
9551

@@ -456,17 +412,16 @@ ConstString Mangled::GetName(Mangled::NamePreference preference,
456412
if (preference == ePreferMangled && m_mangled)
457413
return m_mangled;
458414

459-
ConstString demangled = GetDemangledName(// BEGIN SWIFT
460-
sc
461-
// END SWIFT
462-
);
415+
// Call the accessor to make sure we get a demangled name in case it hasn't
416+
// been demangled yet...
417+
ConstString demangled = GetDemangledName(sc);
463418

464419
if (preference == ePreferDemangledWithoutArguments) {
465-
return GetDemangledNameWithoutArguments(m_mangled, demangled);
420+
if (Language *lang = Language::FindPlugin(GuessLanguage())) {
421+
return lang->GetDemangledFunctionNameWithoutArguments(*this);
422+
}
466423
}
467424
if (preference == ePreferDemangled) {
468-
// Call the accessor to make sure we get a demangled name in case it hasn't
469-
// been demangled yet...
470425
if (demangled)
471426
return demangled;
472427
return m_mangled;

lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,35 @@ bool CPlusPlusLanguage::SymbolNameFitsToLanguage(Mangled mangled) const {
6464
return mangled_name && CPlusPlusLanguage::IsCPPMangledName(mangled_name);
6565
}
6666

67+
ConstString CPlusPlusLanguage::GetDemangledFunctionNameWithoutArguments(
68+
Mangled mangled) const {
69+
const char *mangled_name_cstr = mangled.GetMangledName().GetCString();
70+
ConstString demangled_name = mangled.GetDemangledName();
71+
if (demangled_name && mangled_name_cstr && mangled_name_cstr[0]) {
72+
if (mangled_name_cstr[0] == '_' && mangled_name_cstr[1] == 'Z' &&
73+
(mangled_name_cstr[2] != 'T' && // avoid virtual table, VTT structure,
74+
// typeinfo structure, and typeinfo
75+
// mangled_name
76+
mangled_name_cstr[2] != 'G' && // avoid guard variables
77+
mangled_name_cstr[2] != 'Z')) // named local entities (if we
78+
// eventually handle eSymbolTypeData,
79+
// we will want this back)
80+
{
81+
CPlusPlusLanguage::MethodName cxx_method(demangled_name);
82+
if (!cxx_method.GetBasename().empty()) {
83+
std::string shortname;
84+
if (!cxx_method.GetContext().empty())
85+
shortname = cxx_method.GetContext().str() + "::";
86+
shortname += cxx_method.GetBasename().str();
87+
return ConstString(shortname);
88+
}
89+
}
90+
}
91+
if (demangled_name)
92+
return demangled_name;
93+
return mangled.GetMangledName();
94+
}
95+
6796
// PluginInterface protocol
6897

6998
lldb_private::ConstString CPlusPlusLanguage::GetPluginName() {

lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,9 @@ class CPlusPlusLanguage : public Language {
106106

107107
bool SymbolNameFitsToLanguage(Mangled mangled) const override;
108108

109+
ConstString
110+
GetDemangledFunctionNameWithoutArguments(Mangled mangled) const override;
111+
109112
static bool IsCPPMangledName(llvm::StringRef name);
110113

111114
// Extract C++ context and identifier from a string using heuristic matching

lldb/source/Plugins/Language/Swift/SwiftLanguage.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1483,6 +1483,25 @@ void SwiftLanguage::GetExceptionResolverDescription(bool catch_on,
14831483
s.Printf("Swift Error breakpoint");
14841484
}
14851485

1486+
ConstString SwiftLanguage::GetDemangledFunctionNameWithoutArguments(Mangled mangled) const {
1487+
const char *mangled_name_cstr = mangled.GetMangledName().GetCString();
1488+
ConstString demangled_name = mangled.GetDemangledName();
1489+
if (demangled_name && mangled_name_cstr && mangled_name_cstr[0]) {
1490+
if (SwiftLanguageRuntime::IsSwiftMangledName(demangled.GetStringRef())) {
1491+
lldb_private::ConstString basename;
1492+
bool is_method = false;
1493+
if (SwiftLanguageRuntime::MethodName::ExtractFunctionBasenameFromMangled(
1494+
mangled, basename, is_method)) {
1495+
if (basename && basename != mangled)
1496+
return basename);
1497+
}
1498+
}
1499+
}
1500+
if (demangled_name)
1501+
return demangled_name;
1502+
return mangled.GetMangledName();
1503+
}
1504+
14861505
//------------------------------------------------------------------
14871506
// PluginInterface protocol
14881507
//------------------------------------------------------------------

lldb/source/Plugins/Language/Swift/SwiftLanguage.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,9 @@ class SwiftLanguage : public Language {
7272
void GetExceptionResolverDescription(bool catch_on, bool throw_on,
7373
Stream &s) override;
7474

75+
ConstString
76+
GetDemangledFunctionNameWithoutArguments(Mangled mangled) const override;
77+
7578
//------------------------------------------------------------------
7679
// Static Functions
7780
//------------------------------------------------------------------

0 commit comments

Comments
 (0)