Add PCH support for ObjCMessageExpr (needed to build Mail).


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70044 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Frontend/PCHWriter.cpp b/lib/Frontend/PCHWriter.cpp
index 5a410b1..f8c4a77 100644
--- a/lib/Frontend/PCHWriter.cpp
+++ b/lib/Frontend/PCHWriter.cpp
@@ -672,6 +672,7 @@
     void VisitObjCEncodeExpr(ObjCEncodeExpr *E);
     void VisitObjCSelectorExpr(ObjCSelectorExpr *E);
     void VisitObjCProtocolExpr(ObjCProtocolExpr *E);
+    void VisitObjCMessageExpr(ObjCMessageExpr *E);
   };
 }
 
@@ -1198,6 +1199,21 @@
   Code = pch::EXPR_OBJC_PROTOCOL_EXPR;
 }
 
+void PCHStmtWriter::VisitObjCMessageExpr(ObjCMessageExpr *E) {
+  VisitExpr(E);
+  Record.push_back(E->getNumArgs());
+  Writer.AddSourceLocation(E->getSourceRange().getBegin(), Record);
+  Writer.AddSourceLocation(E->getSourceRange().getEnd(), Record);
+  Writer.AddSelectorRef(E->getSelector(), Record);
+  Writer.AddDeclRef(E->getMethodDecl(), Record); // optional
+  // FIXME: deal with class messages.
+  Writer.WriteSubStmt(E->getReceiver());
+  for (CallExpr::arg_iterator Arg = E->arg_begin(), ArgEnd = E->arg_end();
+       Arg != ArgEnd; ++Arg)
+    Writer.WriteSubStmt(*Arg);
+  Code = pch::EXPR_OBJC_MESSAGE_EXPR;
+}
+
 
 //===----------------------------------------------------------------------===//
 // PCHWriter Implementation