Skip to content

Commit ea133b5

Browse files
committed
[LLDB] Support GetNumChildren on thin function types
This fixes a performance problem by eliminating a SwiftASTContext fallback. rdar://160730897
1 parent dc7c551 commit ea133b5

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

lldb/source/Plugins/TypeSystem/Swift/TypeSystemSwiftTypeRef.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3056,9 +3056,8 @@ bool TypeSystemSwiftTypeRef::IsFunctionType(opaque_compiler_type_t type) {
30563056
using namespace swift::Demangle;
30573057
Demangler dem;
30583058
NodePointer node = DemangleCanonicalOutermostType(dem, type);
3059-
// Note: There are a number of other candidates, and this list may need
3060-
// updating. Ex: `NoEscapeFunctionType`, `ThinFunctionType`, etc.
30613059
return node && (node->getKind() == Node::Kind::FunctionType ||
3060+
node->getKind() == Node::Kind::ThinFunctionType ||
30623061
node->getKind() == Node::Kind::NoEscapeFunctionType ||
30633062
node->getKind() == Node::Kind::ImplFunctionType);
30643063
};

lldb/unittests/Symbol/TestTypeSystemSwiftTypeRef.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,18 @@ TEST_F(TestTypeSystemSwiftTypeRef, Function) {
148148
ASSERT_TRUE(void_void.IsFunctionPointerType());
149149
ASSERT_EQ(void_void.GetNumberOfFunctionArguments(), 0UL);
150150
}
151+
{
152+
NodePointer n = b.GlobalType(
153+
b.Node(Node::Kind::ThinFunctionType,
154+
b.Node(Node::Kind::ArgumentTuple,
155+
b.Node(Node::Kind::Type, b.Node(Node::Kind::Tuple))),
156+
b.Node(Node::Kind::ReturnType,
157+
b.Node(Node::Kind::Type, b.Node(Node::Kind::Tuple)))));
158+
CompilerType void_void = GetCompilerType(b.Mangle(n));
159+
ASSERT_TRUE(void_void.IsFunctionType());
160+
ASSERT_TRUE(void_void.IsFunctionPointerType());
161+
ASSERT_EQ(void_void.GetNumberOfFunctionArguments(), 0UL);
162+
}
151163
{
152164
NodePointer n = b.GlobalType(
153165
b.Node(Node::Kind::ImplFunctionType, b.Node(Node::Kind::ImplEscaping),

0 commit comments

Comments
 (0)