@@ -5166,7 +5166,6 @@ class ExprContextAnalyzer {
5166
5166
Expr *ParsedExpr;
5167
5167
SourceManager &SM;
5168
5168
ASTContext &Context;
5169
- ExprParentFinder Finder;
5170
5169
5171
5170
// Results populated by Analyze()
5172
5171
SmallVector<Type, 2 > PossibleTypes;
@@ -5238,59 +5237,6 @@ class ExprContextAnalyzer {
5238
5237
return !PossibleTypes.empty () || !PossibleNames.empty ();
5239
5238
}
5240
5239
5241
- public:
5242
- ExprContextAnalyzer (DeclContext *DC, Expr *ParsedExpr) : DC(DC),
5243
- ParsedExpr (ParsedExpr), SM(DC->getASTContext ().SourceMgr),
5244
- Context(DC->getASTContext ()),
5245
- Finder(ParsedExpr, [](ASTWalker::ParentTy Node, ASTWalker::ParentTy Parent) {
5246
- if (auto E = Node.getAsExpr ()) {
5247
- switch (E->getKind ()) {
5248
- case ExprKind::Call:
5249
- case ExprKind::Binary:
5250
- case ExprKind::PrefixUnary:
5251
- case ExprKind::Assign:
5252
- case ExprKind::Subscript:
5253
- return true ;
5254
- case ExprKind::Tuple: {
5255
- auto ParentE = Parent.getAsExpr ();
5256
- return !ParentE || (!isa<CallExpr>(ParentE) &&
5257
- !isa<SubscriptExpr>(ParentE) &&
5258
- !isa<BinaryExpr>(ParentE) &&
5259
- !isa<TupleShuffleExpr>(ParentE));
5260
- }
5261
- default :
5262
- return false ;
5263
- }
5264
- } else if (auto S = Node.getAsStmt ()) {
5265
- switch (S->getKind ()) {
5266
- case StmtKind::Return:
5267
- case StmtKind::ForEach:
5268
- case StmtKind::RepeatWhile:
5269
- case StmtKind::If:
5270
- case StmtKind::While:
5271
- case StmtKind::Guard:
5272
- return true ;
5273
- default :
5274
- return false ;
5275
- }
5276
- } else if (auto D = Node.getAsDecl ()) {
5277
- switch (D->getKind ()) {
5278
- case DeclKind::PatternBinding:
5279
- return true ;
5280
- default :
5281
- return false ;
5282
- }
5283
- } else if (auto P = Node.getAsPattern ()) {
5284
- switch (P->getKind ()) {
5285
- case PatternKind::Expr:
5286
- return true ;
5287
- default :
5288
- return false ;
5289
- }
5290
- } else
5291
- return false ;
5292
- }) {}
5293
-
5294
5240
void analyzeExpr (Expr *Parent) {
5295
5241
switch (Parent->getKind ()) {
5296
5242
case ExprKind::Call:
@@ -5421,10 +5367,64 @@ class ExprContextAnalyzer {
5421
5367
}
5422
5368
}
5423
5369
5370
+ public:
5371
+ ExprContextAnalyzer (DeclContext *DC, Expr *ParsedExpr)
5372
+ : DC(DC), ParsedExpr(ParsedExpr), SM(DC->getASTContext ().SourceMgr),
5373
+ Context(DC->getASTContext ()) {}
5374
+
5424
5375
bool Analyze () {
5425
5376
// We cannot analyze without target.
5426
5377
if (!ParsedExpr)
5427
5378
return false ;
5379
+
5380
+ ExprParentFinder Finder (ParsedExpr, [](ASTWalker::ParentTy Node,
5381
+ ASTWalker::ParentTy Parent) {
5382
+ if (auto E = Node.getAsExpr ()) {
5383
+ switch (E->getKind ()) {
5384
+ case ExprKind::Call:
5385
+ case ExprKind::Binary:
5386
+ case ExprKind::PrefixUnary:
5387
+ case ExprKind::Assign:
5388
+ case ExprKind::Subscript:
5389
+ return true ;
5390
+ case ExprKind::Tuple: {
5391
+ auto ParentE = Parent.getAsExpr ();
5392
+ return !ParentE ||
5393
+ (!isa<CallExpr>(ParentE) && !isa<SubscriptExpr>(ParentE) &&
5394
+ !isa<BinaryExpr>(ParentE) && !isa<TupleShuffleExpr>(ParentE));
5395
+ }
5396
+ default :
5397
+ return false ;
5398
+ }
5399
+ } else if (auto S = Node.getAsStmt ()) {
5400
+ switch (S->getKind ()) {
5401
+ case StmtKind::Return:
5402
+ case StmtKind::ForEach:
5403
+ case StmtKind::RepeatWhile:
5404
+ case StmtKind::If:
5405
+ case StmtKind::While:
5406
+ case StmtKind::Guard:
5407
+ return true ;
5408
+ default :
5409
+ return false ;
5410
+ }
5411
+ } else if (auto D = Node.getAsDecl ()) {
5412
+ switch (D->getKind ()) {
5413
+ case DeclKind::PatternBinding:
5414
+ return true ;
5415
+ default :
5416
+ return false ;
5417
+ }
5418
+ } else if (auto P = Node.getAsPattern ()) {
5419
+ switch (P->getKind ()) {
5420
+ case PatternKind::Expr:
5421
+ return true ;
5422
+ default :
5423
+ return false ;
5424
+ }
5425
+ } else
5426
+ return false ;
5427
+ });
5428
5428
DC->walkContext (Finder);
5429
5429
5430
5430
if (Finder.Ancestors .empty ())
0 commit comments