@@ -1512,14 +1512,22 @@ namespace {
15121512
15131513 class EndApplyPseudoComponent : public WritebackPseudoComponent {
15141514 CleanupHandle EndApplyHandle;
1515- Optional<AccessedStorage> Access;
1515+ AbstractStorageDecl *Storage;
1516+ bool IsSuper;
1517+ PreparedArguments PeekedIndices;
1518+ Expr *IndexExprForDiagnostics;
15161519 public:
15171520 EndApplyPseudoComponent (const LValueTypeData &typeData,
15181521 CleanupHandle endApplyHandle,
1519- Optional<AccessedStorage> access)
1522+ AbstractStorageDecl *storage,
1523+ bool isSuper,
1524+ PreparedArguments &&peekedIndices,
1525+ Expr *indexExprForDiagnostics)
15201526 : WritebackPseudoComponent(typeData),
15211527 EndApplyHandle (endApplyHandle),
1522- Access(access) {}
1528+ Storage(storage), IsSuper(isSuper),
1529+ PeekedIndices(std::move(peekedIndices)),
1530+ IndexExprForDiagnostics(indexExprForDiagnostics) {}
15231531
15241532 private:
15251533 void writeback (SILGenFunction &SGF, SILLocation loc,
@@ -1539,7 +1547,9 @@ namespace {
15391547 }
15401548
15411549 Optional<AccessedStorage> getAccessedStorage () const override {
1542- return Access;
1550+ return AccessedStorage{Storage, IsSuper,
1551+ PeekedIndices.isNull () ? nullptr : &PeekedIndices,
1552+ IndexExprForDiagnostics};
15431553 }
15441554 };
15451555
@@ -1570,12 +1580,9 @@ namespace {
15701580
15711581 ManagedValue result;
15721582
1573- LogicalPathComponent::AccessedStorage abstractStorage = {
1574- Storage, IsSuper, /* indices*/ nullptr , IndexExprForDiagnostics
1575- };
1576-
15771583 auto args =
15781584 std::move (*this ).prepareAccessorArgs (SGF, loc, base, Accessor);
1585+ auto peekedIndices = args.Indices .copyForDiagnostics ();
15791586 SmallVector<ManagedValue, 4 > yields;
15801587 auto endApplyHandle =
15811588 SGF.emitCoroutineAccessor (
@@ -1585,7 +1592,9 @@ namespace {
15851592 // Push a writeback that ends the access.
15861593 std::unique_ptr<LogicalPathComponent>
15871594 component (new EndApplyPseudoComponent (getTypeData (), endApplyHandle,
1588- abstractStorage));
1595+ Storage, IsSuper,
1596+ std::move (peekedIndices),
1597+ IndexExprForDiagnostics));
15891598 pushWriteback (SGF, loc, std::move (component), ManagedValue (),
15901599 MaterializedLValue ());
15911600
0 commit comments