Skip to content

Commit 431401c

Browse files
committed
Swift AST: add an initializer to SubstitutionMap
And let it conform to `NoReflectionChildren` to make it's debug dump in lldb nicer
1 parent 67925ea commit 431401c

File tree

3 files changed

+16
-1
lines changed

3 files changed

+16
-1
lines changed

SwiftCompilerSources/Sources/AST/SubstitutionMap.swift

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import ASTBridging
1818
///
1919
/// Substitution maps are primarily used when performing substitutions into any entity that
2020
/// can reference type parameters and conformances.
21-
public struct SubstitutionMap: CustomStringConvertible {
21+
public struct SubstitutionMap: CustomStringConvertible, NoReflectionChildren {
2222
public let bridged: BridgedSubstitutionMap
2323

2424
public init(bridged: BridgedSubstitutionMap) {
@@ -28,6 +28,13 @@ public struct SubstitutionMap: CustomStringConvertible {
2828
public init() {
2929
self.bridged = BridgedSubstitutionMap()
3030
}
31+
32+
public init(genericSignature: GenericSignature, replacementTypes: [Type]) {
33+
let bridgedReplTypes = replacementTypes.map { $0.bridged }
34+
self.bridged = bridgedReplTypes.withBridgedArrayRef {
35+
return BridgedSubstitutionMap.get(genericSignature.bridged, $0)
36+
}
37+
}
3138

3239
public var description: String {
3340
return String(taking: bridged.getDebugDescription())

include/swift/AST/ASTBridging.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3071,6 +3071,8 @@ struct BridgedConformanceArray {
30713071
struct BridgedSubstitutionMap {
30723072
uint64_t storage[1];
30733073

3074+
static SWIFT_IMPORT_UNSAFE BridgedSubstitutionMap get(BridgedGenericSignature genSig,
3075+
BridgedArrayRef replacementTypes);
30743076
BRIDGED_INLINE BridgedSubstitutionMap(swift::SubstitutionMap map);
30753077
BRIDGED_INLINE swift::SubstitutionMap unbridged() const;
30763078
BRIDGED_INLINE BridgedSubstitutionMap();

lib/AST/Bridging/MiscBridging.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,12 @@ BridgedOwnedString BridgedConformance::getDebugDescription() const {
115115
static_assert(sizeof(BridgedSubstitutionMap) >= sizeof(swift::SubstitutionMap),
116116
"BridgedSubstitutionMap has wrong size");
117117

118+
BridgedSubstitutionMap BridgedSubstitutionMap::get(BridgedGenericSignature genSig, BridgedArrayRef replacementTypes) {
119+
return SubstitutionMap::get(genSig.unbridged(),
120+
replacementTypes.unbridged<Type>(),
121+
swift::LookUpConformanceInModule());
122+
}
123+
118124
BridgedOwnedString BridgedSubstitutionMap::getDebugDescription() const {
119125
std::string str;
120126
llvm::raw_string_ostream os(str);

0 commit comments

Comments
 (0)