Skip to content

Commit 9b056f2

Browse files
authored
Merge pull request #11805 from swiftlang/lldb/mangled-nfc-to-21.x
🍒[lldb][Language] Cherry-pick changes to handling of `Mangled`
2 parents 1d03981 + cc45408 commit 9b056f2

File tree

8 files changed

+60
-14
lines changed

8 files changed

+60
-14
lines changed

lldb/include/lldb/Target/Language.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,9 @@ class Language : public PluginInterface {
326326
///
327327
/// This function should only return true if there is a high confidence
328328
/// that the name actually belongs to this language.
329-
virtual bool SymbolNameFitsToLanguage(Mangled name) const { return false; }
329+
virtual bool SymbolNameFitsToLanguage(const Mangled &name) const {
330+
return false;
331+
}
330332

331333
/// An individual data formatter may apply to several types and cross language
332334
/// boundaries. Each of those languages may want to customize the display of

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ CPlusPlusLanguage::GetFunctionNameInfo(ConstString name) const {
102102
return {func_name_type, ConstString(basename)};
103103
}
104104

105-
bool CPlusPlusLanguage::SymbolNameFitsToLanguage(Mangled mangled) const {
105+
bool CPlusPlusLanguage::SymbolNameFitsToLanguage(const Mangled &mangled) const {
106106
auto mangling_scheme =
107107
Mangled::GetManglingScheme(mangled.GetMangledName().GetStringRef());
108108
return mangling_scheme == Mangled::eManglingSchemeItanium ||

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ class CPlusPlusLanguage : public Language {
9292

9393
static llvm::StringRef GetPluginNameStatic() { return "cplusplus"; }
9494

95-
bool SymbolNameFitsToLanguage(Mangled mangled) const override;
95+
bool SymbolNameFitsToLanguage(const Mangled &mangled) const override;
9696

9797
bool DemangledNameContainsPath(llvm::StringRef path,
9898
ConstString demangled) const override;

lldb/source/Plugins/Language/ObjC/ObjCLanguage.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ ObjCLanguage::GetFunctionNameInfo(ConstString name) const {
235235
return {func_name_type, std::nullopt};
236236
}
237237

238-
bool ObjCLanguage::SymbolNameFitsToLanguage(Mangled mangled) const {
238+
bool ObjCLanguage::SymbolNameFitsToLanguage(const Mangled &mangled) const {
239239
ConstString demangled_name = mangled.GetDemangledName();
240240
if (!demangled_name)
241241
return false;
@@ -1066,3 +1066,10 @@ ObjCLanguage::GetBooleanFromString(llvm::StringRef str) const {
10661066
.Case("NO", {false})
10671067
.Default({});
10681068
}
1069+
1070+
bool ObjCLanguage::IsPossibleObjCMethodName(llvm::StringRef name) {
1071+
if (!name.starts_with("-[") && !name.starts_with("+["))
1072+
return false;
1073+
1074+
return name.ends_with("]");
1075+
}

lldb/source/Plugins/Language/ObjC/ObjCLanguage.h

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ class ObjCLanguage : public Language {
145145
std::pair<lldb::FunctionNameType, std::optional<ConstString>>
146146
GetFunctionNameInfo(ConstString name) const override;
147147

148-
bool SymbolNameFitsToLanguage(Mangled mangled) const override;
148+
bool SymbolNameFitsToLanguage(const Mangled &mangled) const override;
149149

150150
lldb::TypeCategoryImplSP GetFormatters() override;
151151

@@ -175,13 +175,7 @@ class ObjCLanguage : public Language {
175175

176176
static llvm::StringRef GetPluginNameStatic() { return "objc"; }
177177

178-
static bool IsPossibleObjCMethodName(const char *name) {
179-
if (!name)
180-
return false;
181-
bool starts_right = (name[0] == '+' || name[0] == '-') && name[1] == '[';
182-
bool ends_right = (name[strlen(name) - 1] == ']');
183-
return (starts_right && ends_right);
184-
}
178+
static bool IsPossibleObjCMethodName(llvm::StringRef name);
185179

186180
static bool IsPossibleObjCSelector(const char *name) {
187181
if (!name)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ void SwiftLanguage::Terminate() {
107107
PluginManager::UnregisterPlugin(CreateInstance);
108108
}
109109

110-
bool SwiftLanguage::SymbolNameFitsToLanguage(Mangled mangled) const {
110+
bool SwiftLanguage::SymbolNameFitsToLanguage(const Mangled &mangled) const {
111111
return SwiftLanguageRuntime::IsSwiftMangledName(
112112
mangled.GetMangledName().GetStringRef());
113113
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ class SwiftLanguage : public Language {
134134

135135
static llvm::StringRef GetPluginNameStatic() { return "swift"; }
136136

137-
bool SymbolNameFitsToLanguage(Mangled mangled) const override;
137+
bool SymbolNameFitsToLanguage(const Mangled &mangled) const override;
138138

139139
llvm::StringRef GetInstanceVariableName() override { return "self"; }
140140

lldb/unittests/Language/ObjC/ObjCLanguageTest.cpp

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,3 +112,46 @@ TEST(ObjCLanguage, InvalidMethodNameParsing) {
112112
EXPECT_FALSE(lax_method.has_value());
113113
}
114114
}
115+
116+
struct ObjCMethodTestCase {
117+
llvm::StringRef name;
118+
bool is_valid;
119+
};
120+
121+
struct ObjCMethodNameTextFiture
122+
: public testing::TestWithParam<ObjCMethodTestCase> {};
123+
124+
static ObjCMethodTestCase g_objc_method_name_test_cases[] = {
125+
{"", false},
126+
{"+[Uh oh!", false},
127+
{"-[Definitely not...", false},
128+
{"[Nice try ] :)", false},
129+
{"+MaybeIfYouSquintYourEyes]", false},
130+
{"?[Tricky]", false},
131+
{"[]", false},
132+
{"-[a", false},
133+
{"+[a", false},
134+
{"-]a]", false},
135+
{"+]a]", false},
136+
137+
// FIXME: should these count as valid?
138+
{"+[]", true},
139+
{"-[]", true},
140+
{"-[[]", true},
141+
{"+[[]", true},
142+
{"+[a ]", true},
143+
{"-[a ]", true},
144+
145+
// Valid names
146+
{"+[a a]", true},
147+
{"-[a a]", true},
148+
};
149+
150+
TEST_P(ObjCMethodNameTextFiture, TestIsPossibleObjCMethodName) {
151+
// Tests ObjCLanguage::IsPossibleObjCMethodName
152+
auto [name, expect_valid] = GetParam();
153+
EXPECT_EQ(ObjCLanguage::IsPossibleObjCMethodName(name), expect_valid);
154+
}
155+
156+
INSTANTIATE_TEST_SUITE_P(ObjCMethodNameTests, ObjCMethodNameTextFiture,
157+
testing::ValuesIn(g_objc_method_name_test_cases));

0 commit comments

Comments
 (0)