Skip to content

[lldb] add has methods to all DemangledNameInfo attributes #144549

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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
19 changes: 19 additions & 0 deletions lldb/include/lldb/Core/DemangledNameInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,25 @@ struct DemangledNameInfo {
bool hasBasename() const {
return BasenameRange.second > BasenameRange.first;
}

/// Returns \c true if this object holds a valid scope range.
bool hasScope() const { return ScopeRange.second > ScopeRange.first; }

/// Returns \c true if this object holds a valid arguments range.
bool hasArguments() const {
return ArgumentsRange.second > ArgumentsRange.first;
}

/// Returns \c true if this object holds a valid qualifiers range.
bool hasQualifiers() const {
return QualifiersRange.second > QualifiersRange.first;
}

/// Returns \c true if this object holds a valid prefix range.
bool hasPrefix() const { return PrefixRange.second > PrefixRange.first; }

/// Returns \c true if this object holds a valid suffix range.
bool hasSuffix() const { return SuffixRange.second > SuffixRange.first; }
};

/// An OutputBuffer which keeps a record of where certain parts of a
Expand Down
76 changes: 76 additions & 0 deletions lldb/unittests/Core/MangledTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -635,6 +635,82 @@ TEST_P(DemanglingPartsTestFixture, DemanglingParts) {
INSTANTIATE_TEST_SUITE_P(DemanglingPartsTests, DemanglingPartsTestFixture,
::testing::ValuesIn(g_demangling_parts_test_cases));

struct DemangledNameInfoTestCase {
DemangledNameInfo expected_info;
bool valid_basename;
bool valid_scope;
bool valid_arguments;
bool valid_qualifiers;
bool valid_prefix;
bool valid_suffix;
};

DemangledNameInfoTestCase g_demangled_name_info_test_cases[] = {
// clang-format off
{
{ /*.BasenameRange=*/{0, 10}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{0, 0},
/*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0}
},
/*valid_basename=*/true, /*valid_scope=*/false, /*valid_arguments=*/false,
/*valid_qualifiers=*/false, /*valid_prefix=*/false, /*valid_suffix=*/false,
},
{
{ /*.BasenameRange=*/{0, 0}, /*.ScopeRange=*/{0, 10}, /*.ArgumentsRange=*/{0, 0},
/*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0}
},
/*valid_basename=*/false, /*valid_scope=*/true, /*valid_arguments=*/false,
/*valid_qualifiers=*/false, /*valid_prefix=*/false, /*valid_suffix=*/false,
},
{
{ /*.BasenameRange=*/{0, 0}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{0, 10},
/*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0}
},
/*valid_basename=*/false, /*valid_scope=*/false, /*valid_arguments=*/true,
/*valid_qualifiers=*/false, /*valid_prefix=*/false, /*valid_suffix=*/false,
},
{
{ /*.BasenameRange=*/{0, 0}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{0, 0},
/*.QualifiersRange=*/{0, 10}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0}
},
/*valid_basename=*/false, /*valid_scope=*/false, /*valid_arguments=*/false,
/*valid_qualifiers=*/true, /*valid_prefix=*/false, /*valid_suffix=*/false,
},
{
{ /*.BasenameRange=*/{0, 0}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{0, 0},
/*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 10}, /*.SuffixRange=*/{0, 0}
},
/*valid_basename=*/false, /*valid_scope=*/false, /*valid_arguments=*/false,
/*valid_qualifiers=*/false, /*valid_prefix=*/true, /*valid_suffix=*/false,
},
{
{ /*.BasenameRange=*/{0, 0}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{0, 0},
/*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 10}
},
/*valid_basename=*/false, /*valid_scope=*/false, /*valid_arguments=*/false,
/*valid_qualifiers=*/false, /*valid_prefix=*/false, /*valid_suffix=*/true,
},
// clang-format on
};

struct DemangledNameInfoTestFixture
: public ::testing::TestWithParam<DemangledNameInfoTestCase> {};

TEST_P(DemangledNameInfoTestFixture, DemangledNameInfoRanges) {
const auto &[info, valid_basename, valid_scope, valid_arguments,
valid_qualifiers, valid_prefix, valid_suffix] = GetParam();

ASSERT_EQ(info.hasBasename(), valid_basename);
ASSERT_EQ(info.hasScope(), valid_scope);
ASSERT_EQ(info.hasArguments(), valid_arguments);
ASSERT_EQ(info.hasQualifiers(), valid_qualifiers);
ASSERT_EQ(info.hasPrefix(), valid_prefix);
ASSERT_EQ(info.hasSuffix(), valid_suffix);
}

INSTANTIATE_TEST_SUITE_P(DemangledNameInfoRangesTests,
DemangledNameInfoTestFixture,
::testing::ValuesIn(g_demangled_name_info_test_cases));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice, that's what i had in mind. Thanks!


struct DemanglingInfoCorrectnessTestCase {
const char *mangled;
const char *demangled;
Expand Down
Loading