[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