diff --git a/include/swift/AST/GenericEnvironment.h b/include/swift/AST/GenericEnvironment.h index 210df14f03c..001ed5c70ef 100644 --- a/include/swift/AST/GenericEnvironment.h +++ b/include/swift/AST/GenericEnvironment.h @@ -83,18 +83,16 @@ public: /// with contextual types instead of interface types. SubstitutionMap getSubstitutionMap(ModuleDecl *mod, - GenericSignature *sig, ArrayRef subs) const; /// Same as above, but updates an existing map. void getSubstitutionMap(ModuleDecl *mod, - GenericSignature *sig, ArrayRef subs, SubstitutionMap &subMap) const; ArrayRef - getForwardingSubstitutions(ModuleDecl *M, GenericSignature *sig) const; + getForwardingSubstitutions(ModuleDecl *M) const; void dump() const; }; diff --git a/include/swift/SIL/TypeSubstCloner.h b/include/swift/SIL/TypeSubstCloner.h index 1bf7b71e358..22f6adf497f 100644 --- a/include/swift/SIL/TypeSubstCloner.h +++ b/include/swift/SIL/TypeSubstCloner.h @@ -41,8 +41,7 @@ class TypeSubstCloner : public SILClonerWithScopes { void computeSubsMap() { if (auto *env = Original.getGenericEnvironment()) { - auto sig = Original.getLoweredFunctionType()->getGenericSignature(); - SubsMap = env->getSubstitutionMap(SwiftMod, sig, ApplySubs); + SubsMap = env->getSubstitutionMap(SwiftMod, ApplySubs); } } diff --git a/lib/AST/GenericEnvironment.cpp b/lib/AST/GenericEnvironment.cpp index a9ef38c1b11..c490dc9ec68 100644 --- a/lib/AST/GenericEnvironment.cpp +++ b/lib/AST/GenericEnvironment.cpp @@ -89,8 +89,7 @@ GenericTypeParamType *GenericEnvironment::getSugaredType( } ArrayRef -GenericEnvironment::getForwardingSubstitutions( - ModuleDecl *M, GenericSignature *sig) const { +GenericEnvironment::getForwardingSubstitutions(ModuleDecl *M) const { auto lookupConformanceFn = [&](CanType original, Type replacement, ProtocolType *protoType) -> ProtocolConformanceRef { @@ -105,16 +104,14 @@ GenericEnvironment::getForwardingSubstitutions( SubstitutionMap GenericEnvironment:: getSubstitutionMap(ModuleDecl *mod, - GenericSignature *sig, ArrayRef subs) const { SubstitutionMap result; - getSubstitutionMap(mod, getGenericSignature(), subs, result); + getSubstitutionMap(mod, subs, result); return result; } void GenericEnvironment:: getSubstitutionMap(ModuleDecl *mod, - GenericSignature *sig, ArrayRef subs, SubstitutionMap &result) const { for (auto depTy : getGenericSignature()->getAllDependentTypes()) { diff --git a/lib/AST/ProtocolConformance.cpp b/lib/AST/ProtocolConformance.cpp index 4a8d499e09c..53796791290 100644 --- a/lib/AST/ProtocolConformance.cpp +++ b/lib/AST/ProtocolConformance.cpp @@ -379,10 +379,9 @@ SpecializedProtocolConformance::getTypeWitnessSubstAndDecl( auto conformingModule = conformingDC->getParentModule(); auto *genericEnv = GenericConformance->getGenericEnvironment(); - auto *genericSig = GenericConformance->getGenericSignature(); auto substitutionMap = genericEnv->getSubstitutionMap( - conformingModule, genericSig, GenericSubstitutions); + conformingModule, GenericSubstitutions); auto genericWitnessAndDecl = GenericConformance->getTypeWitnessSubstAndDecl(assocType, resolver); @@ -534,10 +533,9 @@ ProtocolConformance::getInheritedConformance(ProtocolDecl *protocol) const { auto *conformingDC = spec->getDeclContext(); auto *conformingModule = conformingDC->getParentModule(); - auto *sig = conformingDC->getGenericSignatureOfContext(); auto *env = conformingDC->getGenericEnvironmentOfContext(); - auto subMap = env->getSubstitutionMap(conformingModule, sig, subs); + auto subMap = env->getSubstitutionMap(conformingModule, subs); auto r = inherited->subst(conformingModule, getType(), subMap); assert(getType()->isEqual(r->getType()) diff --git a/lib/SIL/SILFunction.cpp b/lib/SIL/SILFunction.cpp index b1ff6b10e31..f291d0b8e68 100644 --- a/lib/SIL/SILFunction.cpp +++ b/lib/SIL/SILFunction.cpp @@ -547,9 +547,8 @@ ArrayRef SILFunction::getForwardingSubstitutions() { if (!env) return {}; - auto sig = getLoweredFunctionType()->getGenericSignature(); auto *M = getModule().getSwiftModule(); - ForwardingSubs = env->getForwardingSubstitutions(M, sig); + ForwardingSubs = env->getForwardingSubstitutions(M); return *ForwardingSubs; } diff --git a/lib/SIL/SILVerifier.cpp b/lib/SIL/SILVerifier.cpp index 7e21906e886..44dee5134f2 100644 --- a/lib/SIL/SILVerifier.cpp +++ b/lib/SIL/SILVerifier.cpp @@ -1964,8 +1964,7 @@ public: // Map interface types to archetypes. if (auto *env = constantInfo.GenericEnv) { - auto sig = constantInfo.SILFnType->getGenericSignature(); - auto subs = env->getForwardingSubstitutions(M, sig); + auto subs = env->getForwardingSubstitutions(M); methodTy = methodTy->substGenericArgs(F.getModule(), M, subs); } assert(!methodTy->isPolymorphic()); diff --git a/lib/SILGen/SILGenBridging.cpp b/lib/SILGen/SILGenBridging.cpp index e2343e5218b..81c5e8e5923 100644 --- a/lib/SILGen/SILGenBridging.cpp +++ b/lib/SILGen/SILGenBridging.cpp @@ -78,11 +78,9 @@ emitBridgeNativeToObjectiveC(SILGenFunction &gen, // FIXME: Substitute the type substitutions into the witness, because // SpecializedProtocolConformance::getWitness() doesn't do it for us. GenericEnvironment *witnessEnv = witness.getSyntheticEnvironment(); - GenericSignature *witnessSig = witness.getSyntheticSignature(); - + SubstitutionMap typeSubMap = witnessEnv ->getSubstitutionMap(gen.SGM.SwiftModule, - witnessSig, typeSubstitutions); for (auto sub : witnessSubstitutions) { substitutionsBuf.push_back(sub.subst(gen.SGM.SwiftModule, typeSubMap)); diff --git a/lib/SILGen/SILGenConstructor.cpp b/lib/SILGen/SILGenConstructor.cpp index cf694c9090a..b1c3371745a 100644 --- a/lib/SILGen/SILGenConstructor.cpp +++ b/lib/SILGen/SILGenConstructor.cpp @@ -490,9 +490,8 @@ void SILGenFunction::emitClassConstructorAllocator(ConstructorDecl *ctor) { // Call the initializer. ArrayRef forwardingSubs; if (auto *genericEnv = ctor->getGenericEnvironmentOfContext()) { - auto *genericSig = ctor->getGenericSignatureOfContext(); forwardingSubs = genericEnv->getForwardingSubstitutions( - SGM.SwiftModule, genericSig); + SGM.SwiftModule); } std::tie(initVal, initTy, subs) = emitSiblingMethodRef(Loc, selfValue, initConstant, forwardingSubs); @@ -882,9 +881,8 @@ void SILGenFunction::emitMemberInitializers(DeclContext *dc, ArrayRef subs; auto *genericEnv = dc->getGenericEnvironmentOfContext(); if (genericEnv) { - auto *genericSig = dc->getGenericSignatureOfContext(); subs = genericEnv->getForwardingSubstitutions( - SGM.SwiftModule, genericSig); + SGM.SwiftModule); } // Get the type of the initialization result, in terms diff --git a/lib/SILGen/SILGenFunction.cpp b/lib/SILGen/SILGenFunction.cpp index 768dcdd0085..d4d731546b2 100644 --- a/lib/SILGen/SILGenFunction.cpp +++ b/lib/SILGen/SILGenFunction.cpp @@ -815,8 +815,7 @@ void SILGenFunction::emitCurryThunk(ValueDecl *vd, ArrayRef subs; auto constantInfo = getConstantInfo(to); if (auto *env = constantInfo.GenericEnv) { - auto sig = constantInfo.SILFnType->getGenericSignature(); - subs = env->getForwardingSubstitutions(SGM.SwiftModule, sig); + subs = env->getForwardingSubstitutions(SGM.SwiftModule); } SILValue toFn = getNextUncurryLevelRef(*this, vd, to, from.isDirectReference, diff --git a/lib/SILGen/SILGenLValue.cpp b/lib/SILGen/SILGenLValue.cpp index 5fb2e795245..1eebdbf329f 100644 --- a/lib/SILGen/SILGenLValue.cpp +++ b/lib/SILGen/SILGenLValue.cpp @@ -1582,9 +1582,8 @@ SILGenModule::getNonMemberVarDeclSubstitutions(VarDecl *var) { ArrayRef substitutions; auto *dc = var->getDeclContext(); if (auto *genericEnv = dc->getGenericEnvironmentOfContext()) { - auto *genericSig = dc->getGenericSignatureOfContext(); substitutions = genericEnv->getForwardingSubstitutions( - SwiftModule, genericSig); + SwiftModule); } return substitutions; }