Remove VariadicOperatorMatcherInterface as it is redundant with logic from DynTypedMatcher.
Summary:
The generic variadic matcher is faster (one less virtual function call
per match) and doesn't require template instantiations which reduces
compile time and binary size.
Registry.cpp.o generates ~14% less symbols and compiles ~7.5% faster.
The change also speeds up our clang-tidy benchmark by ~2%.
Reviewers: klimek
Subscribers: klimek, cfe-commits
Differential Revision: http://reviews.llvm.org/D6278
llvm-svn: 222131
diff --git a/clang/lib/ASTMatchers/ASTMatchersInternal.cpp b/clang/lib/ASTMatchers/ASTMatchersInternal.cpp
index 06ec767..af6f0ab 100644
--- a/clang/lib/ASTMatchers/ASTMatchersInternal.cpp
+++ b/clang/lib/ASTMatchers/ASTMatchersInternal.cpp
@@ -32,7 +32,7 @@
class VariadicMatcher : public DynMatcherInterface {
public:
- VariadicMatcher(VariadicOperatorFunction Func,
+ VariadicMatcher(DynTypedMatcher::VariadicOperatorFunction Func,
std::vector<DynTypedMatcher> InnerMatchers)
: Func(Func), InnerMatchers(std::move(InnerMatchers)) {}
@@ -43,7 +43,7 @@
}
private:
- VariadicOperatorFunction Func;
+ DynTypedMatcher::VariadicOperatorFunction Func;
std::vector<DynTypedMatcher> InnerMatchers;
};
@@ -86,7 +86,8 @@
} // namespace
DynTypedMatcher DynTypedMatcher::constructVariadic(
- VariadicOperatorFunction Func, std::vector<DynTypedMatcher> InnerMatchers) {
+ DynTypedMatcher::VariadicOperatorFunction Func,
+ std::vector<DynTypedMatcher> InnerMatchers) {
assert(InnerMatchers.size() > 0 && "Array must not be empty.");
assert(std::all_of(InnerMatchers.begin(), InnerMatchers.end(),
[&InnerMatchers](const DynTypedMatcher &M) {