Skip to content

Commit 8ca0f0d

Browse files
author
David Ungar
committed
Factor out visitGenericParamList in order to be sure predicates evaluated in order.
1 parent 3e48f71 commit 8ca0f0d

File tree

1 file changed

+17
-17
lines changed

1 file changed

+17
-17
lines changed

lib/AST/ASTWalker.cpp

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -265,12 +265,8 @@ class Traversal : public ASTVisitor<Traversal, Expr*, Stmt*,
265265
}
266266

267267
bool visitNominalTypeDecl(NominalTypeDecl *NTD) {
268-
bool WalkGenerics = NTD->getGenericParams() &&
269-
Walker.shouldWalkIntoGenericParams();
270268

271-
if (WalkGenerics) {
272-
visitGenericParamList(NTD->getGenericParams());
273-
}
269+
bool WalkGenerics = visitGenericParamListIfNeeded(NTD);
274270

275271
for (auto &Inherit : NTD->getInherited()) {
276272
if (doIt(Inherit))
@@ -329,11 +325,8 @@ class Traversal : public ASTVisitor<Traversal, Expr*, Stmt*,
329325
}
330326

331327
bool visitSubscriptDecl(SubscriptDecl *SD) {
332-
bool WalkGenerics = SD->getGenericParams() &&
333-
Walker.shouldWalkIntoGenericParams();
334-
if (WalkGenerics) {
335-
visitGenericParamList(SD->getGenericParams());
336-
}
328+
bool WalkGenerics = visitGenericParamListIfNeeded(SD);
329+
337330
visit(SD->getIndices());
338331
if (doIt(SD->getElementTypeLoc()))
339332
return true;
@@ -364,14 +357,9 @@ class Traversal : public ASTVisitor<Traversal, Expr*, Stmt*,
364357
PrettyStackTraceDecl debugStack("walking into body of", AFD);
365358
#endif
366359

367-
bool WalkGenerics = AFD->getGenericParams() &&
368-
Walker.shouldWalkIntoGenericParams() &&
360+
bool WalkGenerics =
369361
// accessor generics are visited from the storage decl
370-
!isa<AccessorDecl>(AFD);
371-
372-
if (WalkGenerics) {
373-
visitGenericParamList(AFD->getGenericParams());
374-
}
362+
!isa<AccessorDecl>(AFD) && visitGenericParamListIfNeeded(AFD);
375363

376364
if (auto *PD = AFD->getImplicitSelfDecl(/*createIfNeeded=*/false))
377365
visit(PD);
@@ -1353,6 +1341,18 @@ class Traversal : public ASTVisitor<Traversal, Expr*, Stmt*,
13531341
}
13541342
return false;
13551343
}
1344+
1345+
private:
1346+
bool visitGenericParamListIfNeeded(GenericContext *gc) {
1347+
// Must check this first in case extensions have not been bound yet
1348+
if (Walker.shouldWalkIntoGenericParams()) {
1349+
if (auto *params = gc->getGenericParams()) {
1350+
visitGenericParamList(params);
1351+
return true;
1352+
}
1353+
}
1354+
return false;
1355+
}
13561356
};
13571357

13581358
} // end anonymous namespace

0 commit comments

Comments
 (0)