[cfe-commits] r43012 - in /cfe/trunk: Parse/ParseExpr.cpp Parse/ParseObjc.cpp include/clang/Parse/Parser.h

Steve Naroff snaroff at apple.com
Mon Oct 15 13:55:59 PDT 2007


Author: snaroff
Date: Mon Oct 15 15:55:58 2007
New Revision: 43012

URL: http://llvm.org/viewvc/llvm-project?rev=43012&view=rev
Log:

Fix a parser bug with message expressions - need to call ParsePostfixExpressionSuffix(). 

Now were correctly allow the following...

    i = [str rangeOfString:@"]"].length;


Modified:
    cfe/trunk/Parse/ParseExpr.cpp
    cfe/trunk/Parse/ParseObjc.cpp
    cfe/trunk/include/clang/Parse/Parser.h

Modified: cfe/trunk/Parse/ParseExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Parse/ParseExpr.cpp?rev=43012&r1=43011&r2=43012&view=diff

==============================================================================
--- cfe/trunk/Parse/ParseExpr.cpp (original)
+++ cfe/trunk/Parse/ParseExpr.cpp Mon Oct 15 15:55:58 2007
@@ -178,7 +178,7 @@
 /// for example, @encode-expression.
 ///
 Parser::ExprResult Parser::ParseExpressionWithLeadingAt(SourceLocation AtLoc) {
-  ExprResult LHS = ParseObjCExpression(AtLoc);
+  ExprResult LHS = ParseObjCAtExpression(AtLoc);
   if (LHS.isInvalid) return LHS;
  
   return ParseRHSOfBinaryExpression(LHS, prec::Comma);
@@ -601,10 +601,11 @@
     return ParseCXXCasts();
   case tok::at: {
     SourceLocation AtLoc = ConsumeToken();
-    return ParseObjCExpression(AtLoc);
+    return ParseObjCAtExpression(AtLoc);
   }
   case tok::l_square:
-    return ParseObjCMessageExpression();
+    // These can be followed by postfix-expr pieces.
+    return ParsePostfixExpressionSuffix(ParseObjCMessageExpression());
   default:
     Diag(Tok, diag::err_expected_expression);
     return ExprResult(true);

Modified: cfe/trunk/Parse/ParseObjc.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Parse/ParseObjc.cpp?rev=43012&r1=43011&r2=43012&view=diff

==============================================================================
--- cfe/trunk/Parse/ParseObjc.cpp (original)
+++ cfe/trunk/Parse/ParseObjc.cpp Mon Oct 15 15:55:58 2007
@@ -1114,7 +1114,7 @@
   StmtResult FnBody = ParseCompoundStatementBody();
 }
 
-Parser::ExprResult Parser::ParseObjCExpression(SourceLocation AtLoc) {
+Parser::ExprResult Parser::ParseObjCAtExpression(SourceLocation AtLoc) {
 
   switch (Tok.getKind()) {
     case tok::string_literal:    // primary-expression: string-literal

Modified: cfe/trunk/include/clang/Parse/Parser.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Parse/Parser.h?rev=43012&r1=43011&r2=43012&view=diff

==============================================================================
--- cfe/trunk/include/clang/Parse/Parser.h (original)
+++ cfe/trunk/include/clang/Parse/Parser.h Mon Oct 15 15:55:58 2007
@@ -360,7 +360,7 @@
   
   //===--------------------------------------------------------------------===//
   // Objective-C Expressions
-  ExprResult ParseObjCExpression(SourceLocation AtLocation);
+  ExprResult ParseObjCAtExpression(SourceLocation AtLocation);
   ExprResult ParseObjCStringLiteral();
   ExprResult ParseObjCEncodeExpression();
   ExprResult ParseObjCProtocolExpression();





More information about the cfe-commits mailing list