[clang] 019723f - Invert accessor for checking traversal mode

Stephen Kelly via cfe-commits cfe-commits at lists.llvm.org
Tue Nov 17 08:29:21 PST 2020


Author: Stephen Kelly
Date: 2020-11-17T16:28:59Z
New Revision: 019723fc295b692af31ced0d8e5c3c1736117de9

URL: https://github.com/llvm/llvm-project/commit/019723fc295b692af31ced0d8e5c3c1736117de9
DIFF: https://github.com/llvm/llvm-project/commit/019723fc295b692af31ced0d8e5c3c1736117de9.diff

LOG: Invert accessor for checking traversal mode

For now, there is a traversal mode which ignores implicit casts and
parenthesis. Invert the check in order to not obviously break that.

Added: 
    

Modified: 
    clang/include/clang/ASTMatchers/ASTMatchersInternal.h
    clang/lib/ASTMatchers/ASTMatchFinder.cpp
    clang/lib/ASTMatchers/ASTMatchersInternal.cpp

Removed: 
    


################################################################################
diff  --git a/clang/include/clang/ASTMatchers/ASTMatchersInternal.h b/clang/include/clang/ASTMatchers/ASTMatchersInternal.h
index 2c2e67ace1575..81c7222810671 100644
--- a/clang/include/clang/ASTMatchers/ASTMatchersInternal.h
+++ b/clang/include/clang/ASTMatchers/ASTMatchersInternal.h
@@ -1062,7 +1062,7 @@ class ASTMatchFinder {
 
   virtual bool IsMatchingInTemplateInstantiationNotSpelledInSource() const = 0;
 
-  bool isTraversalAsIs() const;
+  bool isTraversalIgnoringImplicitNodes() const;
 
 protected:
   virtual bool matchesChildOf(const DynTypedNode &Node, ASTContext &Ctx,

diff  --git a/clang/lib/ASTMatchers/ASTMatchFinder.cpp b/clang/lib/ASTMatchers/ASTMatchFinder.cpp
index 33dd45d434236..e3723bb20dd2d 100644
--- a/clang/lib/ASTMatchers/ASTMatchFinder.cpp
+++ b/clang/lib/ASTMatchers/ASTMatchFinder.cpp
@@ -153,7 +153,7 @@ class MatchChildASTVisitor
     Stmt *StmtToTraverse = StmtNode;
     if (auto *ExprNode = dyn_cast_or_null<Expr>(StmtNode)) {
       auto *LambdaNode = dyn_cast_or_null<LambdaExpr>(StmtNode);
-      if (LambdaNode && !Finder->isTraversalAsIs())
+      if (LambdaNode && Finder->isTraversalIgnoringImplicitNodes())
         StmtToTraverse = LambdaNode;
       else
         StmtToTraverse =
@@ -230,7 +230,7 @@ class MatchChildASTVisitor
     return traverse(TAL);
   }
   bool TraverseLambdaExpr(LambdaExpr *Node) {
-    if (Finder->isTraversalAsIs())
+    if (!Finder->isTraversalIgnoringImplicitNodes())
       return VisitorBase::TraverseLambdaExpr(Node);
     if (!Node)
       return true;

diff  --git a/clang/lib/ASTMatchers/ASTMatchersInternal.cpp b/clang/lib/ASTMatchers/ASTMatchersInternal.cpp
index b7044cd23ffeb..874752bf2f7d9 100644
--- a/clang/lib/ASTMatchers/ASTMatchersInternal.cpp
+++ b/clang/lib/ASTMatchers/ASTMatchersInternal.cpp
@@ -191,8 +191,9 @@ class DynTraversalMatcherImpl : public DynMatcherInterface {
 
 static llvm::ManagedStatic<TrueMatcherImpl> TrueMatcherInstance;
 
-bool ASTMatchFinder::isTraversalAsIs() const {
-  return getASTContext().getParentMapContext().getTraversalKind() == TK_AsIs;
+bool ASTMatchFinder::isTraversalIgnoringImplicitNodes() const {
+  return getASTContext().getParentMapContext().getTraversalKind() ==
+         TK_IgnoreUnlessSpelledInSource;
 }
 
 DynTypedMatcher
@@ -288,7 +289,7 @@ bool DynTypedMatcher::matches(const DynTypedNode &DynNode,
   TraversalKindScope RAII(Finder->getASTContext(),
                           Implementation->TraversalKind());
 
-  if (!Finder->isTraversalAsIs() &&
+  if (Finder->isTraversalIgnoringImplicitNodes() &&
       Finder->IsMatchingInTemplateInstantiationNotSpelledInSource())
     return false;
 
@@ -312,7 +313,7 @@ bool DynTypedMatcher::matchesNoKindCheck(const DynTypedNode &DynNode,
   TraversalKindScope raii(Finder->getASTContext(),
                           Implementation->TraversalKind());
 
-  if (!Finder->isTraversalAsIs() &&
+  if (Finder->isTraversalIgnoringImplicitNodes() &&
       Finder->IsMatchingInTemplateInstantiationNotSpelledInSource())
     return false;
 


        


More information about the cfe-commits mailing list