summaryrefslogtreecommitdiffstats
path: root/clang/lib/ASTMatchers/Dynamic/Parser.cpp
diff options
context:
space:
mode:
authorSamuel Benzaquen <sbenza@google.com>2013-07-18 19:47:59 +0000
committerSamuel Benzaquen <sbenza@google.com>2013-07-18 19:47:59 +0000
commita37bb8c01a980d06142e81b4b6d15e1c86a5d452 (patch)
tree1e1f74b43d93ff72ad926b55dce697cc25802bc3 /clang/lib/ASTMatchers/Dynamic/Parser.cpp
parenta4b6cf14f685a4bf4a033eafb709d01e176db8a8 (diff)
downloadbcm5719-llvm-a37bb8c01a980d06142e81b4b6d15e1c86a5d452.tar.gz
bcm5719-llvm-a37bb8c01a980d06142e81b4b6d15e1c86a5d452.zip
Separate the notion of 'context' when recursing down in the parser and actual errors.
Summary: Change how error messages are constructed and stored in Diagnostics. Separate the notion of 'context' when recursing down in the parser and actual errors. This will simplify adding some new features, like argument overloading and error recovery. Reviewers: klimek CC: cfe-commits, revane Differential Revision: http://llvm-reviews.chandlerc.com/D1168 llvm-svn: 186602
Diffstat (limited to 'clang/lib/ASTMatchers/Dynamic/Parser.cpp')
-rw-r--r--clang/lib/ASTMatchers/Dynamic/Parser.cpp53
1 files changed, 22 insertions, 31 deletions
diff --git a/clang/lib/ASTMatchers/Dynamic/Parser.cpp b/clang/lib/ASTMatchers/Dynamic/Parser.cpp
index fc09a30ddd9..54424cea7e2 100644
--- a/clang/lib/ASTMatchers/Dynamic/Parser.cpp
+++ b/clang/lib/ASTMatchers/Dynamic/Parser.cpp
@@ -162,8 +162,7 @@ private:
SourceRange Range;
Range.Start = Result->Range.Start;
Range.End = currentLocation();
- Error->pushErrorFrame(Range, Error->ET_ParserUnsignedError)
- << Result->Text;
+ Error->addError(Range, Error->ET_ParserUnsignedError) << Result->Text;
Result->Kind = TokenInfo::TK_Error;
}
}
@@ -198,8 +197,7 @@ private:
SourceRange Range;
Range.Start = Result->Range.Start;
Range.End = currentLocation();
- Error->pushErrorFrame(Range, Error->ET_ParserStringError)
- << ErrorText;
+ Error->addError(Range, Error->ET_ParserStringError) << ErrorText;
Result->Kind = TokenInfo::TK_Error;
}
@@ -239,7 +237,7 @@ bool Parser::parseMatcherExpressionImpl(VariantValue *Value) {
assert(NameToken.Kind == TokenInfo::TK_Ident);
const TokenInfo OpenToken = Tokenizer->consumeNextToken();
if (OpenToken.Kind != TokenInfo::TK_OpenParen) {
- Error->pushErrorFrame(OpenToken.Range, Error->ET_ParserNoOpenParen)
+ Error->addError(OpenToken.Range, Error->ET_ParserNoOpenParen)
<< OpenToken.Text;
return false;
}
@@ -256,27 +254,24 @@ bool Parser::parseMatcherExpressionImpl(VariantValue *Value) {
// We must find a , token to continue.
const TokenInfo CommaToken = Tokenizer->consumeNextToken();
if (CommaToken.Kind != TokenInfo::TK_Comma) {
- Error->pushErrorFrame(CommaToken.Range, Error->ET_ParserNoComma)
+ Error->addError(CommaToken.Range, Error->ET_ParserNoComma)
<< CommaToken.Text;
return false;
}
}
+ Diagnostics::Context Ctx(Diagnostics::Context::MatcherArg, Error,
+ NameToken.Text, NameToken.Range, Args.size() + 1);
ParserValue ArgValue;
ArgValue.Text = Tokenizer->peekNextToken().Text;
ArgValue.Range = Tokenizer->peekNextToken().Range;
- if (!parseExpressionImpl(&ArgValue.Value)) {
- Error->pushErrorFrame(NameToken.Range,
- Error->ET_ParserMatcherArgFailure)
- << (Args.size() + 1) << NameToken.Text;
- return false;
- }
+ if (!parseExpressionImpl(&ArgValue.Value)) return false;
Args.push_back(ArgValue);
}
if (EndToken.Kind == TokenInfo::TK_Eof) {
- Error->pushErrorFrame(OpenToken.Range, Error->ET_ParserNoCloseParen);
+ Error->addError(OpenToken.Range, Error->ET_ParserNoCloseParen);
return false;
}
@@ -293,35 +288,32 @@ bool Parser::parseMatcherExpressionImpl(VariantValue *Value) {
// explicit about the syntax error.
if (BindToken.Kind != TokenInfo::TK_Ident ||
BindToken.Text != TokenInfo::ID_Bind) {
- Error->pushErrorFrame(BindToken.Range, Error->ET_ParserMalformedBindExpr);
+ Error->addError(BindToken.Range, Error->ET_ParserMalformedBindExpr);
return false;
}
if (OpenToken.Kind != TokenInfo::TK_OpenParen) {
- Error->pushErrorFrame(OpenToken.Range, Error->ET_ParserMalformedBindExpr);
+ Error->addError(OpenToken.Range, Error->ET_ParserMalformedBindExpr);
return false;
}
if (IDToken.Kind != TokenInfo::TK_Literal || !IDToken.Value.isString()) {
- Error->pushErrorFrame(IDToken.Range, Error->ET_ParserMalformedBindExpr);
+ Error->addError(IDToken.Range, Error->ET_ParserMalformedBindExpr);
return false;
}
if (CloseToken.Kind != TokenInfo::TK_CloseParen) {
- Error->pushErrorFrame(CloseToken.Range,
- Error->ET_ParserMalformedBindExpr);
+ Error->addError(CloseToken.Range, Error->ET_ParserMalformedBindExpr);
return false;
}
BindID = IDToken.Value.getString();
}
// Merge the start and end infos.
+ Diagnostics::Context Ctx(Diagnostics::Context::ConstructMatcher, Error,
+ NameToken.Text, NameToken.Range);
SourceRange MatcherRange = NameToken.Range;
MatcherRange.End = EndToken.Range.End;
MatcherList Result = S->actOnMatcherExpression(
NameToken.Text, MatcherRange, BindID, Args, Error);
- if (Result.empty()) {
- Error->pushErrorFrame(NameToken.Range, Error->ET_ParserMatcherFailure)
- << NameToken.Text;
- return false;
- }
+ if (Result.empty()) return false;
*Value = Result;
return true;
@@ -338,8 +330,8 @@ bool Parser::parseExpressionImpl(VariantValue *Value) {
return parseMatcherExpressionImpl(Value);
case TokenInfo::TK_Eof:
- Error->pushErrorFrame(Tokenizer->consumeNextToken().Range,
- Error->ET_ParserNoCode);
+ Error->addError(Tokenizer->consumeNextToken().Range,
+ Error->ET_ParserNoCode);
return false;
case TokenInfo::TK_Error:
@@ -352,8 +344,7 @@ bool Parser::parseExpressionImpl(VariantValue *Value) {
case TokenInfo::TK_Period:
case TokenInfo::TK_InvalidChar:
const TokenInfo Token = Tokenizer->consumeNextToken();
- Error->pushErrorFrame(Token.Range, Error->ET_ParserInvalidToken)
- << Token.Text;
+ Error->addError(Token.Range, Error->ET_ParserInvalidToken) << Token.Text;
return false;
}
@@ -392,8 +383,8 @@ bool Parser::parseExpression(StringRef Code, Sema *S,
CodeTokenizer Tokenizer(Code, Error);
if (!Parser(&Tokenizer, S, Error).parseExpressionImpl(Value)) return false;
if (Tokenizer.peekNextToken().Kind != TokenInfo::TK_Eof) {
- Error->pushErrorFrame(Tokenizer.peekNextToken().Range,
- Error->ET_ParserTrailingCode);
+ Error->addError(Tokenizer.peekNextToken().Range,
+ Error->ET_ParserTrailingCode);
return false;
}
return true;
@@ -412,11 +403,11 @@ DynTypedMatcher *Parser::parseMatcherExpression(StringRef Code,
if (!parseExpression(Code, S, &Value, Error))
return NULL;
if (!Value.isMatchers()) {
- Error->pushErrorFrame(SourceRange(), Error->ET_ParserNotAMatcher);
+ Error->addError(SourceRange(), Error->ET_ParserNotAMatcher);
return NULL;
}
if (Value.getMatchers().matchers().size() != 1) {
- Error->pushErrorFrame(SourceRange(), Error->ET_ParserOverloadedType)
+ Error->addError(SourceRange(), Error->ET_ParserOverloadedType)
<< Value.getTypeAsString();
return NULL;
}
OpenPOWER on IntegriCloud