Skip to content

Commit 1329f3c

Browse files
committed
[NFC] Lift getGenericEnvironment() into GenericSignature
1 parent 109da00 commit 1329f3c

37 files changed

+88
-113
lines changed

include/swift/AST/GenericSignature.h

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,11 @@ class GenericSignature {
198198

199199
/// Whether this generic signature involves a type variable.
200200
bool hasTypeVariable() const;
201+
202+
/// Returns the generic environment that provides fresh contextual types
203+
/// (archetypes) that correspond to the interface types in this generic
204+
/// signature.
205+
GenericEnvironment *getGenericEnvironment() const;
201206
};
202207

203208
/// A reference to a canonical generic signature.
@@ -317,11 +322,6 @@ class alignas(1 << TypeAlignInBits) GenericSignatureImpl final
317322
/// Retrieve the requirement machine for the given generic signature.
318323
RequirementMachine *getRequirementMachine() const;
319324

320-
/// Returns the generic environment that provides fresh contextual types
321-
/// (archetypes) that correspond to the interface types in this generic
322-
/// signature.
323-
GenericEnvironment *getGenericEnvironment() const;
324-
325325
/// Collects a set of requirements on a type parameter. Used by
326326
/// GenericEnvironment for building archetypes.
327327
GenericSignature::LocalRequirements getLocalRequirements(Type depType) const;
@@ -456,6 +456,11 @@ class alignas(1 << TypeAlignInBits) GenericSignatureImpl final
456456

457457
/// Returns the canonical generic signature. The result is cached.
458458
CanGenericSignature getCanonicalSignature() const;
459+
460+
/// Returns the generic environment that provides fresh contextual types
461+
/// (archetypes) that correspond to the interface types in this generic
462+
/// signature.
463+
GenericEnvironment *getGenericEnvironment() const;
459464
};
460465

461466
void simple_display(raw_ostream &out, GenericSignature sig);

lib/AST/ASTContext.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1894,7 +1894,7 @@ GenericSignatureBuilder *ASTContext::getOrCreateGenericSignatureBuilder(
18941894

18951895
RequirementMachine *ASTContext::getOrCreateRequirementMachine(
18961896
CanGenericSignature sig) {
1897-
assert(!sig->hasTypeVariable());
1897+
assert(!sig.hasTypeVariable());
18981898

18991899
auto &rewriteCtx = getImpl().TheRewriteContext;
19001900
if (!rewriteCtx)

lib/AST/Attr.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1800,7 +1800,7 @@ void DifferentiableAttr::setParameterIndices(IndexSubset *paramIndices) {
18001800
GenericEnvironment *DifferentiableAttr::getDerivativeGenericEnvironment(
18011801
AbstractFunctionDecl *original) const {
18021802
if (auto derivativeGenSig = getDerivativeGenericSignature())
1803-
return derivativeGenSig->getGenericEnvironment();
1803+
return derivativeGenSig.getGenericEnvironment();
18041804
return original->getGenericEnvironment();
18051805
}
18061806

lib/AST/Decl.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1001,10 +1001,7 @@ GenericSignature GenericContext::getGenericSignature() const {
10011001
}
10021002

10031003
GenericEnvironment *GenericContext::getGenericEnvironment() const {
1004-
if (auto genericSig = getGenericSignature())
1005-
return genericSig->getGenericEnvironment();
1006-
1007-
return nullptr;
1004+
return getGenericSignature().getGenericEnvironment();
10081005
}
10091006

10101007
void GenericContext::setGenericSignature(GenericSignature genericSig) {

lib/AST/GenericSignature.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,12 @@ CanGenericSignature GenericSignatureImpl::getCanonicalSignature() const {
269269
CanonicalSignatureOrASTContext.get<const GenericSignatureImpl *>());
270270
}
271271

272+
GenericEnvironment *GenericSignature::getGenericEnvironment() const {
273+
if (isNull())
274+
return nullptr;
275+
return getPointer()->getGenericEnvironment();
276+
}
277+
272278
GenericEnvironment *GenericSignatureImpl::getGenericEnvironment() const {
273279
if (GenericEnv == nullptr) {
274280
const auto impl = const_cast<GenericSignatureImpl *>(this);

lib/AST/RequirementEnvironment.cpp

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -138,12 +138,9 @@ RequirementEnvironment::RequirementEnvironment(
138138
if (!covariantSelf &&
139139
reqSig.getGenericParams().size() == 1 &&
140140
reqSig.getRequirements().size() == 1) {
141-
syntheticSignature = conformanceDC->getGenericSignatureOfContext();
142-
if (syntheticSignature) {
143-
syntheticSignature = syntheticSignature.getCanonicalSignature();
144-
syntheticEnvironment =
145-
syntheticSignature->getGenericEnvironment();
146-
}
141+
syntheticSignature = conformanceDC->getGenericSignatureOfContext().getCanonicalSignature();
142+
syntheticEnvironment =
143+
syntheticSignature.getGenericEnvironment();
147144

148145
return;
149146
}
@@ -217,5 +214,5 @@ RequirementEnvironment::RequirementEnvironment(
217214
AbstractGenericSignatureRequest{
218215
nullptr, std::move(genericParamTypes), std::move(requirements)},
219216
GenericSignature());
220-
syntheticEnvironment = syntheticSignature->getGenericEnvironment();
217+
syntheticEnvironment = syntheticSignature.getGenericEnvironment();
221218
}

lib/AST/RequirementMachine/GenericSignatureQueries.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -483,7 +483,7 @@ RequirementMachine::getConformanceAccessPath(Type type,
483483
// visit all of the root conformance requirements in our generic signature and
484484
// add them to the buffer.
485485
if (Impl->ConformanceAccessPaths.empty()) {
486-
for (const auto &req : Impl->Sig->getRequirements()) {
486+
for (const auto &req : Impl->Sig.getRequirements()) {
487487
// We only care about conformance requirements.
488488
if (req.getKind() != RequirementKind::Conformance)
489489
continue;
@@ -680,4 +680,4 @@ RequirementMachine::lookupNestedType(Type depType, Identifier name) const {
680680
}
681681

682682
return nullptr;
683-
}
683+
}

lib/AST/RequirementMachine/RequirementMachine.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ RewriteSystemBuilder::getConcreteSubstitutionSchema(CanType concreteType,
8686
void RewriteSystemBuilder::addGenericSignature(CanGenericSignature sig) {
8787
// Collect all protocols transitively referenced from the generic signature's
8888
// requirements.
89-
Protocols.visitRequirements(sig->getRequirements());
89+
Protocols.visitRequirements(sig.getRequirements());
9090
Protocols.compute();
9191

9292
// Add rewrite rules for each protocol.
@@ -112,7 +112,7 @@ void RewriteSystemBuilder::addGenericSignature(CanGenericSignature sig) {
112112
}
113113

114114
// Add rewrite rules for all requirements in the top-level signature.
115-
for (const auto &req : sig->getRequirements())
115+
for (const auto &req : sig.getRequirements())
116116
addRequirement(req, /*proto=*/nullptr);
117117
}
118118

lib/IRGen/GenKeyPath.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1185,12 +1185,9 @@ IRGenModule::getAddrOfKeyPathPattern(KeyPathPattern *pattern,
11851185
// Collect the required parameters for the keypath's generic environment.
11861186
SmallVector<GenericRequirement, 4> requirements;
11871187

1188-
GenericEnvironment *genericEnv = nullptr;
1189-
if (auto sig = pattern->getGenericSignature()) {
1190-
genericEnv = sig->getGenericEnvironment();
1191-
enumerateGenericSignatureRequirements(pattern->getGenericSignature(),
1192-
[&](GenericRequirement reqt) { requirements.push_back(reqt); });
1193-
}
1188+
auto *genericEnv = pattern->getGenericSignature().getGenericEnvironment();
1189+
enumerateGenericSignatureRequirements(pattern->getGenericSignature(),
1190+
[&](GenericRequirement reqt) { requirements.push_back(reqt); });
11941191

11951192
// Start building the key path pattern.
11961193
ConstantInitBuilder builder(*this);

lib/IRGen/GenPointerAuth.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -523,18 +523,15 @@ static uint64_t getTypeHash(IRGenModule &IGM, CanSILFunctionType type) {
523523
auto genericSig = type->getInvocationGenericSignature();
524524
hashStringForFunctionType(
525525
IGM, type, Out,
526-
genericSig ? genericSig.getCanonicalSignature()->getGenericEnvironment()
527-
: nullptr);
526+
genericSig.getCanonicalSignature().getGenericEnvironment());
528527
return clang::CodeGen::computeStableStringHash(Out.str());
529528
}
530529

531530
static uint64_t getYieldTypesHash(IRGenModule &IGM, CanSILFunctionType type) {
532531
SmallString<32> buffer;
533532
llvm::raw_svector_ostream out(buffer);
534533
auto genericSig = type->getInvocationGenericSignature();
535-
GenericEnvironment *genericEnv =
536-
genericSig ? genericSig.getCanonicalSignature()->getGenericEnvironment()
537-
: nullptr;
534+
auto *genericEnv = genericSig.getCanonicalSignature().getGenericEnvironment();
538535

539536
out << [&]() -> StringRef {
540537
switch (type->getCoroutineKind()) {

0 commit comments

Comments
 (0)