Skip to content

Commit 75152f2

Browse files
committed
Swift AST: make Conformance hashable and rename var proto -> var protocol
1 parent 1c9a7cd commit 75152f2

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

SwiftCompilerSources/Sources/AST/Conformance.swift

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import ASTBridging
1717
/// members to the type (or extension) members that provide the functionality for the concrete type.
1818
///
1919
/// TODO: Ideally, `Conformance` should be an enum
20-
public struct Conformance: CustomStringConvertible, NoReflectionChildren {
20+
public struct Conformance: CustomStringConvertible, Hashable, NoReflectionChildren {
2121
public let bridged: BridgedConformance
2222

2323
public init(bridged: BridgedConformance) {
@@ -28,6 +28,14 @@ public struct Conformance: CustomStringConvertible, NoReflectionChildren {
2828
return String(taking: bridged.getDebugDescription())
2929
}
3030

31+
public func hash(into hasher: inout Hasher) {
32+
hasher.combine(bridged.opaqueValue)
33+
}
34+
35+
public static func ==(lhs: Conformance, rhs: Conformance) -> Bool {
36+
lhs.bridged.opaqueValue == rhs.bridged.opaqueValue
37+
}
38+
3139
public var isConcrete: Bool { bridged.isConcrete() }
3240

3341
public var isValid: Bool { bridged.isValid() }
@@ -37,7 +45,7 @@ public struct Conformance: CustomStringConvertible, NoReflectionChildren {
3745
return Type(bridged: bridged.getType())
3846
}
3947

40-
public var proto: ProtocolDecl {
48+
public var `protocol`: ProtocolDecl {
4149
return bridged.getRequirement().getAs(ProtocolDecl.self)
4250
}
4351
public var isSpecialized: Bool {

SwiftCompilerSources/Sources/Optimizer/Utilities/GenericSpecialization.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,10 @@ func specializeWitnessTable(forConformance conformance: Conformance,
145145
let substType = witness.subst(with: conformance.specializedSubstitutions)
146146
return .associatedType(requirement: requirement, witness: substType)
147147
case .associatedConformance(let requirement, let assocConf):
148-
// FIXME: let concreteAssociateConf = assocConf.subst(with: conformance.specializedSubstitutions)
149-
let concreteAssociateConf = conformance.getAssociatedConformance(ofAssociatedType: requirement.rawType, to: assocConf.proto)
148+
// TODO: once we have the API, replace this with:
149+
// let concreteAssociateConf = assocConf.subst(with: conformance.specializedSubstitutions)
150+
let concreteAssociateConf = conformance.getAssociatedConformance(ofAssociatedType: requirement.rawType,
151+
to: assocConf.protocol)
150152
if concreteAssociateConf.isSpecialized {
151153
specializeWitnessTable(forConformance: concreteAssociateConf,
152154
errorLocation: errorLocation,

0 commit comments

Comments
 (0)