Progress on message expressions...

- Add ObjcMessageExpr AST node and associated constructors.
- Add SourceLocation's to ActOnKeywordMessage/ActOnUnaryMessage API.
- Instantiate message expressions...
- Replace alloca usage with SmallString.

Next step, installing a correct type, among other tweaks...



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42116 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/Parse/ParseObjc.cpp b/Parse/ParseObjc.cpp
index 224b826..356c7a7 100644
--- a/Parse/ParseObjc.cpp
+++ b/Parse/ParseObjc.cpp
@@ -1007,7 +1007,7 @@
 ///   
 Parser::ExprResult Parser::ParseObjCMessageExpression() {
   assert(Tok.getKind() == tok::l_square && "'[' expected");
-  SourceLocation Loc = ConsumeBracket(); // consume '['
+  SourceLocation LBracloc = ConsumeBracket(); // consume '['
   IdentifierInfo *ReceiverName = 0;
   ExprTy *ReceiverExpr = 0;
   // Parse receiver
@@ -1073,20 +1073,22 @@
     SkipUntil(tok::semi);
     return 0;
   }
-  ConsumeBracket(); // consume ']'
+  SourceLocation RBracloc = ConsumeBracket(); // consume ']'
   
   if (KeyInfo.size()) {
     // We've just parsed a keyword message.
     if (ReceiverName) 
       return Actions.ActOnKeywordMessage(ReceiverName, 
-                                            &KeyInfo[0], KeyInfo.size());
+                                         &KeyInfo[0], KeyInfo.size(),
+                                         LBracloc, RBracloc);
     return Actions.ActOnKeywordMessage(ReceiverExpr, 
-                                            &KeyInfo[0], KeyInfo.size());
+                                       &KeyInfo[0], KeyInfo.size(),
+                                       LBracloc, RBracloc);
   }
   // We've just parsed a unary message (a message with no arguments).
   if (ReceiverName) 
-    return Actions.ActOnUnaryMessage(ReceiverName, selIdent);
-  return Actions.ActOnUnaryMessage(ReceiverExpr, selIdent);
+    return Actions.ActOnUnaryMessage(ReceiverName, selIdent, LBracloc,RBracloc);
+  return Actions.ActOnUnaryMessage(ReceiverExpr, selIdent, LBracloc,RBracloc);
 }
 
 Parser::ExprResult Parser::ParseObjCStringLiteral() {