diff options
author | Steve Naroff <snaroff@apple.com> | 2009-04-25 14:04:28 +0000 |
---|---|---|
committer | Steve Naroff <snaroff@apple.com> | 2009-04-25 14:04:28 +0000 |
commit | eec4a0a7f1c59117c85d4ad06d82983cbebd86d0 (patch) | |
tree | 40f77586154b6c829a59f9e6532bb7a6e9e807d2 /clang/lib/Frontend/PCHReader.cpp | |
parent | ac6e6f786b34cb604f297e552c97a235bfd2d768 (diff) | |
download | bcm5719-llvm-eec4a0a7f1c59117c85d4ad06d82983cbebd86d0.tar.gz bcm5719-llvm-eec4a0a7f1c59117c85d4ad06d82983cbebd86d0.zip |
Add PCH support for ObjCMessageExpr (needed to build Mail).
llvm-svn: 70044
Diffstat (limited to 'clang/lib/Frontend/PCHReader.cpp')
-rw-r--r-- | clang/lib/Frontend/PCHReader.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/clang/lib/Frontend/PCHReader.cpp b/clang/lib/Frontend/PCHReader.cpp index 300761a0e5d..26b915800ae 100644 --- a/clang/lib/Frontend/PCHReader.cpp +++ b/clang/lib/Frontend/PCHReader.cpp @@ -497,6 +497,7 @@ namespace { unsigned VisitObjCEncodeExpr(ObjCEncodeExpr *E); unsigned VisitObjCSelectorExpr(ObjCSelectorExpr *E); unsigned VisitObjCProtocolExpr(ObjCProtocolExpr *E); + unsigned VisitObjCMessageExpr(ObjCMessageExpr *E); }; } @@ -1080,6 +1081,21 @@ unsigned PCHStmtReader::VisitObjCProtocolExpr(ObjCProtocolExpr *E) { return 0; } +unsigned PCHStmtReader::VisitObjCMessageExpr(ObjCMessageExpr *E) { + VisitExpr(E); + E->setNumArgs(Record[Idx++]); + SourceRange SR(SourceLocation::getFromRawEncoding(Record[Idx++]), + SourceLocation::getFromRawEncoding(Record[Idx++])); + E->setSourceRange(SR); + E->setSelector(Reader.GetSelector(Record, Idx)); + E->setMethodDecl(cast_or_null<ObjCMethodDecl>(Reader.GetDecl(Record[Idx++]))); + // FIXME: deal with class messages. + E->setReceiver(cast<Expr>(StmtStack[StmtStack.size() - E->getNumArgs() - 1])); + for (unsigned I = 0, N = E->getNumArgs(); I != N; ++I) + E->setArg(I, cast<Expr>(StmtStack[StmtStack.size() - N + I])); + return E->getNumArgs() + 1; +} + //===----------------------------------------------------------------------===// // PCH reader implementation @@ -3368,6 +3384,9 @@ Stmt *PCHReader::ReadStmt() { case pch::EXPR_OBJC_PROTOCOL_EXPR: S = new (Context) ObjCProtocolExpr(Empty); break; + case pch::EXPR_OBJC_MESSAGE_EXPR: + S = new (Context) ObjCMessageExpr(Empty); + break; } // We hit a STMT_STOP, so we're done with this expression. |