summaryrefslogtreecommitdiffstats
path: root/clang/lib/ASTMatchers/Dynamic/Parser.cpp
diff options
context:
space:
mode:
authorSamuel Benzaquen <sbenza@google.com>2013-08-13 14:54:51 +0000
committerSamuel Benzaquen <sbenza@google.com>2013-08-13 14:54:51 +0000
commit0239b691674cdcfdba1e4f821cd7e31177032fac (patch)
tree9ffbc0255bb9c4d7b05d78212cc5a37919589523 /clang/lib/ASTMatchers/Dynamic/Parser.cpp
parent68443b0a1487c6f7e583de387fb76a778f4ececf (diff)
downloadbcm5719-llvm-0239b691674cdcfdba1e4f821cd7e31177032fac.tar.gz
bcm5719-llvm-0239b691674cdcfdba1e4f821cd7e31177032fac.zip
Refactor "MatcherList" into "VariantMatcher" and abstract the notion of a list of matchers for the polymorphic case.
Summary: Refactor "MatcherList" into "VariantMatcher" and abstract the notion of a list of matchers for the polymorphic case. This work is to support future changes needed for eachOf/allOf/anyOf matchers. We will add a new type on VariantMatcher. Reviewers: klimek CC: cfe-commits, revane Differential Revision: http://llvm-reviews.chandlerc.com/D1365 llvm-svn: 188272
Diffstat (limited to 'clang/lib/ASTMatchers/Dynamic/Parser.cpp')
-rw-r--r--clang/lib/ASTMatchers/Dynamic/Parser.cpp21
1 files changed, 11 insertions, 10 deletions
diff --git a/clang/lib/ASTMatchers/Dynamic/Parser.cpp b/clang/lib/ASTMatchers/Dynamic/Parser.cpp
index 54424cea7e2..37e6c10478c 100644
--- a/clang/lib/ASTMatchers/Dynamic/Parser.cpp
+++ b/clang/lib/ASTMatchers/Dynamic/Parser.cpp
@@ -311,9 +311,9 @@ bool Parser::parseMatcherExpressionImpl(VariantValue *Value) {
NameToken.Text, NameToken.Range);
SourceRange MatcherRange = NameToken.Range;
MatcherRange.End = EndToken.Range.End;
- MatcherList Result = S->actOnMatcherExpression(
+ VariantMatcher Result = S->actOnMatcherExpression(
NameToken.Text, MatcherRange, BindID, Args, Error);
- if (Result.empty()) return false;
+ if (Result.isNull()) return false;
*Value = Result;
return true;
@@ -358,11 +358,11 @@ Parser::Parser(CodeTokenizer *Tokenizer, Sema *S,
class RegistrySema : public Parser::Sema {
public:
virtual ~RegistrySema() {}
- MatcherList actOnMatcherExpression(StringRef MatcherName,
- const SourceRange &NameRange,
- StringRef BindID,
- ArrayRef<ParserValue> Args,
- Diagnostics *Error) {
+ VariantMatcher actOnMatcherExpression(StringRef MatcherName,
+ const SourceRange &NameRange,
+ StringRef BindID,
+ ArrayRef<ParserValue> Args,
+ Diagnostics *Error) {
if (BindID.empty()) {
return Registry::constructMatcher(MatcherName, NameRange, Args, Error);
} else {
@@ -402,16 +402,17 @@ DynTypedMatcher *Parser::parseMatcherExpression(StringRef Code,
VariantValue Value;
if (!parseExpression(Code, S, &Value, Error))
return NULL;
- if (!Value.isMatchers()) {
+ if (!Value.isMatcher()) {
Error->addError(SourceRange(), Error->ET_ParserNotAMatcher);
return NULL;
}
- if (Value.getMatchers().matchers().size() != 1) {
+ const DynTypedMatcher *Result;
+ if (!Value.getMatcher().getSingleMatcher(Result)) {
Error->addError(SourceRange(), Error->ET_ParserOverloadedType)
<< Value.getTypeAsString();
return NULL;
}
- return Value.getMatchers().matchers()[0]->clone();
+ return Result->clone();
}
} // namespace dynamic
OpenPOWER on IntegriCloud