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
7 changes: 7 additions & 0 deletions lldb/source/Plugins/Language/ObjC/ObjCLanguage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1065,3 +1065,10 @@ ObjCLanguage::GetBooleanFromString(llvm::StringRef str) const {
.Case("NO", {false})
.Default({});
}

bool ObjCLanguage::IsPossibleObjCMethodName(llvm::StringRef name) {
if (!name.starts_with("-[") && !name.starts_with("+["))
return false;

return name.ends_with("]");
}
8 changes: 1 addition & 7 deletions lldb/source/Plugins/Language/ObjC/ObjCLanguage.h
Original file line number Diff line number Diff line change
Expand Up @@ -175,13 +175,7 @@ class ObjCLanguage : public Language {

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

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

static bool IsPossibleObjCSelector(const char *name) {
if (!name)
Expand Down
43 changes: 43 additions & 0 deletions lldb/unittests/Language/ObjC/ObjCLanguageTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -112,3 +112,46 @@ TEST(ObjCLanguage, InvalidMethodNameParsing) {
EXPECT_FALSE(lax_method.has_value());
}
}

struct ObjCMethodTestCase {
llvm::StringRef name;
bool is_valid;
};

struct ObjCMethodNameTextFiture
: public testing::TestWithParam<ObjCMethodTestCase> {};

static ObjCMethodTestCase g_objc_method_name_test_cases[] = {
{"", false},
{"+[Uh oh!", false},
{"-[Definitely not...", false},
{"[Nice try ] :)", false},
{"+MaybeIfYouSquintYourEyes]", false},
{"?[Tricky]", false},
{"[]", false},
{"-[a", false},
{"+[a", false},
{"-]a]", false},
{"+]a]", false},

// FIXME: should these count as valid?
{"+[]", true},
{"-[]", true},
{"-[[]", true},
{"+[[]", true},
{"+[a ]", true},
{"-[a ]", true},

// Valid names
{"+[a a]", true},
{"-[a a]", true},
};

TEST_P(ObjCMethodNameTextFiture, TestIsPossibleObjCMethodName) {
// Tests ObjCLanguage::IsPossibleObjCMethodName
auto [name, expect_valid] = GetParam();
EXPECT_EQ(ObjCLanguage::IsPossibleObjCMethodName(name), expect_valid);
}

INSTANTIATE_TEST_SUITE_P(ObjCMethodNameTests, ObjCMethodNameTextFiture,
testing::ValuesIn(g_objc_method_name_test_cases));
Loading