Skip to content

Commit 56b2e90

Browse files
committed
Support MetatypeTypeRefs in DemanglingForTypeRef.
1 parent 9b5b265 commit 56b2e90

File tree

2 files changed

+9
-6
lines changed

2 files changed

+9
-6
lines changed

stdlib/public/Reflection/TypeRef.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -644,7 +644,10 @@ class DemanglingForTypeRef
644644

645645
Demangle::NodePointer visitMetatypeTypeRef(const MetatypeTypeRef *M) {
646646
auto node = Dem.createNode(Node::Kind::Metatype);
647-
assert(!M->wasAbstract() && "not implemented");
647+
// FIXME: This is lossy. @objc_metatype is also abstract.
648+
auto repr = Dem.createNode(Node::Kind::MetatypeRepresentation,
649+
M->wasAbstract() ? "@thick" : "@thin");
650+
node->addChild(repr, Dem);
648651
node->addChild(visit(M->getInstanceType()), Dem);
649652
return node;
650653
}

validation-test/Reflection/existentials.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -283,15 +283,15 @@ func getComposition() -> P & Q { return S() }
283283
reflect(any: getComposition())
284284
// CHECK-64: Mangled name: $s12existentials1P_AA1Qp
285285
// CHECK-64: Demangled name: existentials.P & existentials.Q
286-
// CHECK-32: Mangled name: $s12existentials1PP_AA1QPp
286+
// CHECK-32: Mangled name: $s12existentials1P_AA1Qp
287287
// CHECK-32: Demangled name: existentials.P & existentials.Q
288288

289289
// Metatype:
290290
reflect(any: Int.self)
291-
// CHECK-64: Mangled name: $sSim
292-
// CHECK-64: Demangled name: Swift.Int.Type
293-
// CHECK-32: Mangled name: $sSim
294-
// CHECK-32: Demangled name: Swift.Int.Type
291+
// CHECK-64: Mangled name: $sSiXMt
292+
// CHECK-64: Demangled name: @thin Swift.Int.Type
293+
// CHECK-32: Mangled name: $sSiXMt
294+
// CHECK-32: Demangled name: @thin Swift.Int.Type
295295

296296
protocol WithType {
297297
associatedtype T

0 commit comments

Comments
 (0)