@@ -111,6 +111,8 @@ static void diagSyntacticUseRestrictions(TypeChecker &TC, const Expr *E,
111
111
bool walkToDeclPre (Decl *D) override { return false ; }
112
112
bool walkToTypeReprPre (TypeRepr *T) override { return true ; }
113
113
114
+ bool shouldWalkIntoNonSingleExpressionClosure () override { return false ; }
115
+
114
116
std::pair<bool , Expr *> walkToExprPre (Expr *E) override {
115
117
// See through implicit conversions of the expression. We want to be able
116
118
// to associate the parent of this expression with the ultimate callee.
@@ -1399,6 +1401,8 @@ static void diagRecursivePropertyAccess(TypeChecker &TC, const Expr *E,
1399
1401
cast<VarDecl>(DRE->getDecl ())->isSelfParameter ();
1400
1402
}
1401
1403
1404
+ bool shouldWalkIntoNonSingleExpressionClosure () override { return false ; }
1405
+
1402
1406
std::pair<bool , Expr *> walkToExprPre (Expr *E) override {
1403
1407
Expr *subExpr;
1404
1408
bool isStore = false ;
@@ -1547,11 +1551,10 @@ static void diagnoseImplicitSelfUseInClosure(TypeChecker &TC, const Expr *E,
1547
1551
return false ;
1548
1552
}
1549
1553
1554
+ bool shouldWalkIntoNonSingleExpressionClosure () override { return false ; }
1555
+
1550
1556
std::pair<bool , Expr *> walkToExprPre (Expr *E) override {
1551
1557
if (auto *CE = dyn_cast<AbstractClosureExpr>(E)) {
1552
- if (!CE->hasSingleExpressionBody ())
1553
- return { false , E };
1554
-
1555
1558
// If this is a potentially-escaping closure expression, start looking
1556
1559
// for references to self if we aren't already.
1557
1560
if (isClosureRequiringSelfQualification (CE))
@@ -2348,7 +2351,7 @@ class VarDeclUsageChecker : public ASTWalker {
2348
2351
// other things going on in the initializer expressions.
2349
2352
return true ;
2350
2353
}
2351
-
2354
+
2352
2355
// / The heavy lifting happens when visiting expressions.
2353
2356
std::pair<bool , Expr *> walkToExprPre (Expr *E) override ;
2354
2357
@@ -2733,8 +2736,6 @@ void VarDeclUsageChecker::markStoredOrInOutExpr(Expr *E, unsigned Flags) {
2733
2736
E->walk (*this );
2734
2737
}
2735
2738
2736
-
2737
-
2738
2739
// / The heavy lifting happens when visiting expressions.
2739
2740
std::pair<bool , Expr *> VarDeclUsageChecker::walkToExprPre (Expr *E) {
2740
2741
// Sema leaves some subexpressions null, which seems really unfortunate. It
@@ -2975,6 +2976,8 @@ static void checkStmtConditionTrailingClosure(TypeChecker &TC, const Expr *E) {
2975
2976
public:
2976
2977
DiagnoseWalker (TypeChecker &tc) : TC(tc) { }
2977
2978
2979
+ bool shouldWalkIntoNonSingleExpressionClosure () override { return false ; }
2980
+
2978
2981
std::pair<bool , Expr *> walkToExprPre (Expr *E) override {
2979
2982
// Dig into implicit expression.
2980
2983
if (E->isImplicit ()) return { true , E };
@@ -3106,6 +3109,8 @@ class ObjCSelectorWalker : public ASTWalker {
3106
3109
ObjCSelectorWalker (TypeChecker &tc, const DeclContext *dc, Type selectorTy)
3107
3110
: TC(tc), DC(dc), SelectorTy(selectorTy) { }
3108
3111
3112
+ bool shouldWalkIntoNonSingleExpressionClosure () override { return false ; }
3113
+
3109
3114
std::pair<bool , Expr *> walkToExprPre (Expr *expr) override {
3110
3115
auto *stringLiteral = dyn_cast<StringLiteralExpr>(expr);
3111
3116
bool fromStringLiteral = false ;
@@ -3777,14 +3782,12 @@ static void diagnoseUnintendedOptionalBehavior(TypeChecker &TC, const Expr *E,
3777
3782
}
3778
3783
}
3779
3784
3785
+ bool shouldWalkIntoNonSingleExpressionClosure () override { return false ; }
3786
+
3780
3787
std::pair<bool , Expr *> walkToExprPre (Expr *E) override {
3781
3788
if (!E || isa<ErrorExpr>(E) || !E->getType ())
3782
3789
return { false , E };
3783
3790
3784
- if (auto *CE = dyn_cast<AbstractClosureExpr>(E))
3785
- if (!CE->hasSingleExpressionBody ())
3786
- return { false , E };
3787
-
3788
3791
if (IgnoredExprs.count (E))
3789
3792
return { true , E };
3790
3793
@@ -3851,6 +3854,8 @@ static void diagnoseDeprecatedWritableKeyPath(TypeChecker &TC, const Expr *E,
3851
3854
}
3852
3855
}
3853
3856
3857
+ bool shouldWalkIntoNonSingleExpressionClosure () override { return false ; }
3858
+
3854
3859
std::pair<bool , Expr *> walkToExprPre (Expr *E) override {
3855
3860
if (!E || isa<ErrorExpr>(E) || !E->getType ())
3856
3861
return {false , E};
0 commit comments