Skip to content

Commit feaec26

Browse files
committed
Implement TypeSystemSwiftTypeRef::GetReferentType()
rdar://68171397
1 parent f9d0b91 commit feaec26

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

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

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2518,7 +2518,21 @@ CompilerType TypeSystemSwiftTypeRef::GetErrorType() {
25182518

25192519
CompilerType
25202520
TypeSystemSwiftTypeRef::GetReferentType(opaque_compiler_type_t type) {
2521-
return m_swift_ast_context->GetReferentType(ReconstructType(type));
2521+
auto impl = [&]() -> CompilerType {
2522+
using namespace swift::Demangle;
2523+
Demangler dem;
2524+
NodePointer node = GetDemangledType(dem, AsMangledName(type));
2525+
if (!node ||
2526+
(node->getKind() != Node::Kind::Unowned &&
2527+
node->getKind() != Node::Kind::Unmanaged) ||
2528+
!node->hasChildren())
2529+
return {this, type};
2530+
node = node->getFirstChild();
2531+
if (!node || node->getKind() != Node::Kind::Type || !node->hasChildren())
2532+
return {this, type};
2533+
return RemangleAsType(dem, node);
2534+
};
2535+
VALIDATE_AND_RETURN(impl, GetReferentType, type, (ReconstructType(type)));
25222536
}
25232537

25242538
CompilerType

lldb/source/Target/SwiftLanguageRuntimeDynamicTypeResolution.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -999,6 +999,7 @@ llvm::Optional<uint64_t> SwiftLanguageRuntimeImpl::GetMemberVariableOffset(
999999

10001000
static CompilerType GetWeakReferent(TypeSystemSwiftTypeRef &ts,
10011001
CompilerType type) {
1002+
// FIXME: This is very similar to TypeSystemSwiftTypeRef::GetReferentType().
10021003
using namespace swift::Demangle;
10031004
Demangler dem;
10041005
auto mangled = type.GetMangledTypeName().GetStringRef();

0 commit comments

Comments
 (0)