summaryrefslogtreecommitdiffstats
path: root/clang/lib/ASTMatchers/Dynamic/VariantValue.cpp
diff options
context:
space:
mode:
authorSamuel Benzaquen <sbenza@google.com>2013-08-27 16:55:22 +0000
committerSamuel Benzaquen <sbenza@google.com>2013-08-27 16:55:22 +0000
commit46e59b05eb4248357022f930583ff9640cf6a58c (patch)
tree0c01b07e902afe1ee765e8e4e31d403d5f106828 /clang/lib/ASTMatchers/Dynamic/VariantValue.cpp
parentf02a3c599bf1974da857854d279622c6e2455868 (diff)
downloadbcm5719-llvm-46e59b05eb4248357022f930583ff9640cf6a58c.tar.gz
bcm5719-llvm-46e59b05eb4248357022f930583ff9640cf6a58c.zip
Revert "Add support for eachOf/allOf/anyOf variadic matchers in the dynamic layer."
Summary: This reverts commit 3b082a3c72324aa3363b5184731740534c6b9a2b. It breaks the build in c++11 mode. Reviewers: klimek CC: cfe-commits, revane Differential Revision: http://llvm-reviews.chandlerc.com/D1533 llvm-svn: 189368
Diffstat (limited to 'clang/lib/ASTMatchers/Dynamic/VariantValue.cpp')
-rw-r--r--clang/lib/ASTMatchers/Dynamic/VariantValue.cpp60
1 files changed, 16 insertions, 44 deletions
diff --git a/clang/lib/ASTMatchers/Dynamic/VariantValue.cpp b/clang/lib/ASTMatchers/Dynamic/VariantValue.cpp
index c350d78aa14..87aca7da853 100644
--- a/clang/lib/ASTMatchers/Dynamic/VariantValue.cpp
+++ b/clang/lib/ASTMatchers/Dynamic/VariantValue.cpp
@@ -38,9 +38,13 @@ public:
.str();
}
- virtual void makeTypedMatcher(MatcherOps &Ops) const {
- if (Ops.canConstructFrom(*Matcher))
- Ops.constructFrom(*Matcher);
+ virtual bool hasTypedMatcher(const MatcherOps &Ops) const {
+ return Ops.canConstructFrom(*Matcher);
+ }
+
+ virtual const DynTypedMatcher *getTypedMatcher(const MatcherOps &Ops) const {
+ assert(hasTypedMatcher(Ops));
+ return Matcher.get();
}
private:
@@ -76,49 +80,23 @@ public:
return (Twine("Matcher<") + Inner + ">").str();
}
- virtual void makeTypedMatcher(MatcherOps &Ops) const {
- const DynTypedMatcher *Found = NULL;
+ virtual bool hasTypedMatcher(const MatcherOps &Ops) const {
+ return getTypedMatcher(Ops) != NULL;
+ }
+
+ virtual const DynTypedMatcher *getTypedMatcher(const MatcherOps &Ops) const {
+ const DynTypedMatcher* Found = NULL;
for (size_t i = 0, e = Matchers.size(); i != e; ++i) {
if (Ops.canConstructFrom(*Matchers[i])) {
- if (Found)
- return;
+ if (Found) return NULL;
Found = Matchers[i];
}
}
- if (Found)
- Ops.constructFrom(*Found);
- }
-
- std::vector<const DynTypedMatcher *> Matchers;
-};
-
-class VariantMatcher::VariadicOpPayload : public VariantMatcher::Payload {
-public:
- VariadicOpPayload(ast_matchers::internal::VariadicOperatorFunction Func,
- ArrayRef<VariantMatcher> Args)
- : Func(Func), Args(Args) {}
-
- virtual bool getSingleMatcher(const DynTypedMatcher *&Out) const {
- return false;
- }
-
- virtual std::string getTypeAsString() const {
- std::string Inner;
- for (size_t i = 0, e = Args.size(); i != e; ++i) {
- if (i != 0)
- Inner += "&";
- Inner += Args[i].getTypeAsString();
- }
- return Inner;
- }
-
- virtual void makeTypedMatcher(MatcherOps &Ops) const {
- Ops.constructVariadicOperator(Func, Args);
+ return Found;
}
private:
- const ast_matchers::internal::VariadicOperatorFunction Func;
- const std::vector<VariantMatcher> Args;
+ std::vector<const DynTypedMatcher *> Matchers;
};
VariantMatcher::VariantMatcher() {}
@@ -132,12 +110,6 @@ VariantMatcher::PolymorphicMatcher(ArrayRef<const DynTypedMatcher *> Matchers) {
return VariantMatcher(new PolymorphicPayload(Matchers));
}
-VariantMatcher VariantMatcher::VariadicOperatorMatcher(
- ast_matchers::internal::VariadicOperatorFunction Func,
- ArrayRef<VariantMatcher> Args) {
- return VariantMatcher(new VariadicOpPayload(Func, Args));
-}
-
bool VariantMatcher::getSingleMatcher(const DynTypedMatcher *&Out) const {
if (Value) return Value->getSingleMatcher(Out);
return false;
OpenPOWER on IntegriCloud