Skip to content

Commit f6e7c11

Browse files
committed
AST: Slim down ASTContext::getOverrideGenericSignature()
We don't actually have to store the superclass type or the interface type to be unique enough; just the derived class declaration alone is sufficient.
1 parent 59cc7d7 commit f6e7c11

File tree

1 file changed

+8
-15
lines changed

1 file changed

+8
-15
lines changed

lib/AST/ASTContext.cpp

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -102,16 +102,14 @@ using AssociativityCacheType =
102102
struct OverrideSignatureKey {
103103
GenericSignature baseMethodSig;
104104
GenericSignature derivedMethodSig;
105-
Type superclassTy, subclassTy;
105+
Decl *subclassDecl;
106106

107107
OverrideSignatureKey(GenericSignature baseMethodSignature,
108108
GenericSignature derivedMethodSignature,
109-
Type superclassType,
110-
Type subclassType)
109+
Decl *subclassDecl)
111110
: baseMethodSig(baseMethodSignature),
112111
derivedMethodSig(derivedMethodSignature),
113-
superclassTy(superclassType),
114-
subclassTy(subclassType) {}
112+
subclassDecl(subclassDecl) {}
115113
};
116114

117115
namespace llvm {
@@ -123,31 +121,27 @@ template <> struct DenseMapInfo<OverrideSignatureKey> {
123121
const OverrideSignatureKey rhs) {
124122
return lhs.baseMethodSig.getPointer() == rhs.baseMethodSig.getPointer() &&
125123
lhs.derivedMethodSig.getPointer() == rhs.derivedMethodSig.getPointer() &&
126-
lhs.superclassTy.getPointer() == rhs.superclassTy.getPointer() &&
127-
lhs.subclassTy.getPointer() == rhs.subclassTy.getPointer();
124+
lhs.subclassDecl == rhs.subclassDecl;
128125
}
129126

130127
static inline OverrideSignatureKey getEmptyKey() {
131128
return OverrideSignatureKey(DenseMapInfo<GenericSignature>::getEmptyKey(),
132129
DenseMapInfo<GenericSignature>::getEmptyKey(),
133-
DenseMapInfo<Type>::getEmptyKey(),
134-
DenseMapInfo<Type>::getEmptyKey());
130+
DenseMapInfo<Decl *>::getEmptyKey());
135131
}
136132

137133
static inline OverrideSignatureKey getTombstoneKey() {
138134
return OverrideSignatureKey(
139135
DenseMapInfo<GenericSignature>::getTombstoneKey(),
140136
DenseMapInfo<GenericSignature>::getTombstoneKey(),
141-
DenseMapInfo<Type>::getTombstoneKey(),
142-
DenseMapInfo<Type>::getTombstoneKey());
137+
DenseMapInfo<Decl *>::getTombstoneKey());
143138
}
144139

145140
static unsigned getHashValue(const OverrideSignatureKey &Val) {
146141
return hash_combine(
147142
DenseMapInfo<GenericSignature>::getHashValue(Val.baseMethodSig),
148143
DenseMapInfo<GenericSignature>::getHashValue(Val.derivedMethodSig),
149-
DenseMapInfo<Type>::getHashValue(Val.superclassTy),
150-
DenseMapInfo<Type>::getHashValue(Val.subclassTy));
144+
DenseMapInfo<Decl *>::getHashValue(Val.subclassDecl));
151145
}
152146
};
153147
} // namespace llvm
@@ -4500,8 +4494,7 @@ ASTContext::getOverrideGenericSignature(const ValueDecl *base,
45004494

45014495
auto key = OverrideSignatureKey(baseGenericSig,
45024496
derivedGenericSig,
4503-
derivedClass->getSuperclass(),
4504-
derivedClass->getDeclaredInterfaceType());
4497+
derivedClass);
45054498

45064499
if (getImpl().overrideSigCache.find(key) !=
45074500
getImpl().overrideSigCache.end()) {

0 commit comments

Comments
 (0)