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
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189368 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/ASTMatchers/Dynamic/VariantValue.cpp b/lib/ASTMatchers/Dynamic/VariantValue.cpp
index c350d78..87aca7d 100644
--- a/lib/ASTMatchers/Dynamic/VariantValue.cpp
+++ b/lib/ASTMatchers/Dynamic/VariantValue.cpp
@@ -38,9 +38,13 @@
.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 @@
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 @@
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;