Add utility for testing if we're matching nodes AsIs
authorStephen Kelly <steveire@gmail.com>
Mon, 9 Nov 2020 19:56:48 +0000 (19:56 +0000)
committerStephen Kelly <steveire@gmail.com>
Tue, 10 Nov 2020 23:32:30 +0000 (23:32 +0000)
Differential Revision: https://reviews.llvm.org/D91144

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

index f556397..2c2e67a 100644 (file)
@@ -1062,6 +1062,8 @@ public:
 
   virtual bool IsMatchingInTemplateInstantiationNotSpelledInSource() const = 0;
 
+  bool isTraversalAsIs() const;
+
 protected:
   virtual bool matchesChildOf(const DynTypedNode &Node, ASTContext &Ctx,
                               const DynTypedMatcher &Matcher,
index 67de0e1..33dd45d 100644 (file)
@@ -153,9 +153,7 @@ public:
     Stmt *StmtToTraverse = StmtNode;
     if (auto *ExprNode = dyn_cast_or_null<Expr>(StmtNode)) {
       auto *LambdaNode = dyn_cast_or_null<LambdaExpr>(StmtNode);
-      if (LambdaNode &&
-          Finder->getASTContext().getParentMapContext().getTraversalKind() ==
-              TK_IgnoreUnlessSpelledInSource)
+      if (LambdaNode && !Finder->isTraversalAsIs())
         StmtToTraverse = LambdaNode;
       else
         StmtToTraverse =
@@ -232,8 +230,7 @@ public:
     return traverse(TAL);
   }
   bool TraverseLambdaExpr(LambdaExpr *Node) {
-    if (Finder->getASTContext().getParentMapContext().getTraversalKind() !=
-        TK_IgnoreUnlessSpelledInSource)
+    if (Finder->isTraversalAsIs())
       return VisitorBase::TraverseLambdaExpr(Node);
     if (!Node)
       return true;
index 2e14ef2..0eea41b 100644 (file)
@@ -191,6 +191,10 @@ private:
 
 static llvm::ManagedStatic<TrueMatcherImpl> TrueMatcherInstance;
 
+bool ASTMatchFinder::isTraversalAsIs() const {
+  return getASTContext().getParentMapContext().getTraversalKind() == TK_AsIs;
+}
+
 DynTypedMatcher
 DynTypedMatcher::constructVariadic(DynTypedMatcher::VariadicOperator Op,
                                    ASTNodeKind SupportedKind,
@@ -284,8 +288,7 @@ bool DynTypedMatcher::matches(const DynTypedNode &DynNode,
   TraversalKindScope RAII(Finder->getASTContext(),
                           Implementation->TraversalKind());
 
-  if (Finder->getASTContext().getParentMapContext().getTraversalKind() ==
-          TK_IgnoreUnlessSpelledInSource &&
+  if (!Finder->isTraversalAsIs() &&
       Finder->IsMatchingInTemplateInstantiationNotSpelledInSource())
     return false;
 
@@ -309,8 +312,7 @@ bool DynTypedMatcher::matchesNoKindCheck(const DynTypedNode &DynNode,
   TraversalKindScope raii(Finder->getASTContext(),
                           Implementation->TraversalKind());
 
-  if (Finder->getASTContext().getParentMapContext().getTraversalKind() ==
-          TK_IgnoreUnlessSpelledInSource &&
+  if (!Finder->isTraversalAsIs() &&
       Finder->IsMatchingInTemplateInstantiationNotSpelledInSource())
     return false;