diff options
author | Steve Naroff <snaroff@apple.com> | 2009-04-20 15:06:07 +0000 |
---|---|---|
committer | Steve Naroff <snaroff@apple.com> | 2009-04-20 15:06:07 +0000 |
commit | 53c9d8a4b8f0a76cb9dd2fdd8c433ccf110f2eec (patch) | |
tree | 84cc9945cb21b54812eb140e040bc928f84c98d4 /lib/Frontend/PCHWriter.cpp | |
parent | 4a115519ff89645fa7c6c1e4bacfb43ea1b15d18 (diff) |
Add pch reader/writer support for ObjCMethodDecl.
Test will be enabled with ObjCInterfaceDecl is added.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69594 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Frontend/PCHWriter.cpp')
-rw-r--r-- | lib/Frontend/PCHWriter.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/lib/Frontend/PCHWriter.cpp b/lib/Frontend/PCHWriter.cpp index 9f22f13134..6aea7a5372 100644 --- a/lib/Frontend/PCHWriter.cpp +++ b/lib/Frontend/PCHWriter.cpp @@ -270,6 +270,7 @@ namespace { void VisitBlockDecl(BlockDecl *D); void VisitDeclContext(DeclContext *DC, uint64_t LexicalOffset, uint64_t VisibleOffset); + void VisitObjCMethodDecl(ObjCMethodDecl *D); }; } @@ -359,6 +360,32 @@ void PCHDeclWriter::VisitFunctionDecl(FunctionDecl *D) { Code = pch::DECL_FUNCTION; } +void PCHDeclWriter::VisitObjCMethodDecl(ObjCMethodDecl *D) { + VisitNamedDecl(D); + // FIXME: convert to LazyStmtPtr? + // Unlike C/C++, method bodies will never be in header files. + Record.push_back(D->getBody() != 0); + if (D->getBody() != 0) { + Writer.AddStmt(D->getBody(Context)); + Writer.AddDeclRef(D->getSelfDecl(), Record); + Writer.AddDeclRef(D->getCmdDecl(), Record); + } + Record.push_back(D->isInstanceMethod()); + Record.push_back(D->isVariadic()); + Record.push_back(D->isSynthesized()); + // FIXME: stable encoding for @required/@optional + Record.push_back(D->getImplementationControl()); + // FIXME: stable encoding for in/out/inout/bycopy/byref/oneway + Record.push_back(D->getObjCDeclQualifier()); + Writer.AddTypeRef(D->getResultType(), Record); + Writer.AddSourceLocation(D->getLocEnd(), Record); + Record.push_back(D->param_size()); + for (ObjCMethodDecl::param_iterator P = D->param_begin(), + PEnd = D->param_end(); P != PEnd; ++P) + Writer.AddDeclRef(*P, Record); + Code = pch::DECL_OBJC_METHOD; +} + void PCHDeclWriter::VisitFieldDecl(FieldDecl *D) { VisitValueDecl(D); Record.push_back(D->isMutable()); |