diff options
author | Samuel Benzaquen <sbenza@google.com> | 2013-08-13 14:54:51 +0000 |
---|---|---|
committer | Samuel Benzaquen <sbenza@google.com> | 2013-08-13 14:54:51 +0000 |
commit | 0239b691674cdcfdba1e4f821cd7e31177032fac (patch) | |
tree | 9ffbc0255bb9c4d7b05d78212cc5a37919589523 /clang/lib/ASTMatchers/Dynamic/Parser.cpp | |
parent | 68443b0a1487c6f7e583de387fb76a778f4ececf (diff) | |
download | bcm5719-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.cpp | 21 |
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 |