summaryrefslogtreecommitdiffstats
path: root/clang/lib/ASTMatchers/Dynamic/Registry.cpp
diff options
context:
space:
mode:
authorSamuel Benzaquen <sbenza@google.com>2013-06-03 19:31:08 +0000
committerSamuel Benzaquen <sbenza@google.com>2013-06-03 19:31:08 +0000
commit31edb51a4f274e97a9c54ae830b1896c690b8cf7 (patch)
treee53c1434bdb57c9c7b1cbf3bc6f542f333587ae6 /clang/lib/ASTMatchers/Dynamic/Registry.cpp
parentf102438f3a3215deb516059d8d003b18fdb125bd (diff)
downloadbcm5719-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.cpp17
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
OpenPOWER on IntegriCloud