mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
[SE-0258] Properly contextualize closures in property wrapper initialization.
Fixes SR-11061 / rdar://problem/52593304 / rdar://problem/52220881.
This commit is contained in:
@@ -1837,12 +1837,19 @@ static VarDecl *synthesizePropertyWrapperStorageWrapperProperty(
|
||||
static void typeCheckSynthesizedWrapperInitializer(
|
||||
PatternBindingDecl *pbd, VarDecl *backingVar, PatternBindingDecl *parentPBD,
|
||||
Expr *&initializer) {
|
||||
DeclContext *dc = pbd->getDeclContext();
|
||||
ASTContext &ctx = dc->getASTContext();
|
||||
// Figure out the context in which the initializer was written.
|
||||
DeclContext *originalDC = parentPBD->getDeclContext();
|
||||
if (!originalDC->isLocalContext()) {
|
||||
auto initContext =
|
||||
cast_or_null<PatternBindingInitializer>(parentPBD->getInitContext(0));
|
||||
if (initContext)
|
||||
originalDC = initContext;
|
||||
}
|
||||
|
||||
// Type-check the initialization.
|
||||
ASTContext &ctx = pbd->getASTContext();
|
||||
auto &tc = *static_cast<TypeChecker *>(ctx.getLazyResolver());
|
||||
tc.typeCheckExpression(initializer, dc);
|
||||
tc.typeCheckExpression(initializer, originalDC);
|
||||
if (auto initializerContext =
|
||||
dyn_cast_or_null<Initializer>(
|
||||
pbd->getPatternEntryForVarDecl(backingVar).getInitContext())) {
|
||||
|
||||
Reference in New Issue
Block a user