File tree Expand file tree Collapse file tree 4 files changed +46
-0
lines changed
SwiftCompilerSources/Sources/SIL Expand file tree Collapse file tree 4 files changed +46
-0
lines changed Original file line number Diff line number Diff line change @@ -27,8 +27,32 @@ public struct SubstitutionMap {
2727
2828 public var hasAnySubstitutableParams : Bool { bridged. hasAnySubstitutableParams ( ) }
2929
30+ public var conformances : ConformanceArray { ConformanceArray ( substitutionMap: self ) }
31+
3032 public var replacementTypes : OptionalTypeArray {
3133 let types = BridgedTypeArray . fromReplacementTypes ( bridged)
3234 return OptionalTypeArray ( bridged: types)
3335 }
36+
37+ public func getMethodSubstitutions( for method: Function ) -> SubstitutionMap {
38+ return SubstitutionMap ( bridged: bridged. getMethodSubstitutions ( method. bridged) )
39+ }
40+
41+ public struct ConformanceArray : BridgedRandomAccessCollection {
42+ fileprivate let bridgedSubs : BridgedSubstitutionMap
43+ public let count : Int
44+
45+ init ( substitutionMap: SubstitutionMap ) {
46+ self . bridgedSubs = substitutionMap. bridged
47+ self . count = substitutionMap. bridged. getNumConformances ( )
48+ }
49+
50+ public var startIndex : Int { return 0 }
51+ public var endIndex : Int { return count }
52+
53+ public subscript( _ index: Int ) -> ProtocolConformance {
54+ assert ( index >= startIndex && index < endIndex)
55+ return ProtocolConformance ( bridged: bridgedSubs. getConformance ( index) )
56+ }
57+ }
3458}
Original file line number Diff line number Diff line change @@ -652,6 +652,9 @@ struct BridgedSubstitutionMap {
652652 BRIDGED_INLINE BridgedSubstitutionMap ();
653653 BRIDGED_INLINE bool isEmpty () const ;
654654 BRIDGED_INLINE bool hasAnySubstitutableParams () const ;
655+ SWIFT_IMPORT_UNSAFE BridgedSubstitutionMap getMethodSubstitutions (BridgedFunction method) const ;
656+ BRIDGED_INLINE SwiftInt getNumConformances () const ;
657+ SWIFT_IMPORT_UNSAFE BRIDGED_INLINE BridgedProtocolConformance getConformance (SwiftInt index) const ;
655658};
656659
657660struct BridgedTypeArray {
Original file line number Diff line number Diff line change @@ -710,6 +710,14 @@ bool BridgedSubstitutionMap::hasAnySubstitutableParams() const {
710710 return unbridged ().hasAnySubstitutableParams ();
711711}
712712
713+ SwiftInt BridgedSubstitutionMap::getNumConformances () const {
714+ return (SwiftInt)unbridged ().getConformances ().size ();
715+ }
716+
717+ BridgedProtocolConformance BridgedSubstitutionMap::getConformance (SwiftInt index) const {
718+ return unbridged ().getConformances ()[index];
719+ }
720+
713721// ===----------------------------------------------------------------------===//
714722// BridgedLocation
715723// ===----------------------------------------------------------------------===//
Original file line number Diff line number Diff line change @@ -381,6 +381,17 @@ BridgedOwnedString BridgedDefaultWitnessTable::getDebugDescription() const {
381381static_assert (sizeof (BridgedSubstitutionMap) >= sizeof (swift::SubstitutionMap),
382382 " BridgedSubstitutionMap has wrong size" );
383383
384+ BridgedSubstitutionMap BridgedSubstitutionMap::getMethodSubstitutions (BridgedFunction method) const {
385+ swift::SILFunction *f = method.getFunction ();
386+ swift::GenericSignature genericSig = f->getLoweredFunctionType ()->getInvocationGenericSignature ();
387+
388+ if (!genericSig || genericSig->areAllParamsConcrete ())
389+ return swift::SubstitutionMap ();
390+
391+ return swift::SubstitutionMap::get (genericSig,
392+ swift::QuerySubstitutionMap{unbridged ()},
393+ swift::LookUpConformanceInModule ());
394+ }
384395
385396// ===----------------------------------------------------------------------===//
386397// SILDebugLocation
You can’t perform that action at this time.
0 commit comments