@@ -270,9 +270,10 @@ static bool isPatternInvariantToExpansion(CanType patternType,
270270 });
271271}
272272
273- static std::pair<GenericEnvironment*, SILType>
274- deriveOpenedElementTypeForPackExpansion (SILGenModule &SGM,
275- CanPackExpansionType expansion) {
273+ std::pair<GenericEnvironment*, SILType>
274+ SILGenFunction::createOpenedElementValueEnvironment (SILType expansionTy) {
275+ auto expansion = expansionTy.castTo <PackExpansionType>();
276+
276277 // If the pattern type is invariant to the expansion, we don't need
277278 // to open anything.
278279 auto countArchetype = cast<PackArchetypeType>(expansion.getCountType ());
@@ -300,10 +301,9 @@ void SILGenFunction::emitPartialDestroyPack(SILLocation loc, SILValue packAddr,
300301 unsigned componentIndex,
301302 SILValue limitWithinComponent) {
302303 auto packTy = packAddr->getType ().castTo <SILPackType>();
303- auto packExpansionTy =
304- cast<PackExpansionType>(packTy->getElementType (componentIndex));
305304
306- auto result = deriveOpenedElementTypeForPackExpansion (SGM, packExpansionTy);
305+ auto result = createOpenedElementValueEnvironment (
306+ packTy->getSILElementType (componentIndex));
307307 auto elementEnv = result.first ;
308308 auto elementTy = result.second ;
309309
@@ -322,11 +322,8 @@ void SILGenFunction::emitPartialDestroyTuple(SILLocation loc,
322322 CanPackType inducedPackType,
323323 unsigned componentIndex,
324324 SILValue limitWithinComponent) {
325- auto tupleTy = tupleAddr->getType ().castTo <TupleType>();
326- auto packExpansionTy =
327- cast<PackExpansionType>(tupleTy.getElementType (componentIndex));
328-
329- auto result = deriveOpenedElementTypeForPackExpansion (SGM, packExpansionTy);
325+ auto result = createOpenedElementValueEnvironment (
326+ tupleAddr->getType ().getTupleElementType (componentIndex));
330327 auto elementEnv = result.first ;
331328 auto elementTy = result.second ;
332329
0 commit comments