]> granicus.if.org Git - clang/commitdiff
ASTMatchers: Replace some copies of the bound nodes tree builder with moves.
authorBenjamin Kramer <benny.kra@googlemail.com>
Fri, 29 Aug 2014 11:22:47 +0000 (11:22 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Fri, 29 Aug 2014 11:22:47 +0000 (11:22 +0000)
But don't move if all we do is clearing the thing. The move method is too large
to be inlined and performs a ton of unnecessary checking when the RHS is empty.

No functionality change.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@216723 91177308-0d34-0410-b5e6-96231b3b80d8

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

index 7063606b59c1f0210d50b54d03ca92723d4022e7..9dd6f49ebae7470ac20a13c8169091b2096a572d 100644 (file)
@@ -2285,7 +2285,7 @@ AST_POLYMORPHIC_MATCHER_P(hasAnyArgument, AST_POLYMORPHIC_SUPPORTED_TYPES_2(
     BoundNodesTreeBuilder Result(*Builder);
     if (InnerMatcher.matches(*Node.getArg(I)->IgnoreParenImpCasts(), Finder,
                              &Result)) {
-      *Builder = Result;
+      *Builder = std::move(Result);
       return true;
     }
   }
@@ -3614,7 +3614,7 @@ AST_MATCHER_P(SwitchStmt, forEachSwitchCase, internal::Matcher<SwitchCase>,
       Result.addMatch(CaseBuilder);
     }
   }
-  *Builder = Result;
+  *Builder = std::move(Result);
   return Matched;
 }
 
@@ -3637,7 +3637,7 @@ AST_MATCHER_P(CXXConstructorDecl, forEachConstructorInitializer,
       Result.addMatch(InitBuilder);
     }
   }
-  *Builder = Result;
+  *Builder = std::move(Result);
   return Matched;
 }
 
index 80a3632bdf5ae942c9f4c1c68dd8e418765acf43..7eacf23b44d421c0029a47c9a8b7e07cafcfcaac 100644 (file)
@@ -262,7 +262,7 @@ public:
     // Delete all bindings when a matcher does not match.
     // This prevents unexpected exposure of bound nodes in unmatches
     // branches of the match tree.
-    *Builder = BoundNodesTreeBuilder();
+    Builder->removeBindings([](const BoundNodesMap &) { return true; });
     return false;
   }
 
@@ -490,7 +490,7 @@ bool matchesFirstInRange(const MatcherT &Matcher, IteratorT Start,
   for (IteratorT I = Start; I != End; ++I) {
     BoundNodesTreeBuilder Result(*Builder);
     if (Matcher.matches(*I, Finder, &Result)) {
-      *Builder = Result;
+      *Builder = std::move(Result);
       return true;
     }
   }
@@ -506,7 +506,7 @@ bool matchesFirstInPointerRange(const MatcherT &Matcher, IteratorT Start,
   for (IteratorT I = Start; I != End; ++I) {
     BoundNodesTreeBuilder Result(*Builder);
     if (Matcher.matches(**I, Finder, &Result)) {
-      *Builder = Result;
+      *Builder = std::move(Result);
       return true;
     }
   }
index 47b8b6d2f27a61b689e48d9000763965ae58f8f8..e501ee64f7e5afc149a57abd0b66eb5f05cc120a 100644 (file)
@@ -81,7 +81,7 @@ bool EachOfVariadicOperator(const ast_type_traits::DynTypedNode DynNode,
       Result.addMatch(BuilderInner);
     }
   }
-  *Builder = Result;
+  *Builder = std::move(Result);
   return Matched;
 }
 
@@ -92,7 +92,7 @@ bool AnyOfVariadicOperator(const ast_type_traits::DynTypedNode DynNode,
   for (size_t i = 0, e = InnerMatchers.size(); i != e; ++i) {
     BoundNodesTreeBuilder Result = *Builder;
     if (InnerMatchers[i].matches(DynNode, Finder, &Result)) {
-      *Builder = Result;
+      *Builder = std::move(Result);
       return true;
     }
   }