diff options
Diffstat (limited to 'lib/Frontend/PCHWriter.cpp')
-rw-r--r-- | lib/Frontend/PCHWriter.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/lib/Frontend/PCHWriter.cpp b/lib/Frontend/PCHWriter.cpp index 5a410b1cf8..f8c4a779fb 100644 --- a/lib/Frontend/PCHWriter.cpp +++ b/lib/Frontend/PCHWriter.cpp @@ -672,6 +672,7 @@ namespace { void VisitObjCEncodeExpr(ObjCEncodeExpr *E); void VisitObjCSelectorExpr(ObjCSelectorExpr *E); void VisitObjCProtocolExpr(ObjCProtocolExpr *E); + void VisitObjCMessageExpr(ObjCMessageExpr *E); }; } @@ -1198,6 +1199,21 @@ void PCHStmtWriter::VisitObjCProtocolExpr(ObjCProtocolExpr *E) { 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 |