split the second half of ParseObjCMessageExpression into a new 
ParseObjCMessageExpressionBody method.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46363 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/Parse/ParseObjc.cpp b/Parse/ParseObjc.cpp
index 34694ef..1bebe25 100644
--- a/Parse/ParseObjc.cpp
+++ b/Parse/ParseObjc.cpp
@@ -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());
 }