Skip to content

Commit a9caeb3

Browse files
authored
Merge pull request #1908 from apple/lldb-Reimplement-and-implement-GetPointerType
[lldb] Reimplement and implement GetPointerType
2 parents 3886535 + 688c2e8 commit a9caeb3

File tree

2 files changed

+46
-9
lines changed

2 files changed

+46
-9
lines changed

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5886,10 +5886,11 @@ CompilerType SwiftASTContext::GetPointerType(opaque_compiler_type_t type) {
58865886
VALID_OR_RETURN(CompilerType());
58875887

58885888
if (type) {
5889-
swift::Type swift_type(GetSwiftType({this, type}));
5890-
const swift::TypeKind type_kind = swift_type->getKind();
5891-
if (type_kind == swift::TypeKind::BuiltinRawPointer)
5892-
return ToCompilerType({swift_type});
5889+
auto swift_type = GetSwiftType({this, type});
5890+
auto pointer_type =
5891+
swift_type->wrapInPointer(swift::PointerTypeKind::PTK_UnsafePointer);
5892+
if (pointer_type)
5893+
return ToCompilerType(pointer_type);
58935894
}
58945895
return {};
58955896
}

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

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,7 @@ GetClangTypeNode(CompilerType clang_type, swift::Demangle::Demangler &dem) {
9090
}
9191

9292
/// \return the child of the \p Type node.
93-
static swift::Demangle::NodePointer GetType(swift::Demangle::Demangler &dem,
94-
swift::Demangle::NodePointer n) {
93+
static NodePointer GetType(swift::Demangle::NodePointer n) {
9594
using namespace swift::Demangle;
9695
if (!n || n->getKind() != Node::Kind::Global || !n->hasChildren())
9796
return nullptr;
@@ -109,7 +108,7 @@ static swift::Demangle::NodePointer GetType(swift::Demangle::Demangler &dem,
109108
static swift::Demangle::NodePointer
110109
GetDemangledType(swift::Demangle::Demangler &dem, StringRef name) {
111110
NodePointer n = dem.demangleSymbol(name);
112-
return GetType(dem, n);
111+
return GetType(n);
113112
}
114113

115114
/// Resolve a type alias node and return a demangle tree for the
@@ -1291,7 +1290,7 @@ swift::Demangle::NodePointer TypeSystemSwiftTypeRef::DemangleCanonicalType(
12911290
using namespace swift::Demangle;
12921291
NodePointer node =
12931292
GetCanonicalDemangleTree(GetModule(), dem, AsMangledName(opaque_type));
1294-
return GetType(dem, node);
1293+
return GetType(node);
12951294
}
12961295

12971296
bool TypeSystemSwiftTypeRef::IsArrayType(opaque_compiler_type_t type,
@@ -1669,9 +1668,46 @@ CompilerType
16691668
TypeSystemSwiftTypeRef::GetPointeeType(opaque_compiler_type_t type) {
16701669
return m_swift_ast_context->GetPointeeType(ReconstructType(type));
16711670
}
1671+
16721672
CompilerType
16731673
TypeSystemSwiftTypeRef::GetPointerType(opaque_compiler_type_t type) {
1674-
return m_swift_ast_context->GetPointerType(ReconstructType(type));
1674+
auto impl = [&]() -> CompilerType {
1675+
using namespace swift::Demangle;
1676+
Demangler dem;
1677+
1678+
// The type that will be wrapped in UnsafePointer.
1679+
auto *pointee_type = GetDemangledType(dem, AsMangledName(type));
1680+
// The UnsafePointer type.
1681+
auto *pointer_type = dem.createNode(Node::Kind::Type);
1682+
1683+
auto *bgs = dem.createNode(Node::Kind::BoundGenericStructure);
1684+
pointer_type->addChild(bgs, dem);
1685+
1686+
// Construct the first branch of BoundGenericStructure.
1687+
{
1688+
auto *type = dem.createNode(Node::Kind::Type);
1689+
bgs->addChild(type, dem);
1690+
auto *structure = dem.createNode(Node::Kind::Structure);
1691+
type->addChild(structure, dem);
1692+
structure->addChild(dem.createNodeWithAllocatedText(Node::Kind::Module,
1693+
swift::STDLIB_NAME),
1694+
dem);
1695+
structure->addChild(
1696+
dem.createNode(Node::Kind::Identifier, "UnsafePointer"), dem);
1697+
}
1698+
1699+
// Construct the second branch of BoundGenericStructure.
1700+
{
1701+
auto *typelist = dem.createNode(Node::Kind::TypeList);
1702+
bgs->addChild(typelist, dem);
1703+
auto *type = dem.createNode(Node::Kind::Type);
1704+
typelist->addChild(type, dem);
1705+
type->addChild(pointee_type, dem);
1706+
}
1707+
1708+
return RemangleAsType(dem, pointer_type);
1709+
};
1710+
VALIDATE_AND_RETURN(impl, GetPointerType, type, (ReconstructType(type)));
16751711
}
16761712

16771713
// Exploring the type

0 commit comments

Comments
 (0)