[cfe-commits] r46363 - in /cfe/trunk: Parse/ParseObjc.cpp include/clang/Parse/Parser.h
Chris Lattner
sabre at nondot.org
Fri Jan 25 10:59:06 PST 2008
Author: lattner
Date: Fri Jan 25 12:59:06 2008
New Revision: 46363
URL: http://llvm.org/viewvc/llvm-project?rev=46363&view=rev
Log:
split the second half of ParseObjCMessageExpression into a new
ParseObjCMessageExpressionBody method.
Modified:
cfe/trunk/Parse/ParseObjc.cpp
cfe/trunk/include/clang/Parse/Parser.h
Modified: cfe/trunk/Parse/ParseObjc.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Parse/ParseObjc.cpp?rev=46363&r1=46362&r2=46363&view=diff
==============================================================================
--- cfe/trunk/Parse/ParseObjc.cpp (original)
+++ cfe/trunk/Parse/ParseObjc.cpp Fri Jan 25 12:59:06 2008
@@ -1262,6 +1262,30 @@
/// expression
/// class-name
/// type-name
+Parser::ExprResult Parser::ParseObjCMessageExpression() {
+ assert(Tok.is(tok::l_square) && "'[' expected");
+ SourceLocation LBracLoc = ConsumeBracket(); // consume '['
+
+ // Parse receiver
+ if (Tok.is(tok::identifier) &&
+ (Actions.isTypeName(*Tok.getIdentifierInfo(), CurScope)
+ || Tok.isNamedIdentifier("super"))) {
+ IdentifierInfo *ReceiverName = Tok.getIdentifierInfo();
+ ConsumeToken();
+ return ParseObjCMessageExpressionBody(LBracLoc, ReceiverName, 0);
+ }
+
+ ExprResult Res = ParseAssignmentExpression();
+ if (Res.isInvalid) {
+ Diag(Tok, diag::err_invalid_receiver_to_message);
+ SkipUntil(tok::identifier);
+ return Res;
+ }
+ return ParseObjCMessageExpressionBody(LBracLoc, 0, Res.Val);
+}
+
+/// ParseObjCMessageExpressionBody - Having parsed "'[' objc-receiver", parse
+/// the rest of a message expression.
///
/// objc-message-args:
/// objc-selector
@@ -1281,26 +1305,10 @@
/// assignment-expression
/// nonempty-expr-list , assignment-expression
///
-Parser::ExprResult Parser::ParseObjCMessageExpression() {
- assert(Tok.is(tok::l_square) && "'[' expected");
- SourceLocation LBracloc = ConsumeBracket(); // consume '['
- IdentifierInfo *ReceiverName = 0;
- ExprTy *ReceiverExpr = 0;
- // Parse receiver
- if (Tok.is(tok::identifier) &&
- (Actions.isTypeName(*Tok.getIdentifierInfo(), CurScope)
- || Tok.isNamedIdentifier("super"))) {
- ReceiverName = Tok.getIdentifierInfo();
- ConsumeToken();
- } else {
- ExprResult Res = ParseAssignmentExpression();
- if (Res.isInvalid) {
- Diag(Tok, diag::err_invalid_receiver_to_message);
- SkipUntil(tok::identifier);
- return Res;
- }
- ReceiverExpr = Res.Val;
- }
+Parser::ExprResult
+Parser::ParseObjCMessageExpressionBody(SourceLocation LBracLoc,
+ IdentifierInfo *ReceiverName,
+ ExprTy *ReceiverExpr) {
// Parse objc-selector
SourceLocation Loc;
IdentifierInfo *selIdent = ParseObjCSelector(Loc);
@@ -1357,7 +1365,7 @@
SkipUntil(tok::semi);
return true;
}
- SourceLocation RBracloc = ConsumeBracket(); // consume ']'
+ SourceLocation RBracLoc = ConsumeBracket(); // consume ']'
unsigned nKeys = KeyIdents.size();
if (nKeys == 0)
@@ -1367,9 +1375,9 @@
// We've just parsed a keyword message.
if (ReceiverName)
return Actions.ActOnClassMessage(CurScope,
- ReceiverName, Sel, LBracloc, RBracloc,
+ ReceiverName, Sel, LBracLoc, RBracLoc,
&KeyExprs[0], KeyExprs.size());
- return Actions.ActOnInstanceMessage(ReceiverExpr, Sel, LBracloc, RBracloc,
+ return Actions.ActOnInstanceMessage(ReceiverExpr, Sel, LBracLoc, RBracLoc,
&KeyExprs[0], KeyExprs.size());
}
Modified: cfe/trunk/include/clang/Parse/Parser.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Parse/Parser.h?rev=46363&r1=46362&r2=46363&view=diff
==============================================================================
--- cfe/trunk/include/clang/Parse/Parser.h (original)
+++ cfe/trunk/include/clang/Parse/Parser.h Fri Jan 25 12:59:06 2008
@@ -368,7 +368,10 @@
ExprResult ParseObjCSelectorExpression(SourceLocation AtLoc);
ExprResult ParseObjCProtocolExpression(SourceLocation AtLoc);
ExprResult ParseObjCMessageExpression();
-
+ ExprResult ParseObjCMessageExpressionBody(SourceLocation LBracloc,
+ IdentifierInfo *ReceiverName,
+ ExprTy *ReceiverExpr);
+
//===--------------------------------------------------------------------===//
// C99 6.8: Statements and Blocks.
More information about the cfe-commits
mailing list