Skip to content

Commit be916fe

Browse files
[lldb] add name-qualifiers FormatEntity
1 parent d9eaf1f commit be916fe

File tree

6 files changed

+87
-39
lines changed

6 files changed

+87
-39
lines changed

lldb/docs/use/formatting.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,8 @@ A complete list of currently supported format string variables is listed below:
8989
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
9090
| ``function.name-without-args`` | The name of the current function without arguments and values (used to include a function name in-line in the ``disassembly-format``) |
9191
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
92+
| ``function.name-qualifiers`` | Any qualifiers added after the name of a function and before its arguments or template arguments. |
93+
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
9294
| ``function.basename`` | The basename of the current function depending on the frame's language. E.g., for C++ the basename for ``void ns::foo<float>::bar<int>(int) const`` is ``bar``. |
9395
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
9496
| ``function.prefix`` | Any prefix added to the demangled function name of the current function. This depends on the frame's language. E.g., for C++ the prefix will always be empty. |
@@ -332,6 +334,7 @@ The function names displayed in backtraces/``frame info``/``thread info`` are th
332334
- ``${function.prefix}``
333335
- ``${function.scope}``
334336
- ``${function.basename}``
337+
- ``${function.name-qualifiers}``
335338
- ``${function.template-arguments}``
336339
- ``${function.formatted-arguments}``
337340
- ``${function.qualifiers}``

lldb/include/lldb/Core/DemangledNameInfo.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,11 @@ struct DemangledNameInfo {
5959
/// \endcode
6060
std::pair<size_t, size_t> QualifiersRange;
6161

62+
/// Indicates the [start, end) of the function's name qualifiers. This is a
63+
/// catch-all range for anything in between the basename and the arguments,
64+
/// that is not tracked by the rest of the pairs.
65+
std::pair<size_t, size_t> NameQualifiersRange;
66+
6267
/// Indicates the [start, end) of the function's prefix. This is a
6368
/// catch-all range for anything that is not tracked by the rest of
6469
/// the pairs.
@@ -88,6 +93,11 @@ struct DemangledNameInfo {
8893
return QualifiersRange.second >= QualifiersRange.first;
8994
}
9095

96+
/// Returns \c true if this object holds a valid name qualifiers range.
97+
bool hasNameQualifiers() const {
98+
return NameQualifiersRange.second >= NameQualifiersRange.first;
99+
}
100+
91101
/// Returns \c true if this object holds a valid prefix range.
92102
bool hasPrefix() const { return PrefixRange.second >= PrefixRange.first; }
93103

lldb/include/lldb/Core/FormatEntity.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ struct Entry {
9191
FunctionPrefix,
9292
FunctionScope,
9393
FunctionBasename,
94+
FunctionNameQualifiers,
9495
FunctionTemplateArguments,
9596
FunctionFormattedArguments,
9697
FunctionReturnLeft,

lldb/source/Core/FormatEntity.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ constexpr Definition g_frame_child_entries[] = {
113113
constexpr Definition g_function_child_entries[] = {
114114
Definition("id", EntryType::FunctionID),
115115
Definition("name", EntryType::FunctionName),
116+
Definition("name-qualifiers", EntryType::FunctionNameQualifiers),
116117
Definition("name-without-args", EntryType::FunctionNameNoArgs),
117118
Definition("name-with-args", EntryType::FunctionNameWithArgs),
118119
Definition("mangled-name", EntryType::FunctionMangledName),
@@ -384,6 +385,7 @@ const char *FormatEntity::Entry::TypeToCString(Type t) {
384385
ENUM_TO_CSTR(FunctionDidChange);
385386
ENUM_TO_CSTR(FunctionInitialFunction);
386387
ENUM_TO_CSTR(FunctionName);
388+
ENUM_TO_CSTR(FunctionNameQualifiers);
387389
ENUM_TO_CSTR(FunctionNameWithArgs);
388390
ENUM_TO_CSTR(FunctionNameNoArgs);
389391
ENUM_TO_CSTR(FunctionMangledName);
@@ -1852,6 +1854,7 @@ bool FormatEntity::Format(const Entry &entry, Stream &s,
18521854
case Entry::Type::FunctionPrefix:
18531855
case Entry::Type::FunctionScope:
18541856
case Entry::Type::FunctionBasename:
1857+
case Entry::Type::FunctionNameQualifiers:
18551858
case Entry::Type::FunctionTemplateArguments:
18561859
case Entry::Type::FunctionFormattedArguments:
18571860
case Entry::Type::FunctionReturnRight:

lldb/test/API/lang/swift/async/unwind/hidden_frames/TestSwiftAsyncHiddenFrames.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import lldbsuite.test.lldbutil as lldbutil
55

66

7-
@skipIf(bugnumber="rdar://156178892")
7+
# @skipIf(bugnumber="rdar://156178892")
88
class TestSwiftAsyncHiddenFrames(lldbtest.TestBase):
99

1010
NO_DEBUG_INFO_TESTCASE = True

lldb/unittests/Core/MangledTest.cpp

Lines changed: 69 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -615,6 +615,7 @@ INSTANTIATE_TEST_SUITE_P(DemanglingPartsTests, DemanglingPartsTestFixture,
615615
struct DemangledNameInfoTestCase {
616616
DemangledNameInfo expected_info;
617617
bool valid_basename;
618+
bool valid_name_qualifiers;
618619
bool valid_scope;
619620
bool valid_arguments;
620621
bool valid_qualifiers;
@@ -624,59 +625,89 @@ struct DemangledNameInfoTestCase {
624625

625626
DemangledNameInfoTestCase g_demangled_name_info_test_cases[] = {
626627
// clang-format off
627-
{
628-
{ /*.BasenameRange=*/{0, 10}, /*.ScopeRange=*/{1, 0}, /*.ArgumentsRange=*/{1, 0},
629-
/*.QualifiersRange=*/{1, 0}, /*.PrefixRange=*/{1, 0}, /*.SuffixRange=*/{1, 0}
628+
{
629+
{
630+
/*.BasenameRange=*/{0, 10}, /*.NameQualifiersRange=*/{1, 0}, /*.ScopeRange=*/{1, 0},
631+
/*.ArgumentsRange=*/{1, 0}, /*.QualifiersRange=*/{1, 0}, /*.PrefixRange=*/{1, 0},
632+
/*.SuffixRange=*/{1, 0}
630633
},
631-
/*valid_basename=*/true, /*valid_scope=*/false, /*valid_arguments=*/false,
632-
/*valid_qualifiers=*/false, /*valid_prefix=*/false, /*valid_suffix=*/false,
633-
},
634-
{
635-
{ /*.BasenameRange=*/{1, 0}, /*.ScopeRange=*/{0, 10}, /*.ArgumentsRange=*/{1, 0},
636-
/*.QualifiersRange=*/{1, 0}, /*.PrefixRange=*/{1, 0}, /*.SuffixRange=*/{1, 0}
634+
/*valid_basename=*/true, /*valid_name_qualifiers=*/false, /*valid_scope=*/false,
635+
/*valid_arguments=*/false, /*valid_qualifiers=*/false, /*valid_prefix=*/false,
636+
/*valid_suffix=*/false,
637+
},
638+
{
639+
{
640+
/*.BasenameRange=*/{1, 0}, /*.NameQualifiersRange=*/{0, 10}, /*.ScopeRange=*/{1, 0},
641+
/*.ArgumentsRange=*/{1, 0}, /*.QualifiersRange=*/{1, 0}, /*.PrefixRange=*/{1, 0},
642+
/*.SuffixRange=*/{1, 0}
637643
},
638-
/*valid_basename=*/false, /*valid_scope=*/true, /*valid_arguments=*/false,
639-
/*valid_qualifiers=*/false, /*valid_prefix=*/false, /*valid_suffix=*/false,
640-
},
641-
{
642-
{ /*.BasenameRange=*/{1, 0}, /*.ScopeRange=*/{1, 0}, /*.ArgumentsRange=*/{0, 10},
643-
/*.QualifiersRange=*/{1, 0}, /*.PrefixRange=*/{1, 0}, /*.SuffixRange=*/{1, 0}
644+
/*valid_basename=*/false, /*valid_name_qualifiers=*/true, /*valid_scope=*/false,
645+
/*valid_arguments=*/false, /*valid_qualifiers=*/false, /*valid_prefix=*/false,
646+
/*valid_suffix=*/false,
647+
},
648+
{
649+
{
650+
/*.BasenameRange=*/{1, 0}, /*.NameQualifiersRange=*/{1, 0}, /*.ScopeRange=*/{0, 10},
651+
/*.ArgumentsRange=*/{1, 0}, /*.QualifiersRange=*/{1, 0}, /*.PrefixRange=*/{1, 0},
652+
/*.SuffixRange=*/{1, 0}
644653
},
645-
/*valid_basename=*/false, /*valid_scope=*/false, /*valid_arguments=*/true,
646-
/*valid_qualifiers=*/false, /*valid_prefix=*/false, /*valid_suffix=*/false,
647-
},
648-
{
649-
{ /*.BasenameRange=*/{1, 0}, /*.ScopeRange=*/{1, 0}, /*.ArgumentsRange=*/{1, 0},
650-
/*.QualifiersRange=*/{0, 10}, /*.PrefixRange=*/{1, 0}, /*.SuffixRange=*/{1, 0}
654+
/*valid_basename=*/false, /*valid_name_qualifiers=*/false, /*valid_scope=*/true,
655+
/*valid_arguments=*/false, /*valid_qualifiers=*/false, /*valid_prefix=*/false,
656+
/*valid_suffix=*/false,
657+
},
658+
{
659+
{
660+
/*.BasenameRange=*/{1, 0}, /*.NameQualifiersRange=*/{1, 0}, /*.ScopeRange=*/{1, 0},
661+
/*.ArgumentsRange=*/{0, 10}, /*.QualifiersRange=*/{1, 0}, /*.PrefixRange=*/{1, 0},
662+
/*.SuffixRange=*/{1, 0}
651663
},
652-
/*valid_basename=*/false, /*valid_scope=*/false, /*valid_arguments=*/false,
653-
/*valid_qualifiers=*/true, /*valid_prefix=*/false, /*valid_suffix=*/false,
654-
},
655-
{
656-
{ /*.BasenameRange=*/{1, 0}, /*.ScopeRange=*/{1, 0}, /*.ArgumentsRange=*/{1, 0},
657-
/*.QualifiersRange=*/{1, 0}, /*.PrefixRange=*/{0, 10}, /*.SuffixRange=*/{1, 0}
664+
/*valid_basename=*/false, /*valid_name_qualifiers=*/false, /*valid_scope=*/false,
665+
/*valid_arguments=*/true, /*valid_qualifiers=*/false, /*valid_prefix=*/false,
666+
/*valid_suffix=*/false,
667+
},
668+
{
669+
{
670+
/*.BasenameRange=*/{1, 0}, /*.NameQualifiersRange=*/{1, 0}, /*.ScopeRange=*/{1, 0},
671+
/*.ArgumentsRange=*/{1, 0}, /*.QualifiersRange=*/{0, 10}, /*.PrefixRange=*/{1, 0},
672+
/*.SuffixRange=*/{1, 0}
658673
},
659-
/*valid_basename=*/false, /*valid_scope=*/false, /*valid_arguments=*/false,
660-
/*valid_qualifiers=*/false, /*valid_prefix=*/true, /*valid_suffix=*/false,
661-
},
662-
{
663-
{ /*.BasenameRange=*/{1, 0}, /*.ScopeRange=*/{1, 0}, /*.ArgumentsRange=*/{1, 0},
664-
/*.QualifiersRange=*/{1, 0}, /*.PrefixRange=*/{1, 0}, /*.SuffixRange=*/{0, 10}
674+
/*valid_basename=*/false, /*valid_name_qualifiers=*/false, /*valid_scope=*/false,
675+
/*valid_arguments=*/false, /*valid_qualifiers=*/true, /*valid_prefix=*/false,
676+
/*valid_suffix=*/false,
677+
},
678+
{
679+
{
680+
/*.BasenameRange=*/{1, 0}, /*.NameQualifiersRange=*/{1, 0}, /*.ScopeRange=*/{1, 0},
681+
/*.ArgumentsRange=*/{1, 0}, /*.QualifiersRange=*/{1, 0}, /*.PrefixRange=*/{0, 10},
682+
/*.SuffixRange=*/{1, 0}
665683
},
666-
/*valid_basename=*/false, /*valid_scope=*/false, /*valid_arguments=*/false,
667-
/*valid_qualifiers=*/false, /*valid_prefix=*/false, /*valid_suffix=*/true,
668-
},
684+
/*valid_basename=*/false, /*valid_name_qualifiers=*/false, /*valid_scope=*/false,
685+
/*valid_arguments=*/false, /*valid_qualifiers=*/false, /*valid_prefix=*/true,
686+
/*valid_suffix=*/false,
687+
},
688+
{
689+
{
690+
/*.BasenameRange=*/{1, 0}, /*.NameQualifiersRange=*/{1, 0}, /*.ScopeRange=*/{1, 0},
691+
/*.ArgumentsRange=*/{1, 0}, /*.QualifiersRange=*/{1, 0}, /*.PrefixRange=*/{1, 0},
692+
/*.SuffixRange=*/{0, 10}
693+
},
694+
/*valid_basename=*/false, /*valid_name_qualifiers=*/false, /*valid_scope=*/false,
695+
/*valid_arguments=*/false, /*valid_qualifiers=*/false, /*valid_prefix=*/false,
696+
/*valid_suffix=*/true,
697+
},
669698
// clang-format on
670699
};
671700

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

675704
TEST_P(DemangledNameInfoTestFixture, DemangledNameInfoRanges) {
676-
const auto &[info, valid_basename, valid_scope, valid_arguments,
677-
valid_qualifiers, valid_prefix, valid_suffix] = GetParam();
705+
const auto &[info, valid_basename, valid_name_qualifiers, valid_scope,
706+
valid_arguments, valid_qualifiers, valid_prefix, valid_suffix] =
707+
GetParam();
678708

679709
ASSERT_EQ(info.hasBasename(), valid_basename);
710+
ASSERT_EQ(info.hasNameQualifiers(), valid_name_qualifiers);
680711
ASSERT_EQ(info.hasScope(), valid_scope);
681712
ASSERT_EQ(info.hasArguments(), valid_arguments);
682713
ASSERT_EQ(info.hasQualifiers(), valid_qualifiers);

0 commit comments

Comments
 (0)