summaryrefslogtreecommitdiffstats
path: root/clang/lib/Parse/ParseExpr.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2008-06-02 21:31:07 +0000
committerChris Lattner <sabre@nondot.org>2008-06-02 21:31:07 +0000
commitfd2fe8270ecccdebf834e3eefe217b1e629d136c (patch)
tree30e7b321a228724caa99053599feb725a8a1a627 /clang/lib/Parse/ParseExpr.cpp
parent4e8a512f80cf89e1190c4f541ad87ec1b22ac21d (diff)
downloadbcm5719-llvm-fd2fe8270ecccdebf834e3eefe217b1e629d136c.tar.gz
bcm5719-llvm-fd2fe8270ecccdebf834e3eefe217b1e629d136c.zip
handle the full assignment-expression grammar when using an
objc message send in an initializer expression. llvm-svn: 51882
Diffstat (limited to 'clang/lib/Parse/ParseExpr.cpp')
-rw-r--r--clang/lib/Parse/ParseExpr.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp
index 523f6473417..4bccc382664 100644
--- a/clang/lib/Parse/ParseExpr.cpp
+++ b/clang/lib/Parse/ParseExpr.cpp
@@ -200,6 +200,27 @@ Parser::ExprResult Parser::ParseAssignmentExpression() {
return ParseRHSOfBinaryExpression(LHS, prec::Assignment);
}
+/// ParseAssignmentExprWithObjCMessageExprStart - Parse an assignment expression
+/// where part of an objc message send has already been parsed. In this case
+/// LBracLoc indicates the location of the '[' of the message send, and either
+/// ReceiverName or ReceiverExpr is non-null indicating the receiver of the
+/// message.
+///
+/// Since this handles full assignment-expression's, it handles postfix
+/// expressions and other binary operators for these expressions as well.
+Parser::ExprResult
+Parser::ParseAssignmentExprWithObjCMessageExprStart(SourceLocation LBracLoc,
+ IdentifierInfo *ReceiverName,
+ ExprTy *ReceiverExpr) {
+ ExprResult R = ParseObjCMessageExpressionBody(LBracLoc, ReceiverName,
+ ReceiverExpr);
+ if (R.isInvalid) return R;
+ R = ParsePostfixExpressionSuffix(R);
+ if (R.isInvalid) return R;
+ return ParseRHSOfBinaryExpression(R, 2);
+}
+
+
Parser::ExprResult Parser::ParseConstantExpression() {
ExprResult LHS = ParseCastExpression(false);
if (LHS.isInvalid) return LHS;
OpenPOWER on IntegriCloud