@@ -158,6 +158,12 @@ ConstructorDecl *NominalTypeDecl::getTypeWrapperInitializer() const {
158
158
nullptr );
159
159
}
160
160
161
+ NominalTypeDecl *NominalTypeDecl::getTypeWrapperStorageDecl () const {
162
+ auto *mutableSelf = const_cast <NominalTypeDecl *>(this );
163
+ return evaluateOrDefault (getASTContext ().evaluator ,
164
+ GetTypeWrapperStorage{mutableSelf}, nullptr );
165
+ }
166
+
161
167
NominalTypeDecl *
162
168
GetTypeWrapperStorage::evaluate (Evaluator &evaluator,
163
169
NominalTypeDecl *parent) const {
@@ -190,8 +196,8 @@ GetTypeWrapperProperty::evaluate(Evaluator &evaluator,
190
196
if (!typeWrapper)
191
197
return nullptr ;
192
198
193
- auto *storage =
194
- evaluateOrDefault (ctx. evaluator , GetTypeWrapperStorage{parent}, nullptr );
199
+ auto *storage = parent-> getTypeWrapperStorageDecl ();
200
+ assert (storage );
195
201
196
202
auto *typeWrapperType =
197
203
evaluateOrDefault (ctx.evaluator , GetTypeWrapperType{parent}, Type ())
@@ -217,10 +223,7 @@ VarDecl *GetTypeWrapperStorageForProperty::evaluate(Evaluator &evaluator,
217
223
if (!property->isAccessedViaTypeWrapper ())
218
224
return nullptr ;
219
225
220
- auto &ctx = wrappedType->getASTContext ();
221
-
222
- auto *storage = evaluateOrDefault (
223
- ctx.evaluator , GetTypeWrapperStorage{wrappedType}, nullptr );
226
+ auto *storage = wrappedType->getTypeWrapperStorageDecl ();
224
227
assert (storage);
225
228
226
229
return injectProperty (storage, property->getName (),
@@ -394,8 +397,7 @@ SynthesizeTypeWrapperInitializerBody::evaluate(Evaluator &evaluator,
394
397
auto *parent = ctor->getDeclContext ()->getSelfNominalTypeDecl ();
395
398
396
399
// self.$_storage = .init(memberwise: $Storage(...))
397
- auto *storageType =
398
- evaluateOrDefault (ctx.evaluator , GetTypeWrapperStorage{parent}, nullptr );
400
+ auto *storageType = parent->getTypeWrapperStorageDecl ();
399
401
assert (storageType);
400
402
401
403
auto *typeWrapperVar = parent->getTypeWrapperProperty ();
@@ -493,8 +495,7 @@ VarDecl *SynthesizeLocalVariableForTypeWrapperStorage::evaluate(
493
495
if (!(DC && DC->hasTypeWrapper ()))
494
496
return nullptr ;
495
497
496
- auto *storageDecl =
497
- evaluateOrDefault (evaluator, GetTypeWrapperStorage{DC}, nullptr );
498
+ auto *storageDecl = DC->getTypeWrapperStorageDecl ();
498
499
assert (storageDecl);
499
500
500
501
SmallVector<TupleTypeElt, 4 > members;
0 commit comments