Skip to content

Commit 7f98799

Browse files
committed
[Runtime] Fill in the protocol conformance demangling implementation.
Complete the DecodedMetadataBuilder implementation of protocol conformance demangling. rdar://46280860
1 parent 8fa5861 commit 7f98799

File tree

1 file changed

+22
-12
lines changed

1 file changed

+22
-12
lines changed

stdlib/public/runtime/MetadataLookup.cpp

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1700,52 +1700,62 @@ class DecodedMetadataBuilder {
17001700
// Mangled types for building metadata don't contain sugared types
17011701
return BuiltType();
17021702
}
1703-
1703+
17041704
const WitnessTable *
17051705
createConcreteProtocolConformance(const Metadata *conformingType,
17061706
const ProtocolConformanceDescriptor *conformanceDecl,
17071707
llvm::ArrayRef<const WitnessTable *> args) {
17081708
if (args.size() != conformanceDecl->getConditionalRequirements().size())
17091709
return nullptr;
1710-
1710+
17111711
auto argsPtr = (const void * const *)args.data();
17121712
return swift_getWitnessTable(conformanceDecl, conformingType, argsPtr);
17131713
}
1714-
1714+
17151715
const WitnessTable *
17161716
createDependentProtocolConformanceRoot(const Metadata *conformingType,
17171717
ProtocolDescriptorRef requirement,
17181718
unsigned index) {
17191719
return substWitnessTable(conformingType, index);
17201720
}
1721-
1721+
17221722
const WitnessTable *
17231723
createDependentProtocolConformanceAssociated(const WitnessTable *base,
17241724
const Metadata *conformingType,
17251725
ProtocolDescriptorRef requirement,
17261726
unsigned index) {
1727-
1727+
return substWitnessTable(conformingType, index);
17281728
}
1729-
1729+
17301730
const WitnessTable *
17311731
createDependentProtocolConformanceInherited(const WitnessTable *base,
17321732
ProtocolDescriptorRef requirement,
1733-
unsigned index);
1734-
1733+
unsigned index) {
1734+
return substWitnessTable(base->getDescription()->getCanonicalTypeMetadata(),
1735+
index);
1736+
}
1737+
17351738
const ProtocolConformanceDescriptor *
17361739
createProtocolConformanceDeclInTypeModule(const Metadata *conformingType,
17371740
ProtocolDescriptorRef protocol) {
1738-
1741+
return swift_getConformanceDescriptor(conformingType,
1742+
protocol.getSwiftProtocol());
17391743
}
1740-
1744+
17411745
const ProtocolConformanceDescriptor *
17421746
createProtocolConformanceDeclInProtocolModule(const Metadata *conformingType,
1743-
ProtocolDescriptorRef protocol);
1747+
ProtocolDescriptorRef protocol) {
1748+
return swift_getConformanceDescriptor(conformingType,
1749+
protocol.getSwiftProtocol());
1750+
}
17441751

17451752
const ProtocolConformanceDescriptor *
17461753
createProtocolConformanceDeclRetroactive(const Metadata *conformingType,
17471754
ProtocolDescriptorRef protocol,
1748-
StringRef moduleName);
1755+
StringRef moduleName) {
1756+
return swift_getConformanceDescriptor(conformingType,
1757+
protocol.getSwiftProtocol());
1758+
}
17491759
};
17501760

17511761
}

0 commit comments

Comments
 (0)