diff options
author | Samuel Benzaquen <sbenza@google.com> | 2013-10-21 18:40:51 +0000 |
---|---|---|
committer | Samuel Benzaquen <sbenza@google.com> | 2013-10-21 18:40:51 +0000 |
commit | f46e5f1c9a75fa22d13c50e51c6b2e6158f9e825 (patch) | |
tree | 3a185a76bbaa1bec51f39f934c272558084a1007 /clang/lib/ASTMatchers/ASTMatchersInternal.cpp | |
parent | 4517d598803dcac0e26363d5f3e32d0488ec799e (diff) | |
download | bcm5719-llvm-f46e5f1c9a75fa22d13c50e51c6b2e6158f9e825.tar.gz bcm5719-llvm-f46e5f1c9a75fa22d13c50e51c6b2e6158f9e825.zip |
Refactor DynTypedMatcher into a value type class, just like Matcher<T>.
Summary:
Refactor DynTypedMatcher into a value type class, just like Matcher<T>.
This simplifies its usage and removes the virtual hierarchy from Matcher<T>.
It also enables planned changes to replace MatcherInteface<T>.
Too many instantiaions of this class hierarchy has been causing Registry.cpp.o to bloat in size and number of symbols.
Reviewers: klimek
CC: cfe-commits, revane
Differential Revision: http://llvm-reviews.chandlerc.com/D1661
llvm-svn: 193100
Diffstat (limited to 'clang/lib/ASTMatchers/ASTMatchersInternal.cpp')
-rw-r--r-- | clang/lib/ASTMatchers/ASTMatchersInternal.cpp | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/clang/lib/ASTMatchers/ASTMatchersInternal.cpp b/clang/lib/ASTMatchers/ASTMatchersInternal.cpp index e7465167da1..d15eb54002f 100644 --- a/clang/lib/ASTMatchers/ASTMatchersInternal.cpp +++ b/clang/lib/ASTMatchers/ASTMatchersInternal.cpp @@ -26,25 +26,23 @@ void BoundNodesTreeBuilder::visitMatches(Visitor *ResultVisitor) { } } +DynTypedMatcher::MatcherStorage::~MatcherStorage() {} + void BoundNodesTreeBuilder::addMatch(const BoundNodesTreeBuilder &Other) { for (unsigned i = 0, e = Other.Bindings.size(); i != e; ++i) { Bindings.push_back(Other.Bindings[i]); } } -DynTypedMatcher::~DynTypedMatcher() {} - -DynTypedMatcher *DynTypedMatcher::tryBind(StringRef ID) const { return NULL; } - bool AllOfVariadicOperator(const ast_type_traits::DynTypedNode DynNode, ASTMatchFinder *Finder, BoundNodesTreeBuilder *Builder, - ArrayRef<const DynTypedMatcher *> InnerMatchers) { + ArrayRef<DynTypedMatcher> InnerMatchers) { // allOf leads to one matcher for each alternative in the first // matcher combined with each alternative in the second matcher. // Thus, we can reuse the same Builder. for (size_t i = 0, e = InnerMatchers.size(); i != e; ++i) { - if (!InnerMatchers[i]->matches(DynNode, Finder, Builder)) + if (!InnerMatchers[i].matches(DynNode, Finder, Builder)) return false; } return true; @@ -53,12 +51,12 @@ bool AllOfVariadicOperator(const ast_type_traits::DynTypedNode DynNode, bool EachOfVariadicOperator(const ast_type_traits::DynTypedNode DynNode, ASTMatchFinder *Finder, BoundNodesTreeBuilder *Builder, - ArrayRef<const DynTypedMatcher *> InnerMatchers) { + ArrayRef<DynTypedMatcher> InnerMatchers) { BoundNodesTreeBuilder Result; bool Matched = false; for (size_t i = 0, e = InnerMatchers.size(); i != e; ++i) { BoundNodesTreeBuilder BuilderInner(*Builder); - if (InnerMatchers[i]->matches(DynNode, Finder, &BuilderInner)) { + if (InnerMatchers[i].matches(DynNode, Finder, &BuilderInner)) { Matched = true; Result.addMatch(BuilderInner); } @@ -70,10 +68,10 @@ bool EachOfVariadicOperator(const ast_type_traits::DynTypedNode DynNode, bool AnyOfVariadicOperator(const ast_type_traits::DynTypedNode DynNode, ASTMatchFinder *Finder, BoundNodesTreeBuilder *Builder, - ArrayRef<const DynTypedMatcher *> InnerMatchers) { + ArrayRef<DynTypedMatcher> InnerMatchers) { for (size_t i = 0, e = InnerMatchers.size(); i != e; ++i) { BoundNodesTreeBuilder Result = *Builder; - if (InnerMatchers[i]->matches(DynNode, Finder, &Result)) { + if (InnerMatchers[i].matches(DynNode, Finder, &Result)) { *Builder = Result; return true; } |