@@ -90,8 +90,7 @@ GetClangTypeNode(CompilerType clang_type, swift::Demangle::Demangler &dem) {
90
90
}
91
91
92
92
// / \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) {
95
94
using namespace swift ::Demangle;
96
95
if (!n || n->getKind () != Node::Kind::Global || !n->hasChildren ())
97
96
return nullptr ;
@@ -109,7 +108,7 @@ static swift::Demangle::NodePointer GetType(swift::Demangle::Demangler &dem,
109
108
static swift::Demangle::NodePointer
110
109
GetDemangledType (swift::Demangle::Demangler &dem, StringRef name) {
111
110
NodePointer n = dem.demangleSymbol (name);
112
- return GetType (dem, n);
111
+ return GetType (n);
113
112
}
114
113
115
114
// / Resolve a type alias node and return a demangle tree for the
@@ -1291,7 +1290,7 @@ swift::Demangle::NodePointer TypeSystemSwiftTypeRef::DemangleCanonicalType(
1291
1290
using namespace swift ::Demangle;
1292
1291
NodePointer node =
1293
1292
GetCanonicalDemangleTree (GetModule (), dem, AsMangledName (opaque_type));
1294
- return GetType (dem, node);
1293
+ return GetType (node);
1295
1294
}
1296
1295
1297
1296
bool TypeSystemSwiftTypeRef::IsArrayType (opaque_compiler_type_t type,
@@ -1669,9 +1668,46 @@ CompilerType
1669
1668
TypeSystemSwiftTypeRef::GetPointeeType (opaque_compiler_type_t type) {
1670
1669
return m_swift_ast_context->GetPointeeType (ReconstructType (type));
1671
1670
}
1671
+
1672
1672
CompilerType
1673
1673
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)));
1675
1711
}
1676
1712
1677
1713
// Exploring the type
0 commit comments