Embedded: support existentials with inherited conformances

That means: derived classes where the base conforms to a protocol
This commit is contained in:
Erik Eckstein
2024-10-04 20:55:23 +02:00
parent 54e7cdda25
commit a3e6e86383
7 changed files with 116 additions and 4 deletions

View File

@@ -163,6 +163,10 @@ bool BridgedConformance::isSpecializedConformance() const {
return swift::isa<swift::SpecializedProtocolConformance>(unbridged().getConcrete());
}
bool BridgedConformance::isInheritedConformance() const {
return swift::isa<swift::InheritedProtocolConformance>(unbridged().getConcrete());
}
BridgedASTType BridgedConformance::getType() const {
return {unbridged().getConcrete()->getType().getPointer()};
}
@@ -172,6 +176,11 @@ BridgedConformance BridgedConformance::getGenericConformance() const {
return {swift::ProtocolConformanceRef(specPC->getGenericConformance())};
}
BridgedConformance BridgedConformance::getInheritedConformance() const {
auto *inheritedConf = swift::cast<swift::InheritedProtocolConformance>(unbridged().getConcrete());
return {swift::ProtocolConformanceRef(inheritedConf->getInheritedConformance())};
}
BridgedSubstitutionMap BridgedConformance::getSpecializedSubstitutions() const {
auto *specPC = swift::cast<swift::SpecializedProtocolConformance>(unbridged().getConcrete());
return {specPC->getSubstitutionMap()};