diff options
Diffstat (limited to 'clang/lib/ASTMatchers/Dynamic/Registry.cpp')
-rw-r--r-- | clang/lib/ASTMatchers/Dynamic/Registry.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/clang/lib/ASTMatchers/Dynamic/Registry.cpp b/clang/lib/ASTMatchers/Dynamic/Registry.cpp index 34a230b8728..6e543fc8504 100644 --- a/clang/lib/ASTMatchers/Dynamic/Registry.cpp +++ b/clang/lib/ASTMatchers/Dynamic/Registry.cpp @@ -148,6 +148,23 @@ DynTypedMatcher *Registry::constructMatcher(StringRef MatcherName, return it->second->run(NameRange, Args, Error); } +// static +DynTypedMatcher *Registry::constructBoundMatcher(StringRef MatcherName, + const SourceRange &NameRange, + StringRef BindID, + ArrayRef<ParserValue> Args, + Diagnostics *Error) { + OwningPtr<DynTypedMatcher> Out( + constructMatcher(MatcherName, NameRange, Args, Error)); + if (!Out) return NULL; + DynTypedMatcher *Bound = Out->tryBind(BindID); + if (!Bound) { + Error->pushErrorFrame(NameRange, Error->ET_RegistryNotBindable); + return NULL; + } + return Bound; +} + } // namespace dynamic } // namespace ast_matchers } // namespace clang |