Skip to content

Commit 61393de

Browse files
committed
[Sema] NFC: Clean up the entrypoint to ContextualizeClosuresAndMacros
Expose a generic `TypeChecker::contextualizeExpr` to invoke it.
1 parent a0c3286 commit 61393de

File tree

5 files changed

+19
-23
lines changed

5 files changed

+19
-23
lines changed

lib/Sema/TypeCheckDeclPrimary.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1337,7 +1337,7 @@ Expr *DefaultArgumentExprRequest::evaluate(Evaluator &evaluator,
13371337

13381338
// Walk the checked initializer and contextualize any closures
13391339
// we saw there.
1340-
TypeChecker::contextualizeInitializer(dc, initExpr);
1340+
TypeChecker::contextualizeExpr(initExpr, dc);
13411341
TypeChecker::checkInitializerEffects(dc, initExpr);
13421342

13431343
return initExpr;

lib/Sema/TypeCheckExpr.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -772,7 +772,7 @@ Expr *CallerSideDefaultArgExprRequest::evaluate(
772772
return new (ctx) ErrorExpr(initExpr->getSourceRange(), paramTy);
773773
}
774774
if (param->getDefaultArgumentKind() == DefaultArgumentKind::ExpressionMacro) {
775-
TypeChecker::contextualizeCallSideDefaultArgument(dc, initExpr);
775+
TypeChecker::contextualizeExpr(initExpr, dc);
776776
TypeChecker::checkCallerSideDefaultArgumentEffects(dc, initExpr);
777777
}
778778
return initExpr;

lib/Sema/TypeCheckStmt.cpp

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,14 @@ namespace {
6666
/// DeclContext.
6767
class ContextualizeClosuresAndMacros : public ASTWalker {
6868
DeclContext *ParentDC;
69-
public:
69+
7070
ContextualizeClosuresAndMacros(DeclContext *parent) : ParentDC(parent) {}
7171

72+
public:
73+
static void contextualize(ASTNode node, DeclContext *DC) {
74+
node.walk(ContextualizeClosuresAndMacros(DC));
75+
}
76+
7277
MacroWalking getMacroWalkingBehavior() const override {
7378
return MacroWalking::ArgumentsAndExpansion;
7479
}
@@ -103,7 +108,7 @@ namespace {
103108

104109
if (auto CE = dyn_cast<ClosureExpr>(E)) {
105110
CE->setParent(ParentDC);
106-
CE->getBody()->walk(ContextualizeClosuresAndMacros(CE));
111+
contextualize(CE->getBody(), CE);
107112

108113
TypeChecker::computeCaptures(CE);
109114
return Action::SkipNode(E);
@@ -196,21 +201,13 @@ namespace {
196201
};
197202
} // end anonymous namespace
198203

199-
void TypeChecker::contextualizeInitializer(Initializer *DC, Expr *E) {
200-
ContextualizeClosuresAndMacros CC(DC);
201-
E->walk(CC);
202-
}
203-
204-
void TypeChecker::contextualizeCallSideDefaultArgument(DeclContext *DC,
205-
Expr *E) {
206-
ContextualizeClosuresAndMacros CC(DC);
207-
E->walk(CC);
204+
void TypeChecker::contextualizeExpr(Expr *E, DeclContext *DC) {
205+
ContextualizeClosuresAndMacros::contextualize(E, DC);
208206
}
209207

210208
void TypeChecker::contextualizeTopLevelCode(TopLevelCodeDecl *TLCD) {
211-
ContextualizeClosuresAndMacros CC(TLCD);
212209
if (auto *body = TLCD->getBody())
213-
body->walk(CC);
210+
ContextualizeClosuresAndMacros::contextualize(body, TLCD);
214211
}
215212

216213
namespace {
@@ -1033,7 +1030,7 @@ class StmtChecker : public StmtVisitor<StmtChecker, Stmt*> {
10331030
/// Type-check an entire function body.
10341031
bool typeCheckBody(BraceStmt *&S) {
10351032
bool HadError = typeCheckStmt(S);
1036-
S->walk(ContextualizeClosuresAndMacros(DC));
1033+
ContextualizeClosuresAndMacros::contextualize(S, DC);
10371034
return HadError;
10381035
}
10391036

@@ -2915,7 +2912,7 @@ TypeCheckFunctionBodyRequest::evaluate(Evaluator &eval,
29152912
body = *optBody;
29162913
alreadyTypeChecked = true;
29172914

2918-
body->walk(ContextualizeClosuresAndMacros(AFD));
2915+
ContextualizeClosuresAndMacros::contextualize(body, AFD);
29192916
}
29202917
}
29212918
}

lib/Sema/TypeCheckStorage.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -618,7 +618,7 @@ static void checkAndContextualizePatternBindingInit(PatternBindingDecl *binding,
618618

619619
if (auto *initContext = binding->getInitContext(i)) {
620620
auto *init = binding->getInit(i);
621-
TypeChecker::contextualizeInitializer(initContext, init);
621+
TypeChecker::contextualizeExpr(init, initContext);
622622
}
623623
}
624624

@@ -3200,7 +3200,7 @@ static void typeCheckSynthesizedWrapperInitializer(VarDecl *wrappedVar,
32003200
// will be done in visitPatternBindingDecl.
32013201
if (!contextualize)
32023202
return;
3203-
TypeChecker::contextualizeInitializer(initContext, initializer);
3203+
TypeChecker::contextualizeExpr(initializer, initContext);
32043204
checkPropertyWrapperActorIsolation(wrappedVar, initializer);
32053205
TypeChecker::checkInitializerEffects(initContext, initializer);
32063206
}

lib/Sema/TypeChecker.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -773,10 +773,9 @@ void computeCaptures(AbstractClosureExpr *ACE);
773773
/// Check for invalid captures from stored property initializers.
774774
void checkPatternBindingCaptures(IterableDeclContext *DC);
775775

776-
/// Change the context of closures in the given initializer
777-
/// expression to the given context.
778-
void contextualizeInitializer(Initializer *DC, Expr *init);
779-
void contextualizeCallSideDefaultArgument(DeclContext *DC, Expr *init);
776+
/// Update the DeclContexts for AST nodes in a given DeclContext. This is
777+
/// necessary after type-checking since autoclosures may have been introduced.
778+
void contextualizeExpr(Expr *E, DeclContext *DC);
780779
void contextualizeTopLevelCode(TopLevelCodeDecl *TLCD);
781780

782781
/// Retrieve the default type for the given protocol.

0 commit comments

Comments
 (0)