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