forked from OSchip/llvm-project
ASTMatchers: Keep AllCallbacks in a set instead of a vector
AllCallbacks is currently only used to call onStartOfTranslationUnit and onEndOfTranslationUnit on them. In this (and any other scenario I can come up with), it is important (or at least better) not to have duplicates in this container. E.g. currently onEndOfTranslationUnit is called repeatedly on the same callback for every matcher that is registered with it. llvm-svn: 249598
This commit is contained in:
parent
74b8f4cbdf
commit
d1ac50ecaa
|
@ -42,6 +42,7 @@
|
|||
#define LLVM_CLANG_ASTMATCHERS_ASTMATCHFINDER_H
|
||||
|
||||
#include "clang/ASTMatchers/ASTMatchers.h"
|
||||
#include "llvm/ADT/SmallPtrSet.h"
|
||||
#include "llvm/ADT/StringMap.h"
|
||||
#include "llvm/Support/Timer.h"
|
||||
|
||||
|
@ -208,7 +209,7 @@ public:
|
|||
NestedNameSpecifierLoc;
|
||||
std::vector<std::pair<TypeLocMatcher, MatchCallback *>> TypeLoc;
|
||||
/// \brief All the callbacks in one container to simplify iteration.
|
||||
std::vector<MatchCallback *> AllCallbacks;
|
||||
llvm::SmallPtrSet<MatchCallback *, 16> AllCallbacks;
|
||||
};
|
||||
|
||||
private:
|
||||
|
|
|
@ -913,37 +913,37 @@ MatchFinder::~MatchFinder() {}
|
|||
void MatchFinder::addMatcher(const DeclarationMatcher &NodeMatch,
|
||||
MatchCallback *Action) {
|
||||
Matchers.DeclOrStmt.emplace_back(NodeMatch, Action);
|
||||
Matchers.AllCallbacks.push_back(Action);
|
||||
Matchers.AllCallbacks.insert(Action);
|
||||
}
|
||||
|
||||
void MatchFinder::addMatcher(const TypeMatcher &NodeMatch,
|
||||
MatchCallback *Action) {
|
||||
Matchers.Type.emplace_back(NodeMatch, Action);
|
||||
Matchers.AllCallbacks.push_back(Action);
|
||||
Matchers.AllCallbacks.insert(Action);
|
||||
}
|
||||
|
||||
void MatchFinder::addMatcher(const StatementMatcher &NodeMatch,
|
||||
MatchCallback *Action) {
|
||||
Matchers.DeclOrStmt.emplace_back(NodeMatch, Action);
|
||||
Matchers.AllCallbacks.push_back(Action);
|
||||
Matchers.AllCallbacks.insert(Action);
|
||||
}
|
||||
|
||||
void MatchFinder::addMatcher(const NestedNameSpecifierMatcher &NodeMatch,
|
||||
MatchCallback *Action) {
|
||||
Matchers.NestedNameSpecifier.emplace_back(NodeMatch, Action);
|
||||
Matchers.AllCallbacks.push_back(Action);
|
||||
Matchers.AllCallbacks.insert(Action);
|
||||
}
|
||||
|
||||
void MatchFinder::addMatcher(const NestedNameSpecifierLocMatcher &NodeMatch,
|
||||
MatchCallback *Action) {
|
||||
Matchers.NestedNameSpecifierLoc.emplace_back(NodeMatch, Action);
|
||||
Matchers.AllCallbacks.push_back(Action);
|
||||
Matchers.AllCallbacks.insert(Action);
|
||||
}
|
||||
|
||||
void MatchFinder::addMatcher(const TypeLocMatcher &NodeMatch,
|
||||
MatchCallback *Action) {
|
||||
Matchers.TypeLoc.emplace_back(NodeMatch, Action);
|
||||
Matchers.AllCallbacks.push_back(Action);
|
||||
Matchers.AllCallbacks.insert(Action);
|
||||
}
|
||||
|
||||
bool MatchFinder::addDynamicMatcher(const internal::DynTypedMatcher &NodeMatch,
|
||||
|
|
Loading…
Reference in New Issue