diff options
author | Samuel Benzaquen <sbenza@google.com> | 2013-06-03 19:31:08 +0000 |
---|---|---|
committer | Samuel Benzaquen <sbenza@google.com> | 2013-06-03 19:31:08 +0000 |
commit | 31edb51a4f274e97a9c54ae830b1896c690b8cf7 (patch) | |
tree | e53c1434bdb57c9c7b1cbf3bc6f542f333587ae6 /clang/lib/ASTMatchers/Dynamic/Registry.cpp | |
parent | f102438f3a3215deb516059d8d003b18fdb125bd (diff) | |
download | bcm5719-llvm-31edb51a4f274e97a9c54ae830b1896c690b8cf7.tar.gz bcm5719-llvm-31edb51a4f274e97a9c54ae830b1896c690b8cf7.zip |
Add support for .bind("foo") expressions on the dynamic matchers.
Summary: Add support on the parser, registry, and DynTypedMatcher for binding IDs dynamically.
Reviewers: klimek
CC: cfe-commits, revane
Differential Revision: http://llvm-reviews.chandlerc.com/D911
llvm-svn: 183144
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 |